| // Copyright 2020 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/ash/remote_apps/remote_apps_model.h" |
| |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace ash { |
| |
| namespace { |
| |
| constexpr char kId1[] = "id1"; |
| constexpr char kId2[] = "id2"; |
| constexpr char kId3[] = "id3"; |
| |
| std::unique_ptr<RemoteAppsModel> SetUpModel() { |
| std::unique_ptr<RemoteAppsModel> model = std::make_unique<RemoteAppsModel>(); |
| std::unique_ptr<FakeIdGenerator> id_generator = |
| std::make_unique<FakeIdGenerator>( |
| std::vector<std::string>{kId1, kId2, kId3}); |
| model->SetIdGeneratorForTesting(std::move(id_generator)); |
| return model; |
| } |
| |
| } // namespace |
| |
| using RemoteAppsModelUnittest = testing::Test; |
| |
| TEST_F(RemoteAppsModelUnittest, AddApp) { |
| const std::string name = "name"; |
| const GURL icon_url = GURL("icon_url"); |
| |
| std::unique_ptr<RemoteAppsModel> model = SetUpModel(); |
| const RemoteAppsModel::AppInfo& info = |
| model->AddApp(name, icon_url, std::string(), /*add_to_front=*/true); |
| EXPECT_EQ(kId1, info.id); |
| EXPECT_EQ(name, info.name); |
| EXPECT_EQ(icon_url, info.icon_url); |
| EXPECT_EQ(std::string(), info.folder_id); |
| EXPECT_TRUE(info.add_to_front); |
| EXPECT_TRUE(model->HasApp(info.id)); |
| |
| // Check |GetAppInfo()|. |
| const RemoteAppsModel::AppInfo& info2 = model->GetAppInfo(info.id); |
| EXPECT_EQ(kId1, info2.id); |
| EXPECT_EQ(name, info2.name); |
| EXPECT_EQ(icon_url, info2.icon_url); |
| EXPECT_EQ(std::string(), info2.folder_id); |
| EXPECT_TRUE(info.add_to_front); |
| |
| model->DeleteApp(info.id); |
| EXPECT_FALSE(model->HasApp(info.id)); |
| } |
| |
| TEST_F(RemoteAppsModelUnittest, GetAllAppInfo) { |
| const std::string name = "name"; |
| const GURL icon_url = GURL("icon_url"); |
| const std::string name2 = "name2"; |
| const GURL icon_url2 = GURL("icon_url2"); |
| |
| std::unique_ptr<RemoteAppsModel> model = SetUpModel(); |
| model->AddApp(name, icon_url, std::string(), /*add_to_front=*/false); |
| model->AddApp(name2, icon_url2, std::string(), /*add_to_front=*/true); |
| |
| const std::map<std::string, RemoteAppsModel::AppInfo>& infos = |
| model->GetAllAppInfo(); |
| EXPECT_EQ(2u, infos.size()); |
| |
| const RemoteAppsModel::AppInfo& info = infos.at(kId1); |
| EXPECT_EQ(kId1, info.id); |
| EXPECT_EQ(name, info.name); |
| EXPECT_EQ(icon_url, info.icon_url); |
| EXPECT_FALSE(info.add_to_front); |
| |
| const RemoteAppsModel::AppInfo& info2 = infos.at(kId2); |
| EXPECT_EQ(kId2, info2.id); |
| EXPECT_EQ(name2, info2.name); |
| EXPECT_EQ(icon_url2, info2.icon_url); |
| EXPECT_TRUE(info2.add_to_front); |
| } |
| |
| TEST_F(RemoteAppsModelUnittest, AddFolder) { |
| const std::string folder_name = "folder_name"; |
| const std::string name = "name"; |
| const GURL icon_url = GURL("icon_url"); |
| |
| std::unique_ptr<RemoteAppsModel> model = SetUpModel(); |
| const RemoteAppsModel::FolderInfo& folder_info = |
| model->AddFolder(folder_name, /*add_to_front=*/true); |
| const std::string folder_id = folder_info.id; |
| EXPECT_EQ(kId1, folder_id); |
| EXPECT_EQ(folder_name, folder_info.name); |
| EXPECT_EQ(0u, folder_info.items.size()); |
| EXPECT_TRUE(folder_info.add_to_front); |
| |
| // Check |GetFolderInfo()|. |
| const RemoteAppsModel::FolderInfo& folder_info2 = |
| model->GetFolderInfo(folder_info.id); |
| EXPECT_EQ(kId1, folder_id); |
| EXPECT_EQ(folder_name, folder_info2.name); |
| EXPECT_EQ(0u, folder_info2.items.size()); |
| EXPECT_TRUE(folder_info2.add_to_front); |
| |
| model->DeleteFolder(folder_id); |
| EXPECT_FALSE(model->HasFolder(folder_id)); |
| } |
| |
| TEST_F(RemoteAppsModelUnittest, FolderWithMultipleApps) { |
| const std::string folder_name = "folder_name"; |
| const std::string name = "name"; |
| const GURL icon_url = GURL("icon_url"); |
| |
| std::unique_ptr<RemoteAppsModel> model = SetUpModel(); |
| const RemoteAppsModel::FolderInfo& folder_info = |
| model->AddFolder(folder_name, /*add_to_front=*/false); |
| std::string folder_id = folder_info.id; |
| EXPECT_EQ(kId1, folder_info.id); |
| EXPECT_EQ(folder_name, folder_info.name); |
| EXPECT_EQ(0u, folder_info.items.size()); |
| EXPECT_TRUE(model->HasFolder(folder_id)); |
| |
| const RemoteAppsModel::AppInfo& info = |
| model->AddApp(name, icon_url, folder_id, /*add_to_front=*/false); |
| EXPECT_EQ(kId2, info.id); |
| EXPECT_EQ(folder_id, info.folder_id); |
| EXPECT_EQ(1u, folder_info.items.size()); |
| EXPECT_EQ(1u, folder_info.items.count(info.id)); |
| |
| // Add second app. |
| const RemoteAppsModel::AppInfo& info2 = |
| model->AddApp(name, icon_url, folder_id, /*add_to_front=*/false); |
| EXPECT_EQ(kId3, info2.id); |
| EXPECT_EQ(2u, folder_info.items.size()); |
| EXPECT_EQ(1u, folder_info.items.count(info2.id)); |
| |
| // Check that app is removed from folder when app deleted. |
| model->DeleteApp(info.id); |
| EXPECT_EQ(1u, folder_info.items.size()); |
| |
| // Check that app is removed from folder when folder is deleted. |
| model->DeleteFolder(folder_id); |
| EXPECT_EQ(std::string(), info2.folder_id); |
| } |
| |
| } // namespace ash |