96 lines
3.6 KiB
JavaScript
96 lines
3.6 KiB
JavaScript
/** @odoo-module **/
|
|
|
|
import { addBusServicesToRegistry } from "@bus/../tests/helpers/test_utils";
|
|
|
|
import { browser } from "@web/core/browser/browser";
|
|
import { makeTestEnv } from "@web/../tests/helpers/mock_env";
|
|
import { patchWithCleanup, nextTick } from "@web/../tests/helpers/utils";
|
|
|
|
QUnit.module("multi_tab_service_tests.js");
|
|
|
|
QUnit.test("multi tab service elects new master on pagehide", async function (assert) {
|
|
addBusServicesToRegistry();
|
|
const firstTabEnv = await makeTestEnv();
|
|
assert.ok(firstTabEnv.services["multi_tab"].isOnMainTab(), "only tab should be the main one");
|
|
|
|
// prevent second tab from receiving pagehide event.
|
|
patchWithCleanup(browser, {
|
|
addEventListener(eventName, callback) {
|
|
if (eventName === "pagehide") {
|
|
return;
|
|
}
|
|
super.addEventListener(eventName, callback);
|
|
},
|
|
});
|
|
const secondTabEnv = await makeTestEnv();
|
|
firstTabEnv.services["multi_tab"].bus.addEventListener("no_longer_main_tab", () =>
|
|
assert.step("tab1 no_longer_main_tab")
|
|
);
|
|
secondTabEnv.services["multi_tab"].bus.addEventListener("no_longer_main_tab", () =>
|
|
assert.step("tab2 no_longer_main_tab")
|
|
);
|
|
window.dispatchEvent(new Event("pagehide"));
|
|
|
|
// Let the multi tab elect a new main.
|
|
await nextTick();
|
|
assert.notOk(firstTabEnv.services["multi_tab"].isOnMainTab());
|
|
assert.ok(secondTabEnv.services["multi_tab"].isOnMainTab());
|
|
assert.verifySteps(["tab1 no_longer_main_tab"]);
|
|
});
|
|
|
|
QUnit.test("multi tab allow to share values between tabs", async function (assert) {
|
|
addBusServicesToRegistry();
|
|
const firstTabEnv = await makeTestEnv();
|
|
const secondTabEnv = await makeTestEnv();
|
|
|
|
firstTabEnv.services["multi_tab"].setSharedValue("foo", 1);
|
|
assert.deepEqual(secondTabEnv.services["multi_tab"].getSharedValue("foo"), 1);
|
|
firstTabEnv.services["multi_tab"].setSharedValue("foo", 2);
|
|
assert.deepEqual(secondTabEnv.services["multi_tab"].getSharedValue("foo"), 2);
|
|
|
|
firstTabEnv.services["multi_tab"].removeSharedValue("foo");
|
|
assert.notOk(secondTabEnv.services["multi_tab"].getSharedValue("foo"));
|
|
});
|
|
|
|
QUnit.test("multi tab triggers shared_value_updated", async function (assert) {
|
|
addBusServicesToRegistry();
|
|
const firstTabEnv = await makeTestEnv();
|
|
const secondTabEnv = await makeTestEnv();
|
|
|
|
secondTabEnv.services["multi_tab"].bus.addEventListener(
|
|
"shared_value_updated",
|
|
({ detail }) => {
|
|
assert.step(`${detail.key} - ${JSON.parse(detail.newValue)}`);
|
|
}
|
|
);
|
|
firstTabEnv.services["multi_tab"].setSharedValue("foo", "bar");
|
|
firstTabEnv.services["multi_tab"].setSharedValue("foo", "foo");
|
|
firstTabEnv.services["multi_tab"].removeSharedValue("foo");
|
|
|
|
await nextTick();
|
|
assert.verifySteps(["foo - bar", "foo - foo", "foo - null"]);
|
|
});
|
|
|
|
QUnit.test("multi tab triggers become_master", async function (assert) {
|
|
addBusServicesToRegistry();
|
|
await makeTestEnv();
|
|
// prevent second tab from receiving pagehide event.
|
|
patchWithCleanup(browser, {
|
|
addEventListener(eventName, callback) {
|
|
if (eventName === "pagehide") {
|
|
return;
|
|
}
|
|
super.addEventListener(eventName, callback);
|
|
},
|
|
});
|
|
const secondTabEnv = await makeTestEnv();
|
|
secondTabEnv.services["multi_tab"].bus.addEventListener("become_main_tab", () =>
|
|
assert.step("become_main_tab")
|
|
);
|
|
window.dispatchEvent(new Event("pagehide"));
|
|
|
|
// Let the multi tab elect a new main.
|
|
await nextTick();
|
|
assert.verifySteps(["become_main_tab"]);
|
|
});
|