104 lines
2.8 KiB
JavaScript
104 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',
|
|
]);
|
|
});
|