102 lines
3.6 KiB
JavaScript
102 lines
3.6 KiB
JavaScript
/* @odoo-module */
|
|
|
|
import "@mail/../tests/helpers/mock_server/models/discuss_channel"; // ensure mail overrides are applied first
|
|
import { Command } from "@mail/../tests/helpers/command";
|
|
|
|
import { patch } from "@web/core/utils/patch";
|
|
import { MockServer } from "@web/../tests/helpers/mock_server";
|
|
|
|
patch(MockServer.prototype, {
|
|
/**
|
|
* @override
|
|
*/
|
|
_mockDiscussChannelChannelInfo(ids) {
|
|
const channelInfos = super._mockDiscussChannelChannelInfo(...arguments);
|
|
for (const channelInfo of channelInfos) {
|
|
const channel = this.getRecords("discuss.channel", [["id", "=", channelInfo.id]])[0];
|
|
channelInfo["anonymous_name"] = channel.anonymous_name;
|
|
// add the last message date
|
|
if (channel.channel_type === "livechat") {
|
|
// add the operator id
|
|
if (channel.livechat_operator_id) {
|
|
const operator = this.getRecords("res.partner", [
|
|
["id", "=", channel.livechat_operator_id],
|
|
])[0];
|
|
// livechat_username ignored for simplicity
|
|
channelInfo.operator_pid = [
|
|
operator.id,
|
|
operator.display_name.replace(",", ""),
|
|
];
|
|
}
|
|
}
|
|
}
|
|
return channelInfos;
|
|
},
|
|
|
|
/**
|
|
* Simulates `_close_livechat_session` on `discuss.channel`.
|
|
*
|
|
* @param {Object} channel
|
|
*/
|
|
_mockDiscussChannel_closeLivechatSession(channel) {
|
|
if (!channel.livechat_active) {
|
|
return;
|
|
}
|
|
this.pyEnv.write("discuss.channel", [[channel.id], { livechat_active: false }]);
|
|
if (channel.message_ids.length === 0) {
|
|
return;
|
|
}
|
|
this._mockDiscussChannelMessagePost(channel.id, {
|
|
body: this._mockDiscussChannel_getVisitorLeaveMessage(),
|
|
message_type: "comment",
|
|
subtype_xmlid: "mail.mt_comment",
|
|
});
|
|
},
|
|
|
|
/**
|
|
* Simulates `_channel_fetch_message` on `discuss.channel`.
|
|
*/
|
|
_mockDiscussChannel_channel_fetch_message(channelId, lastId, limit) {
|
|
const domain = [
|
|
["model", "=", "discuss.channel"],
|
|
["res_id", "=", channelId],
|
|
];
|
|
if (lastId) {
|
|
domain.push(["id", "<", lastId]);
|
|
}
|
|
const messages = this._mockMailMessage_MessageFetch(domain, limit);
|
|
return this._mockMailMessageMessageFormat(messages.map(({ id }) => id));
|
|
},
|
|
|
|
/**
|
|
* Simulates `_get_visitor_leave_message` on `discuss.channel`.
|
|
*/
|
|
_mockDiscussChannel_getVisitorLeaveMessage() {
|
|
return "Visitor left the conversation.";
|
|
},
|
|
|
|
/**
|
|
* Simulates `_find_or_create_persona_for_channel` on `discuss.channel`.
|
|
*/
|
|
_mockDiscussChannel__findOrCreatePersonaForChannel(channelId, guestName) {
|
|
if (this._mockDiscussChannelMember__getAsSudoFromContext(channelId)) {
|
|
return;
|
|
}
|
|
const guestId =
|
|
this._mockMailGuest__getGuestFromContext()?.id ??
|
|
this.pyEnv["mail.guest"].create({ name: guestName });
|
|
this.pyEnv["discuss.channel"].write([channelId], {
|
|
channel_member_ids: [Command.create({ guest_id: guestId })],
|
|
});
|
|
this._mockMailGuest__setAuthCookie(guestId);
|
|
},
|
|
/**
|
|
* Simulates `_types_allowing_seen_infos` on `discuss.channel`.
|
|
*
|
|
* @returns {string[]}
|
|
*/
|
|
_mockDiscussChannel__typesAllowingSeenInfos() {
|
|
return super._mockDiscussChannel__typesAllowingSeenInfos(...arguments).concat(["livechat"]);
|
|
},
|
|
});
|