Bug 1303515 - Part 2: Add browser test for autofill update doorhanger. r=lchang draft
authorsteveck-chung <schung@mozilla.com>
Wed, 14 Jun 2017 18:53:06 +0800
changeset 601586 47ba1f3f5e6ff53939fff645bae7dcb8498f26cb
parent 601585 ad321759a676eab96c1c21237ac608edaad0ac3f
child 601587 f8b01a0bc55f4c22d2d82c96ed1892eae0281af4
push id66125
push userbmo:schung@mozilla.com
push dateWed, 28 Jun 2017 22:38:14 +0000
reviewerslchang
bugs1303515
milestone56.0a1
Bug 1303515 - Part 2: Add browser test for autofill update doorhanger. r=lchang MozReview-Commit-ID: 7FYmaF4QarT
browser/extensions/formautofill/test/browser/browser.ini
browser/extensions/formautofill/test/browser/browser_update_doorhanger.js
--- a/browser/extensions/formautofill/test/browser/browser.ini
+++ b/browser/extensions/formautofill/test/browser/browser.ini
@@ -6,8 +6,9 @@ support-files =
 
 [browser_autocomplete_footer.js]
 [browser_check_installed.js]
 [browser_editProfileDialog.js]
 [browser_first_time_use_doorhanger.js]
 [browser_privacyPreferences.js]
 [browser_manageProfilesDialog.js]
 [browser_submission_in_private_mode.js]
+[browser_update_doorhanger.js]
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/browser/browser_update_doorhanger.js
@@ -0,0 +1,120 @@
+"use strict";
+
+const FORM_URL = "http://mochi.test:8888/browser/browser/extensions/formautofill/test/browser/autocomplete_basic.html";
+
+add_task(async function test_update_address() {
+  await saveAddress(TEST_ADDRESS_1);
+  let addresses = await getAddresses();
+  is(addresses.length, 1, "1 address in storage");
+
+  await BrowserTestUtils.withNewTab({gBrowser, url: FORM_URL},
+    async function(browser) {
+      let promiseShown = BrowserTestUtils.waitForEvent(PopupNotifications.panel,
+                                                       "popupshown");
+      await ContentTask.spawn(browser, null, async function() {
+        content.document.querySelector("form #organization").focus();
+      });
+
+      await BrowserTestUtils.synthesizeKey("VK_DOWN", {}, browser);
+      await expectPopupOpen(browser);
+      await BrowserTestUtils.synthesizeKey("VK_DOWN", {}, browser);
+      await BrowserTestUtils.synthesizeKey("VK_RETURN", {}, browser);
+
+      await ContentTask.spawn(browser, null, async function() {
+        let form = content.document.getElementById("form");
+        let org = form.querySelector("#organization");
+        await new Promise(resolve => setTimeout(resolve, 1000));
+        org.value = "Mozilla";
+
+        // Wait 1000ms before submission to make sure the input value applied
+        await new Promise(resolve => setTimeout(resolve, 1000));
+        form.querySelector("input[type=submit]").click();
+      });
+
+      await promiseShown;
+      let notificationElement = PopupNotifications.panel.firstChild;
+      notificationElement.button.click();
+    }
+  );
+
+  addresses = await getAddresses();
+  is(addresses.length, 1, "Still 1 address in storage");
+  is(addresses[0].organization, "Mozilla", "Verify the organization field");
+});
+
+add_task(async function test_create_new_address() {
+  let addresses = await getAddresses();
+  is(addresses.length, 1, "1 address in storage");
+
+  await BrowserTestUtils.withNewTab({gBrowser, url: FORM_URL},
+    async function(browser) {
+      let promiseShown = BrowserTestUtils.waitForEvent(PopupNotifications.panel,
+                                                       "popupshown");
+      await ContentTask.spawn(browser, null, async function() {
+        content.document.querySelector("form #tel").focus();
+      });
+
+      await BrowserTestUtils.synthesizeKey("VK_DOWN", {}, browser);
+      await expectPopupOpen(browser);
+      await BrowserTestUtils.synthesizeKey("VK_DOWN", {}, browser);
+      await BrowserTestUtils.synthesizeKey("VK_RETURN", {}, browser);
+
+      await ContentTask.spawn(browser, null, async function() {
+        let form = content.document.getElementById("form");
+        let tel = form.querySelector("#tel");
+        await new Promise(resolve => setTimeout(resolve, 1000));
+        tel.value = "+1-234-567-890";
+
+        // Wait 1000ms before submission to make sure the input value applied
+        await new Promise(resolve => setTimeout(resolve, 1000));
+        form.querySelector("input[type=submit]").click();
+      });
+
+      await promiseShown;
+      let notificationElement = PopupNotifications.panel.firstChild;
+      notificationElement.secondaryButton.click();
+    }
+  );
+
+  addresses = await getAddresses();
+  is(addresses.length, 2, "2 addresses in storage");
+  is(addresses[1].tel, "+1-234-567-890", "Verify the tel field");
+});
+
+add_task(async function test_create_new_address_merge() {
+  let addresses = await getAddresses();
+  is(addresses.length, 2, "2 address in storage");
+
+  await BrowserTestUtils.withNewTab({gBrowser, url: FORM_URL},
+    async function(browser) {
+      let promiseShown = BrowserTestUtils.waitForEvent(PopupNotifications.panel,
+                                                       "popupshown");
+      await ContentTask.spawn(browser, null, async function() {
+        content.document.querySelector("form #tel").focus();
+      });
+
+      await BrowserTestUtils.synthesizeKey("VK_DOWN", {}, browser);
+      await expectPopupOpen(browser);
+      await BrowserTestUtils.synthesizeKey("VK_DOWN", {}, browser);
+      await BrowserTestUtils.synthesizeKey("VK_RETURN", {}, browser);
+
+      // Choose the latest address and revert to the original phone number
+      await ContentTask.spawn(browser, null, async function() {
+        let form = content.document.getElementById("form");
+        let tel = form.querySelector("#tel");
+        tel.value = "+1 617 253 5702";
+
+        // Wait 1000ms before submission to make sure the input value applied
+        await new Promise(resolve => setTimeout(resolve, 1000));
+        form.querySelector("input[type=submit]").click();
+      });
+
+      await promiseShown;
+      let notificationElement = PopupNotifications.panel.firstChild;
+      notificationElement.secondaryButton.click();
+    }
+  );
+
+  addresses = await getAddresses();
+  is(addresses.length, 2, "Still 2 addresses in storage");
+});