mail/static/tests/helpers/mock_server/models/discuss_channel_member.js
Данил Воробьев 6e6f15d803 initial commit
2024-05-03 09:40:35 +00:00

85 lines
3.1 KiB
JavaScript

/* @odoo-module */
import { patch } from "@web/core/utils/patch";
import { MockServer } from "@web/../tests/helpers/mock_server";
patch(MockServer.prototype, {
_mockDiscussChannelMember__getAsSudoFromContext(channelId) {
const [partner, guest] = this._mockResPartner__getCurrentPersona();
if (!partner && !guest) {
return;
}
return this.pyEnv["discuss.channel.member"].searchRead([
["channel_id", "=", channelId],
guest ? ["guest_id", "=", guest.id] : ["partner_id", "=", partner.id],
])[0];
},
/**
* Simulates `notify_typing` on `discuss.channel.member`.
*
* @private
* @param {integer[]} ids
* @param {boolean} is_typing
*/
_mockDiscussChannelMember_NotifyTyping(ids, is_typing) {
const members = this.getRecords("discuss.channel.member", [["id", "in", ids]]);
const notifications = [];
for (const member of members) {
const [channel] = this.getRecords("discuss.channel", [["id", "=", member.channel_id]]);
const [data] = this._mockDiscussChannelMember_DiscussChannelMemberFormat([member.id]);
Object.assign(data, {
isTyping: is_typing,
});
notifications.push([channel, "discuss.channel.member/typing_status", data]);
notifications.push([channel.uuid, "discuss.channel.member/typing_status", data]);
}
this.pyEnv["bus.bus"]._sendmany(notifications);
},
/**
* Simulates `_discuss_channel_member_format` on `discuss.channel.member`.
*
* @private
* @param {integer[]} ids
* @returns {Object[]}
*/
_mockDiscussChannelMember_DiscussChannelMemberFormat(ids) {
const members = this.getRecords("discuss.channel.member", [["id", "in", ids]]);
const dataList = [];
for (const member of members) {
let persona;
if (member.partner_id) {
persona = this._mockDiscussChannelMember_GetPartnerData([member.id]);
persona.type = "partner";
}
if (member.guest_id) {
const [guest] = this.getRecords("mail.guest", [["id", "=", member.guest_id]]);
persona = {
id: guest.id,
im_status: guest.im_status,
name: guest.name,
type: "guest",
};
}
const data = {
thread: { id: member.channel_id, model: "discuss.channel" },
id: member.id,
persona,
create_date: member.create_date,
};
dataList.push(data);
}
return dataList;
},
/**
* Simulates `_get_partner_data` on `discuss.channel.member`.
*
* @private
* @param {integer[]} ids
* @returns {Object}
*/
_mockDiscussChannelMember_GetPartnerData(ids) {
const [member] = this.getRecords("discuss.channel.member", [["id", "in", ids]]);
return this._mockResPartnerMailPartnerFormat([member.partner_id]).get(member.partner_id);
},
});