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.js58
1 files changed, 58 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..bbaf64a9e3
--- /dev/null
+++ b/browser/components/newtab/test/browser/browser_multistage_spotlight.js
@@ -0,0 +1,58 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const { Spotlight } = ChromeUtils.import(
+ "resource://activity-stream/lib/Spotlight.jsm"
+);
+const { PanelTestProvider } = ChromeUtils.importESModule(
+ "resource://activity-stream/lib/PanelTestProvider.sys.mjs"
+);
+const { BrowserWindowTracker } = ChromeUtils.import(
+ "resource:///modules/BrowserWindowTracker.jsm"
+);
+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() {
+ let message = (await PanelTestProvider.getMessages()).find(
+ m => m.id === "MULTISTAGE_SPOTLIGHT_MESSAGE"
+ );
+ let dispatchStub = sinon.stub();
+ let browser = BrowserWindowTracker.getTopWindow().gBrowser.selectedBrowser;
+ let specialActionStub = sinon.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"
+ );
+
+ specialActionStub.restore();
+});