forked from mirrors/gecko-dev
This causes the mocha/chai tests for newtab to break because of the failure to import the ASRouterNewTabHook module from within ASRouterParent. This will get fixed in the next patch in the stack which moves the actors. Differential Revision: https://phabricator.services.mozilla.com/D198871
153 lines
6.2 KiB
JavaScript
153 lines
6.2 KiB
JavaScript
/*eslint max-nested-callbacks: ["error", 10]*/
|
|
import { ASRouterNewTabHook } from "modules/ASRouterNewTabHook.sys.mjs";
|
|
|
|
describe("ASRouterNewTabHook", () => {
|
|
let sandbox = null;
|
|
let initParams = null;
|
|
beforeEach(() => {
|
|
sandbox = sinon.createSandbox();
|
|
initParams = {
|
|
router: {
|
|
init: sandbox.stub().callsFake(() => {
|
|
// Fake the initialization
|
|
initParams.router.initialized = true;
|
|
}),
|
|
uninit: sandbox.stub(),
|
|
},
|
|
messageHandler: {
|
|
handleCFRAction: {},
|
|
handleTelemetry: {},
|
|
},
|
|
createStorage: () => Promise.resolve({}),
|
|
};
|
|
});
|
|
afterEach(() => {
|
|
sandbox.restore();
|
|
});
|
|
describe("ASRouterNewTabHook", () => {
|
|
describe("getInstance", () => {
|
|
it("awaits createInstance and router init before returning instance", async () => {
|
|
const getInstanceCall = sandbox.spy();
|
|
const waitForInstance =
|
|
ASRouterNewTabHook.getInstance().then(getInstanceCall);
|
|
await ASRouterNewTabHook.createInstance(initParams);
|
|
await waitForInstance;
|
|
assert.callOrder(initParams.router.init, getInstanceCall);
|
|
});
|
|
});
|
|
describe("createInstance", () => {
|
|
it("calls router init", async () => {
|
|
await ASRouterNewTabHook.createInstance(initParams);
|
|
assert.calledOnce(initParams.router.init);
|
|
});
|
|
it("only calls router init once", async () => {
|
|
initParams.router.init.callsFake(() => {
|
|
initParams.router.initialized = true;
|
|
});
|
|
await ASRouterNewTabHook.createInstance(initParams);
|
|
await ASRouterNewTabHook.createInstance(initParams);
|
|
assert.calledOnce(initParams.router.init);
|
|
});
|
|
});
|
|
describe("destroy", () => {
|
|
it("disconnects new tab, uninits ASRouter, and destroys instance", async () => {
|
|
await ASRouterNewTabHook.createInstance(initParams);
|
|
const instance = await ASRouterNewTabHook.getInstance();
|
|
const destroy = instance.destroy.bind(instance);
|
|
sandbox.stub(instance, "destroy").callsFake(destroy);
|
|
ASRouterNewTabHook.destroy();
|
|
assert.calledOnce(initParams.router.uninit);
|
|
assert.calledOnce(instance.destroy);
|
|
assert.isNotNull(instance);
|
|
assert.isNull(instance._newTabMessageHandler);
|
|
});
|
|
});
|
|
describe("instance", () => {
|
|
let routerParams = null;
|
|
let messageHandler = null;
|
|
let instance = null;
|
|
beforeEach(async () => {
|
|
messageHandler = {
|
|
clearChildMessages: sandbox.stub().resolves(),
|
|
clearChildProviders: sandbox.stub().resolves(),
|
|
updateAdminState: sandbox.stub().resolves(),
|
|
};
|
|
initParams.router.init.callsFake(params => {
|
|
routerParams = params;
|
|
});
|
|
await ASRouterNewTabHook.createInstance(initParams);
|
|
instance = await ASRouterNewTabHook.getInstance();
|
|
});
|
|
describe("connect", () => {
|
|
it("before connection messageHandler methods are not called", async () => {
|
|
routerParams.clearChildMessages([1]);
|
|
routerParams.clearChildProviders(["test_provider"]);
|
|
routerParams.updateAdminState({ messages: {} });
|
|
assert.notCalled(messageHandler.clearChildMessages);
|
|
assert.notCalled(messageHandler.clearChildProviders);
|
|
assert.notCalled(messageHandler.updateAdminState);
|
|
});
|
|
it("after connect updateAdminState and clearChildMessages calls are forwarded to handler", async () => {
|
|
instance.connect(messageHandler);
|
|
routerParams.clearChildMessages([1]);
|
|
routerParams.clearChildProviders(["test_provider"]);
|
|
routerParams.updateAdminState({ messages: {} });
|
|
assert.called(messageHandler.clearChildMessages);
|
|
assert.called(messageHandler.clearChildProviders);
|
|
assert.called(messageHandler.updateAdminState);
|
|
});
|
|
it("calls from before connection are dropped", async () => {
|
|
routerParams.clearChildMessages([1]);
|
|
routerParams.clearChildProviders(["test_provider"]);
|
|
routerParams.updateAdminState({ messages: {} });
|
|
instance.connect(messageHandler);
|
|
routerParams.clearChildMessages([1]);
|
|
routerParams.clearChildProviders(["test_provider"]);
|
|
routerParams.updateAdminState({ messages: {} });
|
|
assert.calledOnce(messageHandler.clearChildMessages);
|
|
assert.calledOnce(messageHandler.clearChildProviders);
|
|
assert.calledOnce(messageHandler.updateAdminState);
|
|
});
|
|
});
|
|
describe("disconnect", () => {
|
|
it("calls after disconnect are dropped", async () => {
|
|
instance.connect(messageHandler);
|
|
instance.disconnect();
|
|
routerParams.clearChildMessages([1]);
|
|
routerParams.clearChildProviders(["test_provider"]);
|
|
routerParams.updateAdminState({ messages: {} });
|
|
assert.notCalled(messageHandler.clearChildMessages);
|
|
assert.notCalled(messageHandler.clearChildProviders);
|
|
assert.notCalled(messageHandler.updateAdminState);
|
|
});
|
|
it("only calls from when there is a connection are forwarded", async () => {
|
|
routerParams.clearChildMessages([1]);
|
|
routerParams.clearChildProviders(["foo"]);
|
|
routerParams.updateAdminState({ messages: {} });
|
|
instance.connect(messageHandler);
|
|
routerParams.clearChildMessages([200]);
|
|
routerParams.clearChildProviders(["bar"]);
|
|
routerParams.updateAdminState({
|
|
messages: {
|
|
data: "accept",
|
|
},
|
|
});
|
|
instance.disconnect();
|
|
routerParams.clearChildMessages([1]);
|
|
routerParams.clearChildProviders(["foo"]);
|
|
routerParams.updateAdminState({ messages: {} });
|
|
assert.calledOnce(messageHandler.clearChildMessages);
|
|
assert.calledOnce(messageHandler.clearChildProviders);
|
|
assert.calledOnce(messageHandler.updateAdminState);
|
|
assert.calledWith(messageHandler.clearChildMessages, [200]);
|
|
assert.calledWith(messageHandler.clearChildProviders, ["bar"]);
|
|
assert.calledWith(messageHandler.updateAdminState, {
|
|
messages: {
|
|
data: "accept",
|
|
},
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|