Bug 1375775 - test cases for reusable tourset;r=mossop draft
authorgasolin <gasolin@gmail.com>
Fri, 07 Jul 2017 11:52:33 +0800
changeset 606527 227b666431fa0dba121392be0d11d0859e71c639
parent 606526 801f0eae5e22a6023cb298bc79b774d32f1c35e9
child 636780 1517b21622b9d319e43cfcf3122be5f421b198ac
push id67714
push userbmo:gasolin@mozilla.com
push dateTue, 11 Jul 2017 01:35:10 +0000
reviewersmossop
bugs1375775
milestone56.0a1
Bug 1375775 - test cases for reusable tourset;r=mossop MozReview-Commit-ID: IlxgYRuFpCc
browser/extensions/onboarding/test/browser/browser.ini
browser/extensions/onboarding/test/browser/browser_onboarding_notification.js
browser/extensions/onboarding/test/browser/browser_onboarding_tours.js
browser/extensions/onboarding/test/browser/browser_onboarding_tourset.js
browser/extensions/onboarding/test/browser/head.js
--- a/browser/extensions/onboarding/test/browser/browser.ini
+++ b/browser/extensions/onboarding/test/browser/browser.ini
@@ -1,6 +1,7 @@
 [DEFAULT]
 support-files =
   head.js
 
 [browser_onboarding_notification.js]
 [browser_onboarding_tours.js]
