#include "ash/birch/birch_item_remover.h"
#include <memory>
#include "ash/birch/birch_item.h"
#include "base/files/scoped_temp_dir.h"
#include "base/functional/callback_helpers.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};
item_remover_->FilterRemovedTabs(&tab_items);
ASSERT_EQ(4u, tab_items.size());
item_remover_->RemoveItem(&item2);
item_remover_->FilterRemovedTabs(&tab_items);
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};
item_remover_->FilterRemovedSelfShareItems(&self_share_items);
ASSERT_EQ(4u, self_share_items.size());
item_remover_->RemoveItem(&item2);
item_remover_->FilterRemovedSelfShareItems(&self_share_items);
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", base::Time(),
base::Time(), GURL(),
GURL(), "000",
false);
BirchCalendarItem item1(u"Event 1", base::Time(),
base::Time(), GURL(),
GURL(), "111",
false);
BirchCalendarItem item2(u"Event 2", base::Time(),
base::Time(), GURL(),
GURL(), "222",
false);
std::vector<BirchCalendarItem> calendar_items = {item0, item1, item2};
item_remover_->FilterRemovedCalendarItems(&calendar_items);
ASSERT_EQ(3u, calendar_items.size());
item_remover_->RemoveItem(&item1);
item_remover_->FilterRemovedCalendarItems(&calendar_items);
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};
item_remover_->FilterRemovedFileItems(&file_items);
ASSERT_EQ(3u, file_items.size());
item_remover_->RemoveItem(&item1);
item_remover_->FilterRemovedFileItems(&file_items);
ASSERT_EQ(2u, file_items.size());
EXPECT_EQ(file_items, std::vector({item0, item2}));
}
TEST_F(BirchItemRemoverTest, RemoveAttachmentItem) {
BirchAttachmentItem item0(u"attachment 0",
GURL(),
GURL(),
base::Time(),
base::Time(),
"file_id_0");
BirchAttachmentItem item1(u"attachment 1",
GURL(),
GURL(),
base::Time(),
base::Time(),
"file_id_1");
BirchAttachmentItem item2(u"attachment 2",
GURL(),
GURL(),
base::Time(),
base::Time(),
"file_id_2");
std::vector<BirchAttachmentItem> attachment_items = {item0, item1, item2};
item_remover_->FilterRemovedAttachmentItems(&attachment_items);
ASSERT_EQ(3u, attachment_items.size());
item_remover_->RemoveItem(&item1);
item_remover_->FilterRemovedAttachmentItems(&attachment_items);
ASSERT_EQ(2u, attachment_items.size());
EXPECT_EQ(attachment_items, std::vector({item0, item2}));
}
}
}