summaryrefslogtreecommitdiffstats
path: root/browser/components/newtab/test/browser/browser_multistage_spotlight.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/newtab/test/browser/browser_multistage_spotlight.js')
-rw-r--r--browser/components/newtab/test/browser/browser_multistage_spotlight.js90
1 files changed, 90 insertions, 0 deletions
diff --git a/browser/components/newtab/test/browser/browser_multistage_spotlight.js b/browser/components/newtab/test/browser/browser_multistage_spotlight.js
new file mode 100644
index 0000000000..96f655b668
--- /dev/null
+++ b/browser/components/newtab/test/browser/browser_multistage_spotlight.js
@@ -0,0 +1,90 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const { Spotlight } = ChromeUtils.importESModule(
+ "resource:///modules/asrouter/Spotlight.sys.mjs"
+);
+const { PanelTestProvider } = ChromeUtils.importESModule(
+ "resource:///modules/asrouter/PanelTestProvider.sys.mjs"
+);
+const { SpecialMessageActions } = ChromeUtils.importESModule(
+ "resource://messaging-system/lib/SpecialMessageActions.sys.mjs"
+);
+
+async function waitForClick(selector, win) {
+ await TestUtils.waitForCondition(() => win.document.querySelector(selector));
+ win.document.querySelector(selector).click();
+}
+
+async function showDialog(dialogOptions) {
+ Spotlight.showSpotlightDialog(
+ dialogOptions.browser,
+ dialogOptions.message,
+ dialogOptions.dispatchStub
+ );
+ const [win] = await TestUtils.topicObserved("subdialog-loaded");
+ return win;
+}
+
+add_task(async function test_specialAction() {
+ const sandbox = sinon.createSandbox();
+ let message = (await PanelTestProvider.getMessages()).find(
+ m => m.id === "MULTISTAGE_SPOTLIGHT_MESSAGE"
+ );
+ let dispatchStub = sandbox.stub();
+ let browser = BrowserWindowTracker.getTopWindow().gBrowser.selectedBrowser;
+ let specialActionStub = sandbox.stub(SpecialMessageActions, "handleAction");
+
+ let win = await showDialog({ message, browser, dispatchStub });
+ await waitForClick("button.primary", win);
+ win.close();
+
+ Assert.equal(
+ specialActionStub.callCount,
+ 1,
+ "Should be called by primary action"
+ );
+ Assert.deepEqual(
+ specialActionStub.firstCall.args[0],
+ message.content.screens[0].content.primary_button.action,
+ "Should be called with button action"
+ );
+
+ sandbox.restore();
+});
+
+add_task(async function test_embedded_import() {
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.migrate.internal-testing.enabled", true]],
+ });
+ let message = (await PanelTestProvider.getMessages()).find(
+ m => m.id === "IMPORT_SETTINGS_EMBEDDED"
+ );
+ let browser = BrowserWindowTracker.getTopWindow().gBrowser.selectedBrowser;
+ let win = await showDialog({ message, browser });
+ let migrationWizardReady = BrowserTestUtils.waitForEvent(
+ win,
+ "MigrationWizard:Ready"
+ );
+
+ await TestUtils.waitForCondition(() =>
+ win.document.querySelector("migration-wizard")
+ );
+ Assert.ok(
+ win.document.querySelector("migration-wizard"),
+ "Migration Wizard rendered"
+ );
+
+ await migrationWizardReady;
+
+ let panelList = win.document
+ .querySelector("migration-wizard")
+ .openOrClosedShadowRoot.querySelector("panel-list");
+ Assert.equal(panelList.tagName, "PANEL-LIST");
+ Assert.equal(panelList.firstChild.tagName, "PANEL-ITEM");
+
+ win.close();
+ await SpecialPowers.popPrefEnv();
+});