Bug 1303510 - Part 2: Add browser test for doorhanger part, r=lchang draft
authorsteveck-chung <schung@mozilla.com>
Thu, 25 May 2017 11:12:52 +0800
changeset 592487 0b90803b8a005618a0a5800dbe061af684b82540
parent 592486 d0d3b16a512773f7c71c5d2826af38176991efa9
child 592488 2df86932f05586db8ea850435c868979537570b1
push id63419
push userbmo:schung@mozilla.com
push dateMon, 12 Jun 2017 10:08:37 +0000
reviewerslchang
bugs1303510
milestone55.0a1
Bug 1303510 - Part 2: Add browser test for doorhanger part, r=lchang MozReview-Commit-ID: LKFuW3e5scm
browser/extensions/formautofill/test/browser/browser.ini
browser/extensions/formautofill/test/browser/browser_first_time_use_doorhanger.js
--- a/browser/extensions/formautofill/test/browser/browser.ini
+++ b/browser/extensions/formautofill/test/browser/browser.ini
@@ -1,11 +1,12 @@
 [DEFAULT]
 head = head.js
 
 support-files =
   ../fixtures/autocomplete_basic.html
 
 [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]
new file mode 100644
--- /dev/null
+++ b/browser/extensions/formautofill/test/browser/browser_first_time_use_doorhanger.js
@@ -0,0 +1,87 @@
+"use strict";
+
+const FORM_URL = "http://mochi.test:8888/browser/browser/extensions/formautofill/test/browser/autocomplete_basic.html";
+const FTU_PREF = "extensions.formautofill.firstTimeUse";
+const ENABLED_PREF = "extensions.formautofill.addresses.enabled";
+
+registerCleanupFunction(async function() {
+  let addresses = await getAddresses();
+  if (addresses.length) {
+    await removeAddresses(addresses.map(address => address.guid));
+  }
+});
+
+add_task(async function test_first_time_save() {
+  let addresses = await getAddresses();
+  is(addresses.length, 0, "No profile in storage");
+  await SpecialPowers.pushPrefEnv({
+    "set": [
+      [FTU_PREF, true],
+      [ENABLED_PREF, true],
+    ],
+  });
+
+  await BrowserTestUtils.withNewTab({gBrowser, url: FORM_URL},
+    async function(browser) {
+      let promiseShown = BrowserTestUtils.waitForEvent(PopupNotifications.panel,
+                                                       "popupshown");
+      let tabPromise = BrowserTestUtils.waitForNewTab(gBrowser, "about:preferences#privacy");
+      await ContentTask.spawn(browser, null, async function() {
+        let form = content.document.getElementById("form");
+        form.querySelector("#organization").focus();
+        form.querySelector("#organization").value = "Sesame Street";
+        form.querySelector("#street-address").value = "123 Sesame Street";
+        form.querySelector("#tel").value = "1-345-345-3456";
+
+        // Wait 500ms before submission to make sure the input value applied
+        setTimeout(() => {
+          form.querySelector("input[type=submit]").click();
+        }, 500);
+      });
+
+      await promiseShown;
+      let notificationElement = PopupNotifications.panel.firstChild;
+      // Open the panel via link
+      let link = notificationElement.querySelector("popupnotificationcontent label");
+      link.click();
+      let tab = await tabPromise;
+      ok(tab, "Privacy panel opened");
+      await BrowserTestUtils.removeTab(tab);
+    }
+  );
+
+  addresses = await getAddresses();
+  is(addresses.length, 1, "Profile saved");
+  let ftuPref = SpecialPowers.getBoolPref(FTU_PREF);
+  is(ftuPref, false, "First time use flag is false");
+});
+
+add_task(async function test_non_first_time_save() {
+  let addresses = await getAddresses();
+  let ftuPref = SpecialPowers.getBoolPref(FTU_PREF);
+  is(ftuPref, false, "First time use flag is false");
+  is(addresses.length, 1, "1 address in storage");
+
+  await BrowserTestUtils.withNewTab({gBrowser, url: FORM_URL},
+    async function(browser) {
+      await ContentTask.spawn(browser, null, async function() {
+        let form = content.document.getElementById("form");
+        form.querySelector("#organization").focus();
+        form.querySelector("#organization").value = "Mozilla";
+        form.querySelector("#street-address").value = "331 E. Evelyn Avenue";
+        form.querySelector("#tel").value = "1-650-903-0800";
+
+        // Wait 500ms before submission to make sure the input value applied
+        setTimeout(() => {
+          form.querySelector("input[type=submit]").click();
+        }, 500);
+      });
+
+      await new Promise(resolve => setTimeout(resolve, 1000));
+      is(PopupNotifications.panel.state, "closed", "Doorhanger is hidden");
+    }
+  );
+
+  addresses = await getAddresses();
+  is(addresses.length, 2, "Another address saved");
+});