bus/static/tests/multi_tab_service_tests.js
Данил Воробьев 9ae41c29a2 initial commit
2024-05-03 12:03:07 +00:00

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"]);
});