1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "components/feature_engagement/internal/never_availability_model.h"
6
7 #include "base/bind.h"
8 #include "base/feature_list.h"
9 #include "base/optional.h"
10 #include "base/run_loop.h"
11 #include "base/test/task_environment.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13
14 namespace feature_engagement {
15
16 namespace {
17
18 const base::Feature kAvailabilityTestFeatureFoo{
19 "test_foo", base::FEATURE_DISABLED_BY_DEFAULT};
20 const base::Feature kAvailabilityTestFeatureBar{
21 "test_bar", base::FEATURE_DISABLED_BY_DEFAULT};
22
23 class NeverAvailabilityModelTest : public ::testing::Test {
24 public:
25 NeverAvailabilityModelTest() = default;
26
OnInitializedCallback(bool success)27 void OnInitializedCallback(bool success) { success_ = success; }
28
29 protected:
30 NeverAvailabilityModel availability_model_;
31 base::Optional<bool> success_;
32
33 private:
34 base::test::SingleThreadTaskEnvironment task_environment_;
35
36 DISALLOW_COPY_AND_ASSIGN(NeverAvailabilityModelTest);
37 };
38
39 } // namespace
40
TEST_F(NeverAvailabilityModelTest,ShouldNeverHaveData)41 TEST_F(NeverAvailabilityModelTest, ShouldNeverHaveData) {
42 EXPECT_EQ(base::nullopt,
43 availability_model_.GetAvailability(kAvailabilityTestFeatureFoo));
44 EXPECT_EQ(base::nullopt,
45 availability_model_.GetAvailability(kAvailabilityTestFeatureBar));
46
47 availability_model_.Initialize(
48 base::BindOnce(&NeverAvailabilityModelTest::OnInitializedCallback,
49 base::Unretained(this)),
50 14u);
51 base::RunLoop().RunUntilIdle();
52
53 EXPECT_EQ(base::nullopt,
54 availability_model_.GetAvailability(kAvailabilityTestFeatureFoo));
55 EXPECT_EQ(base::nullopt,
56 availability_model_.GetAvailability(kAvailabilityTestFeatureBar));
57 }
58
TEST_F(NeverAvailabilityModelTest,ShouldBeReadyAfterInitialization)59 TEST_F(NeverAvailabilityModelTest, ShouldBeReadyAfterInitialization) {
60 EXPECT_FALSE(availability_model_.IsReady());
61 availability_model_.Initialize(
62 base::BindOnce(&NeverAvailabilityModelTest::OnInitializedCallback,
63 base::Unretained(this)),
64 14u);
65 EXPECT_FALSE(availability_model_.IsReady());
66 EXPECT_FALSE(success_.has_value());
67 base::RunLoop().RunUntilIdle();
68 EXPECT_TRUE(availability_model_.IsReady());
69 ASSERT_TRUE(success_.has_value());
70 EXPECT_TRUE(success_.value());
71 }
72
73 } // namespace feature_engagement
74