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