83 lines
3.1 KiB
JavaScript
83 lines
3.1 KiB
JavaScript
/* @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;
|
|
},
|
|
});
|