Chromium Code Reviews| 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 a0a8f00a9d9340f66e776ca127b92902bef90711..f685145454745284bb2daf963bea32a54f2a4d0f 100644 |
| --- a/chrome/browser/resources/google_now/background_unittest.gtestjs |
| +++ b/chrome/browser/resources/google_now/background_unittest.gtestjs |
| @@ -30,14 +30,22 @@ TEST_F('GoogleNowBackgroundUnitTest', 'AreTasksConflicting', function() { |
| testTaskPair(UPDATE_CARDS_TASK_NAME, UPDATE_CARDS_TASK_NAME, true); |
| testTaskPair(UPDATE_CARDS_TASK_NAME, DISMISS_CARD_TASK_NAME, false); |
| testTaskPair(UPDATE_CARDS_TASK_NAME, RETRY_DISMISS_TASK_NAME, false); |
| + testTaskPair(UPDATE_CARDS_TASK_NAME, STATE_CHANGED_TASK_NAME, false); |
| testTaskPair(DISMISS_CARD_TASK_NAME, UPDATE_CARDS_TASK_NAME, false); |
| testTaskPair(DISMISS_CARD_TASK_NAME, DISMISS_CARD_TASK_NAME, false); |
| testTaskPair(DISMISS_CARD_TASK_NAME, RETRY_DISMISS_TASK_NAME, false); |
| + testTaskPair(DISMISS_CARD_TASK_NAME, STATE_CHANGED_TASK_NAME, false); |
| testTaskPair(RETRY_DISMISS_TASK_NAME, UPDATE_CARDS_TASK_NAME, true); |
| testTaskPair(RETRY_DISMISS_TASK_NAME, DISMISS_CARD_TASK_NAME, true); |
| testTaskPair(RETRY_DISMISS_TASK_NAME, RETRY_DISMISS_TASK_NAME, true); |
| + testTaskPair(RETRY_DISMISS_TASK_NAME, STATE_CHANGED_TASK_NAME, false); |
| + |
| + testTaskPair(STATE_CHANGED_TASK_NAME, UPDATE_CARDS_TASK_NAME, false); |
| + testTaskPair(STATE_CHANGED_TASK_NAME, DISMISS_CARD_TASK_NAME, false); |
| + testTaskPair(STATE_CHANGED_TASK_NAME, RETRY_DISMISS_TASK_NAME, false); |
| + testTaskPair(STATE_CHANGED_TASK_NAME, STATE_CHANGED_TASK_NAME, false); |
| }); |
| /** |
| @@ -49,32 +57,126 @@ function mockInitializeDependencies(fixture) { |
| 'recordEvent', |
| 'showWelcomeToast', |
| 'startPollingCards']); |
| - fixture.makeAndRegisterMockApis( |
| - ['storage.get', 'chrome.identity.getAuthToken']); |
| + fixture.makeAndRegisterMockApis([ |
| + 'chrome.identity.getAuthToken', |
|
vadimt
2013/07/26 01:54:01
Should be indented by 2, I guess.
robliao
2013/07/26 08:11:23
Yup, per the style guide. Fixed the one above too.
|
| + 'chrome.location.clearWatch', |
| + 'chrome.notifications.getAll', |
| + 'chrome.preferencesPrivate.googleGeolocationAccessEnabled.get', |
| + 'storage.get', |
| + 'storage.set', |
| + 'tasks.add', |
| + 'updateCardsAttempts.isRunning', |
| + 'updateCardsAttempts.stop' |
| + ]); |
| +} |
| + |
| +/** |
| + * Sets up the test to expect the state machine calls and send |
| + * the specified state machine state. Currently used to test initialize(). |
| + * Note that this CAN NOT be used if any of the methods below are called |
| + * outside of this context with the same argument matchers. |
| + * expects() calls cannot be chained with the same argument matchers. |
| + * @param {object} mockApisObj Mock APIs Object. |
| + * @param {string} testIdentityToken getAuthToken callback token. |
| + * @param {boolean} testGeolocationPref Geolocation Preference callback value. |
| + * @param {boolean} testUserRespondedToToast User Response to toast |
| + & callback value. |
| + */ |
| +function expectStateMachineCalls( |
| + mockApisObj, |
| + testIdentityToken, |
| + testGeolocationPref, |
| + testUserRespondedToToast) { |
| + var chromeIdentityGetAuthTokenSavedArgs = new SaveMockArguments(); |
| + mockApisObj.expects(once()). |
| + chrome_identity_getAuthToken( |
| + chromeIdentityGetAuthTokenSavedArgs.match( |
| + eqJSON({interactive: false})), |
| + chromeIdentityGetAuthTokenSavedArgs.match(ANYTHING)). |
| + will(invokeCallback( |
| + chromeIdentityGetAuthTokenSavedArgs, 1, testIdentityToken)); |
| + |
| + var googleGeolocationPrefGetSavedArgs = new SaveMockArguments(); |
| + mockApisObj.expects(once()). |
| + chrome_preferencesPrivate_googleGeolocationAccessEnabled_get( |
| + googleGeolocationPrefGetSavedArgs.match(eqJSON({})), |
| + googleGeolocationPrefGetSavedArgs.match(ANYTHING)). |
| + will(invokeCallback( |
| + googleGeolocationPrefGetSavedArgs, 1, {value: testGeolocationPref})); |
| + |
| + var storageGetSavedArgs = new SaveMockArguments(); |
| + mockApisObj.expects(once()). |
| + storage_get( |
| + storageGetSavedArgs.match(eq('userRespondedToToast')), |
| + storageGetSavedArgs.match(ANYTHING)). |
| + will(invokeCallback(storageGetSavedArgs, 1, testUserRespondedToToast)); |
| +} |
| + |
| +/** |
| + * Sets up the test to expect the initialization calls that |
| + * initialize() invokes. |
| + * Note that this CAN NOT be used if any of the methods below are called |
| + * outside of this context with the same argument matchers. |
| + * expects() calls cannot be chained with the same argument matchers. |
| + */ |
| +function expectInitialization(mockApisObj) { |
| + mockApisObj.expects(once()). |
| + chrome_location_clearWatch(ANYTHING); |
| + mockApisObj.expects(once()). |
| + updateCardsAttempts_stop(); |
| + mockApisObj.expects(once()). |
| + storage_set(eqJSON({notificationsData: {}})); |
| + var tasksAddSavedArgs = new SaveMockArguments(); |
| + mockApisObj.expects(once()). |
| + tasks_add( |
| + tasksAddSavedArgs.match(ANYTHING), |
| + tasksAddSavedArgs.match(ANYTHING)). |
| + will(invokeCallback(tasksAddSavedArgs, 1, function() {})); |
| + var updateCardsAttemptsIsRunningSavedArgs = new SaveMockArguments(); |
| + mockApisObj.expects(once()). |
| + updateCardsAttempts_isRunning( |
| + updateCardsAttemptsIsRunningSavedArgs.match(ANYTHING)). |
| + will( |
| + invokeCallback( |
| + updateCardsAttemptsIsRunningSavedArgs, 0, false)); |
| } |
| 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. |
| + // Tests the case when the user isn't signed in and NOTIFICATION_CARDS_URL |
| + // is not set. Since NOTIFICATION_CARDS_URL is empty, |
| + // nothing should start. |
| // Setup and expectations. |
| - var testToastState = {}; |
| NOTIFICATION_CARDS_URL = undefined; |
| + var testIdentityToken = undefined; |
| + var testGeolocationPref = false; |
| + var testUserRespondedToToast = {}; |
| 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)); |
| + |
| + expectInitialization(this.mockApis); |
| + |
| + expectStateMachineCalls( |
| + this.mockApis, |
| + testIdentityToken, |
| + testGeolocationPref, |
| + testUserRespondedToToast); |
| + |
| + var chromeNotificationGetAllSavedArgs = new SaveMockArguments(); |
| + this.mockApis.expects(exactly(2)). |
| + chrome_notifications_getAll( |
| + chromeNotificationGetAllSavedArgs.match(ANYTHING)). |
| + will( |
| + invokeCallback(chromeNotificationGetAllSavedArgs, 0, {}), |
| + invokeCallback(chromeNotificationGetAllSavedArgs, 0, {})); |
| + |
| + // TODO(robliao,vadimt): Determine the granularity of testing to perform. |
| // Invoking the tested function. |
| initialize(); |
| @@ -84,34 +186,36 @@ 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. |
| + // Tests the case when NOTIFICATION_CARDS_URL is 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; |
| + var testGeolocationPref = false; |
| + var testUserRespondedToToast = {}; |
| 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)); |
| + |
| + expectInitialization(this.mockApis); |
| + |
| + expectStateMachineCalls( |
| + this.mockApis, |
| + testIdentityToken, |
| + testGeolocationPref, |
| + testUserRespondedToToast); |
| + |
| + var chromeNotificationGetAllSavedArgs = new SaveMockArguments(); |
| + this.mockApis.expects(exactly(2)). |
| + chrome_notifications_getAll( |
| + chromeNotificationGetAllSavedArgs.match(ANYTHING)). |
| + will( |
| + invokeCallback(chromeNotificationGetAllSavedArgs, 0, {}), |
| + invokeCallback(chromeNotificationGetAllSavedArgs, 0, {})); |
| // Invoking the tested function. |
| initialize(); |
| @@ -121,80 +225,113 @@ 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(). |
| + // Tests the case when NOTIFICATION_CARDS_URL is set, getAuthToken |
| + // succeeds, and the user has never responded to the toast. |
| + // 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'; |
| + var testGeolocationPref = false; |
| + var testUserRespondedToToast = {}; |
| 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)); |
| + |
| + expectInitialization(this.mockApis); |
| + |
| + expectStateMachineCalls( |
| + this.mockApis, |
| + testIdentityToken, |
| + testGeolocationPref, |
| + testUserRespondedToToast); |
| + |
| + var chromeNotificationGetAllSavedArgs = new SaveMockArguments(); |
| + this.mockApis.expects(exactly(2)). |
| + chrome_notifications_getAll( |
| + chromeNotificationGetAllSavedArgs.match(ANYTHING)). |
| + will( |
| + invokeCallback(chromeNotificationGetAllSavedArgs, 0, {}), |
| + invokeCallback(chromeNotificationGetAllSavedArgs, 0, {})); |
| + |
| 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(). |
| +TEST_F('GoogleNowBackgroundUnitTest', 'Initialize_RunGoogleNow', function() { |
| + // Tests if Google Now will invoke startPollingCards when all |
| + // of the required state is fulfilled. |
| - // Setup and expectations. |
| - var testToastState = {toastState: ToastOptionResponse.CHOSE_YES}; |
| + // Setup and expectations. |
| + NOTIFICATION_CARDS_URL = 'https://some.server.url.com'; |
| + var testIdentityToken = 'some identity token'; |
| + var testGeolocationPref = true; |
| + var testUserRespondedToToast = {userRespondedToToast: true}; |
| - mockInitializeDependencies(this); |
| + 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(); |
| + this.mockGlobals.expects(once()).recordEvent( |
| + DiagnosticEvent.EXTENSION_START); |
| + |
| + expectInitialization(this.mockApis); |
| + |
| + expectStateMachineCalls( |
| + this.mockApis, |
| + testIdentityToken, |
| + testGeolocationPref, |
| + testUserRespondedToToast); |
| + |
| + var chromeNotificationGetAllSavedArgs = new SaveMockArguments(); |
| + this.mockApis.expects(exactly(2)). |
| + chrome_notifications_getAll( |
| + chromeNotificationGetAllSavedArgs.match(ANYTHING)). |
| + will( |
| + invokeCallback(chromeNotificationGetAllSavedArgs, 0, {}), |
| + invokeCallback(chromeNotificationGetAllSavedArgs, 0, {})); |
| + |
| + this.mockGlobals.expects(once()).startPollingCards(); |
| - // Invoking the tested function. |
| - initialize(); |
| + // 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. |
| +TEST_F('GoogleNowBackgroundUnitTest', 'Initialize_NoGeolocation', function() { |
| + // Tests the case where everything is in place except for the |
| + // Geolocation Preference after the user responded to the toast. |
| - // Setup and expectations. |
| - var testToastState = {toastState: ToastOptionResponse.CHOSE_NO}; |
| + // Setup and expectations. |
| + NOTIFICATION_CARDS_URL = 'https://some.server.url.com'; |
| + var testIdentityToken = 'some identity token'; |
| + var testGeolocationPref = false; |
| + var testUserRespondedToToast = {userRespondedToToast: true}; |
| - mockInitializeDependencies(this); |
| + 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()).recordEvent( |
| + DiagnosticEvent.EXTENSION_START); |
| + |
| + expectInitialization(this.mockApis); |
| + |
| + expectStateMachineCalls( |
| + this.mockApis, |
| + testIdentityToken, |
| + testGeolocationPref, |
| + testUserRespondedToToast); |
| + |
| + var chromeNotificationGetAllSavedArgs = new SaveMockArguments(); |
| + this.mockApis.expects(exactly(2)). |
| + chrome_notifications_getAll( |
| + chromeNotificationGetAllSavedArgs.match(ANYTHING)). |
| + will( |
| + invokeCallback(chromeNotificationGetAllSavedArgs, 0, {}), |
| + invokeCallback(chromeNotificationGetAllSavedArgs, 0, {})); |
| - // Invoking the tested function. |
| - initialize(); |
| + // Invoking the tested function. |
| + initialize(); |
| }); |
| /** |