Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(64)

Side by Side Diff: components/offline_pages/offline_page_model_query_unittest.cc

Issue 2415473003: Query API: Introduces an OfflinePageModelQuery object. (Closed)
Patch Set: Moves everything to Requirement-based matching. Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/time/time.h"
6 #include "components/offline_pages/client_namespace_constants.h"
7 #include "components/offline_pages/client_policy_controller.h"
8 #include "components/offline_pages/offline_page_client_policy.h"
9 #include "components/offline_pages/offline_page_item.h"
10 #include "components/offline_pages/offline_page_model_query.h"
11
12 #include "testing/gtest/include/gtest/gtest.h"
13
14 namespace offline_pages {
15
16 using Requirement = OfflinePageModelQueryBuilder::Requirement;
17
18 namespace {
19
20 const ClientId kClientId1 = {kDefaultNamespace, "id1"};
21 const GURL kUrl1 = GURL("https://ktestitem1.com");
22 const OfflinePageItem kTestItem1(kUrl1, 1, kClientId1, base::FilePath(), 1);
23
24 const ClientId kClientId2 = {kDefaultNamespace, "id2"};
25 const GURL kUrl2 = GURL("https://ktestitem2.com");
26 const OfflinePageItem kTestItem2(kUrl2, 2, kClientId2, base::FilePath(), 2);
27
28 const char kTestNamespace[] = "test_namespace";
29 } // namespace
30
31 class OfflinePageModelQueryTest : public testing::Test {
32 public:
33 OfflinePageModelQueryTest();
34 ~OfflinePageModelQueryTest() override;
35
36 protected:
37 ClientPolicyController policy_;
38 OfflinePageModelQueryBuilder builder_;
39
40 const OfflinePageItem expired_page() {
41 OfflinePageItem expiredTestItem(GURL("https://ktestitem1.com"), 3,
42 kClientId1, base::FilePath(), 3);
43 expiredTestItem.expiration_time = base::Time::Now();
44
45 return expiredTestItem;
46 }
47
48 const OfflinePageItem download_page() {
49 return OfflinePageItem(GURL("https://download.com"), 4,
50 {kDownloadNamespace, "id1"}, base::FilePath(), 4);
51 }
52
53 const OfflinePageItem original_tab_page() {
54 return OfflinePageItem(GURL("https://download.com"), 5,
55 {kLastNNamespace, "id1"}, base::FilePath(), 5);
56 }
57
58 const OfflinePageItem test_namespace_page() {
59 return OfflinePageItem(GURL("https://download.com"), 6,
60 {kTestNamespace, "id1"}, base::FilePath(), 6);
61 }
62
63 const OfflinePageItem recent_page() {
64 return OfflinePageItem(GURL("https://download.com"), 7,
65 {kLastNNamespace, "id1"}, base::FilePath(), 7);
66 }
67 };
68
69 OfflinePageModelQueryTest::OfflinePageModelQueryTest() {
70 policy_.AddPolicyForTest(
71 kTestNamespace,
72 OfflinePageClientPolicyBuilder(kTestNamespace,
73 LifetimePolicy::LifetimeType::TEMPORARY,
74 kUnlimitedPages, kUnlimitedPages)
75 .SetIsOnlyShownInOriginalTab(true));
76 }
77
78 OfflinePageModelQueryTest::~OfflinePageModelQueryTest() {}
79
80 TEST_F(OfflinePageModelQueryTest, DefaultValues) {
81 std::unique_ptr<OfflinePageModelQuery> query = builder_.Build(&policy_);
82
83 EXPECT_NE(nullptr, query.get());
84 EXPECT_FALSE(query->GetAllowExpired());
85 EXPECT_EQ(Requirement::UNSET, query->GetRestrictedToOfflineIds(nullptr));
86 EXPECT_FALSE(query->GetRestrictedToNamespaces(nullptr));
87
88 EXPECT_TRUE(query->Matches(kTestItem1));
89 EXPECT_TRUE(query->Matches(kTestItem2));
90 EXPECT_FALSE(query->Matches(expired_page()));
91 }
92
93 TEST_F(OfflinePageModelQueryTest, OfflinePageIdsSet) {
94 std::vector<int64_t> ids = {1, 4, 9, 16};
95 builder_.SetOfflinePageIds(Requirement::MATCH, ids);
96
97 std::unique_ptr<OfflinePageModelQuery> query = builder_.Build(&policy_);
98 std::set<int64_t> ids_out;
99 EXPECT_EQ(Requirement::MATCH, query->GetRestrictedToOfflineIds(&ids_out));
100
101 ASSERT_EQ(ids.size(), ids_out.size());
102 for (auto id : ids) {
103 EXPECT_EQ(1U, ids_out.count(id)) << "Did not find " << id
104 << "in query restrictions.";
105 }
106
107 EXPECT_TRUE(query->Matches(kTestItem1));
108 EXPECT_FALSE(query->Matches(kTestItem2));
109 }
110
111 TEST_F(OfflinePageModelQueryTest, OfflinePageIdsReplace) {
112 std::vector<int64_t> ids = {1, 4, 9, 16};
113 std::vector<int64_t> ids2 = {1, 2, 3, 4};
114
115 builder_.SetOfflinePageIds(Requirement::MATCH, ids);
116 builder_.SetOfflinePageIds(Requirement::MATCH, ids2);
117
118 std::unique_ptr<OfflinePageModelQuery> query = builder_.Build(&policy_);
119 std::set<int64_t> ids_out;
120 EXPECT_EQ(Requirement::MATCH, query->GetRestrictedToOfflineIds(&ids_out));
121
122 ASSERT_EQ(ids2.size(), ids_out.size());
123 for (auto id : ids2) {
124 EXPECT_EQ(1U, ids_out.count(id)) << "Did not find " << id
125 << "in query restrictions.";
126 }
127
128 EXPECT_TRUE(query->Matches(kTestItem1));
129 EXPECT_TRUE(query->Matches(kTestItem2));
130 }
131
132 TEST_F(OfflinePageModelQueryTest, ClientIdsSet) {
133 std::vector<ClientId> ids = {kClientId2, {"invalid", "client id"}};
134 builder_.SetClientIds(Requirement::MATCH, ids);
135
136 std::unique_ptr<OfflinePageModelQuery> query = builder_.Build(&policy_);
137 std::set<ClientId> ids_out;
138 EXPECT_EQ(Requirement::MATCH, query->GetRestrictedToClientIds(&ids_out));
139
140 ASSERT_EQ(ids.size(), ids_out.size());
141 for (auto id : ids) {
142 EXPECT_EQ(1U, ids_out.count(id)) << "Did not find " << id.name_space << "."
143 << id.id << "in query restrictions.";
144 }
145
146 EXPECT_TRUE(query->Matches(kTestItem2));
147 EXPECT_FALSE(query->Matches(kTestItem1));
148 }
149
150 TEST_F(OfflinePageModelQueryTest, ClientIdsReplace) {
151 std::vector<ClientId> ids = {kClientId2, {"invalid", "client id"}};
152 std::vector<ClientId> ids2 = {kClientId1, {"invalid", "client id"}};
153
154 builder_.SetClientIds(Requirement::MATCH, ids);
155 builder_.SetClientIds(Requirement::MATCH, ids2);
156
157 std::unique_ptr<OfflinePageModelQuery> query = builder_.Build(&policy_);
158 std::set<ClientId> ids_out;
159 EXPECT_EQ(Requirement::MATCH, query->GetRestrictedToClientIds(&ids_out));
160
161 ASSERT_EQ(ids2.size(), ids_out.size());
162 for (auto id : ids2) {
163 EXPECT_EQ(1U, ids_out.count(id)) << "Did not find " << id.name_space << "."
164 << id.id << "in query restrictions.";
165 }
166
167 EXPECT_TRUE(query->Matches(kTestItem1));
168 EXPECT_FALSE(query->Matches(kTestItem2));
169 }
170
171 TEST_F(OfflinePageModelQueryTest, UrlsSet) {
172 std::vector<GURL> urls = {kUrl1, GURL("https://abc.def")};
173 builder_.SetUrls(Requirement::MATCH, urls);
174
175 std::unique_ptr<OfflinePageModelQuery> query = builder_.Build(&policy_);
176 std::set<GURL> urls_out;
177 EXPECT_EQ(Requirement::MATCH, query->GetRestrictedToUrls(&urls_out));
178
179 ASSERT_EQ(urls.size(), urls_out.size());
180 for (auto url : urls) {
181 EXPECT_EQ(1U, urls_out.count(url)) << "Did not find " << url
182 << "in query restrictions.";
183 }
184
185 EXPECT_TRUE(query->Matches(kTestItem1));
186 EXPECT_FALSE(query->Matches(kTestItem2));
187 }
188
189 TEST_F(OfflinePageModelQueryTest, UrlsReplace) {
190 std::vector<GURL> urls = {kUrl1, GURL("https://abc.def")};
191 std::vector<GURL> urls2 = {kUrl2, GURL("https://abc.def")};
192
193 builder_.SetUrls(Requirement::MATCH, urls);
194 builder_.SetUrls(Requirement::MATCH, urls2);
195
196 std::unique_ptr<OfflinePageModelQuery> query = builder_.Build(&policy_);
197 std::set<GURL> urls_out;
198 EXPECT_EQ(Requirement::MATCH, query->GetRestrictedToUrls(&urls_out));
199
200 ASSERT_EQ(urls2.size(), urls_out.size());
201 for (auto url : urls2) {
202 EXPECT_EQ(1U, urls_out.count(url)) << "Did not find " << url
203 << "in query restrictions.";
204 }
205
206 EXPECT_FALSE(query->Matches(kTestItem1));
207 EXPECT_TRUE(query->Matches(kTestItem2));
208 }
209
210 TEST_F(OfflinePageModelQueryTest, AllowExpired) {
211 std::unique_ptr<OfflinePageModelQuery> query =
212 builder_.AllowExpiredPages(true).Build(&policy_);
213
214 EXPECT_NE(nullptr, query.get());
215 EXPECT_TRUE(query->GetAllowExpired());
216
217 EXPECT_TRUE(query->Matches(kTestItem1));
218 EXPECT_TRUE(query->Matches(kTestItem2));
219 EXPECT_TRUE(query->Matches(expired_page()));
220 }
221
222 TEST_F(OfflinePageModelQueryTest, RequireSupportedByDownload_Only) {
223 builder_.RequireSupportedByDownload(Requirement::MATCH);
224 std::unique_ptr<OfflinePageModelQuery> query = builder_.Build(&policy_);
225
226 std::set<std::string> namespaces_allowed;
227 EXPECT_TRUE(query->GetRestrictedToNamespaces(&namespaces_allowed));
228
229 for (const std::string& name_space : namespaces_allowed) {
230 EXPECT_TRUE(policy_.IsSupportedByDownload(name_space)) << "Namespace: "
231 << name_space;
232 }
233 EXPECT_FALSE(query->Matches(kTestItem1));
234 EXPECT_TRUE(query->Matches(download_page()));
235 }
236
237 TEST_F(OfflinePageModelQueryTest, RequireSupportedByDownload_Except) {
238 builder_.RequireSupportedByDownload(Requirement::EXCLUDE);
239 std::unique_ptr<OfflinePageModelQuery> query = builder_.Build(&policy_);
240
241 std::set<std::string> namespaces_allowed;
242 EXPECT_TRUE(query->GetRestrictedToNamespaces(&namespaces_allowed));
243
244 for (const std::string& name_space : namespaces_allowed) {
245 EXPECT_FALSE(policy_.IsSupportedByDownload(name_space)) << "Namespace: "
246 << name_space;
247 }
248
249 EXPECT_TRUE(query->Matches(kTestItem1));
250 EXPECT_FALSE(query->Matches(download_page()));
251 }
252
253 TEST_F(OfflinePageModelQueryTest, RequireShownAsRecentlyVisitedSite_Only) {
254 builder_.RequireShownAsRecentlyVisitedSite(Requirement::MATCH);
255 std::unique_ptr<OfflinePageModelQuery> query = builder_.Build(&policy_);
256
257 std::set<std::string> namespaces_allowed;
258 EXPECT_TRUE(query->GetRestrictedToNamespaces(&namespaces_allowed));
259
260 for (const std::string& name_space : namespaces_allowed) {
261 EXPECT_TRUE(policy_.IsShownAsRecentlyVisitedSite(name_space))
262 << "Namespace: " << name_space;
263 }
264 EXPECT_FALSE(query->Matches(kTestItem1));
265 EXPECT_TRUE(query->Matches(recent_page()));
266 }
267
268 TEST_F(OfflinePageModelQueryTest, RequireShownAsRecentlyVisitedSite_Except) {
269 builder_.RequireShownAsRecentlyVisitedSite(Requirement::EXCLUDE);
270 std::unique_ptr<OfflinePageModelQuery> query = builder_.Build(&policy_);
271
272 std::set<std::string> namespaces_allowed;
273 EXPECT_TRUE(query->GetRestrictedToNamespaces(&namespaces_allowed));
274
275 for (const std::string& name_space : namespaces_allowed) {
276 EXPECT_FALSE(policy_.IsShownAsRecentlyVisitedSite(name_space))
277 << "Namespace: " << name_space;
278 }
279 EXPECT_TRUE(query->Matches(kTestItem1));
280 EXPECT_FALSE(query->Matches(recent_page()));
281 }
282
283 TEST_F(OfflinePageModelQueryTest, RequireRestrictedToOriginalTab_Only) {
284 builder_.RequireRestrictedToOriginalTab(Requirement::MATCH);
285 std::unique_ptr<OfflinePageModelQuery> query = builder_.Build(&policy_);
286
287 std::set<std::string> namespaces_allowed;
288 EXPECT_TRUE(query->GetRestrictedToNamespaces(&namespaces_allowed));
289
290 for (const std::string& name_space : namespaces_allowed) {
291 EXPECT_TRUE(policy_.IsRestrictedToOriginalTab(name_space)) << "Namespace: "
292 << name_space;
293 }
294 EXPECT_FALSE(query->Matches(kTestItem1));
295 EXPECT_TRUE(query->Matches(original_tab_page()));
296 }
297
298 TEST_F(OfflinePageModelQueryTest, RequireRestrictedToOriginalTab_Except) {
299 builder_.RequireRestrictedToOriginalTab(Requirement::EXCLUDE);
300 std::unique_ptr<OfflinePageModelQuery> query = builder_.Build(&policy_);
301
302 std::set<std::string> namespaces_allowed;
303 EXPECT_TRUE(query->GetRestrictedToNamespaces(&namespaces_allowed));
304
305 for (const std::string& name_space : namespaces_allowed) {
306 EXPECT_FALSE(policy_.IsRestrictedToOriginalTab(name_space)) << "Namespace: "
307 << name_space;
308 }
309 EXPECT_TRUE(query->Matches(kTestItem1));
310 EXPECT_FALSE(query->Matches(original_tab_page()));
311 }
312
313 TEST_F(OfflinePageModelQueryTest, IntersectNamespaces) {
314 // This should exclude last N, but include |kTestNamespace|.
315 builder_.RequireRestrictedToOriginalTab(Requirement::MATCH)
316 .RequireShownAsRecentlyVisitedSite(Requirement::EXCLUDE);
317 std::unique_ptr<OfflinePageModelQuery> query = builder_.Build(&policy_);
318
319 std::set<std::string> namespaces_allowed;
320 EXPECT_TRUE(query->GetRestrictedToNamespaces(&namespaces_allowed));
321
322 EXPECT_TRUE(namespaces_allowed.count(kTestNamespace) == 1);
323 EXPECT_FALSE(query->Matches(recent_page()));
324 }
325
326 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698