| Index: chrome/browser/resources/google_now/background_unittest.gtestjs
|
| diff --git a/chrome/browser/resources/google_now/background_unittest.gtestjs b/chrome/browser/resources/google_now/background_unittest.gtestjs
|
| index 149c51ca41a0cffb74a206df15e8aa9e1aa4161d..af88014ee99ceab8343ee26d3eeaa941232bebd3 100644
|
| --- a/chrome/browser/resources/google_now/background_unittest.gtestjs
|
| +++ b/chrome/browser/resources/google_now/background_unittest.gtestjs
|
| @@ -40,3 +40,339 @@ TEST_F('GoogleNowBackgroundUnitTest', 'AreTasksConflicting', function() {
|
| testTaskPair(RETRY_DISMISS_TASK_NAME, RETRY_DISMISS_TASK_NAME, true);
|
| });
|
|
|
| +/**
|
| + * Mocks global functions and APIs that initialize() depends upon.
|
| + * @param {Test} fixture Test fixture.
|
| + */
|
| +function mockInitializeDependencies(fixture) {
|
| + fixture.makeAndRegisterMockGlobals([
|
| + 'recordEvent',
|
| + 'showWelcomeToast',
|
| + 'startPollingCards']);
|
| + fixture.makeAndRegisterMockApis(
|
| + ['storage.get', 'chrome.identity.getAuthToken']);
|
| +}
|
| +
|
| +TEST_F(
|
| + 'GoogleNowBackgroundUnitTest',
|
| + 'Initialize_ToastStateEmpty1',
|
| + function() {
|
| + // Tests the case when toast state is empty and NOTIFICATION_CARDS_URL is
|
| + // not set. In this case, the function should quietly exit after finding
|
| + // out that NOTIFICATION_CARDS_URL is empty.
|
| +
|
| + // Setup and expectations.
|
| + var testToastState = {};
|
| + NOTIFICATION_CARDS_URL = undefined;
|
| +
|
| + mockInitializeDependencies(this);
|
| +
|
| + this.mockGlobals.expects(once()).recordEvent(
|
| + DiagnosticEvent.EXTENSION_START);
|
| + var storageGetSavedArgs = new SaveMockArguments();
|
| + this.mockApis.expects(once()).
|
| + storage_get(
|
| + storageGetSavedArgs.match(eq('toastState')),
|
| + storageGetSavedArgs.match(ANYTHING)).
|
| + will(invokeCallback(storageGetSavedArgs, 1, testToastState));
|
| +
|
| + // Invoking the tested function.
|
| + initialize();
|
| + });
|
| +
|
| +TEST_F(
|
| + 'GoogleNowBackgroundUnitTest',
|
| + 'Initialize_ToastStateEmpty2',
|
| + function() {
|
| + // Tests the case when toast state is empty and NOTIFICATION_CARDS_URL is
|
| + // set, but getAuthToken fails most likely because the user is not signed
|
| + // in. In this case, the function should quietly exit after finding out
|
| + // that getAuthToken fails.
|
| +
|
| + // Setup and expectations.
|
| + var testToastState = {};
|
| + NOTIFICATION_CARDS_URL = 'https://some.server.url.com';
|
| + var testIdentityToken = undefined;
|
| +
|
| + mockInitializeDependencies(this);
|
| +
|
| + this.mockGlobals.expects(once()).recordEvent(
|
| + DiagnosticEvent.EXTENSION_START);
|
| + var storageGetSavedArgs = new SaveMockArguments();
|
| + this.mockApis.expects(once()).
|
| + storage_get(
|
| + storageGetSavedArgs.match(eq('toastState')),
|
| + storageGetSavedArgs.match(ANYTHING)).
|
| + will(invokeCallback(storageGetSavedArgs, 1, testToastState));
|
| + var chromeIdentityGetAuthTokenSavedArgs = new SaveMockArguments();
|
| + this.mockApis.expects(once()).
|
| + chrome_identity_getAuthToken(
|
| + chromeIdentityGetAuthTokenSavedArgs.match(
|
| + eqJSON({interactive: false})),
|
| + chromeIdentityGetAuthTokenSavedArgs.match(ANYTHING)).
|
| + will(invokeCallback(
|
| + chromeIdentityGetAuthTokenSavedArgs, 1, testIdentityToken));
|
| +
|
| + // Invoking the tested function.
|
| + initialize();
|
| + });
|
| +
|
| +TEST_F(
|
| + 'GoogleNowBackgroundUnitTest',
|
| + 'Initialize_ToastStateEmpty3',
|
| + function() {
|
| + // Tests the case when toast state is empty and NOTIFICATION_CARDS_URL is
|
| + // set, and getAuthToken succeeds. In this case, the function should
|
| + // invoke showWelcomeToast().
|
| +
|
| + // Setup and expectations.
|
| + var testToastState = {};
|
| + NOTIFICATION_CARDS_URL = 'https://some.server.url.com';
|
| + var testIdentityToken = 'some identity token';
|
| +
|
| + mockInitializeDependencies(this);
|
| +
|
| + this.mockGlobals.expects(once()).recordEvent(
|
| + DiagnosticEvent.EXTENSION_START);
|
| + var storageGetSavedArgs = new SaveMockArguments();
|
| + this.mockApis.expects(once()).
|
| + storage_get(
|
| + storageGetSavedArgs.match(eq('toastState')),
|
| + storageGetSavedArgs.match(ANYTHING)).
|
| + will(invokeCallback(storageGetSavedArgs, 1, testToastState));
|
| + var chromeIdentityGetAuthTokenSavedArgs = new SaveMockArguments();
|
| + this.mockApis.expects(once()).
|
| + chrome_identity_getAuthToken(
|
| + chromeIdentityGetAuthTokenSavedArgs.match(
|
| + eqJSON({interactive: false})),
|
| + chromeIdentityGetAuthTokenSavedArgs.match(ANYTHING)).
|
| + will(invokeCallback(
|
| + chromeIdentityGetAuthTokenSavedArgs, 1, testIdentityToken));
|
| + this.mockGlobals.expects(once()).showWelcomeToast();
|
| +
|
| + // Invoking the tested function.
|
| + initialize();
|
| + });
|
| +
|
| +TEST_F('GoogleNowBackgroundUnitTest', 'Initialize_ToastStateYes', function() {
|
| + // Tests the case when the user has answered "yes" to the toast in the past.
|
| + // In this case, the function should invoke startPollingCards().
|
| +
|
| + // Setup and expectations.
|
| + var testToastState = {toastState: ToastOptionResponse.CHOSE_YES};
|
| +
|
| + mockInitializeDependencies(this);
|
| +
|
| + this.mockGlobals.expects(once()).recordEvent(DiagnosticEvent.EXTENSION_START);
|
| + var storageGetSavedArgs = new SaveMockArguments();
|
| + this.mockApis.expects(once()).
|
| + storage_get(
|
| + storageGetSavedArgs.match(eq('toastState')),
|
| + storageGetSavedArgs.match(ANYTHING)).
|
| + will(invokeCallback(storageGetSavedArgs, 1, testToastState));
|
| + this.mockGlobals.expects(once()).startPollingCards();
|
| +
|
| + // Invoking the tested function.
|
| + initialize();
|
| +});
|
| +
|
| +TEST_F('GoogleNowBackgroundUnitTest', 'Initialize_ToastStateNo', function() {
|
| + // Tests the case when the user has answered "no" to the toast in the past.
|
| + // In this case, the function should do nothing.
|
| +
|
| + // Setup and expectations.
|
| + var testToastState = {toastState: ToastOptionResponse.CHOSE_NO};
|
| +
|
| + mockInitializeDependencies(this);
|
| +
|
| + this.mockGlobals.expects(once()).recordEvent(DiagnosticEvent.EXTENSION_START);
|
| + var storageGetSavedArgs = new SaveMockArguments();
|
| + this.mockApis.expects(once()).
|
| + storage_get(
|
| + storageGetSavedArgs.match(eq('toastState')),
|
| + storageGetSavedArgs.match(ANYTHING)).
|
| + will(invokeCallback(storageGetSavedArgs, 1, testToastState));
|
| +
|
| + // Invoking the tested function.
|
| + initialize();
|
| +});
|
| +
|
| +/**
|
| + * Mocks global functions and APIs that onNotificationClicked() depends upon.
|
| + * @param {Test} fixture Test fixture.
|
| + */
|
| +function mockOnNotificationClickedDependencies(fixture) {
|
| + fixture.makeAndRegisterMockApis([
|
| + 'storage.get',
|
| + 'chrome.tabs.create',
|
| + 'chrome.windows.create']);
|
| +}
|
| +
|
| +TEST_F(
|
| + 'GoogleNowBackgroundUnitTest',
|
| + 'OnNotificationClicked_NoData',
|
| + function() {
|
| + // Tests the case when there is no data associated with notification id.
|
| + // In this case, the function should do nothing.
|
| +
|
| + // Setup and expectations.
|
| + var testNotificationId = 'TEST_ID';
|
| + var testNotificationData = {};
|
| +
|
| + mockOnNotificationClickedDependencies(this);
|
| + this.makeMockLocalFunctions(['selector']);
|
| +
|
| + var storageGetSavedArgs = new SaveMockArguments();
|
| + this.mockApis.expects(once()).
|
| + storage_get(
|
| + storageGetSavedArgs.match(eq('notificationsData')),
|
| + storageGetSavedArgs.match(ANYTHING)).
|
| + will(invokeCallback(storageGetSavedArgs, 1, testNotificationData));
|
| +
|
| + // Invoking the tested function.
|
| + onNotificationClicked(
|
| + testNotificationId, this.mockLocalFunctions.functions().selector);
|
| + });
|
| +
|
| +TEST_F(
|
| + 'GoogleNowBackgroundUnitTest',
|
| + 'OnNotificationClicked_ActionUrlsNotObject',
|
| + function() {
|
| + // Tests the case when the data associated with notification id is not an
|
| + // object, probably because of a malformed server response.
|
| + // In this case, the function should do nothing.
|
| +
|
| + // Setup and expectations.
|
| + var testActionUrls = 'string, not object';
|
| + var testNotificationId = 'TEST_ID';
|
| + var testNotificationData = {
|
| + notificationsData: {'TEST_ID': {actionUrls: testActionUrls}}
|
| + };
|
| +
|
| + mockOnNotificationClickedDependencies(this);
|
| + this.makeMockLocalFunctions(['selector']);
|
| +
|
| + var storageGetSavedArgs = new SaveMockArguments();
|
| + this.mockApis.expects(once()).
|
| + storage_get(
|
| + storageGetSavedArgs.match(eq('notificationsData')),
|
| + storageGetSavedArgs.match(ANYTHING)).
|
| + will(invokeCallback(storageGetSavedArgs, 1, testNotificationData));
|
| +
|
| + // Invoking the tested function.
|
| + onNotificationClicked(
|
| + testNotificationId, this.mockLocalFunctions.functions().selector);
|
| + });
|
| +
|
| +TEST_F(
|
| + 'GoogleNowBackgroundUnitTest',
|
| + 'OnNotificationClicked_UrlNotString',
|
| + function() {
|
| + // Tests the case when selector returns a non-string, probably because of
|
| + // a malformed server response.
|
| + // In this case, the function should do nothing.
|
| +
|
| + // Setup and expectations.
|
| + var testActionUrls = {testField: 'TEST VALUE'};
|
| + var testNotificationId = 'TEST_ID';
|
| + var testNotificationData = {
|
| + notificationsData: {'TEST_ID': {actionUrls: testActionUrls}}
|
| + };
|
| + var testActionUrl = {};
|
| +
|
| + mockOnNotificationClickedDependencies(this);
|
| + this.makeMockLocalFunctions(['selector']);
|
| +
|
| + var storageGetSavedArgs = new SaveMockArguments();
|
| + this.mockApis.expects(once()).
|
| + storage_get(
|
| + storageGetSavedArgs.match(eq('notificationsData')),
|
| + storageGetSavedArgs.match(ANYTHING)).
|
| + will(invokeCallback(storageGetSavedArgs, 1, testNotificationData));
|
| + this.mockLocalFunctions.expects(once()).selector(testActionUrls).will(
|
| + returnValue(testActionUrl));
|
| +
|
| + // Invoking the tested function.
|
| + onNotificationClicked(
|
| + testNotificationId, this.mockLocalFunctions.functions().selector);
|
| + });
|
| +
|
| +TEST_F(
|
| + 'GoogleNowBackgroundUnitTest',
|
| + 'OnNotificationClicked_TabCreateSuccess',
|
| + function() {
|
| + // Tests the selected URL is OK and crome.tabs.create suceeds.
|
| +
|
| + // Setup and expectations.
|
| + var testActionUrls = {testField: 'TEST VALUE'};
|
| + var testNotificationId = 'TEST_ID';
|
| + var testNotificationData = {
|
| + notificationsData: {'TEST_ID': {actionUrls: testActionUrls}}
|
| + };
|
| + var testActionUrl = 'http://testurl.com';
|
| + var testCreatedTab = {};
|
| +
|
| + mockOnNotificationClickedDependencies(this);
|
| + this.makeMockLocalFunctions(['selector']);
|
| +
|
| + var storageGetSavedArgs = new SaveMockArguments();
|
| + this.mockApis.expects(once()).
|
| + storage_get(
|
| + storageGetSavedArgs.match(eq('notificationsData')),
|
| + storageGetSavedArgs.match(ANYTHING)).
|
| + will(invokeCallback(storageGetSavedArgs, 1, testNotificationData));
|
| + this.mockLocalFunctions.expects(once()).selector(testActionUrls).will(
|
| + returnValue(testActionUrl));
|
| + var chromeTabsCreateSavedArgs = new SaveMockArguments();
|
| + this.mockApis.expects(once()).
|
| + chrome_tabs_create(
|
| + chromeTabsCreateSavedArgs.match(eqJSON({url: testActionUrl})),
|
| + chromeTabsCreateSavedArgs.match(ANYTHING)).
|
| + will(invokeCallback(chromeTabsCreateSavedArgs, 1, testCreatedTab));
|
| +
|
| + // Invoking the tested function.
|
| + onNotificationClicked(
|
| + testNotificationId, this.mockLocalFunctions.functions().selector);
|
| + });
|
| +
|
| +TEST_F(
|
| + 'GoogleNowBackgroundUnitTest',
|
| + 'OnNotificationClicked_TabCreateFail',
|
| + function() {
|
| + // Tests the selected URL is OK and crome.tabs.create fails.
|
| + // In this case, the function should invoke chrome.windows.create as a
|
| + // second attempt.
|
| +
|
| + // Setup and expectations.
|
| + var testActionUrls = {testField: 'TEST VALUE'};
|
| + var testNotificationId = 'TEST_ID';
|
| + var testNotificationData = {
|
| + notificationsData: {'TEST_ID': {actionUrls: testActionUrls}}
|
| + };
|
| + var testActionUrl = 'http://testurl.com';
|
| + var testCreatedTab = undefined; // chrome.tabs.create fails
|
| +
|
| + mockOnNotificationClickedDependencies(this);
|
| + this.makeMockLocalFunctions(['selector']);
|
| +
|
| + var storageGetSavedArgs = new SaveMockArguments();
|
| + this.mockApis.expects(once()).
|
| + storage_get(
|
| + storageGetSavedArgs.match(eq('notificationsData')),
|
| + storageGetSavedArgs.match(ANYTHING)).
|
| + will(invokeCallback(storageGetSavedArgs, 1, testNotificationData));
|
| + this.mockLocalFunctions.expects(once()).selector(testActionUrls).will(
|
| + returnValue(testActionUrl));
|
| + var chromeTabsCreateSavedArgs = new SaveMockArguments();
|
| + this.mockApis.expects(once()).
|
| + chrome_tabs_create(
|
| + chromeTabsCreateSavedArgs.match(eqJSON({url: testActionUrl})),
|
| + chromeTabsCreateSavedArgs.match(ANYTHING)).
|
| + will(invokeCallback(chromeTabsCreateSavedArgs, 1, testCreatedTab));
|
| + this.mockApis.expects(once()).chrome_windows_create(
|
| + eqJSON({url: testActionUrl}));
|
| +
|
| + // Invoking the tested function.
|
| + onNotificationClicked(
|
| + testNotificationId, this.mockLocalFunctions.functions().selector);
|
| + });
|
|
|