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

Unified Diff: chrome/browser/resources/google_now/background_unittest.gtestjs

Issue 19822007: Updated Google Now to Check the Geolocation Access Preference (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@r213016
Patch Set: CR Feedback Created 7 years, 5 months 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 side-by-side diff with in-line comments
Download patch
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();
});
/**

Powered by Google App Engine
This is Rietveld 408576698