blob: 50375c488c0ec55e4863f00b9c2682c2e453f085 [file] [log] [blame]
// Copyright 2013 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.
/**
* Test fixture for cards.js.
* @constructor
* @extends {testing.Test}
*/
function GoogleNowCardsUnitTest () {
testing.Test.call(this);
}
GoogleNowCardsUnitTest.prototype = {
__proto__: testing.Test.prototype,
/** @override */
extraLibraries: [
'cards.js'
]
};
var testCardId = 'TEST CARD ID';
var testNotification = {testNotificationField: 'TEST NOTIFICATION VALUE'};
var expectedShowAlarmId = 'card-show-TEST CARD ID';
var expectedHideAlarmId = 'card-hide-TEST CARD ID';
var testActionUrls = {testField: 'TEST VALUE'};
var testDismissal = {testDismissalField: 'TEST DISMISSAL VALUE'};
function setUpCardManagerTest(fixture) {
fixture.makeAndRegisterMockApis([
'chrome.alarms.clear',
'chrome.alarms.create',
'chrome.notifications.clear',
'instrumented.alarms.onAlarm.addListener',
'instrumented.notifications.create',
'instrumented.notifications.update',
'instrumented.storage.local.get'
]);
chrome.runtime = {}; // No error.
var onAlarmSavedArgs = new SaveMockArguments();
fixture.mockApis.expects(once()).
instrumented_alarms_onAlarm_addListener(
onAlarmSavedArgs.match(ANYTHING));
var cardSet = buildCardSet();
Mock4JS.verifyAllMocks();
Date.now = function() { return 300000; };
var test = {
cardSet: cardSet,
alarmCallback: onAlarmSavedArgs.arguments [0]
};
return test;
}
TEST_F('GoogleNowCardsUnitTest', 'BuildCardManager', function() {
// Tests that buildCardSet() call completes with no problems.
var test = setUpCardManagerTest(this);
assertEquals('object', typeof test.cardSet);
assertEquals('function', typeof test.alarmCallback);
});
TEST_F('GoogleNowCardsUnitTest', 'CreateCard', function() {
// Creates a new card with no trigger.
// Setup and expectations.
var test = setUpCardManagerTest(this);
this.mockApis.expects(once()).
chrome_alarms_clear(expectedHideAlarmId);
this.mockApis.expects(once()).
chrome_alarms_clear(expectedShowAlarmId);
var chromeNotificationsCreateSavedArgs = new SaveMockArguments();
this.mockApis.expects(once()).
instrumented_notifications_create(
chromeNotificationsCreateSavedArgs.match(eq(testCardId)),
chromeNotificationsCreateSavedArgs.match(eqJSON(testNotification)),
chromeNotificationsCreateSavedArgs.match(ANYTHING)).
will(invokeCallback(chromeNotificationsCreateSavedArgs, 2, testCardId));
// Call tested method.
var notificationData = test.cardSet.update({
notificationId: testCardId,
notification: testNotification,
actionUrls: testActionUrls,
dismissal: testDismissal,
version: 0});
// Check the return value.
assertEquals(
JSON.stringify({
actionUrls: testActionUrls,
cardCreateInfo: {
notification: testNotification,
timeHide: undefined,
version: 0
},
dismissalParameters: testDismissal
}),
JSON.stringify(notificationData));
});
TEST_F('GoogleNowCardsUnitTest', 'CreateCardEmptyTrigger', function() {
// Creates a new card with empty trigger.
// Setup and expectations.
var test = setUpCardManagerTest(this);
this.mockApis.expects(once()).
chrome_alarms_clear(expectedHideAlarmId);
this.mockApis.expects(once()).
chrome_alarms_clear(expectedShowAlarmId);
this.mockApis.expects(once()).
instrumented_notifications_create(
testCardId, eqJSON(testNotification), ANYTHING);
// Call tested method.
var notificationData = test.cardSet.update({
notificationId: testCardId,
notification: testNotification,
actionUrls: testActionUrls,
dismissal: testDismissal,
version: 0,
trigger: {}});
// Check the return value.
assertEquals(
JSON.stringify({
actionUrls: testActionUrls,
cardCreateInfo: {
notification: testNotification,
timeHide: undefined,
version: 0
},
dismissalParameters: testDismissal
}),
JSON.stringify(notificationData));
});
TEST_F('GoogleNowCardsUnitTest', 'CreateCardHideTime', function() {
// Creates a new card with trigger specifying hide time.
// Setup and expectations.
var test = setUpCardManagerTest(this);
this.mockApis.expects(once()).
chrome_alarms_clear(expectedHideAlarmId);
this.mockApis.expects(once()).
chrome_alarms_clear(expectedShowAlarmId);
var chromeNotificationsCreateSavedArgs = new SaveMockArguments();
this.mockApis.expects(once()).
instrumented_notifications_create(
chromeNotificationsCreateSavedArgs.match(eq(testCardId)),
chromeNotificationsCreateSavedArgs.match(eqJSON(testNotification)),
chromeNotificationsCreateSavedArgs.match(ANYTHING)).
will(invokeCallback(chromeNotificationsCreateSavedArgs, 2, testCardId));
this.mockApis.expects(once()).
chrome_alarms_create(expectedHideAlarmId, eqJSON({when: 1313000}));
// Call tested method.
var notificationData = test.cardSet.update({
notificationId: testCardId,
notification: testNotification,
actionUrls: testActionUrls,
dismissal: testDismissal,
version: 0,
trigger: {hideTimeSec: 1013}});
// Check the return value.
assertEquals(
JSON.stringify({
actionUrls: testActionUrls,
cardCreateInfo: {
notification: testNotification,
timeHide: 1313000,
version: 0
},
dismissalParameters: testDismissal
}),
JSON.stringify(notificationData));
});
TEST_F('GoogleNowCardsUnitTest', 'UpdateCardSameVersion', function() {
// Updates a card with another card with same version.
// Setup and expectations.
var test = setUpCardManagerTest(this);
this.mockApis.expects(once()).
chrome_alarms_clear(expectedHideAlarmId);
this.mockApis.expects(once()).
chrome_alarms_clear(expectedShowAlarmId);
var chromeNotificationsCreateSavedArgs = new SaveMockArguments();
this.mockApis.expects(once()).
instrumented_notifications_update(
chromeNotificationsCreateSavedArgs.match(eq(testCardId)),
chromeNotificationsCreateSavedArgs.match(eqJSON(testNotification)),
chromeNotificationsCreateSavedArgs.match(ANYTHING)).
will(invokeCallback(chromeNotificationsCreateSavedArgs, 2, true));
// Call tested method.
var notificationData = test.cardSet.update({
notificationId: testCardId,
notification: testNotification,
actionUrls: testActionUrls,
dismissal: testDismissal,
version: 0},
0);
// Check the return value.
assertEquals(
JSON.stringify({
actionUrls: testActionUrls,
cardCreateInfo: {
notification: testNotification,
version: 0,
previousVersion: 0
},
dismissalParameters: testDismissal
}),
JSON.stringify(notificationData));
});
TEST_F('GoogleNowCardsUnitTest', 'UpdateCardSameVersionHideTime', function() {
// Updates a card with another card with same version and specifying hide
// time.
// Setup and expectations.
var test = setUpCardManagerTest(this);
this.mockApis.expects(once()).
chrome_alarms_clear(expectedHideAlarmId);
this.mockApis.expects(once()).
chrome_alarms_clear(expectedShowAlarmId);
var chromeNotificationsCreateSavedArgs = new SaveMockArguments();
this.mockApis.expects(once()).
instrumented_notifications_update(
chromeNotificationsCreateSavedArgs.match(eq(testCardId)),
chromeNotificationsCreateSavedArgs.match(eqJSON(testNotification)),
chromeNotificationsCreateSavedArgs.match(ANYTHING)).
will(invokeCallback(chromeNotificationsCreateSavedArgs, 2, testCardId));
this.mockApis.expects(once()).
chrome_alarms_create(expectedHideAlarmId, eqJSON({when: 1313000}));
// Call tested method.
test.cardSet.update({
notificationId: testCardId,
notification: testNotification,
actionUrls: testActionUrls,
dismissal: testDismissal,
version: 0,
trigger: {hideTimeSec: 1013}},
0);
});
TEST_F('GoogleNowCardsUnitTest', 'UpdateCardDifferentVersion', function() {
// Updates a card with another card with different version.
// Setup and expectations.
var test = setUpCardManagerTest(this);
this.mockApis.expects(once()).
chrome_alarms_clear(expectedHideAlarmId);
this.mockApis.expects(once()).
chrome_alarms_clear(expectedShowAlarmId);
this.mockApis.expects(once()).
instrumented_notifications_create(
testCardId, eqJSON(testNotification), ANYTHING);
// Call tested method.
test.cardSet.update({
notificationId: testCardId,
notification: testNotification,
actionUrls: testActionUrls,
dismissal: testDismissal,
version: 0},
1);
});
TEST_F('GoogleNowCardsUnitTest', 'CreateCardTriggerShowNow', function() {
// Creates a new card with trigger that requires showing the card immediately.
// Setup and expectations.
var test = setUpCardManagerTest(this);
this.mockApis.expects(once()).
chrome_alarms_clear(expectedHideAlarmId);
this.mockApis.expects(once()).
chrome_alarms_clear(expectedShowAlarmId);
this.mockApis.expects(once()).
instrumented_notifications_create(
testCardId, eqJSON(testNotification), ANYTHING);
// Call tested method.
test.cardSet.update({
notificationId: testCardId,
notification: testNotification,
actionUrls: testActionUrls,
dismissal: testDismissal,
version: 0,
trigger: {showTimeSec: 0}});
});
TEST_F('GoogleNowCardsUnitTest', 'CreateCardTriggerShowLater', function() {
// Creates a new card with trigger that requires showing the card later.
// We are supposed to schedule an alarm to show the notification later.
// Setup and expectations.
var test = setUpCardManagerTest(this);
this.mockApis.expects(once()).
chrome_alarms_clear(expectedHideAlarmId);
this.mockApis.expects(once()).
chrome_alarms_create(expectedShowAlarmId, eqJSON({when: 539000}));
// Call tested method.
test.cardSet.update({
notificationId: testCardId,
notification: testNotification,
actionUrls: testActionUrls,
dismissal: testDismissal,
version: 0,
trigger: {showTimeSec: 239}});
});
TEST_F('GoogleNowCardsUnitTest', 'ClearCard', function() {
// Clears a card.
// Setup and expectations.
var test = setUpCardManagerTest(this);
this.mockApis.expects(once()).
chrome_notifications_clear(testCardId, ANYTHING);
this.mockApis.expects(once()).
chrome_alarms_clear(expectedShowAlarmId);
this.mockApis.expects(once()).
chrome_alarms_clear(expectedHideAlarmId);
// Call tested method.
test.cardSet.clear(testCardId);
});
TEST_F('GoogleNowCardsUnitTest', 'onAlarmUnrecognized', function() {
// Tests onAlarm does nothing on an unrelated alarm.
var test = setUpCardManagerTest(this);
// Call tested method.
test.alarmCallback({name: 'unrelated'});
});
TEST_F('GoogleNowCardsUnitTest', 'onAlarmShowNoData', function() {
// Tests onAlarm for the 'show' alarm when there is no data for the card.
var test = setUpCardManagerTest(this);
var storageGetSavedArgs = new SaveMockArguments();
this.mockApis.expects(once()).
instrumented_storage_local_get(
storageGetSavedArgs.match(eq('notificationsData')),
storageGetSavedArgs.match(ANYTHING)).
will(invokeCallback(storageGetSavedArgs, 1, {}));
// Call tested method.
test.alarmCallback({name: expectedShowAlarmId});
});
TEST_F('GoogleNowCardsUnitTest', 'onAlarmShowHasDataCreate', function() {
// Tests onAlarm for the 'show' alarm when there is data for the card. The
// notification will be created because there is no previous version.
var test = setUpCardManagerTest(this);
var storageGetSavedArgs = new SaveMockArguments();
this.mockApis.expects(once()).
instrumented_storage_local_get(
storageGetSavedArgs.match(eq('notificationsData')),
storageGetSavedArgs.match(ANYTHING)).
will(invokeCallback(
storageGetSavedArgs,
1,
{
notificationsData: {
'TEST CARD ID': {
actionUrls: testActionUrls,
cardCreateInfo: {
notification: testNotification,
timeHide: 1313000,
version: 0}}}}));
var chromeNotificationsCreateSavedArgs = new SaveMockArguments();
this.mockApis.expects(once()).
instrumented_notifications_create(
chromeNotificationsCreateSavedArgs.match(eq(testCardId)),
chromeNotificationsCreateSavedArgs.match(eqJSON(testNotification)),
chromeNotificationsCreateSavedArgs.match(ANYTHING)).
will(invokeCallback(chromeNotificationsCreateSavedArgs, 2, testCardId));
this.mockApis.expects(once()).
chrome_alarms_create(expectedHideAlarmId, eqJSON({when: 1313000}));
// Call tested method.
test.alarmCallback({name: expectedShowAlarmId});
});
TEST_F('GoogleNowCardsUnitTest', 'onAlarmShowHasDataUpdate', function() {
// Tests onAlarm for the 'show' alarm when there is data for the card. The
// notification will be updated because previous version is same as current.
var test = setUpCardManagerTest(this);
var storageGetSavedArgs = new SaveMockArguments();
this.mockApis.expects(once()).
instrumented_storage_local_get(
storageGetSavedArgs.match(eq('notificationsData')),
storageGetSavedArgs.match(ANYTHING)).
will(invokeCallback(
storageGetSavedArgs,
1,
{
notificationsData: {
'TEST CARD ID': {
actionUrls: testActionUrls,
cardCreateInfo: {
notification: testNotification,
timeHide: 1313000,
version: 0,
previousVersion:0}}}}));
var chromeNotificationsCreateSavedArgs = new SaveMockArguments();
this.mockApis.expects(once()).
instrumented_notifications_update(
testCardId, eqJSON(testNotification), ANYTHING);
// Call tested method.
test.alarmCallback({name: expectedShowAlarmId});
});
TEST_F('GoogleNowCardsUnitTest', 'onAlarmHide', function() {
// Tests onAlarm for the 'hide' alarm.
var test = setUpCardManagerTest(this);
this.mockApis.expects(once()).
chrome_notifications_clear(testCardId, ANYTHING);
// Call tested method.
test.alarmCallback({name: expectedHideAlarmId});
});