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

Side by Side Diff: components/doodle/doodle_fetcher_impl_unittest.cc

Issue 2725143003: [Doodle] Pull time_to_live out of DoodleConfig (Closed)
Patch Set: review Created 3 years, 9 months 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
1 // Copyright 2016 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/doodle/doodle_fetcher_impl.h" 5 #include "components/doodle/doodle_fetcher_impl.h"
6 6
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/command_line.h" 11 #include "base/command_line.h"
12 #include "base/json/json_reader.h" 12 #include "base/json/json_reader.h"
13 #include "base/memory/ptr_util.h" 13 #include "base/memory/ptr_util.h"
14 #include "base/message_loop/message_loop.h" 14 #include "base/message_loop/message_loop.h"
15 #include "base/time/time.h"
15 #include "base/values.h" 16 #include "base/values.h"
16 #include "components/google/core/browser/google_switches.h" 17 #include "components/google/core/browser/google_switches.h"
17 #include "components/google/core/browser/google_url_tracker.h" 18 #include "components/google/core/browser/google_url_tracker.h"
18 #include "net/http/http_status_code.h" 19 #include "net/http/http_status_code.h"
19 #include "net/url_request/test_url_fetcher_factory.h" 20 #include "net/url_request/test_url_fetcher_factory.h"
20 #include "net/url_request/url_request_status.h" 21 #include "net/url_request/url_request_status.h"
21 #include "net/url_request/url_request_test_util.h" 22 #include "net/url_request/url_request_test_util.h"
22 #include "testing/gmock/include/gmock/gmock.h" 23 #include "testing/gmock/include/gmock/gmock.h"
23 #include "testing/gtest/include/gtest/gtest.h" 24 #include "testing/gtest/include/gtest/gtest.h"
24 25
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 url_fetcher->delegate()->OnURLFetchComplete(url_fetcher); 100 url_fetcher->delegate()->OnURLFetchComplete(url_fetcher);
100 } 101 }
101 102
102 net::TestURLFetcher* GetRunningFetcher() { 103 net::TestURLFetcher* GetRunningFetcher() {
103 // All created TestURLFetchers have ID 0 by default. 104 // All created TestURLFetchers have ID 0 by default.
104 net::TestURLFetcher* url_fetcher = url_fetcher_factory_.GetFetcherByID(0); 105 net::TestURLFetcher* url_fetcher = url_fetcher_factory_.GetFetcherByID(0);
105 DCHECK(url_fetcher); 106 DCHECK(url_fetcher);
106 return url_fetcher; 107 return url_fetcher;
107 } 108 }
108 109
109 DoodleFetcherImpl::FinishedCallback CreateResponseSavingCallback( 110 DoodleFetcherImpl::FinishedCallback CreateResponseSavingCallback(
mastiz 2017/03/02 19:55:42 Optional: this function can likely be replaced wit
Marc Treib 2017/03/03 09:35:26 Added a TODO for now. I agree that this is probabl
110 DoodleState* state_out, 111 DoodleState* state_out,
112 base::TimeDelta* time_to_live_out,
111 base::Optional<DoodleConfig>* config_out) { 113 base::Optional<DoodleConfig>* config_out) {
112 return base::BindOnce( 114 return base::BindOnce(
113 [](DoodleState* state_out, base::Optional<DoodleConfig>* config_out, 115 [](DoodleState* state_out, base::TimeDelta* time_to_live_out,
114 DoodleState state, const base::Optional<DoodleConfig>& config) { 116 base::Optional<DoodleConfig>* config_out, DoodleState state,
117 base::TimeDelta time_to_live,
118 const base::Optional<DoodleConfig>& config) {
115 if (state_out) { 119 if (state_out) {
116 *state_out = state; 120 *state_out = state;
117 } 121 }
122 if (time_to_live_out) {
123 *time_to_live_out = time_to_live;
124 }
118 if (config_out) { 125 if (config_out) {
119 *config_out = config; 126 *config_out = config;
120 } 127 }
121 }, 128 },
122 state_out, config_out); 129 state_out, time_to_live_out, config_out);
123 } 130 }
124 131
125 DoodleFetcherImpl* doodle_fetcher() { return &doodle_fetcher_; } 132 DoodleFetcherImpl* doodle_fetcher() { return &doodle_fetcher_; }
126 133
127 GURL GetGoogleBaseURL() { return google_url_tracker_.google_url(); } 134 GURL GetGoogleBaseURL() { return google_url_tracker_.google_url(); }
128 135
129 private: 136 private:
130 base::MessageLoop message_loop_; 137 base::MessageLoop message_loop_;
131 GURL url_; 138 GURL url_;
132 net::TestURLFetcherFactory url_fetcher_factory_; 139 net::TestURLFetcherFactory url_fetcher_factory_;
133 GoogleURLTracker google_url_tracker_; 140 GoogleURLTracker google_url_tracker_;
134 DoodleFetcherImpl doodle_fetcher_; 141 DoodleFetcherImpl doodle_fetcher_;
135 }; 142 };
136 143
137 TEST_F(DoodleFetcherImplTest, ReturnsFromFetchWithoutError) { 144 TEST_F(DoodleFetcherImplTest, ReturnsFromFetchWithoutError) {
138 DoodleState state(DoodleState::NO_DOODLE); 145 DoodleState state(DoodleState::NO_DOODLE);
139 base::Optional<DoodleConfig> response; 146 base::Optional<DoodleConfig> response;
140 147
141 doodle_fetcher()->FetchDoodle( 148 doodle_fetcher()->FetchDoodle(
142 CreateResponseSavingCallback(&state, &response)); 149 CreateResponseSavingCallback(&state, nullptr, &response));
143 RespondWithData(R"json({"ddljson": { 150 RespondWithData(R"json({"ddljson": {
144 "time_to_live_ms":55000, 151 "time_to_live_ms":55000,
145 "large_image": {"url":"/logos/doodles/2015/some.gif"} 152 "large_image": {"url":"/logos/doodles/2015/some.gif"}
146 }})json"); 153 }})json");
147 154
148 EXPECT_THAT(state, Eq(DoodleState::AVAILABLE)); 155 EXPECT_THAT(state, Eq(DoodleState::AVAILABLE));
149 EXPECT_TRUE(response.has_value()); 156 EXPECT_TRUE(response.has_value());
150 } 157 }
151 158
152 TEST_F(DoodleFetcherImplTest, ReturnsFrom404FetchWithError) { 159 TEST_F(DoodleFetcherImplTest, ReturnsFrom404FetchWithError) {
153 DoodleState state(DoodleState::NO_DOODLE); 160 DoodleState state(DoodleState::NO_DOODLE);
154 base::Optional<DoodleConfig> response; 161 base::Optional<DoodleConfig> response;
155 162
156 doodle_fetcher()->FetchDoodle( 163 doodle_fetcher()->FetchDoodle(
157 CreateResponseSavingCallback(&state, &response)); 164 CreateResponseSavingCallback(&state, nullptr, &response));
158 RespondWithError(net::ERR_FILE_NOT_FOUND); 165 RespondWithError(net::ERR_FILE_NOT_FOUND);
159 166
160 EXPECT_THAT(state, Eq(DoodleState::DOWNLOAD_ERROR)); 167 EXPECT_THAT(state, Eq(DoodleState::DOWNLOAD_ERROR));
161 EXPECT_FALSE(response.has_value()); 168 EXPECT_FALSE(response.has_value());
162 } 169 }
163 170
164 TEST_F(DoodleFetcherImplTest, ReturnsErrorForInvalidJson) { 171 TEST_F(DoodleFetcherImplTest, ReturnsErrorForInvalidJson) {
165 DoodleState state(DoodleState::NO_DOODLE); 172 DoodleState state(DoodleState::NO_DOODLE);
166 base::Optional<DoodleConfig> response; 173 base::Optional<DoodleConfig> response;
167 174
168 doodle_fetcher()->FetchDoodle( 175 doodle_fetcher()->FetchDoodle(
169 CreateResponseSavingCallback(&state, &response)); 176 CreateResponseSavingCallback(&state, nullptr, &response));
170 RespondWithData("}"); 177 RespondWithData("}");
171 178
172 EXPECT_THAT(state, Eq(DoodleState::PARSING_ERROR)); 179 EXPECT_THAT(state, Eq(DoodleState::PARSING_ERROR));
173 EXPECT_FALSE(response.has_value()); 180 EXPECT_FALSE(response.has_value());
174 } 181 }
175 182
176 TEST_F(DoodleFetcherImplTest, ReturnsErrorForIncompleteJson) { 183 TEST_F(DoodleFetcherImplTest, ReturnsErrorForIncompleteJson) {
177 DoodleState state(DoodleState::NO_DOODLE); 184 DoodleState state(DoodleState::NO_DOODLE);
178 base::Optional<DoodleConfig> response; 185 base::Optional<DoodleConfig> response;
179 186
180 doodle_fetcher()->FetchDoodle( 187 doodle_fetcher()->FetchDoodle(
181 CreateResponseSavingCallback(&state, &response)); 188 CreateResponseSavingCallback(&state, nullptr, &response));
182 RespondWithData("{}"); 189 RespondWithData("{}");
183 190
184 EXPECT_THAT(state, Eq(DoodleState::PARSING_ERROR)); 191 EXPECT_THAT(state, Eq(DoodleState::PARSING_ERROR));
185 EXPECT_FALSE(response.has_value()); 192 EXPECT_FALSE(response.has_value());
186 } 193 }
187 194
188 TEST_F(DoodleFetcherImplTest, ResponseContainsValidBaseInformation) { 195 TEST_F(DoodleFetcherImplTest, ResponseContainsValidBaseInformation) {
189 DoodleState state(DoodleState::NO_DOODLE); 196 DoodleState state(DoodleState::NO_DOODLE);
197 base::TimeDelta time_to_live;
190 base::Optional<DoodleConfig> response; 198 base::Optional<DoodleConfig> response;
191 199
192 doodle_fetcher()->FetchDoodle( 200 doodle_fetcher()->FetchDoodle(
193 CreateResponseSavingCallback(&state, &response)); 201 CreateResponseSavingCallback(&state, &time_to_live, &response));
194 RespondWithData(R"json()]}'{ 202 RespondWithData(R"json()]}'{
195 "ddljson": { 203 "ddljson": {
196 "alt_text":"Mouseover Text", 204 "alt_text":"Mouseover Text",
197 "doodle_type":"SIMPLE", 205 "doodle_type":"SIMPLE",
198 "interactive_html":"\u003cstyle\u003e\u003c\/style\u003e", 206 "interactive_html":"\u003cstyle\u003e\u003c\/style\u003e",
199 "search_url":"/search?q\u003dtest", 207 "search_url":"/search?q\u003dtest",
200 "target_url":"/search?q\u003dtest\u0026sa\u003dX\u0026ved\u003d0ahUKEw", 208 "target_url":"/search?q\u003dtest\u0026sa\u003dX\u0026ved\u003d0ahUKEw",
201 "time_to_live_ms":55000, 209 "time_to_live_ms":55000,
202 "large_image": { 210 "large_image": {
203 "url":"/logos/doodles/2015/new-years-eve-2015-59854387958251-hp.gif" 211 "url":"/logos/doodles/2015/new-years-eve-2015-59854387958251-hp.gif"
204 } 212 }
205 }})json"); 213 }})json");
206 214
207 EXPECT_THAT(state, Eq(DoodleState::AVAILABLE)); 215 EXPECT_THAT(state, Eq(DoodleState::AVAILABLE));
208 ASSERT_TRUE(response.has_value()); 216 ASSERT_TRUE(response.has_value());
209 DoodleConfig config = response.value(); 217 DoodleConfig config = response.value();
210 218
211 EXPECT_TRUE(config.search_url.is_valid()); 219 EXPECT_TRUE(config.search_url.is_valid());
212 EXPECT_THAT(config.search_url, Eq(Resolve("/search?q\u003dtest"))); 220 EXPECT_THAT(config.search_url, Eq(Resolve("/search?q\u003dtest")));
213 EXPECT_TRUE(config.fullpage_interactive_url.is_empty()); 221 EXPECT_TRUE(config.fullpage_interactive_url.is_empty());
214 EXPECT_TRUE(config.target_url.is_valid()); 222 EXPECT_TRUE(config.target_url.is_valid());
215 EXPECT_THAT(config.target_url, 223 EXPECT_THAT(config.target_url,
216 Eq(Resolve("/search?q\u003dtest\u0026sa\u003dX\u0026ved\u003d" 224 Eq(Resolve("/search?q\u003dtest\u0026sa\u003dX\u0026ved\u003d"
217 "0ahUKEw"))); 225 "0ahUKEw")));
218 EXPECT_THAT(config.doodle_type, Eq(DoodleType::SIMPLE)); 226 EXPECT_THAT(config.doodle_type, Eq(DoodleType::SIMPLE));
219 EXPECT_THAT(config.alt_text, Eq("Mouseover Text")); 227 EXPECT_THAT(config.alt_text, Eq("Mouseover Text"));
220 EXPECT_THAT(config.interactive_html, 228 EXPECT_THAT(config.interactive_html,
221 Eq("\u003cstyle\u003e\u003c/style\u003e")); 229 Eq("\u003cstyle\u003e\u003c/style\u003e"));
222 230
223 EXPECT_THAT(config.time_to_live, 231 EXPECT_THAT(time_to_live, Eq(base::TimeDelta::FromMilliseconds(55000)));
224 Eq(base::TimeDelta::FromMilliseconds(55000)));
225 } 232 }
226 233
227 TEST_F(DoodleFetcherImplTest, DoodleExpiresWithinThirtyDaysForTooLargeTTL) { 234 TEST_F(DoodleFetcherImplTest, DoodleExpiresWithinThirtyDaysForTooLargeTTL) {
228 DoodleState state(DoodleState::NO_DOODLE); 235 DoodleState state(DoodleState::NO_DOODLE);
236 base::TimeDelta time_to_live;
229 base::Optional<DoodleConfig> response; 237 base::Optional<DoodleConfig> response;
230 238
231 doodle_fetcher()->FetchDoodle( 239 doodle_fetcher()->FetchDoodle(
232 CreateResponseSavingCallback(&state, &response)); 240 CreateResponseSavingCallback(&state, &time_to_live, &response));
233 RespondWithData(R"json({"ddljson": { 241 RespondWithData(R"json({"ddljson": {
234 "time_to_live_ms":5184000000, 242 "time_to_live_ms":5184000000,
235 "large_image": {"url":"/logos/doodles/2015/some.gif"} 243 "large_image": {"url":"/logos/doodles/2015/some.gif"}
236 }})json"); // 60 days 244 }})json"); // 60 days
237 245
238 EXPECT_THAT(state, Eq(DoodleState::AVAILABLE)); 246 EXPECT_THAT(state, Eq(DoodleState::AVAILABLE));
239 ASSERT_TRUE(response.has_value()); 247 EXPECT_TRUE(response.has_value());
240 EXPECT_THAT(response.value().time_to_live, 248 EXPECT_THAT(time_to_live,
241 Eq(base::TimeDelta::FromMilliseconds(30ul * 24 * 60 * 60 * 249 Eq(base::TimeDelta::FromMilliseconds(30ul * 24 * 60 * 60 *
242 1000))); // 30 days 250 1000))); // 30 days
243 } 251 }
244 252
245 TEST_F(DoodleFetcherImplTest, DoodleExpiresImmediatelyWithNegativeTTL) { 253 TEST_F(DoodleFetcherImplTest, DoodleExpiresImmediatelyWithNegativeTTL) {
246 DoodleState state(DoodleState::NO_DOODLE); 254 DoodleState state(DoodleState::NO_DOODLE);
255 base::TimeDelta time_to_live;
247 base::Optional<DoodleConfig> response; 256 base::Optional<DoodleConfig> response;
248 257
249 doodle_fetcher()->FetchDoodle( 258 doodle_fetcher()->FetchDoodle(
250 CreateResponseSavingCallback(&state, &response)); 259 CreateResponseSavingCallback(&state, &time_to_live, &response));
251 RespondWithData(R"json({"ddljson": { 260 RespondWithData(R"json({"ddljson": {
252 "time_to_live_ms":-1, 261 "time_to_live_ms":-1,
253 "large_image": {"url":"/logos/doodles/2015/some.gif"} 262 "large_image": {"url":"/logos/doodles/2015/some.gif"}
254 }})json"); 263 }})json");
255 264
256 EXPECT_THAT(state, Eq(DoodleState::AVAILABLE)); 265 EXPECT_THAT(state, Eq(DoodleState::AVAILABLE));
257 ASSERT_TRUE(response.has_value()); 266 EXPECT_TRUE(response.has_value());
258 EXPECT_THAT(response.value().time_to_live, 267 EXPECT_THAT(time_to_live, Eq(base::TimeDelta::FromMilliseconds(0)));
259 Eq(base::TimeDelta::FromMilliseconds(0)));
260 } 268 }
261 269
262 TEST_F(DoodleFetcherImplTest, DoodleExpiresImmediatelyWithoutValidTTL) { 270 TEST_F(DoodleFetcherImplTest, DoodleExpiresImmediatelyWithoutValidTTL) {
263 DoodleState state(DoodleState::NO_DOODLE); 271 DoodleState state(DoodleState::NO_DOODLE);
272 base::TimeDelta time_to_live;
264 base::Optional<DoodleConfig> response; 273 base::Optional<DoodleConfig> response;
265 274
266 doodle_fetcher()->FetchDoodle( 275 doodle_fetcher()->FetchDoodle(
267 CreateResponseSavingCallback(&state, &response)); 276 CreateResponseSavingCallback(&state, &time_to_live, &response));
268 RespondWithData(R"json({"ddljson": { 277 RespondWithData(R"json({"ddljson": {
269 "large_image": {"url":"/logos/doodles/2015/some.gif"} 278 "large_image": {"url":"/logos/doodles/2015/some.gif"}
270 }})json"); 279 }})json");
271 280
272 EXPECT_THAT(state, Eq(DoodleState::AVAILABLE)); 281 EXPECT_THAT(state, Eq(DoodleState::AVAILABLE));
273 ASSERT_TRUE(response.has_value()); 282 EXPECT_TRUE(response.has_value());
274 EXPECT_THAT(response.value().time_to_live, 283 EXPECT_THAT(time_to_live, Eq(base::TimeDelta::FromMilliseconds(0)));
275 Eq(base::TimeDelta::FromMilliseconds(0)));
276 } 284 }
277 285
278 TEST_F(DoodleFetcherImplTest, ReturnsNoDoodleForMissingLargeImageUrl) { 286 TEST_F(DoodleFetcherImplTest, ReturnsNoDoodleForMissingLargeImageUrl) {
279 DoodleState state(DoodleState::AVAILABLE); 287 DoodleState state(DoodleState::AVAILABLE);
280 base::Optional<DoodleConfig> response; 288 base::Optional<DoodleConfig> response;
281 289
282 doodle_fetcher()->FetchDoodle( 290 doodle_fetcher()->FetchDoodle(
283 CreateResponseSavingCallback(&state, &response)); 291 CreateResponseSavingCallback(&state, nullptr, &response));
284 RespondWithData(R"json({"ddljson": { 292 RespondWithData(R"json({"ddljson": {
285 "time_to_live_ms":55000, 293 "time_to_live_ms":55000,
286 "large_image": {} 294 "large_image": {}
287 }})json"); 295 }})json");
288 296
289 EXPECT_THAT(state, Eq(DoodleState::NO_DOODLE)); 297 EXPECT_THAT(state, Eq(DoodleState::NO_DOODLE));
290 EXPECT_FALSE(response.has_value()); 298 EXPECT_FALSE(response.has_value());
291 } 299 }
292 300
293 TEST_F(DoodleFetcherImplTest, EmptyResponsesCausesNoDoodleState) { 301 TEST_F(DoodleFetcherImplTest, EmptyResponsesCausesNoDoodleState) {
294 DoodleState state(DoodleState::AVAILABLE); 302 DoodleState state(DoodleState::AVAILABLE);
295 base::Optional<DoodleConfig> response; 303 base::Optional<DoodleConfig> response;
296 304
297 doodle_fetcher()->FetchDoodle( 305 doodle_fetcher()->FetchDoodle(
298 CreateResponseSavingCallback(&state, &response)); 306 CreateResponseSavingCallback(&state, nullptr, &response));
299 RespondWithData("{\"ddljson\":{}}"); 307 RespondWithData("{\"ddljson\":{}}");
300 308
301 EXPECT_THAT(state, Eq(DoodleState::NO_DOODLE)); 309 EXPECT_THAT(state, Eq(DoodleState::NO_DOODLE));
302 EXPECT_FALSE(response.has_value()); 310 EXPECT_FALSE(response.has_value());
303 } 311 }
304 312
305 TEST_F(DoodleFetcherImplTest, ResponseContainsExactlyTheSampleImages) { 313 TEST_F(DoodleFetcherImplTest, ResponseContainsExactlyTheSampleImages) {
306 DoodleState state(DoodleState::NO_DOODLE); 314 DoodleState state(DoodleState::NO_DOODLE);
307 base::Optional<DoodleConfig> response; 315 base::Optional<DoodleConfig> response;
308 316
309 doodle_fetcher()->FetchDoodle( 317 doodle_fetcher()->FetchDoodle(
310 CreateResponseSavingCallback(&state, &response)); 318 CreateResponseSavingCallback(&state, nullptr, &response));
311 RespondWithData(R"json()]}'{ 319 RespondWithData(R"json()]}'{
312 "ddljson": { 320 "ddljson": {
313 "time_to_live_ms":55000, 321 "time_to_live_ms":55000,
314 "large_image": { 322 "large_image": {
315 "height":225, 323 "height":225,
316 "is_animated_gif":true, 324 "is_animated_gif":true,
317 "is_cta":false, 325 "is_cta":false,
318 "url":"/logos/doodles/2015/new-years-eve-2015-59854387958251-hp.gif", 326 "url":"/logos/doodles/2015/new-years-eve-2015-59854387958251-hp.gif",
319 "width":489 327 "width":489
320 }, 328 },
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 } 375 }
368 376
369 TEST_F(DoodleFetcherImplTest, RespondsToMultipleRequestsWithSameFetcher) { 377 TEST_F(DoodleFetcherImplTest, RespondsToMultipleRequestsWithSameFetcher) {
370 DoodleState state1(DoodleState::NO_DOODLE); 378 DoodleState state1(DoodleState::NO_DOODLE);
371 DoodleState state2(DoodleState::NO_DOODLE); 379 DoodleState state2(DoodleState::NO_DOODLE);
372 base::Optional<DoodleConfig> response1; 380 base::Optional<DoodleConfig> response1;
373 base::Optional<DoodleConfig> response2; 381 base::Optional<DoodleConfig> response2;
374 382
375 // Trigger two requests. 383 // Trigger two requests.
376 doodle_fetcher()->FetchDoodle( 384 doodle_fetcher()->FetchDoodle(
377 CreateResponseSavingCallback(&state1, &response1)); 385 CreateResponseSavingCallback(&state1, nullptr, &response1));
378 net::URLFetcher* first_created_fetcher = GetRunningFetcher(); 386 net::URLFetcher* first_created_fetcher = GetRunningFetcher();
379 doodle_fetcher()->FetchDoodle( 387 doodle_fetcher()->FetchDoodle(
380 CreateResponseSavingCallback(&state2, &response2)); 388 CreateResponseSavingCallback(&state2, nullptr, &response2));
381 net::URLFetcher* second_created_fetcher = GetRunningFetcher(); 389 net::URLFetcher* second_created_fetcher = GetRunningFetcher();
382 390
383 // Expect that only one fetcher handles both requests. 391 // Expect that only one fetcher handles both requests.
384 EXPECT_THAT(first_created_fetcher, Eq(second_created_fetcher)); 392 EXPECT_THAT(first_created_fetcher, Eq(second_created_fetcher));
385 393
386 RespondWithData(R"json({"ddljson": { 394 RespondWithData(R"json({"ddljson": {
387 "time_to_live_ms":55000, 395 "time_to_live_ms":55000,
388 "large_image": {"url":"/logos/doodles/2015/some.gif"} 396 "large_image": {"url":"/logos/doodles/2015/some.gif"}
389 }})json"); 397 }})json");
390 398
391 // Ensure that both requests received a response. 399 // Ensure that both requests received a response.
392 EXPECT_THAT(state1, Eq(DoodleState::AVAILABLE)); 400 EXPECT_THAT(state1, Eq(DoodleState::AVAILABLE));
393 EXPECT_TRUE(response1.has_value()); 401 EXPECT_TRUE(response1.has_value());
394 EXPECT_THAT(state2, Eq(DoodleState::AVAILABLE)); 402 EXPECT_THAT(state2, Eq(DoodleState::AVAILABLE));
395 EXPECT_TRUE(response2.has_value()); 403 EXPECT_TRUE(response2.has_value());
396 } 404 }
397 405
398 TEST_F(DoodleFetcherImplTest, ReceivesBaseUrlFromTracker) { 406 TEST_F(DoodleFetcherImplTest, ReceivesBaseUrlFromTracker) {
399 doodle_fetcher()->FetchDoodle( 407 doodle_fetcher()->FetchDoodle(CreateResponseSavingCallback(
400 CreateResponseSavingCallback(/*state=*/nullptr, /*response=*/nullptr)); 408 /*state=*/nullptr, nullptr, /*response=*/nullptr));
401 409
402 EXPECT_THAT(GetRunningFetcher()->GetOriginalURL(), 410 EXPECT_THAT(GetRunningFetcher()->GetOriginalURL(),
403 Eq(GetGoogleBaseURL().Resolve(kDoodleConfigPath))); 411 Eq(GetGoogleBaseURL().Resolve(kDoodleConfigPath)));
404 } 412 }
405 413
406 TEST_F(DoodleFetcherImplTest, OverridesBaseUrlWithCommandLineArgument) { 414 TEST_F(DoodleFetcherImplTest, OverridesBaseUrlWithCommandLineArgument) {
407 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( 415 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
408 switches::kGoogleBaseURL, "http://www.google.kz"); 416 switches::kGoogleBaseURL, "http://www.google.kz");
409 417
410 doodle_fetcher()->FetchDoodle( 418 doodle_fetcher()->FetchDoodle(CreateResponseSavingCallback(
411 CreateResponseSavingCallback(/*state=*/nullptr, /*response=*/nullptr)); 419 /*state=*/nullptr, nullptr, /*response=*/nullptr));
412 420
413 EXPECT_THAT(GetRunningFetcher()->GetOriginalURL(), 421 EXPECT_THAT(GetRunningFetcher()->GetOriginalURL(),
414 Eq(GURL("http://www.google.kz").Resolve(kDoodleConfigPath))); 422 Eq(GURL("http://www.google.kz").Resolve(kDoodleConfigPath)));
415 } 423 }
416 424
417 } // namespace doodle 425 } // namespace doodle
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698