diff --git a/.eslintrc.js b/.eslintrc.js index fe74f6d20093..f25122278dae 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -544,7 +544,6 @@ module.exports = { "dom/push/test/xpcshell/head.js", "dom/push/test/xpcshell/test_broadcast_success.js", "dom/push/test/xpcshell/test_crypto.js", - "toolkit/components/normandy/test/browser/browser_actions_ShowHeartbeatAction.js", "toolkit/mozapps/extensions/internal/AddonTestUtils.jsm", "toolkit/mozapps/extensions/test/browser/browser_gmpProvider.js", "toolkit/mozapps/extensions/test/xpcshell/head_addons.js", diff --git a/toolkit/components/normandy/actions/ShowHeartbeatAction.jsm b/toolkit/components/normandy/actions/ShowHeartbeatAction.jsm index 7efdbf3aa739..b7bcfc189a4a 100644 --- a/toolkit/components/normandy/actions/ShowHeartbeatAction.jsm +++ b/toolkit/components/normandy/actions/ShowHeartbeatAction.jsm @@ -62,6 +62,16 @@ const DAY_IN_MS = 24 * 60 * 60 * 1000; const HEARTBEAT_THROTTLE = 1 * DAY_IN_MS; class ShowHeartbeatAction extends BaseAction { + static Heartbeat = Heartbeat; + + static overrideHeartbeatForTests(newHeartbeat) { + if (newHeartbeat) { + this.Heartbeat = newHeartbeat; + } else { + this.Heartbeat = Heartbeat; + } + } + get schema() { return ActionSchemas["show-heartbeat"]; } @@ -90,7 +100,7 @@ class ShowHeartbeatAction extends BaseAction { throw new Error("No window to show heartbeat in"); } - const heartbeat = new Heartbeat(targetWindow, { + const heartbeat = new ShowHeartbeatAction.Heartbeat(targetWindow, { surveyId: this.generateSurveyId(recipe), message, engagementButtonLabel, diff --git a/toolkit/components/normandy/test/browser/browser_actions_ShowHeartbeatAction.js b/toolkit/components/normandy/test/browser/browser_actions_ShowHeartbeatAction.js index cc4c620a6778..67519b820023 100644 --- a/toolkit/components/normandy/test/browser/browser_actions_ShowHeartbeatAction.js +++ b/toolkit/components/normandy/test/browser/browser_actions_ShowHeartbeatAction.js @@ -1,12 +1,22 @@ "use strict"; -ChromeUtils.import("resource://normandy/actions/BaseAction.jsm", this); -ChromeUtils.import("resource://normandy/actions/ShowHeartbeatAction.jsm", this); -ChromeUtils.import("resource://normandy/lib/ClientEnvironment.jsm", this); -ChromeUtils.import("resource://normandy/lib/Heartbeat.jsm", this); -ChromeUtils.import("resource://normandy/lib/Storage.jsm", this); -ChromeUtils.import("resource://normandy/lib/Uptake.jsm", this); -ChromeUtils.import("resource://testing-common/NormandyTestUtils.jsm", this); +const { BaseAction } = ChromeUtils.import( + "resource://normandy/actions/BaseAction.jsm" +); +const { ShowHeartbeatAction } = ChromeUtils.import( + "resource://normandy/actions/ShowHeartbeatAction.jsm" +); +const { ClientEnvironment } = ChromeUtils.import( + "resource://normandy/lib/ClientEnvironment.jsm" +); +const { Heartbeat } = ChromeUtils.import( + "resource://normandy/lib/Heartbeat.jsm" +); +const { Storage } = ChromeUtils.import("resource://normandy/lib/Storage.jsm"); +const { Uptake } = ChromeUtils.import("resource://normandy/lib/Uptake.jsm"); +const { NormandyTestUtils } = ChromeUtils.import( + "resource://testing-common/NormandyTestUtils.jsm" +); const HOUR_IN_MS = 60 * 60 * 1000; @@ -50,15 +60,10 @@ class MockEventEmitter { function withStubbedHeartbeat() { return function(testFunction) { return async function wrappedTestFunction(args) { - const backstage = ChromeUtils.import( - "resource://normandy/actions/ShowHeartbeatAction.jsm", - null - ); - const originalHeartbeat = backstage.Heartbeat; const heartbeatInstanceStub = new MockHeartbeat(); const heartbeatClassStub = sinon.stub(); heartbeatClassStub.returns(heartbeatInstanceStub); - backstage.Heartbeat = heartbeatClassStub; + ShowHeartbeatAction.overrideHeartbeatForTests(heartbeatClassStub); try { await testFunction({ @@ -67,7 +72,7 @@ function withStubbedHeartbeat() { heartbeatInstanceStub, }); } finally { - backstage.Heartbeat = originalHeartbeat; + ShowHeartbeatAction.overrideHeartbeatForTests(); } }; };