Files
odoo_source/addons/bus/static/tests/websocket_worker_tests.js
T
Alexandre Kühn 187ad14840 [REF] bus: prettify bus files
closes odoo/odoo#119530

Signed-off-by: Alexandre Kühn (aku) <aku@odoo.com>
2023-04-27 02:44:42 +02:00

103 lines
2.8 KiB
JavaScript

/** @odoo-module */
import { WEBSOCKET_CLOSE_CODES } from "@bus/workers/websocket_worker";
import { patchWebsocketWorkerWithCleanup } from "@bus/../tests/helpers/mock_websocket";
import { nextTick, patchWithCleanup } from "@web/../tests/helpers/utils";
QUnit.module("Websocket Worker");
QUnit.test("connect event is broadcasted after calling start", async function (assert) {
assert.expect(2);
const worker = patchWebsocketWorkerWithCleanup({
broadcast(type) {
assert.step(`broadcast ${type}`);
},
});
worker._start();
// Wait for the websocket to connect.
await nextTick();
assert.verifySteps(["broadcast connect"]);
});
QUnit.test("disconnect event is broadcasted", async function (assert) {
assert.expect(3);
const worker = patchWebsocketWorkerWithCleanup({
broadcast(type) {
assert.step(`broadcast ${type}`);
},
});
worker._start();
// Wait for the websocket to connect.
await nextTick();
worker.websocket.close(WEBSOCKET_CLOSE_CODES.CLEAN);
// Wait for the websocket to disconnect.
await nextTick();
assert.verifySteps(["broadcast connect", "broadcast disconnect"]);
});
QUnit.test("reconnecting/reconnect event is broadcasted", async function (assert) {
assert.expect(5);
// Patch setTimeout in order for the worker to reconnect immediatly.
patchWithCleanup(window, {
setTimeout: (fn) => fn(),
});
const worker = patchWebsocketWorkerWithCleanup({
broadcast(type) {
assert.step(`broadcast ${type}`);
},
});
worker._start();
// Wait for the websocket to connect.
await nextTick();
worker.websocket.close(WEBSOCKET_CLOSE_CODES.ABNORMAL_CLOSURE);
// Wait for the disconnect/reconnecting/reconnect events.
await nextTick();
assert.verifySteps([
"broadcast connect",
"broadcast disconnect",
"broadcast reconnecting",
"broadcast reconnect",
]);
});
QUnit.test("notification event is broadcasted", async function (assert) {
assert.expect(3);
const notifications = [
{
id: 70,
message: {
type: "bundle_changed",
payload: {
server_version: "15.5alpha1+e",
},
},
},
];
const worker = patchWebsocketWorkerWithCleanup({
broadcast(type, message) {
if (type === "notification") {
assert.step(`broadcast ${type}`);
assert.deepEqual(message, notifications);
}
},
});
worker._start();
// Wait for the websocket to connect.
await nextTick();
worker.websocket.dispatchEvent(
new MessageEvent("message", {
data: JSON.stringify(notifications),
})
);
assert.verifySteps(["broadcast notification"]);
});