| // Copyright 2024 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "ash/birch/birch_item_remover.h" |
| |
| #include <memory> |
| |
| #include "ash/birch/birch_item.h" |
| #include "base/files/scoped_temp_dir.h" |
| #include "base/run_loop.h" |
| #include "base/test/task_environment.h" |
| #include "base/time/time.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace ash { |
| namespace { |
| |
| class BirchItemRemoverTest : public ::testing::Test { |
| public: |
| void SetUp() override { |
| ASSERT_TRUE(test_dir_.CreateUniqueTempDir()); |
| |
| item_remover_ = std::make_unique<BirchItemRemover>(test_dir_.GetPath(), |
| run_loop_.QuitClosure()); |
| |
| EXPECT_FALSE(item_remover_->Initialized()); |
| run_loop_.Run(); |
| EXPECT_TRUE(item_remover_->Initialized()); |
| } |
| |
| protected: |
| base::test::TaskEnvironment task_environment_; |
| base::RunLoop run_loop_; |
| base::ScopedTempDir test_dir_; |
| std::unique_ptr<BirchItemRemover> item_remover_; |
| }; |
| |
| TEST_F(BirchItemRemoverTest, RemoveTab) { |
| BirchTabItem item0(u"item0", GURL("https://example.com/0"), base::Time(), |
| GURL(), "", BirchTabItem::DeviceFormFactor::kDesktop); |
| BirchTabItem item1(u"item1", GURL("https://example.com/1"), base::Time(), |
| GURL(), "", BirchTabItem::DeviceFormFactor::kDesktop); |
| BirchTabItem item2(u"item2", GURL("https://example.com/2"), base::Time(), |
| GURL(), "", BirchTabItem::DeviceFormFactor::kDesktop); |
| BirchTabItem item3(u"item3", GURL("https://example.com/3"), base::Time(), |
| GURL(), "", BirchTabItem::DeviceFormFactor::kDesktop); |
| std::vector<BirchTabItem> tab_items = {item0, item1, item2, item3}; |
| |
| // Filter `tab_items` before any items are removed. The list should remain |
| // unchanged. |
| item_remover_->FilterRemovedTabs(&tab_items); |
| ASSERT_EQ(4u, tab_items.size()); |
| |
| // Remove `item2`, and filter it from the list of tabs. |
| item_remover_->RemoveItem(&item2); |
| item_remover_->FilterRemovedTabs(&tab_items); |
| |
| // Check that `item2` is filtered out. |
| ASSERT_EQ(3u, tab_items.size()); |
| EXPECT_EQ(tab_items, std::vector({item0, item1, item3})); |
| } |
| |
| TEST_F(BirchItemRemoverTest, RemoveSelfShareItems) { |
| BirchSelfShareItem item0(u"item0_guid", u"item0_title", |
| GURL("https://example.com/0"), base::Time(), |
| u"device_name", SecondaryIconType::kTabFromDesktop, |
| base::DoNothing()); |
| BirchSelfShareItem item1(u"item1_guid", u"item1_title", |
| GURL("https://example.com/1"), base::Time(), |
| u"device_name", SecondaryIconType::kTabFromDesktop, |
| base::DoNothing()); |
| BirchSelfShareItem item2(u"item2_guid", u"item2_title", |
| GURL("https://example.com/2"), base::Time(), |
| u"device_name", SecondaryIconType::kTabFromDesktop, |
| base::DoNothing()); |
| BirchSelfShareItem item3(u"item3_guid", u"item3_title", |
| GURL("https://example.com/3"), base::Time(), |
| u"device_name", SecondaryIconType::kTabFromDesktop, |
| base::DoNothing()); |
| std::vector<BirchSelfShareItem> self_share_items = {item0, item1, item2, |
| item3}; |
| |
| // Filter `self_share_items` before any items are removed. The list should |
| // remain unchanged. |
| item_remover_->FilterRemovedSelfShareItems(&self_share_items); |
| ASSERT_EQ(4u, self_share_items.size()); |
| |
| // Remove `item2`, and filter it from the list of tabs. |
| item_remover_->RemoveItem(&item2); |
| item_remover_->FilterRemovedSelfShareItems(&self_share_items); |
| |
| // Check that `item2` is filtered out. |
| ASSERT_EQ(3u, self_share_items.size()); |
| EXPECT_EQ(self_share_items, std::vector({item0, item1, item3})); |
| } |
| |
| TEST_F(BirchItemRemoverTest, RemoveCalendarItem) { |
| BirchCalendarItem item0(u"Event 0", /*start_time=*/base::Time(), |
| /*end_time=*/base::Time(), /*calendar_url=*/GURL(), |
| /*conference_url=*/GURL(), /*event_id=*/"000", |
| /*all_day_event=*/false); |
| BirchCalendarItem item1(u"Event 1", /*start_time=*/base::Time(), |
| /*end_time=*/base::Time(), /*calendar_url=*/GURL(), |
| /*conference_url=*/GURL(), /*event_id=*/"111", |
| /*all_day_event=*/false); |
| BirchCalendarItem item2(u"Event 2", /*start_time=*/base::Time(), |
| /*end_time=*/base::Time(), /*calendar_url=*/GURL(), |
| /*conference_url=*/GURL(), /*event_id=*/"222", |
| /*all_day_event=*/false); |
| std::vector<BirchCalendarItem> calendar_items = {item0, item1, item2}; |
| |
| // Filter `calendar_items` before any items are removed. The list should |
| // remain unchanged. |
| item_remover_->FilterRemovedCalendarItems(&calendar_items); |
| ASSERT_EQ(3u, calendar_items.size()); |
| |
| // Remove `item1`, and filter it from the list of calendar items. |
| item_remover_->RemoveItem(&item1); |
| item_remover_->FilterRemovedCalendarItems(&calendar_items); |
| |
| // Check that `item1` is filtered out. |
| ASSERT_EQ(2u, calendar_items.size()); |
| EXPECT_EQ(calendar_items, std::vector({item0, item2})); |
| } |
| |
| TEST_F(BirchItemRemoverTest, RemoveFileItem) { |
| BirchFileItem item0(base::FilePath(), "title", u"justification", base::Time(), |
| "file_id_0", "icon_url"); |
| BirchFileItem item1(base::FilePath(), "title", u"justification", base::Time(), |
| "file_id_1", "icon_url"); |
| BirchFileItem item2(base::FilePath(), "title", u"justification", base::Time(), |
| "file_id_2", "icon_url"); |
| std::vector<BirchFileItem> file_items = {item0, item1, item2}; |
| |
| // Filter `file_items` before any items are removed. The list should remain |
| // unchanged. |
| item_remover_->FilterRemovedFileItems(&file_items); |
| ASSERT_EQ(3u, file_items.size()); |
| |
| // Remove `item1`, and filter it from the list of file items. |
| item_remover_->RemoveItem(&item1); |
| item_remover_->FilterRemovedFileItems(&file_items); |
| |
| // Check that `item1` is filtered out. |
| ASSERT_EQ(2u, file_items.size()); |
| EXPECT_EQ(file_items, std::vector({item0, item2})); |
| } |
| |
| TEST_F(BirchItemRemoverTest, RemoveAttachmentItem) { |
| BirchAttachmentItem item0(u"attachment 0", |
| /*file_url=*/GURL(), |
| /*icon_url=*/GURL(), |
| /*start_time=*/base::Time(), |
| /*end_time=*/base::Time(), |
| /*file_id=*/"file_id_0"); |
| BirchAttachmentItem item1(u"attachment 1", |
| /*file_url=*/GURL(), |
| /*icon_url=*/GURL(), |
| /*start_time=*/base::Time(), |
| /*end_time=*/base::Time(), |
| /*file_id=*/"file_id_1"); |
| BirchAttachmentItem item2(u"attachment 2", |
| /*file_url=*/GURL(), |
| /*icon_url=*/GURL(), |
| /*start_time=*/base::Time(), |
| /*end_time=*/base::Time(), |
| /*file_id=*/"file_id_2"); |
| std::vector<BirchAttachmentItem> attachment_items = {item0, item1, item2}; |
| |
| // Filter `attachment_items` before any items are removed. The list should |
| // remain unchanged. |
| item_remover_->FilterRemovedAttachmentItems(&attachment_items); |
| ASSERT_EQ(3u, attachment_items.size()); |
| |
| // Remove `item1`, and filter it from the list of attachment items. |
| item_remover_->RemoveItem(&item1); |
| item_remover_->FilterRemovedAttachmentItems(&attachment_items); |
| |
| // Check that `item1` is filtered out. |
| ASSERT_EQ(2u, attachment_items.size()); |
| EXPECT_EQ(attachment_items, std::vector({item0, item2})); |
| } |
| |
| } // namespace |
| } // namespace ash |