+[browser_onboarding_tourset.js]
--- a/browser/extensions/onboarding/test/browser/browser_onboarding_notification.js
+++ b/browser/extensions/onboarding/test/browser/browser_onboarding_notification.js
@@ -1,16 +1,15 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 "use strict";
 
 add_task(async function test_show_tour_notifications_in_order() {
   resetOnboardingDefaultState();
-  await SpecialPowers.pushPrefEnv({set: [["browser.onboarding.enabled", true]]});
 
   let tourIds = TOUR_IDs;
   let tab = null;
   let targetTourId = null;
   let reloadPromise = null;
   let expectedPrefUpdate = null;
   for (let i = 0; i < tourIds.length; ++i) {
     expectedPrefUpdate = promisePrefUpdated("browser.onboarding.notification.lastPrompted", tourIds[i]);
@@ -38,17 +37,16 @@ add_task(async function test_show_tour_n
   targetTourId = await getCurrentNotificationTargetTourId(tab.linkedBrowser);
   is(targetTourId, tourIds[0], "Should loop back to the 1st tour notification after showing all notifications");
   await expectedPrefUpdate;
   await BrowserTestUtils.removeTab(tab);
 });
 
 add_task(async function test_open_target_tour_from_notification() {
   resetOnboardingDefaultState();
-  await SpecialPowers.pushPrefEnv({set: [["browser.onboarding.enabled", true]]});
 
   let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
   await BrowserTestUtils.loadURI(tab.linkedBrowser, ABOUT_NEWTAB_URL);
   await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
   await promiseTourNotificationOpened(tab.linkedBrowser);
   let targetTourId = await getCurrentNotificationTargetTourId(tab.linkedBrowser);
   await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-notification-action-btn", {}, tab.linkedBrowser);
   await promiseOnboardingOverlayOpened(tab.linkedBrowser);
@@ -56,17 +54,16 @@ add_task(async function test_open_target
 
   is(targetTourId, activeNavItemId, "Should navigate to the target tour item.");
   is(`${targetTourId}-page`, activePageId, "Should display the target tour page.");
   await BrowserTestUtils.removeTab(tab);
 });
 
 add_task(async function test_not_show_notification_for_completed_tour() {
   resetOnboardingDefaultState();
-  await SpecialPowers.pushPrefEnv({set: [["browser.onboarding.enabled", true]]});
 
   let tourIds = TOUR_IDs;
   // Make only the last tour uncompleted
   let lastTourId = tourIds[tourIds.length - 1];
   for (let id of tourIds) {
     if (id != lastTourId) {
       setTourCompletedState(id, true);
     }
--- a/browser/extensions/onboarding/test/browser/browser_onboarding_tours.js
+++ b/browser/extensions/onboarding/test/browser/browser_onboarding_tours.js
@@ -24,21 +24,20 @@ function assertTourCompletedStyle(tourId
     } else {
       ok(!item.classList.contains("onboarding-complete"), `Should not set the incomplete #${args.tourId} tour with the complete style`);
     }
   });
 }
 
 add_task(async function test_hide_onboarding_tours() {
   resetOnboardingDefaultState();
-  await SpecialPowers.pushPrefEnv({set: [["browser.onboarding.enabled", true]]});
 
   let tourIds = TOUR_IDs;
   let tabs = [];
-  for (let url of [ABOUT_NEWTAB_URL, ABOUT_HOME_URL]) {
+  for (let url of URLs) {
     let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
     await BrowserTestUtils.loadURI(tab.linkedBrowser, url);
     await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
     await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-overlay-icon", {}, tab.linkedBrowser);
     await promiseOnboardingOverlayOpened(tab.linkedBrowser);
     tabs.push(tab);
   }
 
@@ -56,21 +55,20 @@ add_task(async function test_hide_onboar
     let tab = tabs[i];
     await assertOnboardingDestroyed(tab.linkedBrowser);
     await BrowserTestUtils.removeTab(tab);
   }
 });
 
 add_task(async function test_click_action_button_to_set_tour_completed() {
   resetOnboardingDefaultState();
-  await SpecialPowers.pushPrefEnv({set: [["browser.onboarding.enabled", true]]});
 
   let tourIds = TOUR_IDs;
   let tabs = [];
-  for (let url of [ABOUT_NEWTAB_URL, ABOUT_HOME_URL]) {
+  for (let url of URLs) {
     let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
     await BrowserTestUtils.loadURI(tab.linkedBrowser, url);
     await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
     await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-overlay-icon", {}, tab.linkedBrowser);
     await promiseOnboardingOverlayOpened(tab.linkedBrowser);
     tabs.push(tab);
   }
 
@@ -86,26 +84,25 @@ add_task(async function test_click_actio
     }
     await BrowserTestUtils.removeTab(tab);
   }
 });
 
 
 add_task(async function test_set_right_tour_completed_style_on_overlay() {
   resetOnboardingDefaultState();
-  await SpecialPowers.pushPrefEnv({set: [["browser.onboarding.enabled", true]]});
 
   let tourIds = TOUR_IDs;
   // Make the tours of even number as completed
   for (let i = 0; i < tourIds.length; ++i) {
     setTourCompletedState(tourIds[i], i % 2 == 0);
   }
 
   let tabs = [];
-  for (let url of [ABOUT_NEWTAB_URL, ABOUT_HOME_URL]) {
+  for (let url of URLs) {
     let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
     await BrowserTestUtils.loadURI(tab.linkedBrowser, url);
     await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
     await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-overlay-icon", {}, tab.linkedBrowser);
     await promiseOnboardingOverlayOpened(tab.linkedBrowser);
     tabs.push(tab);
   }
 
new file mode 100644
--- /dev/null
+++ b/browser/extensions/onboarding/test/browser/browser_onboarding_tourset.js
@@ -0,0 +1,104 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+add_task(async function test_onboarding_default_new_tourset() {
+  resetOnboardingDefaultState();
+  let tabs = [];
+  for (let url of URLs) {
+    let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
+    await BrowserTestUtils.loadURI(tab.linkedBrowser, url);
+    await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
+    await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-overlay-icon", {}, tab.linkedBrowser);
+    await promiseOnboardingOverlayOpened(tab.linkedBrowser);
+    tabs.push(tab);
+  }
+
+  let doc = content && content.document;
+  let doms = doc.querySelectorAll(".onboarding-tour-item");
+  is(doms.length, TOUR_IDs.length, "has exact tour numbers");
+  doms.forEach((dom, idx) => {
+    is(TOUR_IDs[idx], dom.id, "contain defined onboarding id");
+  });
+
+  for (let i = tabs.length - 1; i >= 0; --i) {
+    let tab = tabs[i];
+    await BrowserTestUtils.removeTab(tab);
+  }
+});
+
+add_task(async function test_onboarding_custom_new_tourset() {
+  const CUSTOM_NEW_TOURs = [
+    "onboarding-tour-private-browsing",
+    "onboarding-tour-addons",
+    "onboarding-tour-customize",
+  ];
+
+  resetOnboardingDefaultState();
+  await SpecialPowers.pushPrefEnv({set: [
+    ["browser.onboarding.tour-type", "new"],
+    ["browser.onboarding.tourset-version", 1],
+    ["browser.onboarding.seen-tourset-version", 1],
+    ["browser.onboarding.newtour", "private,addons,customize"],
+  ]});
+
+  let tabs = [];
+  for (let url of URLs) {
+    let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
+    await BrowserTestUtils.loadURI(tab.linkedBrowser, url);
+    await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
+    await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-overlay-icon", {}, tab.linkedBrowser);
+    await promiseOnboardingOverlayOpened(tab.linkedBrowser);
+    tabs.push(tab);
+  }
+
+  let doc = content && content.document;
+  let doms = doc.querySelectorAll(".onboarding-tour-item");
+  is(doms.length, CUSTOM_NEW_TOURs.length, "has exact tour numbers");
+  doms.forEach((dom, idx) => {
+    is(CUSTOM_NEW_TOURs[idx], dom.id, "contain defined onboarding id");
+  });
+
+  for (let i = tabs.length - 1; i >= 0; --i) {
+    let tab = tabs[i];
+    await BrowserTestUtils.removeTab(tab);
+  }
+});
+
+add_task(async function test_onboarding_custom_update_tourset() {
+  const CUSTOM_UPDATE_TOURs = [
+    "onboarding-tour-customize",
+    "onboarding-tour-private-browsing",
+    "onboarding-tour-addons",
+  ];
+  resetOnboardingDefaultState();
+  await SpecialPowers.pushPrefEnv({set: [
+    ["browser.onboarding.tour-type", "update"],
+    ["browser.onboarding.tourset-version", 1],
+    ["browser.onboarding.seen-tourset-version", 1],
+    ["browser.onboarding.updatetour", "customize,private,addons"],
+  ]});
+
+  let tabs = [];
+  for (let url of URLs) {
+    let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
+    await BrowserTestUtils.loadURI(tab.linkedBrowser, url);
+    await promiseOnboardingOverlayLoaded(tab.linkedBrowser);
+    await BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-overlay-icon", {}, tab.linkedBrowser);
+    await promiseOnboardingOverlayOpened(tab.linkedBrowser);
+    tabs.push(tab);
+  }
+
+  let doc = content && content.document;
+  let doms = doc.querySelectorAll(".onboarding-tour-item");
+  is(doms.length, CUSTOM_UPDATE_TOURs.length, "has exact tour numbers");
+  doms.forEach((dom, idx) => {
+    is(CUSTOM_UPDATE_TOURs[idx], dom.id, "contain defined onboarding id");
+  });
+
+  for (let i = tabs.length - 1; i >= 0; --i) {
+    let tab = tabs[i];
+    await BrowserTestUtils.removeTab(tab);
+  }
+});
--- a/browser/extensions/onboarding/test/browser/head.js
+++ b/browser/extensions/onboarding/test/browser/head.js
@@ -1,27 +1,30 @@
 /* Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/ */
 
 let { Preferences } = Cu.import("resource://gre/modules/Preferences.jsm", {});
 
 const ABOUT_HOME_URL = "about:home";
 const ABOUT_NEWTAB_URL = "about:newtab";
+const URLs = [ABOUT_HOME_URL, ABOUT_NEWTAB_URL];
 const TOUR_IDs = [
   "onboarding-tour-private-browsing",
   "onboarding-tour-addons",
   "onboarding-tour-customize",
   "onboarding-tour-search",
   "onboarding-tour-default-browser",
   "onboarding-tour-sync",
 ];
+const UPDATE_TOUR_IDs = [];
 
 function resetOnboardingDefaultState() {
   // All the prefs should be reset to the default states
   // and no need to revert back so we don't use `SpecialPowers.pushPrefEnv` here.
+  Preferences.set("browser.onboarding.enabled", true);
   Preferences.set("browser.onboarding.hidden", false);
   Preferences.set("browser.onboarding.notification.finished", false);
   Preferences.set("browser.onboarding.notification.lastPrompted", "");
   TOUR_IDs.forEach(id => Preferences.set(`browser.onboarding.tour.${id}.completed`, false));
 }
 
 function setTourCompletedState(tourId, state) {
   Preferences.set(`browser.onboarding.tour.${tourId}.completed`, state);