mail/static/tests/helpers/mock_server/models/ir_websocket.js

83 lines
3.1 KiB
JavaScript
Raw Normal View History

2024-05-03 12:40:35 +03:00
/* @odoo-module */
// ensure bus override is applied first.
import "@bus/../tests/helpers/mock_server";
import { patch } from "@web/core/utils/patch";
import { MockServer } from "@web/../tests/helpers/mock_server";
patch(MockServer.prototype, {
/**
* Simulates `_get_im_status` on `ir.websocket`.
*
* @param {Object} imStatusIdsByModel
* @param {Number[]|undefined} mail.guest ids of mail.guest whose im_status
* should be monitored.
*/
_mockIrWebsocket__getImStatus(imStatusIdsByModel) {
const imStatus = super._mockIrWebsocket__getImStatus(imStatusIdsByModel);
const { "mail.guest": guestIds } = imStatusIdsByModel;
if (guestIds) {
imStatus["Persona"] = imStatus["Persona"].concat(
this.pyEnv["mail.guest"]
.searchRead([["id", "in", guestIds]], {
context: { active_test: false },
fields: ["im_status"],
})
.map((g) => ({ ...g, type: "guest" }))
);
}
return imStatus;
},
/**
* Simulates `_build_bus_channel_list` on `ir.websocket`.
*/
_mockIrWebsocket__buildBusChannelList(channels) {
channels = [...super._mockIrWebsocket__buildBusChannelList(channels)];
const guest = this._mockMailGuest__getGuestFromContext();
const authenticatedUserId = this.pyEnv.cookie.get("authenticated_user_sid");
const authenticatedPartner = authenticatedUserId
? this.pyEnv["res.partner"].searchRead([["user_ids", "in", [authenticatedUserId]]], {
context: { active_test: false },
})[0]
: null;
if (!authenticatedPartner && !guest) {
return channels;
}
if (guest) {
channels.push({ model: "mail.guest", id: guest.id });
}
const discussChannelIds = channels
.filter((c) => typeof c === "string" && c.startsWith("discuss.channel_"))
.map((c) => Number(c.split("_")[1]));
channels = channels.filter(
(c) => typeof c !== "string" || !c.startsWith("discuss.channel_")
);
const allChannels = this.pyEnv["discuss.channel"].searchRead([
[
"id",
"in",
this.pyEnv["discuss.channel.member"]
.searchRead([
"|",
guest
? ["guest_id", "=", guest.id]
: ["partner_id", "=", authenticatedPartner.id],
["channel_id", "in", discussChannelIds],
])
.map((member) =>
Array.isArray(member.channel_id) ? member.channel_id[0] : member.channel_id
),
],
]);
for (const channel of allChannels) {
channels.push(channel);
if (!discussChannelIds.includes(channel.id)) {
channels.push([channel, "members"]);
}
}
return channels;
},
});