Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 /** @fileoverview Runs the Polymer Autofill Settings tests. */ | 5 /** @fileoverview Runs the Polymer Autofill Settings tests. */ |
| 6 | 6 |
| 7 /** @const {string} Path to root from chrome/test/data/webui/settings/. */ | 7 /** @const {string} Path to root from chrome/test/data/webui/settings/. */ |
| 8 var ROOT_PATH = '../../../../../'; | 8 var ROOT_PATH = '../../../../../'; |
| 9 | 9 |
| 10 // Polymer BrowserTest fixture. | 10 // Polymer BrowserTest fixture. |
| 11 GEN_INCLUDE([ | 11 GEN_INCLUDE([ |
| 12 ROOT_PATH + 'chrome/test/data/webui/polymer_browser_test_base.js', | 12 ROOT_PATH + 'chrome/test/data/webui/polymer_browser_test_base.js', |
| 13 ROOT_PATH + | 13 ROOT_PATH + |
| 14 'chrome/test/data/webui/settings/passwords_and_autofill_fake_data.js', | 14 'chrome/test/data/webui/settings/passwords_and_autofill_fake_data.js', |
| 15 ROOT_PATH + 'ui/webui/resources/js/load_time_data.js', | 15 ROOT_PATH + 'ui/webui/resources/js/load_time_data.js', |
| 16 ]); | 16 ]); |
| 17 | 17 |
| 18 /** | 18 /** |
| 19 * Test implementation. | |
| 20 * @implements {settings.AddressEditDialog.CountryInformationHelper} | |
| 21 * @constructor | |
| 22 */ | |
| 23 function CountryInformationHelperTestImpl() {} | |
| 24 CountryInformationHelperTestImpl.prototype = { | |
| 25 /** @override */ | |
| 26 getCountryList: function(callback) { | |
| 27 callback([ | |
| 28 {name: 'United States', countryCode: 'US'}, | |
| 29 {name: undefined, countryCode: undefined}, // Spacer. | |
|
michaelpg
2016/06/22 00:25:14
oh, I see. Should the browser/browser proxy really
hcarmona
2016/06/24 18:27:51
Spacer is provided by API to keep the default sepa
| |
| 30 {name: 'Israel', countryCode: 'IL'}, | |
| 31 {name: 'United Kingdom', countryCode: 'GB'}, | |
| 32 {name: 'United States', countryCode: 'US'}, | |
| 33 ]); | |
| 34 }, | |
| 35 | |
| 36 /** @override */ | |
| 37 getAddressFormat: function(countryCode, callback) { | |
| 38 chrome.autofillPrivate.getAddressComponents(countryCode || '', callback); | |
| 39 }, | |
| 40 }; | |
| 41 | |
| 42 /** | |
| 19 * @constructor | 43 * @constructor |
| 20 * @extends {PolymerTest} | 44 * @extends {PolymerTest} |
| 21 */ | 45 */ |
| 22 function SettingsAutofillSectionBrowserTest() {} | 46 function SettingsAutofillSectionBrowserTest() {} |
| 23 | 47 |
| 24 SettingsAutofillSectionBrowserTest.prototype = { | 48 SettingsAutofillSectionBrowserTest.prototype = { |
| 25 __proto__: PolymerTest.prototype, | 49 __proto__: PolymerTest.prototype, |
| 26 | 50 |
| 27 /** @override */ | 51 /** @override */ |
| 28 browsePreload: | 52 browsePreload: |
| 29 'chrome://md-settings/passwords_and_forms_page/autofill_section.html', | 53 'chrome://md-settings/passwords_and_forms_page/autofill_section.html', |
| 30 | 54 |
| 31 /** @override */ | 55 /** @override */ |
| 32 extraLibraries: PolymerTest.getLibraries(ROOT_PATH), | 56 extraLibraries: PolymerTest.getLibraries(ROOT_PATH), |
| 33 | 57 |
| 58 i18nStrings: { | |
| 59 addAddressTitle: 'add-title', | |
| 60 addCreditCardTitle: 'add-title', | |
| 61 editAddressTitle: 'add-title', | |
|
michaelpg
2016/06/22 00:25:14
edit-title?
hcarmona
2016/06/24 18:27:51
Done.
| |
| 62 editCreditCardTitle: 'edit-title', | |
| 63 }, | |
| 64 | |
| 34 /** @override */ | 65 /** @override */ |
| 35 setUp: function() { | 66 setUp: function() { |
| 36 PolymerTest.prototype.setUp.call(this); | 67 PolymerTest.prototype.setUp.call(this); |
| 37 | 68 |
| 38 // Test is run on an individual element that won't have a page language. | 69 // Test is run on an individual element that won't have a page language. |
| 39 this.accessibilityAuditConfig.auditRulesToIgnore.push('humanLangMissing'); | 70 this.accessibilityAuditConfig.auditRulesToIgnore.push('humanLangMissing'); |
| 40 | 71 |
| 41 // Faking 'strings.js' for this test. | 72 // Faking 'strings.js' for this test. |
| 42 loadTimeData.data = { | 73 loadTimeData.data = this.i18nStrings; |
| 43 editCreditCardTitle: 'edit-title', | 74 |
| 44 addCreditCardTitle: 'add-title' | 75 settings.AddressEditDialog.CountryInformationHelperImpl.instance_ = |
| 45 }; | 76 new CountryInformationHelperTestImpl(); |
| 46 }, | 77 }, |
| 47 | 78 |
| 48 /** | 79 /** |
| 49 * Allow the iron-list to be sized properly. | 80 * Allow the iron-list to be sized properly. |
| 50 * @param {!Object} autofillSection | 81 * @param {!Object} autofillSection |
| 51 * @private | 82 * @private |
| 52 */ | 83 */ |
| 53 flushAutofillSection_: function(autofillSection) { | 84 flushAutofillSection_: function(autofillSection) { |
| 54 autofillSection.$.addressList.notifyResize(); | 85 autofillSection.$.addressList.notifyResize(); |
| 55 autofillSection.$.creditCardList.notifyResize(); | 86 autofillSection.$.creditCardList.notifyResize(); |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 66 createAutofillSection_: function(addresses, creditCards) { | 97 createAutofillSection_: function(addresses, creditCards) { |
| 67 var section = document.createElement('settings-autofill-section'); | 98 var section = document.createElement('settings-autofill-section'); |
| 68 section.addresses = addresses; | 99 section.addresses = addresses; |
| 69 section.creditCards = creditCards; | 100 section.creditCards = creditCards; |
| 70 document.body.appendChild(section); | 101 document.body.appendChild(section); |
| 71 this.flushAutofillSection_(section); | 102 this.flushAutofillSection_(section); |
| 72 return section; | 103 return section; |
| 73 }, | 104 }, |
| 74 | 105 |
| 75 /** | 106 /** |
| 107 * Creates the Edit Address dialog and fulfills the promise when the dialog | |
| 108 * has actually opened. | |
| 109 * @param {!chrome.autofillPrivate.AddressEntry} address | |
| 110 * @return {!Promise<Object>} | |
| 111 */ | |
| 112 createAddressDialog_: function(address) { | |
| 113 return new Promise(function(resolve) { | |
| 114 var section = document.createElement('settings-address-edit-dialog'); | |
| 115 document.body.appendChild(section); | |
| 116 var onOpen = function() { | |
| 117 resolve(section); | |
| 118 }; | |
| 119 section.addEventListener('iron-overlay-opened', onOpen); | |
| 120 section.open(address); // Opening the dialog will add the item. | |
| 121 Polymer.dom.flush(); | |
| 122 }); | |
| 123 }, | |
| 124 | |
| 125 /** | |
| 76 * Creates the Edit Credit Card dialog. | 126 * Creates the Edit Credit Card dialog. |
| 77 * @param {!chrome.autofillPrivate.CreditCardEntry} creditCardItem | 127 * @param {!chrome.autofillPrivate.CreditCardEntry} creditCardItem |
| 78 * @return {!Object} | 128 * @return {!Object} |
| 79 */ | 129 */ |
| 80 createCreditCardDialog_: function(creditCardItem) { | 130 createCreditCardDialog_: function(creditCardItem) { |
| 81 var section = document.createElement('settings-credit-card-edit-dialog'); | 131 var section = document.createElement('settings-credit-card-edit-dialog'); |
| 82 document.body.appendChild(section); | 132 document.body.appendChild(section); |
| 83 section.open(creditCardItem); // Opening the dialog will add the item. | 133 section.open(creditCardItem); // Opening the dialog will add the item. |
| 84 Polymer.dom.flush(); | 134 Polymer.dom.flush(); |
| 85 return section; | 135 return section; |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 203 done(); | 253 done(); |
| 204 }); | 254 }); |
| 205 | 255 |
| 206 MockInteractions.tap(creditCardDialog.$.saveButton); | 256 MockInteractions.tap(creditCardDialog.$.saveButton); |
| 207 }), | 257 }), |
| 208 | 258 |
| 209 test('verifyCancelCreditCardEdit', function(done) { | 259 test('verifyCancelCreditCardEdit', function(done) { |
| 210 var creditCard = FakeDataMaker.emptyCreditCardEntry(); | 260 var creditCard = FakeDataMaker.emptyCreditCardEntry(); |
| 211 var creditCardDialog = self.createCreditCardDialog_(creditCard); | 261 var creditCardDialog = self.createCreditCardDialog_(creditCard); |
| 212 | 262 |
| 213 creditCardDialog.addEventListener('save-credit-card', function(event) { | 263 creditCardDialog.addEventListener('save-credit-card', function() { |
| 214 // Fail the test because the save event should not be called when cancel | 264 // Fail the test because the save event should not be called when cancel |
| 215 // is clicked. | 265 // is clicked. |
| 216 assertTrue(false); | 266 assertTrue(false); |
| 217 done(); | 267 done(); |
| 218 }); | 268 }); |
| 219 | 269 |
| 220 creditCardDialog.addEventListener('iron-overlay-closed', function(event) { | 270 creditCardDialog.addEventListener('iron-overlay-closed', function() { |
| 221 // Test is |done| in a timeout in order to ensure that | 271 // Test is |done| in a timeout in order to ensure that |
| 222 // 'save-credit-card' is NOT fired after this test. | 272 // 'save-credit-card' is NOT fired after this test. |
| 223 window.setTimeout(done, 100); | 273 window.setTimeout(done, 100); |
| 224 }); | 274 }); |
| 225 | 275 |
| 226 MockInteractions.tap(creditCardDialog.$.cancelButton); | 276 MockInteractions.tap(creditCardDialog.$.cancelButton); |
| 227 }), | 277 }), |
| 228 | 278 |
| 229 test('verifyAddressCount', function() { | 279 test('verifyAddressCount', function() { |
| 230 var addresses = [ | 280 var addresses = [ |
| (...skipping 20 matching lines...) Expand all Loading... | |
| 251 var addressList = section.$.addressList; | 301 var addressList = section.$.addressList; |
| 252 var row = addressList.children[1]; // Skip over the template. | 302 var row = addressList.children[1]; // Skip over the template. |
| 253 assertTrue(!!row); | 303 assertTrue(!!row); |
| 254 | 304 |
| 255 var addressSummary = address.metadata.summaryLabel + | 305 var addressSummary = address.metadata.summaryLabel + |
| 256 address.metadata.summarySublabel; | 306 address.metadata.summarySublabel; |
| 257 | 307 |
| 258 assertEquals(addressSummary, | 308 assertEquals(addressSummary, |
| 259 row.querySelector('#addressSummary').textContent); | 309 row.querySelector('#addressSummary').textContent); |
| 260 }); | 310 }); |
| 311 | |
| 312 test('verifyAddAddressDialog', function(done) { | |
|
michaelpg
2016/06/22 00:25:14
here & below: return the Promise instead of using
hcarmona
2016/06/24 18:27:51
Nice! Didn't know you could return a promise in th
michaelpg
2016/06/27 21:29:18
Yep. See last paragraph: https://www.chromium.org/
| |
| 313 self.createAddressDialog_( | |
| 314 FakeDataMaker.emptyAddressEntry()).then(function(dialog){ | |
|
michaelpg
2016/06/22 00:25:14
missing space before {
hcarmona
2016/06/24 18:27:51
Done.
| |
| 315 var title = dialog.$$('.title'); | |
| 316 assertEquals(self.i18nStrings.addAddressTitle, title.textContent); | |
| 317 // Shouldn't be possible to save until something is typed in. | |
| 318 assertTrue(dialog.$.saveButton.disabled); | |
| 319 done(); | |
| 320 }); | |
| 321 }); | |
| 322 | |
| 323 test('verifyEditAddressDialog', function(done) { | |
| 324 self.createAddressDialog_( | |
|
michaelpg
2016/06/22 00:25:14
return self.createAddressDialog_(...
hcarmona
2016/06/24 18:27:51
Done.
| |
| 325 FakeDataMaker.addressEntry()).then(function(dialog){ | |
|
michaelpg
2016/06/22 00:25:14
missing space before {
hcarmona
2016/06/24 18:27:51
Done.
| |
| 326 var title = dialog.$$('.title'); | |
| 327 assertEquals(self.i18nStrings.editAddressTitle, title.textContent); | |
| 328 // Should be possible to save when editing because fields are populated. | |
| 329 assertFalse(dialog.$.saveButton.disabled); | |
| 330 done(); | |
| 331 }); | |
| 332 }); | |
| 333 | |
| 334 test('verifyCountryIsSaved', function(done) { | |
| 335 var address = FakeDataMaker.emptyAddressEntry(); | |
| 336 self.createAddressDialog_(address).then(function(dialog) { | |
| 337 assertEquals(undefined, dialog.$.countryList.selected); | |
| 338 assertEquals(undefined, address.countryCode); | |
| 339 dialog.$.countryList.selected = 'US'; | |
| 340 Polymer.dom.flush(); | |
| 341 assertEquals('US', dialog.$.countryList.selected); | |
| 342 assertEquals('US', address.countryCode); | |
| 343 done(); | |
| 344 }); | |
| 345 }); | |
| 346 | |
| 347 test('verifyPhoneAndEmailAreSaved', function(done) { | |
| 348 var address = FakeDataMaker.emptyAddressEntry(); | |
| 349 self.createAddressDialog_(address).then(function(dialog) { | |
| 350 assertFalse(!!dialog.$.phoneInput.value); | |
|
michaelpg
2016/06/22 00:25:14
why not assertEqual('', dialog.$.phoneInput.value)
hcarmona
2016/06/24 18:27:51
Done.
| |
| 351 assertFalse(!!(address.phoneNumbers && address.phoneNumbers[0])); | |
| 352 | |
| 353 assertFalse(!!dialog.$.emailInput.value); | |
| 354 assertFalse(!!(address.emailAddresses && address.emailAddresses[0])); | |
| 355 | |
| 356 var phoneNumber = '(555) 555-5555'; | |
| 357 var emailAddress = 'no-reply@chromium.org'; | |
| 358 | |
| 359 dialog.$.phoneInput.value = phoneNumber; | |
| 360 dialog.$.emailInput.value = emailAddress; | |
| 361 | |
| 362 Polymer.dom.flush(); | |
| 363 | |
| 364 assertEquals(phoneNumber, dialog.$.phoneInput.value); | |
| 365 assertEquals(phoneNumber, address.phoneNumbers[0]); | |
| 366 | |
| 367 assertEquals(emailAddress, dialog.$.emailInput.value); | |
| 368 assertEquals(emailAddress, address.emailAddresses[0]); | |
| 369 | |
| 370 done(); | |
| 371 }); | |
| 372 }); | |
| 373 | |
| 374 // Test will set a value of 'foo' in each text field and verify that the | |
| 375 // save button is enabled, then it will clear the field and verify that the | |
| 376 // save button is disabled. Test passes after all elements have been tested. | |
| 377 test('verifySaveIsNotClickableIfAllInputFieldsAreEmpty', function(done) { | |
| 378 self.createAddressDialog_( | |
| 379 FakeDataMaker.emptyAddressEntry()).then(function(dialog){ | |
| 380 var saveButton = dialog.$.saveButton; | |
| 381 var testElements = | |
| 382 dialog.$.dialog.querySelectorAll('paper-input,paper-textarea'); | |
| 383 | |
| 384 // Default country is 'US' expecting: Name, Organization, | |
| 385 // Street address, City, State, ZIP code, Phone, and Email. | |
| 386 assertEquals(8, testElements.length); | |
| 387 | |
| 388 var testFunctions = { | |
| 389 index: 0, | |
| 390 currentInput: null, | |
| 391 nextTest: null, | |
| 392 | |
| 393 beginTest: function() { | |
| 394 this.updateCurrentInput(); | |
| 395 }, | |
| 396 | |
| 397 ensureDisabledAndPopulateInput: function() { | |
| 398 this.nextTest = this.ensureEnabledAndClearInput.bind(this); | |
| 399 | |
| 400 assertTrue(saveButton.disabled); | |
| 401 this.currentInput.value = 'foo'; | |
| 402 Polymer.dom.flush(); | |
| 403 }, | |
| 404 | |
| 405 ensureEnabledAndClearInput: function() { | |
| 406 this.nextTest = this.updateCurrentInput.bind(this); | |
| 407 | |
| 408 assertFalse(saveButton.disabled); | |
| 409 this.currentInput.value = ''; | |
| 410 Polymer.dom.flush(); | |
| 411 }, | |
| 412 | |
| 413 updateCurrentInput: function() { | |
| 414 this.currentInput = testElements[this.index++]; | |
| 415 | |
| 416 if (this.currentInput) | |
| 417 this.ensureDisabledAndPopulateInput(); | |
| 418 else | |
| 419 this.finishTest(); | |
| 420 }, | |
| 421 | |
| 422 finishTest: function() { | |
| 423 this.nextTest = null; | |
| 424 | |
| 425 assertTrue(saveButton.disabled); | |
| 426 done(); | |
| 427 }, | |
| 428 }; | |
| 429 | |
| 430 dialog.addEventListener('on-update-can-save', function() { | |
| 431 if (testFunctions.nextTest) | |
| 432 testFunctions.nextTest(); | |
| 433 }); | |
| 434 | |
| 435 testFunctions.beginTest(); | |
| 436 }); | |
| 437 }); | |
| 438 | |
| 439 // Setting the country should allow the address to be saved. | |
| 440 test('verifySaveIsNotClickableIfCountryNotSet', function(done) { | |
| 441 self.createAddressDialog_( | |
| 442 FakeDataMaker.emptyAddressEntry()).then(function(dialog){ | |
| 443 var saveButton = dialog.$.saveButton; | |
| 444 var countries = dialog.$.countryList; | |
| 445 | |
| 446 var testFunctions = { | |
| 447 nextTest: null, | |
| 448 | |
| 449 beginTest: function() { | |
| 450 this.ensureDisabledAndPopulateInput(); | |
| 451 }, | |
| 452 | |
| 453 ensureDisabledAndPopulateInput: function() { | |
| 454 this.nextTest = this.ensureEnabledAndClearInput.bind(this); | |
| 455 | |
| 456 assertTrue(saveButton.disabled); | |
| 457 countries.selected = 'US'; | |
| 458 Polymer.dom.flush(); | |
| 459 }, | |
| 460 | |
| 461 ensureEnabledAndClearInput: function() { | |
| 462 this.nextTest = this.finishTest.bind(this); | |
| 463 | |
| 464 assertFalse(saveButton.disabled); | |
| 465 countries.selected = ''; | |
| 466 Polymer.dom.flush(); | |
| 467 }, | |
| 468 | |
| 469 finishTest: function() { | |
| 470 this.nextTest = null; | |
| 471 | |
| 472 assertTrue(saveButton.disabled); | |
| 473 done(); | |
| 474 }, | |
| 475 }; | |
| 476 | |
| 477 dialog.addEventListener('on-update-can-save', function() { | |
| 478 if (testFunctions.nextTest) | |
| 479 testFunctions.nextTest(); | |
| 480 }); | |
| 481 | |
| 482 testFunctions.beginTest(); | |
| 483 }); | |
| 484 }); | |
| 485 | |
| 486 // Test will timeout if save-address event is not fired. | |
| 487 test('verifyDefaultCountryIsAppliedWhenSaving', function(done) { | |
| 488 var address = FakeDataMaker.emptyAddressEntry(); | |
| 489 address.companyName = 'Google'; | |
| 490 self.createAddressDialog_(address).then(function(dialog) { | |
| 491 // Verify |countryCode| is not set. | |
| 492 assertFalse(!!address.countryCode); | |
| 493 | |
| 494 // Finish the test after dialog has fired the 'save-address' event. | |
| 495 dialog.addEventListener('save-address', function(event) { | |
| 496 // 'US' is the default country for these tests. | |
| 497 assertEquals('US', event.detail.countryCode); | |
| 498 done(); | |
| 499 }); | |
| 500 | |
| 501 MockInteractions.tap(dialog.$.saveButton); | |
| 502 }); | |
| 503 }); | |
| 504 | |
| 505 test('verifyCancelDoesNotSaveAddress', function(done) { | |
| 506 self.createAddressDialog_( | |
| 507 FakeDataMaker.addressEntry()).then(function(dialog){ | |
| 508 dialog.addEventListener('save-address', function() { | |
| 509 // Fail the test because the save event should not be called when | |
| 510 // cancel is clicked. | |
| 511 assertTrue(false); | |
| 512 done(); | |
| 513 }); | |
| 514 | |
| 515 dialog.addEventListener('iron-overlay-closed', function() { | |
| 516 // Test is |done| in a timeout in order to ensure that | |
| 517 // 'save-address' is NOT fired after this test. | |
| 518 window.setTimeout(done, 100); | |
| 519 }); | |
| 520 | |
| 521 MockInteractions.tap(dialog.$.cancelButton); | |
| 522 }); | |
| 523 }); | |
| 524 | |
| 525 // US address has 3 fields on the same line. | |
| 526 test('verifyEditingUSAddress', function(done) { | |
| 527 var address = FakeDataMaker.emptyAddressEntry(); | |
| 528 | |
| 529 address.fullNames = [ 'Name' ]; | |
| 530 address.companyName = 'Organization'; | |
| 531 address.addressLines = 'Street address'; | |
| 532 address.addressLevel2 = 'City'; | |
| 533 address.addressLevel1 = 'State'; | |
| 534 address.postalCode = 'ZIP code'; | |
| 535 address.countryCode = 'US'; | |
| 536 address.phoneNumbers = [ 'Phone' ]; | |
| 537 address.emailAddresses = [ 'Email' ]; | |
| 538 | |
| 539 self.createAddressDialog_(address).then(function(dialog) { | |
| 540 var rows = dialog.$.dialog.querySelectorAll('.address-row'); | |
| 541 assertEquals(6, rows.length); | |
| 542 | |
| 543 // Name | |
| 544 var row = rows[0]; | |
| 545 var cols = row.querySelectorAll('.address-column'); | |
| 546 assertEquals(1, cols.length); | |
| 547 assertEquals(address.fullNames[0], cols[0].value); | |
| 548 // Organization | |
| 549 row = rows[1]; | |
| 550 cols = row.querySelectorAll('.address-column'); | |
| 551 assertEquals(1, cols.length); | |
| 552 assertEquals(address.companyName, cols[0].value); | |
| 553 // Street address | |
| 554 row = rows[2]; | |
| 555 cols = row.querySelectorAll('.address-column'); | |
| 556 assertEquals(1, cols.length); | |
| 557 assertEquals(address.addressLines, cols[0].value); | |
| 558 // City, State, ZIP code | |
| 559 row = rows[3]; | |
| 560 cols = row.querySelectorAll('.address-column'); | |
| 561 assertEquals(3, cols.length); | |
| 562 assertEquals(address.addressLevel2, cols[0].value); | |
| 563 assertEquals(address.addressLevel1, cols[1].value); | |
| 564 assertEquals(address.postalCode, cols[2].value); | |
| 565 // Country | |
| 566 row = rows[4]; | |
| 567 cols = row.querySelectorAll('.address-column'); | |
| 568 assertEquals(1, cols.length); | |
| 569 assertEquals('United States', cols[0].value); | |
| 570 // Phone, Email | |
| 571 row = rows[5]; | |
| 572 cols = row.querySelectorAll('.address-column'); | |
| 573 assertEquals(2, cols.length); | |
| 574 assertEquals(address.phoneNumbers[0], cols[0].value); | |
| 575 assertEquals(address.emailAddresses[0], cols[1].value); | |
| 576 | |
| 577 done(); | |
| 578 }); | |
| 579 }); | |
| 580 | |
| 581 // GB address has 1 field per line for all lines that change. | |
| 582 test('verifyEditingGBAddress', function(done) { | |
| 583 var address = FakeDataMaker.emptyAddressEntry(); | |
| 584 | |
| 585 address.fullNames = [ 'Name' ]; | |
| 586 address.companyName = 'Organization'; | |
| 587 address.addressLines = 'Street address'; | |
| 588 address.addressLevel2 = 'Post town'; | |
| 589 address.addressLevel1 = 'County'; | |
| 590 address.postalCode = 'Postal code'; | |
| 591 address.countryCode = 'GB'; | |
| 592 address.phoneNumbers = [ 'Phone' ]; | |
| 593 address.emailAddresses = [ 'Email' ]; | |
| 594 | |
| 595 self.createAddressDialog_(address).then(function(dialog) { | |
| 596 var rows = dialog.$.dialog.querySelectorAll('.address-row'); | |
| 597 assertEquals(8, rows.length); | |
| 598 | |
| 599 // Name | |
| 600 var row = rows[0]; | |
| 601 var cols = row.querySelectorAll('.address-column'); | |
| 602 assertEquals(1, cols.length); | |
| 603 assertEquals(address.fullNames[0], cols[0].value); | |
| 604 // Organization | |
| 605 row = rows[1]; | |
| 606 cols = row.querySelectorAll('.address-column'); | |
| 607 assertEquals(1, cols.length); | |
| 608 assertEquals(address.companyName, cols[0].value); | |
| 609 // Street address | |
| 610 row = rows[2]; | |
| 611 cols = row.querySelectorAll('.address-column'); | |
| 612 assertEquals(1, cols.length); | |
| 613 assertEquals(address.addressLines, cols[0].value); | |
| 614 // Post Town | |
| 615 row = rows[3]; | |
| 616 cols = row.querySelectorAll('.address-column'); | |
| 617 assertEquals(1, cols.length); | |
| 618 assertEquals(address.addressLevel2, cols[0].value); | |
| 619 // County | |
| 620 row = rows[4]; | |
| 621 cols = row.querySelectorAll('.address-column'); | |
| 622 assertEquals(1, cols.length); | |
| 623 assertEquals(address.addressLevel1, cols[0].value); | |
| 624 // Postal code | |
| 625 row = rows[5]; | |
| 626 cols = row.querySelectorAll('.address-column'); | |
| 627 assertEquals(1, cols.length); | |
| 628 assertEquals(address.postalCode, cols[0].value); | |
| 629 // Country | |
| 630 row = rows[6]; | |
| 631 cols = row.querySelectorAll('.address-column'); | |
| 632 assertEquals(1, cols.length); | |
| 633 assertEquals('United Kingdom', cols[0].value); | |
| 634 // Phone, Email | |
| 635 row = rows[7]; | |
| 636 cols = row.querySelectorAll('.address-column'); | |
| 637 assertEquals(2, cols.length); | |
| 638 assertEquals(address.phoneNumbers[0], cols[0].value); | |
| 639 assertEquals(address.emailAddresses[0], cols[1].value); | |
| 640 | |
| 641 done(); | |
| 642 }); | |
| 643 }); | |
| 644 | |
| 645 // IL address has 2 fields on the same line and is an RTL locale. | |
| 646 // RTL locale shouldn't affect this test. | |
| 647 test('verifyEditingILAddress', function(done) { | |
| 648 var address = FakeDataMaker.emptyAddressEntry(); | |
| 649 | |
| 650 address.fullNames = [ 'Name' ]; | |
| 651 address.companyName = 'Organization'; | |
| 652 address.addressLines = 'Street address'; | |
| 653 address.addressLevel2 = 'City'; | |
| 654 address.postalCode = 'Postal code'; | |
| 655 address.countryCode = 'IL'; | |
| 656 address.phoneNumbers = [ 'Phone' ]; | |
| 657 address.emailAddresses = [ 'Email' ]; | |
| 658 | |
| 659 self.createAddressDialog_(address).then(function(dialog) { | |
| 660 var rows = dialog.$.dialog.querySelectorAll('.address-row'); | |
| 661 assertEquals(6, rows.length); | |
| 662 | |
| 663 // Name | |
| 664 var row = rows[0]; | |
| 665 var cols = row.querySelectorAll('.address-column'); | |
| 666 assertEquals(1, cols.length); | |
| 667 assertEquals(address.fullNames[0], cols[0].value); | |
| 668 // Organization | |
| 669 row = rows[1]; | |
| 670 cols = row.querySelectorAll('.address-column'); | |
| 671 assertEquals(1, cols.length); | |
| 672 assertEquals(address.companyName, cols[0].value); | |
| 673 // Street address | |
| 674 row = rows[2]; | |
| 675 cols = row.querySelectorAll('.address-column'); | |
| 676 assertEquals(1, cols.length); | |
| 677 assertEquals(address.addressLines, cols[0].value); | |
| 678 // City, Postal code | |
| 679 row = rows[3]; | |
| 680 cols = row.querySelectorAll('.address-column'); | |
| 681 assertEquals(2, cols.length); | |
| 682 assertEquals(address.addressLevel2, cols[0].value); | |
| 683 assertEquals(address.postalCode, cols[1].value); | |
| 684 // Country | |
| 685 row = rows[4]; | |
| 686 cols = row.querySelectorAll('.address-column'); | |
| 687 assertEquals(1, cols.length); | |
| 688 assertEquals('Israel', cols[0].value); | |
| 689 // Phone, Email | |
| 690 row = rows[5]; | |
| 691 cols = row.querySelectorAll('.address-column'); | |
| 692 assertEquals(2, cols.length); | |
| 693 assertEquals(address.phoneNumbers[0], cols[0].value); | |
| 694 assertEquals(address.emailAddresses[0], cols[1].value); | |
| 695 | |
| 696 done(); | |
| 697 }); | |
| 698 }); | |
| 699 | |
| 700 // US has an extra field 'State'. Validate that this field is | |
| 701 // persisted when switching to IL then back to US. | |
| 702 test('verifyAddressPersistanceWhenSwitchingCountries', function(done) { | |
| 703 var address = FakeDataMaker.emptyAddressEntry(); | |
| 704 address.countryCode = 'US'; | |
| 705 | |
| 706 self.createAddressDialog_(address).then(function(dialog) { | |
| 707 var city = 'Los Angeles'; | |
| 708 var state = 'CA'; | |
| 709 var zip = '90291'; | |
| 710 | |
| 711 // US: | |
| 712 var rows = dialog.$.dialog.querySelectorAll('.address-row'); | |
| 713 assertEquals(6, rows.length); | |
| 714 | |
| 715 // City, State, ZIP code | |
| 716 var row = rows[3]; | |
| 717 var cols = row.querySelectorAll('.address-column'); | |
| 718 assertEquals(3, cols.length); | |
| 719 cols[0].value = city; | |
| 720 cols[1].value = state; | |
| 721 cols[2].value = zip; | |
| 722 | |
| 723 Polymer.dom.flush(); | |
| 724 | |
| 725 var validateCountry = 'IL'; | |
| 726 | |
| 727 // Triggered several times. | |
| 728 dialog.addEventListener('on-update-address-wrapper', function() { | |
| 729 // Country is still updating. Do nothing. | |
| 730 if (validateCountry != dialog.$.countryList.selected) | |
| 731 return; | |
| 732 | |
| 733 if (validateCountry == 'IL') { | |
| 734 // IL: | |
| 735 rows = dialog.$.dialog.querySelectorAll('.address-row'); | |
| 736 assertEquals(6, rows.length); | |
| 737 | |
| 738 // City, Postal code | |
| 739 row = rows[3]; | |
| 740 cols = row.querySelectorAll('.address-column'); | |
| 741 assertEquals(2, cols.length); | |
| 742 assertEquals(city, cols[0].value); | |
| 743 assertEquals(zip, cols[1].value); | |
| 744 | |
| 745 dialog.$.countryList.selected = 'US'; | |
| 746 Polymer.dom.flush(); | |
| 747 | |
| 748 validateCountry = 'US'; | |
| 749 } else if (validateCountry == 'US') { | |
| 750 // US: | |
| 751 var rows = dialog.$.dialog.querySelectorAll('.address-row'); | |
| 752 assertEquals(6, rows.length); | |
| 753 | |
| 754 // City, State, ZIP code | |
| 755 row = rows[3]; | |
| 756 cols = row.querySelectorAll('.address-column'); | |
| 757 assertEquals(3, cols.length); | |
| 758 assertEquals(city, cols[0].value); | |
| 759 assertEquals(state, cols[1].value); | |
| 760 assertEquals(zip, cols[2].value); | |
| 761 | |
| 762 done(); | |
| 763 } else { | |
| 764 assertTrue(false, 'Test state is invalid. Just fail.'); | |
| 765 done(); | |
| 766 } | |
| 767 }); | |
| 768 | |
| 769 dialog.$.countryList.selected = 'IL'; | |
| 770 Polymer.dom.flush(); | |
| 771 }); | |
| 772 }); | |
| 261 }); | 773 }); |
| 262 | 774 |
| 263 mocha.run(); | 775 mocha.run(); |
| 264 }); | 776 }); |
| OLD | NEW |