226 lines
8.7 KiB
JavaScript
226 lines
8.7 KiB
JavaScript
|
/* @odoo-module */
|
||
|
|
||
|
import { startServer } from "@bus/../tests/helpers/mock_python_environment";
|
||
|
import { start } from "@mail/../tests/helpers/test_utils";
|
||
|
import { HIGHLIGHT_CLASS } from "@mail/core/common/message_search_hook";
|
||
|
import { nextTick, triggerHotkey } from "@web/../tests/helpers/utils";
|
||
|
import { click, contains, insertText, scroll } from "@web/../tests/utils";
|
||
|
|
||
|
QUnit.module("discuss search");
|
||
|
|
||
|
QUnit.test("Should have a search button", async () => {
|
||
|
const pyEnv = await startServer();
|
||
|
const channelId = pyEnv["discuss.channel"].create({ name: "General" });
|
||
|
const { openDiscuss } = await start();
|
||
|
await openDiscuss(channelId);
|
||
|
await contains("[title='Search Messages']");
|
||
|
});
|
||
|
|
||
|
QUnit.test("Should open the search panel when search button is clicked", async () => {
|
||
|
const pyEnv = await startServer();
|
||
|
const channelId = pyEnv["discuss.channel"].create({ name: "General" });
|
||
|
const { openDiscuss } = await start();
|
||
|
await openDiscuss(channelId);
|
||
|
await click("[title='Search Messages']");
|
||
|
await contains(".o-mail-SearchMessagesPanel");
|
||
|
await contains(".o_searchview");
|
||
|
await contains(".o_searchview_input");
|
||
|
});
|
||
|
|
||
|
QUnit.test("Search a message", async () => {
|
||
|
const pyEnv = await startServer();
|
||
|
const channelId = pyEnv["discuss.channel"].create({ name: "General" });
|
||
|
pyEnv["mail.message"].create({
|
||
|
author_id: pyEnv.currentPartnerId,
|
||
|
body: "This is a message",
|
||
|
attachment_ids: [],
|
||
|
message_type: "comment",
|
||
|
model: "discuss.channel",
|
||
|
res_id: channelId,
|
||
|
});
|
||
|
const { openDiscuss } = await start();
|
||
|
await openDiscuss(channelId);
|
||
|
await click("button[title='Search Messages']");
|
||
|
await insertText(".o_searchview_input", "message");
|
||
|
triggerHotkey("Enter");
|
||
|
await contains(".o-mail-SearchMessagesPanel .o-mail-Message");
|
||
|
});
|
||
|
|
||
|
QUnit.test("Search should be hightlighted", async () => {
|
||
|
const pyEnv = await startServer();
|
||
|
const channelId = pyEnv["discuss.channel"].create({ name: "General" });
|
||
|
pyEnv["mail.message"].create({
|
||
|
author_id: pyEnv.currentPartnerId,
|
||
|
body: "This is a message",
|
||
|
attachment_ids: [],
|
||
|
message_type: "comment",
|
||
|
model: "discuss.channel",
|
||
|
res_id: channelId,
|
||
|
});
|
||
|
const { openDiscuss } = await start();
|
||
|
await openDiscuss(channelId);
|
||
|
await click("[title='Search Messages']");
|
||
|
await insertText(".o_searchview_input", "message");
|
||
|
triggerHotkey("Enter");
|
||
|
await contains(`.o-mail-SearchMessagesPanel .o-mail-Message .${HIGHLIGHT_CLASS}`);
|
||
|
});
|
||
|
|
||
|
QUnit.test("Search a starred message", async () => {
|
||
|
const pyEnv = await startServer();
|
||
|
const channelId = pyEnv["discuss.channel"].create({ name: "General" });
|
||
|
pyEnv["mail.message"].create({
|
||
|
author_id: pyEnv.currentPartnerId,
|
||
|
body: "This is a message",
|
||
|
attachment_ids: [],
|
||
|
message_type: "comment",
|
||
|
model: "discuss.channel",
|
||
|
res_id: channelId,
|
||
|
starred_partner_ids: [pyEnv.currentPartnerId],
|
||
|
});
|
||
|
const { openDiscuss } = await start();
|
||
|
await openDiscuss("mail.box_starred");
|
||
|
await click("[title='Search Messages']");
|
||
|
await insertText(".o_searchview_input", "message");
|
||
|
triggerHotkey("Enter");
|
||
|
await contains(".o-mail-SearchMessagesPanel .o-mail-Message");
|
||
|
});
|
||
|
|
||
|
QUnit.test("Search a message in inbox", async () => {
|
||
|
const pyEnv = await startServer();
|
||
|
const channelId = pyEnv["discuss.channel"].create({ name: "General" });
|
||
|
pyEnv["mail.message"].create({
|
||
|
author_id: pyEnv.currentPartnerId,
|
||
|
body: "This is a message",
|
||
|
attachment_ids: [],
|
||
|
message_type: "comment",
|
||
|
model: "discuss.channel",
|
||
|
res_id: channelId,
|
||
|
needaction: true,
|
||
|
});
|
||
|
const { openDiscuss } = await start();
|
||
|
await openDiscuss("mail.box_inbox");
|
||
|
await click("[title='Search Messages']");
|
||
|
await insertText(".o_searchview_input", "message");
|
||
|
triggerHotkey("Enter");
|
||
|
await contains(".o-mail-SearchMessagesPanel .o-mail-Message");
|
||
|
});
|
||
|
|
||
|
QUnit.test("Search a message in history", async () => {
|
||
|
const pyEnv = await startServer();
|
||
|
const channelId = pyEnv["discuss.channel"].create({ name: "General" });
|
||
|
const messageId = pyEnv["mail.message"].create({
|
||
|
author_id: pyEnv.currentPartnerId,
|
||
|
body: "This is a message",
|
||
|
attachment_ids: [],
|
||
|
message_type: "comment",
|
||
|
model: "discuss.channel",
|
||
|
res_id: channelId,
|
||
|
needaction: false,
|
||
|
});
|
||
|
pyEnv["mail.notification"].create({
|
||
|
is_read: true,
|
||
|
mail_message_id: messageId,
|
||
|
notification_status: "sent",
|
||
|
notification_type: "inbox",
|
||
|
res_partner_id: pyEnv.currentPartnerId,
|
||
|
});
|
||
|
const { openDiscuss } = await start();
|
||
|
await openDiscuss("mail.box_history");
|
||
|
await click("[title='Search Messages']");
|
||
|
await insertText(".o_searchview_input", "message");
|
||
|
triggerHotkey("Enter");
|
||
|
await contains(".o-mail-SearchMessagesPanel .o-mail-Message");
|
||
|
});
|
||
|
|
||
|
QUnit.test("Should close the search panel when search button is clicked again", async () => {
|
||
|
const pyEnv = await startServer();
|
||
|
const channelId = pyEnv["discuss.channel"].create({ name: "General" });
|
||
|
const { openDiscuss } = await start();
|
||
|
await openDiscuss(channelId);
|
||
|
await click("[title='Search Messages']");
|
||
|
await click("[title='Close Search']");
|
||
|
await contains(".o-mail-SearchMessagesPanel");
|
||
|
});
|
||
|
|
||
|
QUnit.test("Search a message in 60 messages should return 30 message first", async () => {
|
||
|
const pyEnv = await startServer();
|
||
|
const channelId = pyEnv["discuss.channel"].create({ name: "General" });
|
||
|
for (let i = 0; i < 60; i++) {
|
||
|
pyEnv["mail.message"].create({
|
||
|
author_id: pyEnv.currentPartnerId,
|
||
|
body: "This is a message",
|
||
|
attachment_ids: [],
|
||
|
message_type: "comment",
|
||
|
model: "discuss.channel",
|
||
|
res_id: channelId,
|
||
|
});
|
||
|
}
|
||
|
const { openDiscuss } = await start();
|
||
|
await openDiscuss(channelId);
|
||
|
await click("[title='Search Messages']");
|
||
|
await insertText(".o_searchview_input", "message");
|
||
|
triggerHotkey("Enter");
|
||
|
await contains(".o-mail-SearchMessagesPanel .o-mail-Message", { count: 30 });
|
||
|
// give enough time to useVisible to potentially load more (unexpected) messages
|
||
|
await nextTick();
|
||
|
await contains(".o-mail-SearchMessagesPanel .o-mail-Message", { count: 30 });
|
||
|
});
|
||
|
|
||
|
QUnit.test("Scrolling to the bottom should load more searched message", async () => {
|
||
|
const pyEnv = await startServer();
|
||
|
const channelId = pyEnv["discuss.channel"].create({ name: "General" });
|
||
|
for (let i = 0; i < 90; i++) {
|
||
|
pyEnv["mail.message"].create({
|
||
|
author_id: pyEnv.currentPartnerId,
|
||
|
body: "This is a message",
|
||
|
attachment_ids: [],
|
||
|
message_type: "comment",
|
||
|
model: "discuss.channel",
|
||
|
res_id: channelId,
|
||
|
});
|
||
|
}
|
||
|
const { openDiscuss } = await start();
|
||
|
await openDiscuss(channelId);
|
||
|
await click("[title='Search Messages']");
|
||
|
await insertText(".o_searchview_input", "message");
|
||
|
triggerHotkey("Enter");
|
||
|
await contains(".o-mail-SearchMessagesPanel .o-mail-Message", { count: 30 });
|
||
|
await scroll(".o-mail-SearchMessagesPanel .o-mail-ActionPanel", "bottom");
|
||
|
await contains(".o-mail-SearchMessagesPanel .o-mail-Message", { count: 60 });
|
||
|
// give enough time to useVisible to potentially load more (unexpected) messages
|
||
|
await nextTick();
|
||
|
await contains(".o-mail-SearchMessagesPanel .o-mail-Message", { count: 60 });
|
||
|
});
|
||
|
|
||
|
QUnit.test(
|
||
|
"Editing the searched term should not edit the current searched term",
|
||
|
async (assert) => {
|
||
|
const pyEnv = await startServer();
|
||
|
const channelId = pyEnv["discuss.channel"].create({ name: "General" });
|
||
|
for (let i = 0; i < 60; i++) {
|
||
|
pyEnv["mail.message"].create({
|
||
|
author_id: pyEnv.currentPartnerId,
|
||
|
body: "This is a message",
|
||
|
attachment_ids: [],
|
||
|
message_type: "comment",
|
||
|
model: "discuss.channel",
|
||
|
res_id: channelId,
|
||
|
});
|
||
|
}
|
||
|
const { openDiscuss } = await start({
|
||
|
async mockRPC(route, args) {
|
||
|
if (route === "/discuss/channel/messages" && args.search_term) {
|
||
|
const { search_term } = args;
|
||
|
assert.strictEqual(search_term, "message");
|
||
|
}
|
||
|
},
|
||
|
});
|
||
|
await openDiscuss(channelId);
|
||
|
await click("[title='Search Messages']");
|
||
|
await insertText(".o_searchview_input", "message");
|
||
|
triggerHotkey("Enter");
|
||
|
await insertText(".o_searchview_input", "test");
|
||
|
await scroll(".o-mail-SearchMessagesPanel .o-mail-ActionPanel", "bottom");
|
||
|
}
|
||
|
);
|