| Index: components/offline_pages/offline_page_model_query_unittest.cc
|
| diff --git a/components/offline_pages/offline_page_model_query_unittest.cc b/components/offline_pages/offline_page_model_query_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..1c9705868149205f47b9a09135eae8d17c497484
|
| --- /dev/null
|
| +++ b/components/offline_pages/offline_page_model_query_unittest.cc
|
| @@ -0,0 +1,326 @@
|
| +// Copyright 2016 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 "base/time/time.h"
|
| +#include "components/offline_pages/client_namespace_constants.h"
|
| +#include "components/offline_pages/client_policy_controller.h"
|
| +#include "components/offline_pages/offline_page_client_policy.h"
|
| +#include "components/offline_pages/offline_page_item.h"
|
| +#include "components/offline_pages/offline_page_model_query.h"
|
| +
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace offline_pages {
|
| +
|
| +using Requirement = OfflinePageModelQueryBuilder::Requirement;
|
| +
|
| +namespace {
|
| +
|
| +const ClientId kClientId1 = {kDefaultNamespace, "id1"};
|
| +const GURL kUrl1 = GURL("https://ktestitem1.com");
|
| +const OfflinePageItem kTestItem1(kUrl1, 1, kClientId1, base::FilePath(), 1);
|
| +
|
| +const ClientId kClientId2 = {kDefaultNamespace, "id2"};
|
| +const GURL kUrl2 = GURL("https://ktestitem2.com");
|
| +const OfflinePageItem kTestItem2(kUrl2, 2, kClientId2, base::FilePath(), 2);
|
| +
|
| +const char kTestNamespace[] = "test_namespace";
|
| +} // namespace
|
| +
|
| +class OfflinePageModelQueryTest : public testing::Test {
|
| + public:
|
| + OfflinePageModelQueryTest();
|
| + ~OfflinePageModelQueryTest() override;
|
| +
|
| + protected:
|
| + ClientPolicyController policy_;
|
| + OfflinePageModelQueryBuilder builder_;
|
| +
|
| + const OfflinePageItem expired_page() {
|
| + OfflinePageItem expiredTestItem(GURL("https://ktestitem1.com"), 3,
|
| + kClientId1, base::FilePath(), 3);
|
| + expiredTestItem.expiration_time = base::Time::Now();
|
| +
|
| + return expiredTestItem;
|
| + }
|
| +
|
| + const OfflinePageItem download_page() {
|
| + return OfflinePageItem(GURL("https://download.com"), 4,
|
| + {kDownloadNamespace, "id1"}, base::FilePath(), 4);
|
| + }
|
| +
|
| + const OfflinePageItem original_tab_page() {
|
| + return OfflinePageItem(GURL("https://download.com"), 5,
|
| + {kLastNNamespace, "id1"}, base::FilePath(), 5);
|
| + }
|
| +
|
| + const OfflinePageItem test_namespace_page() {
|
| + return OfflinePageItem(GURL("https://download.com"), 6,
|
| + {kTestNamespace, "id1"}, base::FilePath(), 6);
|
| + }
|
| +
|
| + const OfflinePageItem recent_page() {
|
| + return OfflinePageItem(GURL("https://download.com"), 7,
|
| + {kLastNNamespace, "id1"}, base::FilePath(), 7);
|
| + }
|
| +};
|
| +
|
| +OfflinePageModelQueryTest::OfflinePageModelQueryTest() {
|
| + policy_.AddPolicyForTest(
|
| + kTestNamespace,
|
| + OfflinePageClientPolicyBuilder(kTestNamespace,
|
| + LifetimePolicy::LifetimeType::TEMPORARY,
|
| + kUnlimitedPages, kUnlimitedPages)
|
| + .SetIsOnlyShownInOriginalTab(true));
|
| +}
|
| +
|
| +OfflinePageModelQueryTest::~OfflinePageModelQueryTest() {}
|
| +
|
| +TEST_F(OfflinePageModelQueryTest, DefaultValues) {
|
| + std::unique_ptr<OfflinePageModelQuery> query = builder_.Build(&policy_);
|
| +
|
| + EXPECT_NE(nullptr, query.get());
|
| + EXPECT_FALSE(query->GetAllowExpired());
|
| + EXPECT_FALSE(query->GetRestrictedToOfflineIds(nullptr));
|
| + EXPECT_FALSE(query->GetRestrictedToNamespaces(nullptr));
|
| +
|
| + EXPECT_TRUE(query->Matches(kTestItem1));
|
| + EXPECT_TRUE(query->Matches(kTestItem2));
|
| + EXPECT_FALSE(query->Matches(expired_page()));
|
| +}
|
| +
|
| +TEST_F(OfflinePageModelQueryTest, OfflinePageIdsSet) {
|
| + std::vector<int64_t> ids = {1, 4, 9, 16};
|
| + builder_.SetOfflinePageIds(ids);
|
| +
|
| + std::unique_ptr<OfflinePageModelQuery> query = builder_.Build(&policy_);
|
| + std::set<int64_t> ids_out;
|
| + EXPECT_TRUE(query->GetRestrictedToOfflineIds(&ids_out));
|
| +
|
| + ASSERT_EQ(ids.size(), ids_out.size());
|
| + for (auto id : ids) {
|
| + EXPECT_EQ(1U, ids_out.count(id)) << "Did not find " << id
|
| + << "in query restrictions.";
|
| + }
|
| +
|
| + EXPECT_TRUE(query->Matches(kTestItem1));
|
| + EXPECT_FALSE(query->Matches(kTestItem2));
|
| +}
|
| +
|
| +TEST_F(OfflinePageModelQueryTest, OfflinePageIdsReplace) {
|
| + std::vector<int64_t> ids = {1, 4, 9, 16};
|
| + std::vector<int64_t> ids2 = {1, 2, 3, 4};
|
| +
|
| + builder_.SetOfflinePageIds(ids);
|
| + builder_.SetOfflinePageIds(ids2);
|
| +
|
| + std::unique_ptr<OfflinePageModelQuery> query = builder_.Build(&policy_);
|
| + std::set<int64_t> ids_out;
|
| + EXPECT_TRUE(query->GetRestrictedToOfflineIds(&ids_out));
|
| +
|
| + ASSERT_EQ(ids2.size(), ids_out.size());
|
| + for (auto id : ids2) {
|
| + EXPECT_EQ(1U, ids_out.count(id)) << "Did not find " << id
|
| + << "in query restrictions.";
|
| + }
|
| +
|
| + EXPECT_TRUE(query->Matches(kTestItem1));
|
| + EXPECT_TRUE(query->Matches(kTestItem2));
|
| +}
|
| +
|
| +TEST_F(OfflinePageModelQueryTest, ClientIdsSet) {
|
| + std::vector<ClientId> ids = {kClientId2, {"invalid", "client id"}};
|
| + builder_.SetClientIds(ids);
|
| +
|
| + std::unique_ptr<OfflinePageModelQuery> query = builder_.Build(&policy_);
|
| + std::set<ClientId> ids_out;
|
| + EXPECT_TRUE(query->GetRestrictedToClientIds(&ids_out));
|
| +
|
| + ASSERT_EQ(ids.size(), ids_out.size());
|
| + for (auto id : ids) {
|
| + EXPECT_EQ(1U, ids_out.count(id)) << "Did not find " << id.name_space << "."
|
| + << id.id << "in query restrictions.";
|
| + }
|
| +
|
| + EXPECT_TRUE(query->Matches(kTestItem2));
|
| + EXPECT_FALSE(query->Matches(kTestItem1));
|
| +}
|
| +
|
| +TEST_F(OfflinePageModelQueryTest, ClientIdsReplace) {
|
| + std::vector<ClientId> ids = {kClientId2, {"invalid", "client id"}};
|
| + std::vector<ClientId> ids2 = {kClientId1, {"invalid", "client id"}};
|
| +
|
| + builder_.SetClientIds(ids);
|
| + builder_.SetClientIds(ids2);
|
| +
|
| + std::unique_ptr<OfflinePageModelQuery> query = builder_.Build(&policy_);
|
| + std::set<ClientId> ids_out;
|
| + EXPECT_TRUE(query->GetRestrictedToClientIds(&ids_out));
|
| +
|
| + ASSERT_EQ(ids2.size(), ids_out.size());
|
| + for (auto id : ids2) {
|
| + EXPECT_EQ(1U, ids_out.count(id)) << "Did not find " << id.name_space << "."
|
| + << id.id << "in query restrictions.";
|
| + }
|
| +
|
| + EXPECT_TRUE(query->Matches(kTestItem1));
|
| + EXPECT_FALSE(query->Matches(kTestItem2));
|
| +}
|
| +
|
| +TEST_F(OfflinePageModelQueryTest, UrlsSet) {
|
| + std::vector<GURL> urls = {kUrl1, GURL("https://abc.def")};
|
| + builder_.SetUrls(urls);
|
| +
|
| + std::unique_ptr<OfflinePageModelQuery> query = builder_.Build(&policy_);
|
| + std::set<GURL> urls_out;
|
| + EXPECT_TRUE(query->GetRestrictedToUrls(&urls_out));
|
| +
|
| + ASSERT_EQ(urls.size(), urls_out.size());
|
| + for (auto url : urls) {
|
| + EXPECT_EQ(1U, urls_out.count(url)) << "Did not find " << url
|
| + << "in query restrictions.";
|
| + }
|
| +
|
| + EXPECT_TRUE(query->Matches(kTestItem1));
|
| + EXPECT_FALSE(query->Matches(kTestItem2));
|
| +}
|
| +
|
| +TEST_F(OfflinePageModelQueryTest, UrlsReplace) {
|
| + std::vector<GURL> urls = {kUrl1, GURL("https://abc.def")};
|
| + std::vector<GURL> urls2 = {kUrl2, GURL("https://abc.def")};
|
| +
|
| + builder_.SetUrls(urls);
|
| + builder_.SetUrls(urls2);
|
| +
|
| + std::unique_ptr<OfflinePageModelQuery> query = builder_.Build(&policy_);
|
| + std::set<GURL> urls_out;
|
| + EXPECT_TRUE(query->GetRestrictedToUrls(&urls_out));
|
| +
|
| + ASSERT_EQ(urls2.size(), urls_out.size());
|
| + for (auto url : urls2) {
|
| + EXPECT_EQ(1U, urls_out.count(url)) << "Did not find " << url
|
| + << "in query restrictions.";
|
| + }
|
| +
|
| + EXPECT_FALSE(query->Matches(kTestItem1));
|
| + EXPECT_TRUE(query->Matches(kTestItem2));
|
| +}
|
| +
|
| +TEST_F(OfflinePageModelQueryTest, AllowExpired) {
|
| + std::unique_ptr<OfflinePageModelQuery> query =
|
| + builder_.AllowExpiredPages(true).Build(&policy_);
|
| +
|
| + EXPECT_NE(nullptr, query.get());
|
| + EXPECT_TRUE(query->GetAllowExpired());
|
| +
|
| + EXPECT_TRUE(query->Matches(kTestItem1));
|
| + EXPECT_TRUE(query->Matches(kTestItem2));
|
| + EXPECT_TRUE(query->Matches(expired_page()));
|
| +}
|
| +
|
| +TEST_F(OfflinePageModelQueryTest, RequireSupportedByDownload_Only) {
|
| + builder_.RequireSupportedByDownload(Requirement::OnlyMatching);
|
| + std::unique_ptr<OfflinePageModelQuery> query = builder_.Build(&policy_);
|
| +
|
| + std::set<std::string> namespaces_allowed;
|
| + EXPECT_TRUE(query->GetRestrictedToNamespaces(&namespaces_allowed));
|
| +
|
| + for (const std::string& name_space : namespaces_allowed) {
|
| + EXPECT_TRUE(policy_.IsSupportedByDownload(name_space)) << "Namespace: "
|
| + << name_space;
|
| + }
|
| + EXPECT_FALSE(query->Matches(kTestItem1));
|
| + EXPECT_TRUE(query->Matches(download_page()));
|
| +}
|
| +
|
| +TEST_F(OfflinePageModelQueryTest, RequireSupportedByDownload_Except) {
|
| + builder_.RequireSupportedByDownload(Requirement::OnlyNotMatching);
|
| + std::unique_ptr<OfflinePageModelQuery> query = builder_.Build(&policy_);
|
| +
|
| + std::set<std::string> namespaces_allowed;
|
| + EXPECT_TRUE(query->GetRestrictedToNamespaces(&namespaces_allowed));
|
| +
|
| + for (const std::string& name_space : namespaces_allowed) {
|
| + EXPECT_FALSE(policy_.IsSupportedByDownload(name_space)) << "Namespace: "
|
| + << name_space;
|
| + }
|
| +
|
| + EXPECT_TRUE(query->Matches(kTestItem1));
|
| + EXPECT_FALSE(query->Matches(download_page()));
|
| +}
|
| +
|
| +TEST_F(OfflinePageModelQueryTest, RequireShownAsRecentlyVisitedSite_Only) {
|
| + builder_.RequireShownAsRecentlyVisitedSite(Requirement::OnlyMatching);
|
| + std::unique_ptr<OfflinePageModelQuery> query = builder_.Build(&policy_);
|
| +
|
| + std::set<std::string> namespaces_allowed;
|
| + EXPECT_TRUE(query->GetRestrictedToNamespaces(&namespaces_allowed));
|
| +
|
| + for (const std::string& name_space : namespaces_allowed) {
|
| + EXPECT_TRUE(policy_.IsShownAsRecentlyVisitedSite(name_space))
|
| + << "Namespace: " << name_space;
|
| + }
|
| + EXPECT_FALSE(query->Matches(kTestItem1));
|
| + EXPECT_TRUE(query->Matches(recent_page()));
|
| +}
|
| +
|
| +TEST_F(OfflinePageModelQueryTest, RequireShownAsRecentlyVisitedSite_Except) {
|
| + builder_.RequireShownAsRecentlyVisitedSite(Requirement::OnlyNotMatching);
|
| + std::unique_ptr<OfflinePageModelQuery> query = builder_.Build(&policy_);
|
| +
|
| + std::set<std::string> namespaces_allowed;
|
| + EXPECT_TRUE(query->GetRestrictedToNamespaces(&namespaces_allowed));
|
| +
|
| + for (const std::string& name_space : namespaces_allowed) {
|
| + EXPECT_FALSE(policy_.IsShownAsRecentlyVisitedSite(name_space))
|
| + << "Namespace: " << name_space;
|
| + }
|
| + EXPECT_TRUE(query->Matches(kTestItem1));
|
| + EXPECT_FALSE(query->Matches(recent_page()));
|
| +}
|
| +
|
| +TEST_F(OfflinePageModelQueryTest, RequireRestrictedToOriginalTab_Only) {
|
| + builder_.RequireRestrictedToOriginalTab(Requirement::OnlyMatching);
|
| + std::unique_ptr<OfflinePageModelQuery> query = builder_.Build(&policy_);
|
| +
|
| + std::set<std::string> namespaces_allowed;
|
| + EXPECT_TRUE(query->GetRestrictedToNamespaces(&namespaces_allowed));
|
| +
|
| + for (const std::string& name_space : namespaces_allowed) {
|
| + EXPECT_TRUE(policy_.IsRestrictedToOriginalTab(name_space)) << "Namespace: "
|
| + << name_space;
|
| + }
|
| + EXPECT_FALSE(query->Matches(kTestItem1));
|
| + EXPECT_TRUE(query->Matches(original_tab_page()));
|
| +}
|
| +
|
| +TEST_F(OfflinePageModelQueryTest, RequireRestrictedToOriginalTab_Except) {
|
| + builder_.RequireRestrictedToOriginalTab(Requirement::OnlyNotMatching);
|
| + std::unique_ptr<OfflinePageModelQuery> query = builder_.Build(&policy_);
|
| +
|
| + std::set<std::string> namespaces_allowed;
|
| + EXPECT_TRUE(query->GetRestrictedToNamespaces(&namespaces_allowed));
|
| +
|
| + for (const std::string& name_space : namespaces_allowed) {
|
| + EXPECT_FALSE(policy_.IsRestrictedToOriginalTab(name_space)) << "Namespace: "
|
| + << name_space;
|
| + }
|
| + EXPECT_TRUE(query->Matches(kTestItem1));
|
| + EXPECT_FALSE(query->Matches(original_tab_page()));
|
| +}
|
| +
|
| +TEST_F(OfflinePageModelQueryTest, IntersectNamespaces) {
|
| + // This should exclude last N, but include |kTestNamespace|.
|
| + builder_.RequireRestrictedToOriginalTab(Requirement::OnlyMatching)
|
| + .RequireShownAsRecentlyVisitedSite(Requirement::OnlyNotMatching);
|
| + std::unique_ptr<OfflinePageModelQuery> query = builder_.Build(&policy_);
|
| +
|
| + std::set<std::string> namespaces_allowed;
|
| + EXPECT_TRUE(query->GetRestrictedToNamespaces(&namespaces_allowed));
|
| +
|
| + EXPECT_TRUE(namespaces_allowed.count(kTestNamespace) == 1);
|
| + EXPECT_FALSE(query->Matches(recent_page()));
|
| +}
|
| +
|
| +} // namespace offline_pages
|
|
|