blob: 4798bf016e7e654b6ec2bb9ca896b3d4358fe2fe [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/send_tab_to_self/send_tab_to_self_sub_menu_model.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/sync/send_tab_to_self_sync_service_factory.h"
#include "chrome/test/base/browser_with_test_window_test.h"
#include "components/send_tab_to_self/send_tab_to_self_sync_service.h"
#include "components/send_tab_to_self/test_send_tab_to_self_model.h"
#include "testing/gmock/include/gmock/gmock.h"
namespace send_tab_to_self {
namespace {
using testing::_;
using testing::Return;
using testing::SaveArg;
class SendTabToSelfModelMock : public TestSendTabToSelfModel {
public:
SendTabToSelfModelMock() = default;
~SendTabToSelfModelMock() override = default;
MOCK_METHOD0(GetTargetDeviceInfoSortedList, std::vector<TargetDeviceInfo>());
MOCK_METHOD4(AddEntry,
const SendTabToSelfEntry*(const GURL&,
const std::string&,
base::Time,
const std::string&));
bool IsReady() override { return true; }
};
class TestSendTabToSelfSyncService : public SendTabToSelfSyncService {
public:
TestSendTabToSelfSyncService() = default;
~TestSendTabToSelfSyncService() override = default;
SendTabToSelfModel* GetSendTabToSelfModel() override {
return &send_tab_to_self_model_mock_;
}
protected:
SendTabToSelfModelMock send_tab_to_self_model_mock_;
};
std::unique_ptr<KeyedService> BuildTestSendTabToSelfSyncService(
content::BrowserContext* context) {
return std::make_unique<TestSendTabToSelfSyncService>();
}
TargetDeviceInfo BuildTargetDeviceInfo(const std::string& device_name,
const std::string& cache_guid) {
return TargetDeviceInfo(device_name, device_name, cache_guid,
sync_pb::SyncEnums_DeviceType_TYPE_OTHER,
base::Time());
}
class SendTabToSelfSubMenuModelTest : public BrowserWithTestWindowTest {
public:
SendTabToSelfSubMenuModelTest() = default;
~SendTabToSelfSubMenuModelTest() override = default;
void SetUp() override {
BrowserWithTestWindowTest::SetUp();
// Set up all test conditions to let ShouldOfferFeature() return true.
GURL url("https://www.test.com");
AddTab(browser(), url);
NavigateAndCommitActiveTabWithTitle(browser(), url,
base::ASCIIToUTF16("test"));
}
void SetUpTestService() {
SendTabToSelfSyncServiceFactory::GetInstance()->SetTestingFactory(
browser()->profile(),
base::BindRepeating(&BuildTestSendTabToSelfSyncService));
}
SendTabToSelfModelMock* GetSendTabToSelfModelMock() {
return static_cast<SendTabToSelfModelMock*>(
SendTabToSelfSyncServiceFactory::GetForProfile(browser()->profile())
->GetSendTabToSelfModel());
}
};
TEST_F(SendTabToSelfSubMenuModelTest, ExecuteCommandTab) {
SetUpTestService();
SendTabToSelfModelMock* model_mock = GetSendTabToSelfModelMock();
std::vector<TargetDeviceInfo> devices = {
BuildTargetDeviceInfo("device0", "0"),
BuildTargetDeviceInfo("device1", "1"),
BuildTargetDeviceInfo("device2", "2")};
EXPECT_CALL(*model_mock, GetTargetDeviceInfoSortedList())
.WillOnce(Return(devices));
SendTabToSelfSubMenuModel sub_menu_model(
browser()->tab_strip_model()->GetActiveWebContents(),
send_tab_to_self::SendTabToSelfMenuType::kTab);
std::string device_guid;
EXPECT_CALL(*model_mock, AddEntry(_, _, _, _))
.WillRepeatedly(
DoAll(SaveArg<3>(&device_guid), testing::Return(nullptr)));
// Check that all devices can be selected.
for (int i = 0; i < (int)devices.size(); i++) {
device_guid = std::string();
sub_menu_model.ExecuteCommand(SendTabToSelfSubMenuModel::kMinCommandId + i,
-1);
EXPECT_EQ(devices[i].cache_guid, device_guid) << "for index: " << i;
}
}
} // namespace
} // namespace send_tab_to_self