mirror of
https://github.com/bringout/oca-ocb-core.git
synced 2026-04-21 12:12:01 +02:00
19.0 vanilla
This commit is contained in:
parent
d1963a3c3a
commit
2d3ee4855a
7430 changed files with 2687981 additions and 2965473 deletions
122
odoo-bringout-oca-ocb-bus/bus/static/tests/mock_websocket.js
Normal file
122
odoo-bringout-oca-ocb-bus/bus/static/tests/mock_websocket.js
Normal file
|
|
@ -0,0 +1,122 @@
|
|||
import { after, Deferred, mockWorker } from "@odoo/hoot";
|
||||
import { MockServer, patchWithCleanup } from "@web/../tests/web_test_helpers";
|
||||
|
||||
import { WebsocketWorker } from "@bus/workers/websocket_worker";
|
||||
import { patch } from "@web/core/utils/patch";
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Internal
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
function cleanupWebSocketCallbacks() {
|
||||
wsCallbacks?.clear();
|
||||
wsCallbacks = null;
|
||||
}
|
||||
|
||||
function cleanupWebSocketWorker() {
|
||||
if (currentWebSocketWorker.connectTimeout) {
|
||||
clearTimeout(currentWebSocketWorker.connectTimeout);
|
||||
}
|
||||
|
||||
currentWebSocketWorker.firstSubscribeDeferred = new Deferred();
|
||||
currentWebSocketWorker.websocket = null;
|
||||
currentWebSocketWorker = null;
|
||||
}
|
||||
|
||||
function getWebSocketCallbacks() {
|
||||
if (!wsCallbacks) {
|
||||
wsCallbacks = new Map();
|
||||
|
||||
after(cleanupWebSocketCallbacks);
|
||||
}
|
||||
|
||||
return wsCallbacks;
|
||||
}
|
||||
|
||||
function setupWebSocketWorker() {
|
||||
currentWebSocketWorker = new WebsocketWorker();
|
||||
|
||||
mockWorker(function onWorkerConnected(worker) {
|
||||
currentWebSocketWorker.registerClient(worker._messageChannel.port2);
|
||||
});
|
||||
}
|
||||
|
||||
/** @type {WebsocketWorker | null} */
|
||||
let currentWebSocketWorker = null;
|
||||
/** @type {Map<string, (data: any) => any> | null} */
|
||||
let wsCallbacks = null;
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Exports
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
export function getWebSocketWorker() {
|
||||
return currentWebSocketWorker;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} eventName
|
||||
* @param {(data: any) => any} callback
|
||||
*/
|
||||
export function onWebsocketEvent(eventName, callback) {
|
||||
const callbacks = getWebSocketCallbacks();
|
||||
if (!callbacks.has(eventName)) {
|
||||
callbacks.set(eventName, new Set());
|
||||
}
|
||||
callbacks.get(eventName).add(callback);
|
||||
|
||||
return function offWebsocketEvent() {
|
||||
callbacks.get(eventName).delete(callback);
|
||||
};
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Setup
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
patchWithCleanup(MockServer.prototype, {
|
||||
start() {
|
||||
setupWebSocketWorker();
|
||||
after(cleanupWebSocketWorker);
|
||||
return super.start(...arguments);
|
||||
},
|
||||
});
|
||||
|
||||
patch(WebsocketWorker.prototype, {
|
||||
INITIAL_RECONNECT_DELAY: 0,
|
||||
RECONNECT_JITTER: 5,
|
||||
// `runAllTimers` advances time based on the longest registered timeout.
|
||||
// Some tests rely on the fragile assumption that time won’t advance too much.
|
||||
// Disable the interval until those tests are rewritten to be more robust.
|
||||
enableCheckInterval: false,
|
||||
|
||||
_restartConnectionCheckInterval() {
|
||||
if (this.enableCheckInterval) {
|
||||
super._restartConnectionCheckInterval(...arguments);
|
||||
}
|
||||
},
|
||||
|
||||
_sendToServer(message) {
|
||||
const { env } = MockServer;
|
||||
if (!env) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ("bus.bus" in env && "ir.websocket" in env) {
|
||||
if (message.event_name === "update_presence") {
|
||||
const { inactivity_period, im_status_ids_by_model } = message.data;
|
||||
env["ir.websocket"]._update_presence(inactivity_period, im_status_ids_by_model);
|
||||
} else if (message.event_name === "subscribe") {
|
||||
const { channels } = message.data;
|
||||
env["bus.bus"].channelsByUser[env.uid] = channels;
|
||||
}
|
||||
}
|
||||
|
||||
// Custom callbacks
|
||||
for (const callback of wsCallbacks?.get(message.event_name) || []) {
|
||||
callback(message.data);
|
||||
}
|
||||
|
||||
return super._sendToServer(message);
|
||||
},
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue