1 // Copyright 2020 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 "chromeos/components/phonehub/browser_tabs_model_controller.h"
6 
7 #include "chromeos/components/phonehub/fake_browser_tabs_model_provider.h"
8 #include "chromeos/components/phonehub/mutable_phone_model.h"
9 #include "chromeos/components/phonehub/phone_model_test_util.h"
10 #include "chromeos/services/multidevice_setup/public/cpp/fake_multidevice_setup_client.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12 
13 namespace chromeos {
14 namespace phonehub {
15 
16 using multidevice_setup::mojom::Feature;
17 using multidevice_setup::mojom::FeatureState;
18 
19 class BrowserTabsModelControllerTest : public testing::Test {
20  protected:
21   BrowserTabsModelControllerTest() = default;
22   ~BrowserTabsModelControllerTest() override = default;
23 
24   BrowserTabsModelControllerTest(const BrowserTabsModelControllerTest&) =
25       delete;
26   BrowserTabsModelControllerTest& operator=(
27       const BrowserTabsModelControllerTest&) = delete;
28 
29   // testing::Test:
SetUp()30   void SetUp() override {
31     phone_model_ = std::make_unique<MutablePhoneModel>();
32     controller_ = std::make_unique<BrowserTabsModelController>(
33         &fake_multidevice_setup_client_, &fake_browser_tabs_model_provider_,
34         phone_model_.get());
35   }
36 
DisableTaskContinuation()37   void DisableTaskContinuation() {
38     fake_multidevice_setup_client_.SetFeatureState(
39         Feature::kPhoneHubTaskContinuation, FeatureState::kDisabledByUser);
40   }
41 
EnableTaskContinuation()42   void EnableTaskContinuation() {
43     fake_multidevice_setup_client_.SetFeatureState(
44         Feature::kPhoneHubTaskContinuation, FeatureState::kEnabledByUser);
45   }
46 
NotifyBrowserTabsUpdated(bool is_sync_enabled,const std::vector<BrowserTabsModel::BrowserTabMetadata> & browser_tabs_metadata)47   void NotifyBrowserTabsUpdated(
48       bool is_sync_enabled,
49       const std::vector<BrowserTabsModel::BrowserTabMetadata>&
50           browser_tabs_metadata) {
51     fake_browser_tabs_model_provider_.NotifyBrowserTabsUpdated(
52         is_sync_enabled, browser_tabs_metadata);
53   }
54 
phone_model()55   MutablePhoneModel* phone_model() { return phone_model_.get(); }
56 
57  private:
58   std::unique_ptr<BrowserTabsModelController> controller_;
59 
60   std::unique_ptr<MutablePhoneModel> phone_model_;
61   multidevice_setup::FakeMultiDeviceSetupClient fake_multidevice_setup_client_;
62   FakeBrowserTabsModelProvider fake_browser_tabs_model_provider_;
63 };
64 
TEST_F(BrowserTabsModelControllerTest,MutablePhoneModelProperlySet)65 TEST_F(BrowserTabsModelControllerTest, MutablePhoneModelProperlySet) {
66   // Test that the MutablePhoneModel is not updated when task continuation
67   // disabled.
68   DisableTaskContinuation();
69   std::vector<BrowserTabsModel::BrowserTabMetadata> metadata;
70   metadata.push_back(CreateFakeBrowserTabMetadata());
71   NotifyBrowserTabsUpdated(true, metadata);
72   EXPECT_FALSE(phone_model()->browser_tabs_model());
73 
74   // Test that the MutablePhoneModel is updated when task continuation enabled.
75   EnableTaskContinuation();
76   EXPECT_TRUE(phone_model()->browser_tabs_model()->is_tab_sync_enabled());
77   EXPECT_EQ(phone_model()->browser_tabs_model()->most_recent_tabs().size(), 1U);
78 }
79 
80 }  // namespace phonehub
81 }  // namespace chromeos
82