Bug 1375775 - test cases for reusable tourset;r=mossop
MozReview-Commit-ID: IlxgYRuFpCc
--- 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);