OLD | NEW |
(Empty) | |
| 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 |
| 3 // found in the LICENSE file. |
| 4 |
| 5 /** |
| 6 * Test fixture for cards.js. |
| 7 * @constructor |
| 8 * @extends {testing.Test} |
| 9 */ |
| 10 function GoogleNowCardsUnitTest () { |
| 11 testing.Test.call(this); |
| 12 } |
| 13 |
| 14 GoogleNowCardsUnitTest.prototype = { |
| 15 __proto__: testing.Test.prototype, |
| 16 |
| 17 /** @override */ |
| 18 extraLibraries: [ |
| 19 'cards.js' |
| 20 ] |
| 21 }; |
| 22 |
| 23 var testCardId = 'TEST CARD ID'; |
| 24 var testNotification = {testNotificationField: 'TEST NOTIFICATION VALUE'}; |
| 25 var expectedShowAlarmId = 'card-show-TEST CARD ID'; |
| 26 var expectedHideAlarmId = 'card-hide-TEST CARD ID'; |
| 27 var testActionUrls = {testField: 'TEST VALUE'}; |
| 28 var testDismissal = {testDismissalField: 'TEST DISMISSAL VALUE'}; |
| 29 |
| 30 function setUpCardManagerTest(fixture) { |
| 31 fixture.makeAndRegisterMockApis([ |
| 32 'chrome.alarms.onAlarm.addListener', |
| 33 'chrome.alarms.clear', |
| 34 'chrome.alarms.create', |
| 35 'chrome.notifications.clear', |
| 36 'chrome.notifications.create', |
| 37 'chrome.notifications.update', |
| 38 'storage.get' |
| 39 ]); |
| 40 |
| 41 chrome.runtime = {}; // No error. |
| 42 |
| 43 var onAlarmSavedArgs = new SaveMockArguments(); |
| 44 fixture.mockApis.expects(once()). |
| 45 chrome_alarms_onAlarm_addListener( |
| 46 onAlarmSavedArgs.match(ANYTHING)); |
| 47 |
| 48 var cardSet = buildCardSet(); |
| 49 |
| 50 Mock4JS.verifyAllMocks(); |
| 51 |
| 52 Date.now = function() { return 300000; }; |
| 53 |
| 54 var test = { |
| 55 cardSet: cardSet, |
| 56 alarmCallback: onAlarmSavedArgs.arguments [0] |
| 57 }; |
| 58 |
| 59 return test; |
| 60 } |
| 61 |
| 62 TEST_F('GoogleNowCardsUnitTest', 'BuildCardManager', function() { |
| 63 // Tests that buildCardSet() call completes with no problems. |
| 64 var test = setUpCardManagerTest(this); |
| 65 |
| 66 assertEquals('object', typeof test.cardSet); |
| 67 assertEquals('function', typeof test.alarmCallback); |
| 68 }); |
| 69 |
| 70 TEST_F('GoogleNowCardsUnitTest', 'CreateCard', function() { |
| 71 // Creates a new card with no trigger. |
| 72 |
| 73 // Setup and expectations. |
| 74 var test = setUpCardManagerTest(this); |
| 75 this.mockApis.expects(once()). |
| 76 chrome_alarms_clear(expectedHideAlarmId); |
| 77 this.mockApis.expects(once()). |
| 78 chrome_alarms_clear(expectedShowAlarmId); |
| 79 var chromeNotificationsCreateSavedArgs = new SaveMockArguments(); |
| 80 this.mockApis.expects(once()). |
| 81 chrome_notifications_create( |
| 82 chromeNotificationsCreateSavedArgs.match(eq(testCardId)), |
| 83 chromeNotificationsCreateSavedArgs.match(eqJSON(testNotification)), |
| 84 chromeNotificationsCreateSavedArgs.match(ANYTHING)). |
| 85 will(invokeCallback(chromeNotificationsCreateSavedArgs, 2, testCardId)); |
| 86 |
| 87 // Call tested method. |
| 88 var notificationData = test.cardSet.update({ |
| 89 notificationId: testCardId, |
| 90 notification: testNotification, |
| 91 actionUrls: testActionUrls, |
| 92 dismissal: testDismissal, |
| 93 version: 0}); |
| 94 |
| 95 // Check the return value. |
| 96 assertEquals( |
| 97 JSON.stringify({ |
| 98 actionUrls: testActionUrls, |
| 99 cardCreateInfo: { |
| 100 notification: testNotification, |
| 101 timeHide: undefined, |
| 102 version: 0 |
| 103 }, |
| 104 dismissalParameters: testDismissal |
| 105 }), |
| 106 JSON.stringify(notificationData)); |
| 107 }); |
| 108 |
| 109 TEST_F('GoogleNowCardsUnitTest', 'CreateCardEmptyTrigger', function() { |
| 110 // Creates a new card with empty trigger. |
| 111 |
| 112 // Setup and expectations. |
| 113 var test = setUpCardManagerTest(this); |
| 114 this.mockApis.expects(once()). |
| 115 chrome_alarms_clear(expectedHideAlarmId); |
| 116 this.mockApis.expects(once()). |
| 117 chrome_alarms_clear(expectedShowAlarmId); |
| 118 this.mockApis.expects(once()). |
| 119 chrome_notifications_create( |
| 120 testCardId, eqJSON(testNotification), ANYTHING); |
| 121 |
| 122 // Call tested method. |
| 123 var notificationData = test.cardSet.update({ |
| 124 notificationId: testCardId, |
| 125 notification: testNotification, |
| 126 actionUrls: testActionUrls, |
| 127 dismissal: testDismissal, |
| 128 version: 0, |
| 129 trigger: {}}); |
| 130 |
| 131 // Check the return value. |
| 132 assertEquals( |
| 133 JSON.stringify({ |
| 134 actionUrls: testActionUrls, |
| 135 cardCreateInfo: { |
| 136 notification: testNotification, |
| 137 timeHide: undefined, |
| 138 version: 0 |
| 139 }, |
| 140 dismissalParameters: testDismissal |
| 141 }), |
| 142 JSON.stringify(notificationData)); |
| 143 }); |
| 144 |
| 145 TEST_F('GoogleNowCardsUnitTest', 'CreateCardHideTime', function() { |
| 146 // Creates a new card with trigger specifying hide time. |
| 147 |
| 148 // Setup and expectations. |
| 149 var test = setUpCardManagerTest(this); |
| 150 this.mockApis.expects(once()). |
| 151 chrome_alarms_clear(expectedHideAlarmId); |
| 152 this.mockApis.expects(once()). |
| 153 chrome_alarms_clear(expectedShowAlarmId); |
| 154 var chromeNotificationsCreateSavedArgs = new SaveMockArguments(); |
| 155 this.mockApis.expects(once()). |
| 156 chrome_notifications_create( |
| 157 chromeNotificationsCreateSavedArgs.match(eq(testCardId)), |
| 158 chromeNotificationsCreateSavedArgs.match(eqJSON(testNotification)), |
| 159 chromeNotificationsCreateSavedArgs.match(ANYTHING)). |
| 160 will(invokeCallback(chromeNotificationsCreateSavedArgs, 2, testCardId)); |
| 161 this.mockApis.expects(once()). |
| 162 chrome_alarms_create(expectedHideAlarmId, eqJSON({when: 1313000})); |
| 163 |
| 164 // Call tested method. |
| 165 var notificationData = test.cardSet.update({ |
| 166 notificationId: testCardId, |
| 167 notification: testNotification, |
| 168 actionUrls: testActionUrls, |
| 169 dismissal: testDismissal, |
| 170 version: 0, |
| 171 trigger: {hideTimeSec: 1013}}); |
| 172 |
| 173 // Check the return value. |
| 174 assertEquals( |
| 175 JSON.stringify({ |
| 176 actionUrls: testActionUrls, |
| 177 cardCreateInfo: { |
| 178 notification: testNotification, |
| 179 timeHide: 1313000, |
| 180 version: 0 |
| 181 }, |
| 182 dismissalParameters: testDismissal |
| 183 }), |
| 184 JSON.stringify(notificationData)); |
| 185 }); |
| 186 |
| 187 TEST_F('GoogleNowCardsUnitTest', 'UpdateCardSameVersion', function() { |
| 188 // Updates a card with another card with same version. |
| 189 |
| 190 // Setup and expectations. |
| 191 var test = setUpCardManagerTest(this); |
| 192 this.mockApis.expects(once()). |
| 193 chrome_alarms_clear(expectedHideAlarmId); |
| 194 this.mockApis.expects(once()). |
| 195 chrome_alarms_clear(expectedShowAlarmId); |
| 196 var chromeNotificationsCreateSavedArgs = new SaveMockArguments(); |
| 197 this.mockApis.expects(once()). |
| 198 chrome_notifications_update( |
| 199 chromeNotificationsCreateSavedArgs.match(eq(testCardId)), |
| 200 chromeNotificationsCreateSavedArgs.match(eqJSON(testNotification)), |
| 201 chromeNotificationsCreateSavedArgs.match(ANYTHING)). |
| 202 will(invokeCallback(chromeNotificationsCreateSavedArgs, 2, true)); |
| 203 |
| 204 // Call tested method. |
| 205 var notificationData = test.cardSet.update({ |
| 206 notificationId: testCardId, |
| 207 notification: testNotification, |
| 208 actionUrls: testActionUrls, |
| 209 dismissal: testDismissal, |
| 210 version: 0}, |
| 211 0); |
| 212 |
| 213 // Check the return value. |
| 214 assertEquals( |
| 215 JSON.stringify({ |
| 216 actionUrls: testActionUrls, |
| 217 cardCreateInfo: { |
| 218 notification: testNotification, |
| 219 version: 0, |
| 220 previousVersion: 0 |
| 221 }, |
| 222 dismissalParameters: testDismissal |
| 223 }), |
| 224 JSON.stringify(notificationData)); |
| 225 }); |
| 226 |
| 227 TEST_F('GoogleNowCardsUnitTest', 'UpdateCardSameVersionHideTime', function() { |
| 228 // Updates a card with another card with same version and specifying hide |
| 229 // time. |
| 230 |
| 231 // Setup and expectations. |
| 232 var test = setUpCardManagerTest(this); |
| 233 this.mockApis.expects(once()). |
| 234 chrome_alarms_clear(expectedHideAlarmId); |
| 235 this.mockApis.expects(once()). |
| 236 chrome_alarms_clear(expectedShowAlarmId); |
| 237 var chromeNotificationsCreateSavedArgs = new SaveMockArguments(); |
| 238 this.mockApis.expects(once()). |
| 239 chrome_notifications_update( |
| 240 chromeNotificationsCreateSavedArgs.match(eq(testCardId)), |
| 241 chromeNotificationsCreateSavedArgs.match(eqJSON(testNotification)), |
| 242 chromeNotificationsCreateSavedArgs.match(ANYTHING)). |
| 243 will(invokeCallback(chromeNotificationsCreateSavedArgs, 2, testCardId)); |
| 244 this.mockApis.expects(once()). |
| 245 chrome_alarms_create(expectedHideAlarmId, eqJSON({when: 1313000})); |
| 246 |
| 247 // Call tested method. |
| 248 test.cardSet.update({ |
| 249 notificationId: testCardId, |
| 250 notification: testNotification, |
| 251 actionUrls: testActionUrls, |
| 252 dismissal: testDismissal, |
| 253 version: 0, |
| 254 trigger: {hideTimeSec: 1013}}, |
| 255 0); |
| 256 }); |
| 257 |
| 258 TEST_F('GoogleNowCardsUnitTest', 'UpdateCardDifferentVersion', function() { |
| 259 // Updates a card with another card with different version. |
| 260 |
| 261 // Setup and expectations. |
| 262 var test = setUpCardManagerTest(this); |
| 263 this.mockApis.expects(once()). |
| 264 chrome_alarms_clear(expectedHideAlarmId); |
| 265 this.mockApis.expects(once()). |
| 266 chrome_alarms_clear(expectedShowAlarmId); |
| 267 this.mockApis.expects(once()). |
| 268 chrome_notifications_create( |
| 269 testCardId, eqJSON(testNotification), ANYTHING); |
| 270 |
| 271 // Call tested method. |
| 272 test.cardSet.update({ |
| 273 notificationId: testCardId, |
| 274 notification: testNotification, |
| 275 actionUrls: testActionUrls, |
| 276 dismissal: testDismissal, |
| 277 version: 0}, |
| 278 1); |
| 279 }); |
| 280 |
| 281 TEST_F('GoogleNowCardsUnitTest', 'CreateCardTriggerShowNow', function() { |
| 282 // Creates a new card with trigger that requires showing the card immediately. |
| 283 |
| 284 // Setup and expectations. |
| 285 var test = setUpCardManagerTest(this); |
| 286 this.mockApis.expects(once()). |
| 287 chrome_alarms_clear(expectedHideAlarmId); |
| 288 this.mockApis.expects(once()). |
| 289 chrome_alarms_clear(expectedShowAlarmId); |
| 290 this.mockApis.expects(once()). |
| 291 chrome_notifications_create( |
| 292 testCardId, eqJSON(testNotification), ANYTHING); |
| 293 |
| 294 // Call tested method. |
| 295 test.cardSet.update({ |
| 296 notificationId: testCardId, |
| 297 notification: testNotification, |
| 298 actionUrls: testActionUrls, |
| 299 dismissal: testDismissal, |
| 300 version: 0, |
| 301 trigger: {showTimeSec: 0}}); |
| 302 }); |
| 303 |
| 304 TEST_F('GoogleNowCardsUnitTest', 'CreateCardTriggerShowLater', function() { |
| 305 // Creates a new card with trigger that requires showing the card later. |
| 306 // We are supposed to schedule an alarm to show the notification later. |
| 307 |
| 308 // Setup and expectations. |
| 309 var test = setUpCardManagerTest(this); |
| 310 this.mockApis.expects(once()). |
| 311 chrome_alarms_clear(expectedHideAlarmId); |
| 312 this.mockApis.expects(once()). |
| 313 chrome_alarms_create(expectedShowAlarmId, eqJSON({when: 539000})); |
| 314 |
| 315 // Call tested method. |
| 316 test.cardSet.update({ |
| 317 notificationId: testCardId, |
| 318 notification: testNotification, |
| 319 actionUrls: testActionUrls, |
| 320 dismissal: testDismissal, |
| 321 version: 0, |
| 322 trigger: {showTimeSec: 239}}); |
| 323 }); |
| 324 |
| 325 TEST_F('GoogleNowCardsUnitTest', 'ClearCard', function() { |
| 326 // Clears a card. |
| 327 |
| 328 // Setup and expectations. |
| 329 var test = setUpCardManagerTest(this); |
| 330 this.mockApis.expects(once()). |
| 331 chrome_notifications_clear(testCardId, ANYTHING); |
| 332 this.mockApis.expects(once()). |
| 333 chrome_alarms_clear(expectedShowAlarmId); |
| 334 this.mockApis.expects(once()). |
| 335 chrome_alarms_clear(expectedHideAlarmId); |
| 336 |
| 337 // Call tested method. |
| 338 test.cardSet.clear(testCardId); |
| 339 }); |
| 340 |
| 341 TEST_F('GoogleNowCardsUnitTest', 'onAlarmUnrecognized', function() { |
| 342 // Tests onAlarm does nothing on an unrelated alarm. |
| 343 var test = setUpCardManagerTest(this); |
| 344 |
| 345 // Call tested method. |
| 346 test.alarmCallback({name: 'unrelated'}); |
| 347 }); |
| 348 |
| 349 TEST_F('GoogleNowCardsUnitTest', 'onAlarmShowNoData', function() { |
| 350 // Tests onAlarm for the 'show' alarm when there is no data for the card. |
| 351 var test = setUpCardManagerTest(this); |
| 352 var storageGetSavedArgs = new SaveMockArguments(); |
| 353 this.mockApis.expects(once()). |
| 354 storage_get( |
| 355 storageGetSavedArgs.match(eq('notificationsData')), |
| 356 storageGetSavedArgs.match(ANYTHING)). |
| 357 will(invokeCallback(storageGetSavedArgs, 1, {})); |
| 358 |
| 359 // Call tested method. |
| 360 test.alarmCallback({name: expectedShowAlarmId}); |
| 361 }); |
| 362 |
| 363 TEST_F('GoogleNowCardsUnitTest', 'onAlarmShowHasDataCreate', function() { |
| 364 // Tests onAlarm for the 'show' alarm when there is data for the card. The |
| 365 // notification will be created because there is no previous version. |
| 366 var test = setUpCardManagerTest(this); |
| 367 var storageGetSavedArgs = new SaveMockArguments(); |
| 368 this.mockApis.expects(once()). |
| 369 storage_get( |
| 370 storageGetSavedArgs.match(eq('notificationsData')), |
| 371 storageGetSavedArgs.match(ANYTHING)). |
| 372 will(invokeCallback( |
| 373 storageGetSavedArgs, |
| 374 1, |
| 375 { |
| 376 notificationsData: { |
| 377 'TEST CARD ID': { |
| 378 actionUrls: testActionUrls, |
| 379 cardCreateInfo: { |
| 380 notification: testNotification, |
| 381 timeHide: 1313000, |
| 382 version: 0}}}})); |
| 383 var chromeNotificationsCreateSavedArgs = new SaveMockArguments(); |
| 384 this.mockApis.expects(once()). |
| 385 chrome_notifications_create( |
| 386 chromeNotificationsCreateSavedArgs.match(eq(testCardId)), |
| 387 chromeNotificationsCreateSavedArgs.match(eqJSON(testNotification)), |
| 388 chromeNotificationsCreateSavedArgs.match(ANYTHING)). |
| 389 will(invokeCallback(chromeNotificationsCreateSavedArgs, 2, testCardId)); |
| 390 this.mockApis.expects(once()). |
| 391 chrome_alarms_create(expectedHideAlarmId, eqJSON({when: 1313000})); |
| 392 |
| 393 // Call tested method. |
| 394 test.alarmCallback({name: expectedShowAlarmId}); |
| 395 }); |
| 396 |
| 397 TEST_F('GoogleNowCardsUnitTest', 'onAlarmShowHasDataUpdate', function() { |
| 398 // Tests onAlarm for the 'show' alarm when there is data for the card. The |
| 399 // notification will be updated because previous version is same as current. |
| 400 var test = setUpCardManagerTest(this); |
| 401 var storageGetSavedArgs = new SaveMockArguments(); |
| 402 this.mockApis.expects(once()). |
| 403 storage_get( |
| 404 storageGetSavedArgs.match(eq('notificationsData')), |
| 405 storageGetSavedArgs.match(ANYTHING)). |
| 406 will(invokeCallback( |
| 407 storageGetSavedArgs, |
| 408 1, |
| 409 { |
| 410 notificationsData: { |
| 411 'TEST CARD ID': { |
| 412 actionUrls: testActionUrls, |
| 413 cardCreateInfo: { |
| 414 notification: testNotification, |
| 415 timeHide: 1313000, |
| 416 version: 0, |
| 417 previousVersion:0}}}})); |
| 418 var chromeNotificationsCreateSavedArgs = new SaveMockArguments(); |
| 419 this.mockApis.expects(once()). |
| 420 chrome_notifications_update( |
| 421 testCardId, eqJSON(testNotification), ANYTHING); |
| 422 |
| 423 // Call tested method. |
| 424 test.alarmCallback({name: expectedShowAlarmId}); |
| 425 }); |
| 426 |
| 427 TEST_F('GoogleNowCardsUnitTest', 'onAlarmHide', function() { |
| 428 // Tests onAlarm for the 'hide' alarm. |
| 429 var test = setUpCardManagerTest(this); |
| 430 this.mockApis.expects(once()). |
| 431 chrome_notifications_clear(testCardId, ANYTHING); |
| 432 |
| 433 // Call tested method. |
| 434 test.alarmCallback({name: expectedHideAlarmId}); |
| 435 }); |
OLD | NEW |