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

Side by Side 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: Sync and Resolve Conflicts Created 7 years, 4 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 /** 5 /**
6 * Test fixture for background.js. 6 * Test fixture for background.js.
7 * @constructor 7 * @constructor
8 * @extends {testing.Test} 8 * @extends {testing.Test}
9 */ 9 */
10 function GoogleNowBackgroundUnitTest () { 10 function GoogleNowBackgroundUnitTest () {
(...skipping 12 matching lines...) Expand all
23 23
24 TEST_F('GoogleNowBackgroundUnitTest', 'AreTasksConflicting', function() { 24 TEST_F('GoogleNowBackgroundUnitTest', 'AreTasksConflicting', function() {
25 function testTaskPair(newTaskName, scheduledTaskName, expected) { 25 function testTaskPair(newTaskName, scheduledTaskName, expected) {
26 assertTrue(areTasksConflicting(newTaskName, scheduledTaskName) == expected, 26 assertTrue(areTasksConflicting(newTaskName, scheduledTaskName) == expected,
27 '(' + newTaskName + ', ' + scheduledTaskName + ')'); 27 '(' + newTaskName + ', ' + scheduledTaskName + ')');
28 } 28 }
29 29
30 testTaskPair(UPDATE_CARDS_TASK_NAME, UPDATE_CARDS_TASK_NAME, true); 30 testTaskPair(UPDATE_CARDS_TASK_NAME, UPDATE_CARDS_TASK_NAME, true);
31 testTaskPair(UPDATE_CARDS_TASK_NAME, DISMISS_CARD_TASK_NAME, false); 31 testTaskPair(UPDATE_CARDS_TASK_NAME, DISMISS_CARD_TASK_NAME, false);
32 testTaskPair(UPDATE_CARDS_TASK_NAME, RETRY_DISMISS_TASK_NAME, false); 32 testTaskPair(UPDATE_CARDS_TASK_NAME, RETRY_DISMISS_TASK_NAME, false);
33 testTaskPair(UPDATE_CARDS_TASK_NAME, STATE_CHANGED_TASK_NAME, false);
33 34
34 testTaskPair(DISMISS_CARD_TASK_NAME, UPDATE_CARDS_TASK_NAME, false); 35 testTaskPair(DISMISS_CARD_TASK_NAME, UPDATE_CARDS_TASK_NAME, false);
35 testTaskPair(DISMISS_CARD_TASK_NAME, DISMISS_CARD_TASK_NAME, false); 36 testTaskPair(DISMISS_CARD_TASK_NAME, DISMISS_CARD_TASK_NAME, false);
36 testTaskPair(DISMISS_CARD_TASK_NAME, RETRY_DISMISS_TASK_NAME, false); 37 testTaskPair(DISMISS_CARD_TASK_NAME, RETRY_DISMISS_TASK_NAME, false);
38 testTaskPair(DISMISS_CARD_TASK_NAME, STATE_CHANGED_TASK_NAME, false);
37 39
38 testTaskPair(RETRY_DISMISS_TASK_NAME, UPDATE_CARDS_TASK_NAME, true); 40 testTaskPair(RETRY_DISMISS_TASK_NAME, UPDATE_CARDS_TASK_NAME, true);
39 testTaskPair(RETRY_DISMISS_TASK_NAME, DISMISS_CARD_TASK_NAME, true); 41 testTaskPair(RETRY_DISMISS_TASK_NAME, DISMISS_CARD_TASK_NAME, true);
40 testTaskPair(RETRY_DISMISS_TASK_NAME, RETRY_DISMISS_TASK_NAME, true); 42 testTaskPair(RETRY_DISMISS_TASK_NAME, RETRY_DISMISS_TASK_NAME, true);
43 testTaskPair(RETRY_DISMISS_TASK_NAME, STATE_CHANGED_TASK_NAME, false);
44
45 testTaskPair(STATE_CHANGED_TASK_NAME, UPDATE_CARDS_TASK_NAME, false);
46 testTaskPair(STATE_CHANGED_TASK_NAME, DISMISS_CARD_TASK_NAME, false);
47 testTaskPair(STATE_CHANGED_TASK_NAME, RETRY_DISMISS_TASK_NAME, false);
48 testTaskPair(STATE_CHANGED_TASK_NAME, STATE_CHANGED_TASK_NAME, false);
41 }); 49 });
42 50
43 /** 51 /**
44 * Mocks global functions and APIs that initialize() depends upon. 52 * Mocks global functions and APIs that initialize() depends upon.
45 * @param {Test} fixture Test fixture. 53 * @param {Test} fixture Test fixture.
46 */ 54 */
47 function mockInitializeDependencies(fixture) { 55 function mockInitializeDependencies(fixture) {
48 fixture.makeAndRegisterMockGlobals([ 56 fixture.makeAndRegisterMockGlobals([
49 'recordEvent', 57 'recordEvent',
50 'showWelcomeToast', 58 'showWelcomeToast',
51 'startPollingCards']); 59 'startPollingCards'
52 fixture.makeAndRegisterMockApis( 60 ]);
53 ['storage.get', 'chrome.identity.getAuthToken']); 61 fixture.makeAndRegisterMockApis([
62 'chrome.identity.getAuthToken',
63 'chrome.location.clearWatch',
64 'chrome.notifications.getAll',
65 'chrome.preferencesPrivate.googleGeolocationAccessEnabled.get',
66 'storage.get',
67 'storage.set',
68 'tasks.add',
69 'updateCardsAttempts.isRunning',
70 'updateCardsAttempts.stop'
71 ]);
72 }
73
74 /**
75 * Sets up the test to expect the state machine calls and send
76 * the specified state machine state. Currently used to test initialize().
77 * Note that this CAN NOT be used if any of the methods below are called
78 * outside of this context with the same argument matchers.
79 * expects() calls cannot be chained with the same argument matchers.
80 * @param {object} mockApisObj Mock APIs Object.
81 * @param {string} testIdentityToken getAuthToken callback token.
82 * @param {boolean} testGeolocationPref Geolocation Preference callback value.
83 * @param {boolean} testUserRespondedToToast User Response to toast
84 & callback value.
85 */
86 function expectStateMachineCalls(
87 mockApisObj,
88 testIdentityToken,
89 testGeolocationPref,
90 testUserRespondedToToast) {
91 var chromeIdentityGetAuthTokenSavedArgs = new SaveMockArguments();
92 mockApisObj.expects(once()).
93 chrome_identity_getAuthToken(
94 chromeIdentityGetAuthTokenSavedArgs.match(
95 eqJSON({interactive: false})),
96 chromeIdentityGetAuthTokenSavedArgs.match(ANYTHING)).
97 will(invokeCallback(
98 chromeIdentityGetAuthTokenSavedArgs, 1, testIdentityToken));
99
100 var googleGeolocationPrefGetSavedArgs = new SaveMockArguments();
101 mockApisObj.expects(once()).
102 chrome_preferencesPrivate_googleGeolocationAccessEnabled_get(
103 googleGeolocationPrefGetSavedArgs.match(eqJSON({})),
104 googleGeolocationPrefGetSavedArgs.match(ANYTHING)).
105 will(invokeCallback(
106 googleGeolocationPrefGetSavedArgs, 1, {value: testGeolocationPref}));
107
108 var storageGetSavedArgs = new SaveMockArguments();
109 mockApisObj.expects(once()).
110 storage_get(
111 storageGetSavedArgs.match(eq('userRespondedToToast')),
112 storageGetSavedArgs.match(ANYTHING)).
113 will(invokeCallback(storageGetSavedArgs, 1, testUserRespondedToToast));
114 }
115
116 /**
117 * Sets up the test to expect the initialization calls that
118 * initialize() invokes.
119 * Note that this CAN NOT be used if any of the methods below are called
120 * outside of this context with the same argument matchers.
121 * expects() calls cannot be chained with the same argument matchers.
122 */
123 function expectInitialization(mockApisObj) {
124 mockApisObj.expects(once()).
125 chrome_location_clearWatch(ANYTHING);
126 mockApisObj.expects(once()).
127 updateCardsAttempts_stop();
128 mockApisObj.expects(once()).
129 storage_set(eqJSON({notificationsData: {}}));
130 var tasksAddSavedArgs = new SaveMockArguments();
131 mockApisObj.expects(once()).
132 tasks_add(
133 tasksAddSavedArgs.match(ANYTHING),
134 tasksAddSavedArgs.match(ANYTHING)).
135 will(invokeCallback(tasksAddSavedArgs, 1, function() {}));
136 var updateCardsAttemptsIsRunningSavedArgs = new SaveMockArguments();
137 mockApisObj.expects(once()).
138 updateCardsAttempts_isRunning(
139 updateCardsAttemptsIsRunningSavedArgs.match(ANYTHING)).
140 will(
141 invokeCallback(
142 updateCardsAttemptsIsRunningSavedArgs, 0, false));
54 } 143 }
55 144
56 TEST_F( 145 TEST_F(
57 'GoogleNowBackgroundUnitTest', 146 'GoogleNowBackgroundUnitTest',
58 'Initialize_ToastStateEmpty1', 147 'Initialize_ToastStateEmpty1',
59 function() { 148 function() {
60 // Tests the case when toast state is empty and NOTIFICATION_CARDS_URL is 149 // Tests the case when the user isn't signed in and NOTIFICATION_CARDS_URL
61 // not set. In this case, the function should quietly exit after finding 150 // is not set. Since NOTIFICATION_CARDS_URL is empty,
62 // out that NOTIFICATION_CARDS_URL is empty. 151 // nothing should start.
63 152
64 // Setup and expectations. 153 // Setup and expectations.
65 var testToastState = {};
66 NOTIFICATION_CARDS_URL = undefined; 154 NOTIFICATION_CARDS_URL = undefined;
155 var testIdentityToken = undefined;
156 var testGeolocationPref = false;
157 var testUserRespondedToToast = {};
67 158
68 mockInitializeDependencies(this); 159 mockInitializeDependencies(this);
69 160
70 this.mockGlobals.expects(once()).recordEvent( 161 this.mockGlobals.expects(once()).recordEvent(
71 DiagnosticEvent.EXTENSION_START); 162 DiagnosticEvent.EXTENSION_START);
72 var storageGetSavedArgs = new SaveMockArguments(); 163
73 this.mockApis.expects(once()). 164 expectInitialization(this.mockApis);
74 storage_get( 165
75 storageGetSavedArgs.match(eq('toastState')), 166 expectStateMachineCalls(
76 storageGetSavedArgs.match(ANYTHING)). 167 this.mockApis,
77 will(invokeCallback(storageGetSavedArgs, 1, testToastState)); 168 testIdentityToken,
169 testGeolocationPref,
170 testUserRespondedToToast);
171
172 var chromeNotificationGetAllSavedArgs = new SaveMockArguments();
173 this.mockApis.expects(exactly(2)).
174 chrome_notifications_getAll(
175 chromeNotificationGetAllSavedArgs.match(ANYTHING)).
176 will(
177 invokeCallback(chromeNotificationGetAllSavedArgs, 0, {}),
178 invokeCallback(chromeNotificationGetAllSavedArgs, 0, {}));
179
180 // TODO(robliao,vadimt): Determine the granularity of testing to perform.
78 181
79 // Invoking the tested function. 182 // Invoking the tested function.
80 initialize(); 183 initialize();
81 }); 184 });
82 185
83 TEST_F( 186 TEST_F(
84 'GoogleNowBackgroundUnitTest', 187 'GoogleNowBackgroundUnitTest',
85 'Initialize_ToastStateEmpty2', 188 'Initialize_ToastStateEmpty2',
86 function() { 189 function() {
87 // Tests the case when toast state is empty and NOTIFICATION_CARDS_URL is 190 // Tests the case when NOTIFICATION_CARDS_URL is but getAuthToken fails
88 // set, but getAuthToken fails most likely because the user is not signed 191 // most likely because the user is not signed in. In this case, the
89 // in. In this case, the function should quietly exit after finding out 192 // function should quietly exit after finding out that getAuthToken fails.
90 // that getAuthToken fails.
91 193
92 // Setup and expectations. 194 // Setup and expectations.
93 var testToastState = {};
94 NOTIFICATION_CARDS_URL = 'https://some.server.url.com'; 195 NOTIFICATION_CARDS_URL = 'https://some.server.url.com';
95 var testIdentityToken = undefined; 196 var testIdentityToken = undefined;
197 var testGeolocationPref = false;
198 var testUserRespondedToToast = {};
96 199
97 mockInitializeDependencies(this); 200 mockInitializeDependencies(this);
98 201
99 this.mockGlobals.expects(once()).recordEvent( 202 this.mockGlobals.expects(once()).recordEvent(
100 DiagnosticEvent.EXTENSION_START); 203 DiagnosticEvent.EXTENSION_START);
101 var storageGetSavedArgs = new SaveMockArguments(); 204
102 this.mockApis.expects(once()). 205 expectInitialization(this.mockApis);
103 storage_get( 206
104 storageGetSavedArgs.match(eq('toastState')), 207 expectStateMachineCalls(
105 storageGetSavedArgs.match(ANYTHING)). 208 this.mockApis,
106 will(invokeCallback(storageGetSavedArgs, 1, testToastState)); 209 testIdentityToken,
107 var chromeIdentityGetAuthTokenSavedArgs = new SaveMockArguments(); 210 testGeolocationPref,
108 this.mockApis.expects(once()). 211 testUserRespondedToToast);
109 chrome_identity_getAuthToken( 212
110 chromeIdentityGetAuthTokenSavedArgs.match( 213 var chromeNotificationGetAllSavedArgs = new SaveMockArguments();
111 eqJSON({interactive: false})), 214 this.mockApis.expects(exactly(2)).
112 chromeIdentityGetAuthTokenSavedArgs.match(ANYTHING)). 215 chrome_notifications_getAll(
113 will(invokeCallback( 216 chromeNotificationGetAllSavedArgs.match(ANYTHING)).
114 chromeIdentityGetAuthTokenSavedArgs, 1, testIdentityToken)); 217 will(
218 invokeCallback(chromeNotificationGetAllSavedArgs, 0, {}),
219 invokeCallback(chromeNotificationGetAllSavedArgs, 0, {}));
115 220
116 // Invoking the tested function. 221 // Invoking the tested function.
117 initialize(); 222 initialize();
118 }); 223 });
119 224
120 TEST_F( 225 TEST_F(
121 'GoogleNowBackgroundUnitTest', 226 'GoogleNowBackgroundUnitTest',
122 'Initialize_ToastStateEmpty3', 227 'Initialize_ToastStateEmpty3',
123 function() { 228 function() {
124 // Tests the case when toast state is empty and NOTIFICATION_CARDS_URL is 229 // Tests the case when NOTIFICATION_CARDS_URL is set, getAuthToken
125 // set, and getAuthToken succeeds. In this case, the function should 230 // succeeds, and the user has never responded to the toast.
126 // invoke showWelcomeToast(). 231 // In this case, the function should invoke showWelcomeToast().
127 232
128 // Setup and expectations. 233 // Setup and expectations.
129 var testToastState = {};
130 NOTIFICATION_CARDS_URL = 'https://some.server.url.com'; 234 NOTIFICATION_CARDS_URL = 'https://some.server.url.com';
131 var testIdentityToken = 'some identity token'; 235 var testIdentityToken = 'some identity token';
236 var testGeolocationPref = false;
237 var testUserRespondedToToast = {};
132 238
133 mockInitializeDependencies(this); 239 mockInitializeDependencies(this);
134 240
135 this.mockGlobals.expects(once()).recordEvent( 241 this.mockGlobals.expects(once()).recordEvent(
136 DiagnosticEvent.EXTENSION_START); 242 DiagnosticEvent.EXTENSION_START);
137 var storageGetSavedArgs = new SaveMockArguments(); 243
138 this.mockApis.expects(once()). 244 expectInitialization(this.mockApis);
139 storage_get( 245
140 storageGetSavedArgs.match(eq('toastState')), 246 expectStateMachineCalls(
141 storageGetSavedArgs.match(ANYTHING)). 247 this.mockApis,
142 will(invokeCallback(storageGetSavedArgs, 1, testToastState)); 248 testIdentityToken,
143 var chromeIdentityGetAuthTokenSavedArgs = new SaveMockArguments(); 249 testGeolocationPref,
144 this.mockApis.expects(once()). 250 testUserRespondedToToast);
145 chrome_identity_getAuthToken( 251
146 chromeIdentityGetAuthTokenSavedArgs.match( 252 var chromeNotificationGetAllSavedArgs = new SaveMockArguments();
147 eqJSON({interactive: false})), 253 this.mockApis.expects(exactly(2)).
148 chromeIdentityGetAuthTokenSavedArgs.match(ANYTHING)). 254 chrome_notifications_getAll(
149 will(invokeCallback( 255 chromeNotificationGetAllSavedArgs.match(ANYTHING)).
150 chromeIdentityGetAuthTokenSavedArgs, 1, testIdentityToken)); 256 will(
257 invokeCallback(chromeNotificationGetAllSavedArgs, 0, {}),
258 invokeCallback(chromeNotificationGetAllSavedArgs, 0, {}));
259
151 this.mockGlobals.expects(once()).showWelcomeToast(); 260 this.mockGlobals.expects(once()).showWelcomeToast();
152 261
153 // Invoking the tested function. 262 // Invoking the tested function.
154 initialize(); 263 initialize();
155 }); 264 });
156 265
157 TEST_F('GoogleNowBackgroundUnitTest', 'Initialize_ToastStateYes', function() { 266 TEST_F('GoogleNowBackgroundUnitTest', 'Initialize_RunGoogleNow', function() {
158 // Tests the case when the user has answered "yes" to the toast in the past. 267 // Tests if Google Now will invoke startPollingCards when all
159 // In this case, the function should invoke startPollingCards(). 268 // of the required state is fulfilled.
160 269
161 // Setup and expectations. 270 // Setup and expectations.
162 var testToastState = {toastState: ToastOptionResponse.CHOSE_YES}; 271 NOTIFICATION_CARDS_URL = 'https://some.server.url.com';
272 var testIdentityToken = 'some identity token';
273 var testGeolocationPref = true;
274 var testUserRespondedToToast = {userRespondedToToast: true};
163 275
164 mockInitializeDependencies(this); 276 mockInitializeDependencies(this);
165 277
166 this.mockGlobals.expects(once()).recordEvent(DiagnosticEvent.EXTENSION_START); 278 this.mockGlobals.expects(once()).recordEvent(
167 var storageGetSavedArgs = new SaveMockArguments(); 279 DiagnosticEvent.EXTENSION_START);
168 this.mockApis.expects(once()). 280
169 storage_get( 281 expectInitialization(this.mockApis);
170 storageGetSavedArgs.match(eq('toastState')), 282
171 storageGetSavedArgs.match(ANYTHING)). 283 expectStateMachineCalls(
172 will(invokeCallback(storageGetSavedArgs, 1, testToastState)); 284 this.mockApis,
285 testIdentityToken,
286 testGeolocationPref,
287 testUserRespondedToToast);
288
289 var chromeNotificationGetAllSavedArgs = new SaveMockArguments();
290 this.mockApis.expects(exactly(2)).
291 chrome_notifications_getAll(
292 chromeNotificationGetAllSavedArgs.match(ANYTHING)).
293 will(
294 invokeCallback(chromeNotificationGetAllSavedArgs, 0, {}),
295 invokeCallback(chromeNotificationGetAllSavedArgs, 0, {}));
296
173 this.mockGlobals.expects(once()).startPollingCards(); 297 this.mockGlobals.expects(once()).startPollingCards();
174 298
175 // Invoking the tested function. 299 // Invoking the tested function.
176 initialize(); 300 initialize();
177 }); 301 });
178 302
179 TEST_F('GoogleNowBackgroundUnitTest', 'Initialize_ToastStateNo', function() { 303 TEST_F('GoogleNowBackgroundUnitTest', 'Initialize_NoGeolocation', function() {
180 // Tests the case when the user has answered "no" to the toast in the past. 304 // Tests the case where everything is in place except for the
181 // In this case, the function should do nothing. 305 // Geolocation Preference after the user responded to the toast.
182 306
183 // Setup and expectations. 307 // Setup and expectations.
184 var testToastState = {toastState: ToastOptionResponse.CHOSE_NO}; 308 NOTIFICATION_CARDS_URL = 'https://some.server.url.com';
309 var testIdentityToken = 'some identity token';
310 var testGeolocationPref = false;
311 var testUserRespondedToToast = {userRespondedToToast: true};
185 312
186 mockInitializeDependencies(this); 313 mockInitializeDependencies(this);
187 314
188 this.mockGlobals.expects(once()).recordEvent(DiagnosticEvent.EXTENSION_START); 315 this.mockGlobals.expects(once()).recordEvent(
189 var storageGetSavedArgs = new SaveMockArguments(); 316 DiagnosticEvent.EXTENSION_START);
190 this.mockApis.expects(once()). 317
191 storage_get( 318 expectInitialization(this.mockApis);
192 storageGetSavedArgs.match(eq('toastState')), 319
193 storageGetSavedArgs.match(ANYTHING)). 320 expectStateMachineCalls(
194 will(invokeCallback(storageGetSavedArgs, 1, testToastState)); 321 this.mockApis,
322 testIdentityToken,
323 testGeolocationPref,
324 testUserRespondedToToast);
325
326 var chromeNotificationGetAllSavedArgs = new SaveMockArguments();
327 this.mockApis.expects(exactly(2)).
328 chrome_notifications_getAll(
329 chromeNotificationGetAllSavedArgs.match(ANYTHING)).
330 will(
331 invokeCallback(chromeNotificationGetAllSavedArgs, 0, {}),
332 invokeCallback(chromeNotificationGetAllSavedArgs, 0, {}));
195 333
196 // Invoking the tested function. 334 // Invoking the tested function.
197 initialize(); 335 initialize();
198 }); 336 });
199 337
200 /** 338 /**
201 * Mocks global functions and APIs that onNotificationClicked() depends upon. 339 * Mocks global functions and APIs that onNotificationClicked() depends upon.
202 * @param {Test} fixture Test fixture. 340 * @param {Test} fixture Test fixture.
203 */ 341 */
204 function mockOnNotificationClickedDependencies(fixture) { 342 function mockOnNotificationClickedDependencies(fixture) {
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 chromeTabsCreateSavedArgs.match(eqJSON({url: testActionUrl})), 507 chromeTabsCreateSavedArgs.match(eqJSON({url: testActionUrl})),
370 chromeTabsCreateSavedArgs.match(ANYTHING)). 508 chromeTabsCreateSavedArgs.match(ANYTHING)).
371 will(invokeCallback(chromeTabsCreateSavedArgs, 1, testCreatedTab)); 509 will(invokeCallback(chromeTabsCreateSavedArgs, 1, testCreatedTab));
372 this.mockApis.expects(once()).chrome_windows_create( 510 this.mockApis.expects(once()).chrome_windows_create(
373 eqJSON({url: testActionUrl})); 511 eqJSON({url: testActionUrl}));
374 512
375 // Invoking the tested function. 513 // Invoking the tested function.
376 onNotificationClicked( 514 onNotificationClicked(
377 testNotificationId, this.mockLocalFunctions.functions().selector); 515 testNotificationId, this.mockLocalFunctions.functions().selector);
378 }); 516 });
OLDNEW
« no previous file with comments | « chrome/browser/resources/google_now/background_test_util.js ('k') | chrome/browser/resources/google_now/utility.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698