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

Side by Side Diff: chrome/browser/resources/google_now/background_unittest.gtestjs

Issue 107033002: Combining cards instead of merging (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rgistafson's verbal comment Created 7 years 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 // TODO(robliao,vadimt): Determine the granularity of testing to perform. 5 // TODO(robliao,vadimt): Determine the granularity of testing to perform.
6 6
7 /** 7 /**
8 * Test fixture for background.js. 8 * Test fixture for background.js.
9 * @constructor 9 * @constructor
10 * @extends {testing.Test} 10 * @extends {testing.Test}
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 testTaskPair(RETRY_DISMISS_TASK_NAME, DISMISS_CARD_TASK_NAME, true); 44 testTaskPair(RETRY_DISMISS_TASK_NAME, DISMISS_CARD_TASK_NAME, true);
45 testTaskPair(RETRY_DISMISS_TASK_NAME, RETRY_DISMISS_TASK_NAME, true); 45 testTaskPair(RETRY_DISMISS_TASK_NAME, RETRY_DISMISS_TASK_NAME, true);
46 testTaskPair(RETRY_DISMISS_TASK_NAME, STATE_CHANGED_TASK_NAME, false); 46 testTaskPair(RETRY_DISMISS_TASK_NAME, STATE_CHANGED_TASK_NAME, false);
47 47
48 testTaskPair(STATE_CHANGED_TASK_NAME, UPDATE_CARDS_TASK_NAME, false); 48 testTaskPair(STATE_CHANGED_TASK_NAME, UPDATE_CARDS_TASK_NAME, false);
49 testTaskPair(STATE_CHANGED_TASK_NAME, DISMISS_CARD_TASK_NAME, false); 49 testTaskPair(STATE_CHANGED_TASK_NAME, DISMISS_CARD_TASK_NAME, false);
50 testTaskPair(STATE_CHANGED_TASK_NAME, RETRY_DISMISS_TASK_NAME, false); 50 testTaskPair(STATE_CHANGED_TASK_NAME, RETRY_DISMISS_TASK_NAME, false);
51 testTaskPair(STATE_CHANGED_TASK_NAME, STATE_CHANGED_TASK_NAME, false); 51 testTaskPair(STATE_CHANGED_TASK_NAME, STATE_CHANGED_TASK_NAME, false);
52 }); 52 });
53 53
54 var testNotificationId = 'TEST GROUP-SOME TEST ID';
55 var testChromeNotificationId = 'TEST CARD ID';
56 var testNotification1 =
57 {testNotificationField: 'TEST NOTIFICATION VALUE1', priority: -1};
58 var testNotification2 =
59 {testNotificationField: 'TEST NOTIFICATION VALUE2', priority: 0};
60 var testActionUrls1 = {testField: 'TEST VALUE1'};
61 var testActionUrls2 = {testField: 'TEST VALUE2'};
62 var testDismissal1 = {testDismissalField: 'TEST DISMISSAL VALUE 1'};
63 var testDismissal2 = {testDismissalField: 'TEST DISMISSAL VALUE 2'};
64 var testVersion = 7;
65 var testTimestamp1 = 300000;
66 var testTimestamp2 = 600000;
67 var testGroupRank1 = 19;
68 var testGroupRank2 = 23;
69 var testTriggerUnmerged = {showTimeSec: 100, hideTimeSec: 200};
70 var testTriggerMerged = {showTime: 300007, hideTime: 300011};
71 var testVersion1 = 29;
72 var testVersion2 = 31;
73
74 TEST_F(
75 'GoogleNowBackgroundUnitTest',
76 'MergeCardsEmptyNoTrigger',
77 function() {
78 // Tests merging a card with an empty trigger into an 'undefined' merged
79 // card. This should start a new card.
80
81 // Invoking the tested function.
82 var resultingMergedCard = mergeCards(undefined, {
83 notificationId: testNotificationId,
84 chromeNotificationId: testChromeNotificationId,
85 version: testVersion1,
86 chromeNotificationOptions: testNotification1,
87 actionUrls: testActionUrls1,
88 dismissal: testDismissal1
89 }, testTimestamp1, testGroupRank1);
90
91 // Check the return value.
92 assertEquals(
93 JSON.stringify({
94 dismissals: [
95 {
96 notificationId: testNotificationId,
97 parameters: testDismissal1
98 }
99 ],
100 groupRank: testGroupRank1,
101 trigger: {},
102 timestamp: testTimestamp1,
103 notification: testNotification1,
104 actionUrls: testActionUrls1,
105 version: testVersion1
106 }),
107 JSON.stringify(resultingMergedCard));
108 });
109
110 TEST_F(
111 'GoogleNowBackgroundUnitTest',
112 'MergeCards1',
113 function() {
114 // Tests merging a unmerged card into a merged card.
115 // Unmerged card priority is greater than merged card one. Unmerged card
116 // rank is less than merged card one, and it's older.
117
118 // Setup.
119 var mergedCard = {
120 trigger: testTriggerMerged,
121 version: testVersion1,
122 timestamp: testTimestamp2,
123 notification: testNotification1,
124 actionUrls: testActionUrls1,
125 groupRank: testGroupRank2,
126 dismissals:
127 [{notificationId: testNotificationId, parameters: testDismissal1}]
128 };
129
130 var unmergedNotification = {
131 notificationId: testNotificationId,
132 chromeNotificationId: testChromeNotificationId,
133 version: testVersion2,
134 chromeNotificationOptions: testNotification2,
135 actionUrls: testActionUrls2,
136 dismissal: testDismissal2,
137 trigger: testTriggerUnmerged
138 };
139
140 // Invoking the tested function.
141 var resultingMergedCard = mergeCards(
142 mergedCard, unmergedNotification, testTimestamp1, testGroupRank1);
143
144 // Check the return value.
145 assertEquals(
146 JSON.stringify({
147 trigger: testTriggerMerged,
148 version: testVersion1,
149 timestamp: testTimestamp2,
150 notification: {
151 testNotificationField: 'TEST NOTIFICATION VALUE1',
152 priority: 0
153 },
154 actionUrls: testActionUrls1,
155 groupRank: testGroupRank2,
156 dismissals: [
157 {notificationId: testNotificationId, parameters: testDismissal1},
158 {notificationId: testNotificationId, parameters: testDismissal2}
159 ]
160 }),
161 JSON.stringify(resultingMergedCard));
162 });
163
164 TEST_F(
165 'GoogleNowBackgroundUnitTest',
166 'MergeCards2',
167 function() {
168 // Tests merging a unmerged card into a merged card.
169 // Unmerged card priority is less than merged card one. Unmerged card rank
170 // is greater than merged card one, and it's older.
171
172 // Setup.
173 var mergedCard = {
174 trigger: testTriggerMerged,
175 version: testVersion1,
176 timestamp: testTimestamp2,
177 notification: testNotification2,
178 actionUrls: testActionUrls1,
179 groupRank: testGroupRank1,
180 dismissals:
181 [{notificationId: testNotificationId, parameters: testDismissal1}]
182 };
183
184 var unmergedNotification = {
185 notificationId: testNotificationId,
186 chromeNotificationId: testChromeNotificationId,
187 version: testVersion2,
188 chromeNotificationOptions: testNotification1,
189 actionUrls: testActionUrls2,
190 dismissal: testDismissal2,
191 trigger: testTriggerUnmerged
192 };
193
194 // Invoking the tested function.
195 var resultingMergedCard = mergeCards(
196 mergedCard, unmergedNotification, testTimestamp1, testGroupRank2);
197
198 // Check the return value.
199 assertEquals(
200 JSON.stringify({
201 trigger: {showTime: 400000, hideTime: 500000},
202 version: testVersion1,
203 timestamp: testTimestamp2,
204 notification: {
205 testNotificationField: 'TEST NOTIFICATION VALUE2',
206 priority: 0
207 },
208 actionUrls: testActionUrls1,
209 groupRank: testGroupRank2,
210 dismissals: [
211 {notificationId: testNotificationId, parameters: testDismissal1},
212 {notificationId: testNotificationId, parameters: testDismissal2}
213 ]
214 }),
215 JSON.stringify(resultingMergedCard));
216 });
217
218 TEST_F(
219 'GoogleNowBackgroundUnitTest',
220 'MergeCards3',
221 function() {
222 // Tests merging a unmerged card into a merged card.
223 // Unmerged card priority is less than merged card one. Unmerged card rank
224 // is less than merged card one, and it's newer.
225
226 // Setup.
227 var mergedCard = {
228 trigger: testTriggerMerged,
229 version: testVersion1,
230 timestamp: testTimestamp1,
231 notification: testNotification2,
232 actionUrls: testActionUrls1,
233 groupRank: testGroupRank2,
234 dismissals:
235 [{notificationId: testNotificationId, parameters: testDismissal1}]
236 };
237
238 var unmergedNotification = {
239 notificationId: testNotificationId,
240 chromeNotificationId: testChromeNotificationId,
241 version: testVersion2,
242 chromeNotificationOptions: testNotification1,
243 actionUrls: testActionUrls2,
244 dismissal: testDismissal2,
245 trigger: testTriggerUnmerged
246 };
247
248 // Invoking the tested function.
249 var resultingMergedCard = mergeCards(
250 mergedCard, unmergedNotification, testTimestamp2, testGroupRank1);
251
252 // Check the return value.
253 assertEquals(
254 JSON.stringify({
255 trigger: testTriggerMerged,
256 version: testVersion2,
257 timestamp: testTimestamp2,
258 notification: {
259 testNotificationField: 'TEST NOTIFICATION VALUE1',
260 priority: 0
261 },
262 actionUrls: testActionUrls2,
263 groupRank: testGroupRank2,
264 dismissals: [
265 {notificationId: testNotificationId, parameters: testDismissal1},
266 {notificationId: testNotificationId, parameters: testDismissal2}
267 ]
268 }),
269 JSON.stringify(resultingMergedCard));
270 });
271
272 TEST_F(
273 'GoogleNowBackgroundUnitTest',
274 'MergeGroup',
275 function() {
276 // Tests mergeGroup method.
277
278 // Setup.
279 this.makeAndRegisterMockGlobals(['mergeCards']);
280
281 this.mockGlobals.expects(once()).
282 mergeCards(
283 undefined,
284 eqJSON({chromeNotificationId: 'ID 1', testField: 'TEST_FIELD1'}),
285 300000,
286 17).
287 will(returnValue({testField: 'RESULT 1'}));
288 this.mockGlobals.expects(once()).
289 mergeCards(
290 eqJSON({testField: 'TEST_FIELD22'}),
291 eqJSON({chromeNotificationId: 'ID 2', testField: 'TEST_FIELD2'}),
292 300000,
293 17).
294 will(returnValue({testField: 'RESULT 2'}));
295
296 var group = {
297 cards: [
298 {chromeNotificationId: 'ID 1', testField: 'TEST_FIELD1'},
299 {chromeNotificationId: 'ID 2', testField: 'TEST_FIELD2'}
300 ],
301 cardsTimestamp: 300000,
302 nextPollTime: 600000,
303 rank: 17
304 };
305
306 var mergedCards = {
307 'ID 2': { testField: 'TEST_FIELD22' },
308 'ID 3': { testField: 'TEST_FIELD3' }
309 };
310
311 // Invoking the tested function.
312 mergeGroup(mergedCards, group);
313
314 // Check the output parameter.
315 assertEquals(
316 JSON.stringify({
317 'ID 2': { testField: 'RESULT 2' },
318 'ID 3': { testField: 'TEST_FIELD3'},
319 'ID 1': { testField: 'RESULT 1' }}),
320 JSON.stringify(mergedCards));
321 });
322
323 TEST_F(
324 'GoogleNowBackgroundUnitTest',
325 'MergeAndShowNotificationCards',
326 function() {
327 // Tests mergeAndShowNotificationCards function.
328 // The test passes 2 groups to mergeAndShowNotificationCards, checks that
329 // it calls mergeGroup() for each of these groups and calls
330 // showNotificationCards() with the results of these mergeGroup() calls.
331
332 // Setup and expectations.
333 var testGroups = {
334 'TEST GROUP 1': {testField: 'TEST VALUE 1'},
335 'TEST GROUP 2': {testField: 'TEST VALUE 2'}
336 };
337
338 this.makeAndRegisterMockGlobals(['mergeGroup', 'showNotificationCards']);
339
340 var mergeGroupSavedArgs = new SaveMockArguments();
341 this.mockGlobals.expects(once()).
342 mergeGroup(
343 mergeGroupSavedArgs.match(eqJSON({})),
344 mergeGroupSavedArgs.match(eqJSON({testField: 'TEST VALUE 1'}))).
345 will(callFunction(function() {
346 mergeGroupSavedArgs.arguments[0].card1 = {
347 testValue: 'TEST CARD VALUE 1'
348 };
349 }));
350 this.mockGlobals.expects(once()).
351 mergeGroup(
352 mergeGroupSavedArgs.match(
353 eqJSON({card1: {testValue: 'TEST CARD VALUE 1'}})),
354 mergeGroupSavedArgs.match(
355 eqJSON({testField: 'TEST VALUE 2'}))).
356 will(callFunction(function() {
357 mergeGroupSavedArgs.arguments[0].card2 = {
358 testValue: 'TEST CARD VALUE 2'
359 };
360 }));
361 this.mockGlobals.expects(once()).
362 showNotificationCards(
363 eqJSON({
364 card1: {testValue: 'TEST CARD VALUE 1'},
365 card2: {testValue: 'TEST CARD VALUE 2'}
366 }),
367 ANYTHING);
368
369 // Invoking the tested function.
370 mergeAndShowNotificationCards(testGroups, function() {});
371 });
372
373 // TODO(vadimt): Add more tests for parseAndShowNotificationCards().
374 TEST_F(
375 'GoogleNowBackgroundUnitTest',
376 'ParseAndShowNotificationCardsAdd1Remove1',
377 function() {
378 // Tests parseAndShowNotificationCards function for the case when the
379 // extension has 2 groups, and the server sends update with 2 groups, one
380 // of which is new, and another one matches a stored group. The client
381 // has to delete the group that didn't receive an update, keep the
382 // existing group that received an update, and add a new stored group for
383 // the new group from the server.
384
385 // Setup and expectations.
386 var serverResponse = {
387 groups: {
388 GROUP1: {},
389 GROUP2: {}
390 }
391 };
392
393 var storedGroups = {
394 GROUP2: {
395 cards: ['c2'],
396 cardsTimestamp: 239,
397 nextPollTime: 10000,
398 rank: 1
399 },
400 GROUP3: {
401 cards: ['c3'],
402 cardsTimestamp: 240,
403 nextPollTime: 10001,
404 rank: 2
405 }
406 };
407
408 var expectedUpdatedGroups = {
409 GROUP1: {
410 cards: []
411 },
412 GROUP2: {
413 cards: ['c2'],
414 cardsTimestamp: 239,
415 nextPollTime: 10000,
416 rank: 1
417 }
418 };
419
420 this.makeAndRegisterMockGlobals(
421 ['scheduleNextPoll', 'mergeAndShowNotificationCards', 'recordEvent']);
422
423 this.makeAndRegisterMockApis([
424 'chrome.storage.local.set',
425 'instrumented.storage.local.get'
426 ]);
427
428 var storageGetSavedArgs = new SaveMockArguments();
429 this.mockApis.expects(once()).
430 instrumented_storage_local_get(
431 storageGetSavedArgs.match(eq('notificationGroups')),
432 storageGetSavedArgs.match(ANYTHING)).
433 will(invokeCallback(
434 storageGetSavedArgs, 1, {notificationGroups: storedGroups}));
435
436 this.mockGlobals.expects(once()).
437 scheduleNextPoll(eqJSON(expectedUpdatedGroups), true);
438
439 this.mockApis.expects(once()).
440 chrome_storage_local_set(
441 eqJSON({notificationGroups: expectedUpdatedGroups}));
442
443 this.mockGlobals.expects(once()).
444 mergeAndShowNotificationCards(
445 eqJSON(expectedUpdatedGroups), ANYTHING);
446
447 this.mockGlobals.expects(once()).
448 recordEvent(GoogleNowEvent.CARDS_PARSE_SUCCESS);
449
450 // Invoking the tested function.
451 parseAndShowNotificationCards(JSON.stringify(serverResponse));
452 });
453
454 /** 54 /**
455 * Mocks global functions and APIs that initialize() depends upon. 55 * Mocks global functions and APIs that initialize() depends upon.
456 * @param {Test} fixture Test fixture. 56 * @param {Test} fixture Test fixture.
457 */ 57 */
458 function mockInitializeDependencies(fixture) { 58 function mockInitializeDependencies(fixture) {
459 fixture.makeAndRegisterMockGlobals([ 59 fixture.makeAndRegisterMockGlobals([
460 'recordEvent', 60 'recordEvent',
461 'setBackgroundEnable', 61 'setBackgroundEnable',
462 'startPollingCards' 62 'startPollingCards'
463 ]); 63 ]);
(...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after
870 chromeTabsCreateSavedArgs.match(eqJSON({url: testActionUrl})), 470 chromeTabsCreateSavedArgs.match(eqJSON({url: testActionUrl})),
871 chromeTabsCreateSavedArgs.match(ANYTHING)). 471 chromeTabsCreateSavedArgs.match(ANYTHING)).
872 will(invokeCallback(chromeTabsCreateSavedArgs, 1, testCreatedTab)); 472 will(invokeCallback(chromeTabsCreateSavedArgs, 1, testCreatedTab));
873 this.mockApis.expects(once()).chrome_windows_create( 473 this.mockApis.expects(once()).chrome_windows_create(
874 eqJSON({url: testActionUrl, focused: true})); 474 eqJSON({url: testActionUrl, focused: true}));
875 475
876 // Invoking the tested function. 476 // Invoking the tested function.
877 onNotificationClicked( 477 onNotificationClicked(
878 testNotificationId, this.mockLocalFunctions.functions().selector); 478 testNotificationId, this.mockLocalFunctions.functions().selector);
879 }); 479 });
OLDNEW
« no previous file with comments | « chrome/browser/resources/google_now/background.js ('k') | chrome/browser/resources/google_now/cards.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698