diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /browser/extensions/formautofill/test/browser/address/browser_address_doorhanger_ui.js | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'browser/extensions/formautofill/test/browser/address/browser_address_doorhanger_ui.js')
-rw-r--r-- | browser/extensions/formautofill/test/browser/address/browser_address_doorhanger_ui.js | 277 |
1 files changed, 277 insertions, 0 deletions
diff --git a/browser/extensions/formautofill/test/browser/address/browser_address_doorhanger_ui.js b/browser/extensions/formautofill/test/browser/address/browser_address_doorhanger_ui.js new file mode 100644 index 0000000000..9451054de9 --- /dev/null +++ b/browser/extensions/formautofill/test/browser/address/browser_address_doorhanger_ui.js @@ -0,0 +1,277 @@ +"use strict"; + +const { FormAutofill } = ChromeUtils.importESModule( + "resource://autofill/FormAutofill.sys.mjs" +); + +async function expectSavedAddresses(expectedCount) { + const addresses = await getAddresses(); + is( + addresses.length, + expectedCount, + `${addresses.length} address in the storage` + ); + return addresses; +} + +function verifyDoorhangerContent(saved, removed = {}) { + const rows = [ + ...getNotification().querySelectorAll(`.address-save-update-row-container`), + ]; + + let texts = rows.reduce((acc, cur) => acc + cur.textContent, ""); + for (const text of Object.values(saved)) { + ok(texts.includes(text), `Show ${text} in the doorhanger`); + texts = texts.replace(text, ""); + } + for (const text of Object.values(removed)) { + ok(texts.includes(text), `Show ${text} in the doorhanger (removed)`); + texts = texts.replace(text, ""); + } + is(texts.trim(), "", `Doorhanger shows all the submitted data`); +} + +function checkVisibility(element) { + return element.checkVisibility({ + checkOpacity: true, + checkVisibilityCSS: true, + }); +} + +function recordToFormSelector(record) { + let obj = {}; + for (const [key, value] of Object.entries(record)) { + obj[`#${key}`] = value; + } + return obj; +} + +add_setup(async function () { + await SpecialPowers.pushPrefEnv({ + set: [ + ["extensions.formautofill.addresses.capture.enabled", true], + ["extensions.formautofill.addresses.supported", "on"], + ], + }); +}); + +// Save address doorhanger should show description when users has no saved address +add_task(async function test_save_doorhanger_show_description() { + await expectSavedAddresses(0); + + await BrowserTestUtils.withNewTab( + { gBrowser, url: ADDRESS_FORM_URL }, + async function (browser) { + await showAddressDoorhanger(browser); + + const header = AutofillDoorhanger.header(getNotification()); + is(checkVisibility(header), true, "Should always show header"); + + const description = AutofillDoorhanger.description(getNotification()); + is( + checkVisibility(description), + true, + "Should show description when this is the first address saved" + ); + } + ); +}); + +// Save address doorhanger should not show description when users has at least one saved address +add_task(async function test_save_doorhanger_hide_description() { + await setStorage(TEST_ADDRESS_1); + await expectSavedAddresses(1); + + await BrowserTestUtils.withNewTab( + { gBrowser, url: ADDRESS_FORM_URL }, + async function (browser) { + await showAddressDoorhanger(browser); + + const header = AutofillDoorhanger.header(getNotification()); + is(checkVisibility(header), true, "Should always show header"); + + const description = AutofillDoorhanger.description(getNotification()); + is( + checkVisibility(description), + false, + "Should not show description when there is at least one saved address" + ); + } + ); + + await removeAllRecords(); +}); + +// Test open edit address popup and then click "learn more" button +add_task(async function test_click_learn_more_button_in_edit_doorhanger() { + await expectSavedAddresses(0); + + await BrowserTestUtils.withNewTab( + { gBrowser, url: ADDRESS_FORM_URL }, + async function (browser) { + await showAddressDoorhanger(browser); + + let tabOpenPromise = BrowserTestUtils.waitForNewTab(gBrowser, url => + url.endsWith(AddressSaveDoorhanger.learnMoreURL) + ); + await clickAddressDoorhangerButton( + ADDRESS_MENU_BUTTON, + ADDRESS_MENU_LEARN_MORE + ); + const tab = await tabOpenPromise; + gBrowser.removeTab(tab); + } + ); +}); + +add_task(async function test_click_address_setting_button_in_edit_doorhanger() { + await expectSavedAddresses(0); + + await BrowserTestUtils.withNewTab( + { gBrowser, url: ADDRESS_FORM_URL }, + async function (browser) { + await showAddressDoorhanger(browser); + + let tabOpenPromise = BrowserTestUtils.waitForNewTab( + gBrowser, + `about:preferences#${AddressSaveDoorhanger.preferenceURL}` + ); + await clickAddressDoorhangerButton( + ADDRESS_MENU_BUTTON, + ADDRESS_MENU_PREFENCE + ); + const tab = await tabOpenPromise; + gBrowser.removeTab(tab); + } + ); +}); + +add_task(async function test_address_display_in_save_doorhanger() { + await expectSavedAddresses(0); + + const TESTS = [ + { + description: "Test submit a form without email and tel fields", + form: { + "#given-name": "John", + "#family-name": "Doe", + "#organization": "Mozilla", + "#street-address": "123 Sesame Street", + }, + expectedSectionCount: 1, + }, + { + description: "Test submit a form with email field", + form: { + "#given-name": "John", + "#family-name": "Doe", + "#organization": "Mozilla", + "#street-address": "123 Sesame Street", + "#email": "test@mozilla.org", + }, + expectedSectionCount: 2, + }, + { + description: "Test submit a form with tel field", + form: { + "#given-name": "John", + "#family-name": "Doe", + "#organization": "Mozilla", + "#street-address": "123 Sesame Street", + "#tel": "+13453453456", + }, + expectedSectionCount: 2, + }, + ]; + + for (const TEST of TESTS) { + await BrowserTestUtils.withNewTab( + { gBrowser, url: ADDRESS_FORM_URL }, + async function (browser) { + info(TEST.description); + await showAddressDoorhanger(browser, TEST.form); + + is( + getNotification().querySelectorAll( + `.address-save-update-row-container` + ).length, + TEST.expectedSectionCount, + `Should have ${TEST.expectedSectionCount} address section` + ); + + // When the form has no country field, doorhanger shows the default region + verifyDoorhangerContent({ + ...TEST.form, + country: FormAutofill.DEFAULT_REGION, + }); + + await clickAddressDoorhangerButton(SECONDARY_BUTTON); + } + ); + } + + await removeAllRecords(); +}); + +add_task(async function test_show_added_text_in_update_doorhanger() { + await setStorage(TEST_ADDRESS_2); + await expectSavedAddresses(1); + + const form = { + ...TEST_ADDRESS_2, + + email: "test@mozilla.org", // Add email field + "given-name": TEST_ADDRESS_2["given-name"] + " Doe", // Append + "street-address": TEST_ADDRESS_2["street-address"] + " 4F", // Append + }; + + await BrowserTestUtils.withNewTab( + { gBrowser, url: ADDRESS_FORM_URL }, + async function (browser) { + await showAddressDoorhanger(browser, recordToFormSelector(form)); + + // When the form has no country field, doorhanger shows the default region + verifyDoorhangerContent({ + ...form, + country: FormAutofill.DEFAULT_REGION, + }); + + await clickAddressDoorhangerButton(SECONDARY_BUTTON); + } + ); + + await removeAllRecords(); +}); + +add_task(async function test_show_removed_text_in_update_doorhanger() { + const SAVED_ADDRESS = { + ...TEST_ADDRESS_2, + organization: "Mozilla", + }; + await setStorage(SAVED_ADDRESS); + await expectSavedAddresses(1); + + // We will ask whether users would like to update "Mozilla" to "mozilla" + const form = { + ...SAVED_ADDRESS, + + organization: SAVED_ADDRESS.organization.toLowerCase(), + }; + + await BrowserTestUtils.withNewTab( + { gBrowser, url: ADDRESS_FORM_URL }, + async function (browser) { + await showAddressDoorhanger(browser, recordToFormSelector(form)); + + // When the form has no country field, doorhanger shows the default region + verifyDoorhangerContent( + { ...form, country: FormAutofill.DEFAULT_REGION }, + { organization: SAVED_ADDRESS.organization } + ); + + await clickAddressDoorhangerButton(SECONDARY_BUTTON); + } + ); + + await removeAllRecords(); +}); |