185 lines
7.7 KiB
JavaScript
185 lines
7.7 KiB
JavaScript
|
/* @odoo-module */
|
||
|
|
||
|
import { startServer } from "@bus/../tests/helpers/mock_python_environment";
|
||
|
|
||
|
import { start } from "@mail/../tests/helpers/test_utils";
|
||
|
|
||
|
import { EMOJI_PER_ROW } from "@web/core/emoji_picker/emoji_picker";
|
||
|
import { triggerHotkey } from "@web/../tests/helpers/utils";
|
||
|
import { click, contains, insertText } from "@web/../tests/utils";
|
||
|
|
||
|
QUnit.module("emoji");
|
||
|
|
||
|
QUnit.test("search emoji from keywords", async () => {
|
||
|
const pyEnv = await startServer();
|
||
|
const channelId = pyEnv["discuss.channel"].create({ name: "" });
|
||
|
const { openDiscuss } = await start();
|
||
|
openDiscuss(channelId);
|
||
|
await click("button[aria-label='Emojis']");
|
||
|
await insertText("input[placeholder='Search for an emoji']", "mexican");
|
||
|
await contains(".o-Emoji", { text: "🌮" });
|
||
|
});
|
||
|
|
||
|
QUnit.test("search emoji from keywords should be case insensitive", async () => {
|
||
|
const pyEnv = await startServer();
|
||
|
const channelId = pyEnv["discuss.channel"].create({ name: "" });
|
||
|
const { openDiscuss } = await start();
|
||
|
openDiscuss(channelId);
|
||
|
await click("button[aria-label='Emojis']");
|
||
|
await insertText("input[placeholder='Search for an emoji']", "ok");
|
||
|
await contains(".o-Emoji", { text: "🆗" }); // all search terms are uppercase OK
|
||
|
});
|
||
|
|
||
|
QUnit.test("search emoji from keywords with special regex character", async () => {
|
||
|
const pyEnv = await startServer();
|
||
|
const channelId = pyEnv["discuss.channel"].create({ name: "" });
|
||
|
const { openDiscuss } = await start();
|
||
|
openDiscuss(channelId);
|
||
|
await click("button[aria-label='Emojis']");
|
||
|
await insertText("input[placeholder='Search for an emoji']", "(blood");
|
||
|
await contains(".o-Emoji", { text: "🆎" });
|
||
|
});
|
||
|
|
||
|
QUnit.test("updating search emoji should scroll top", async (assert) => {
|
||
|
const pyEnv = await startServer();
|
||
|
const channelId = pyEnv["discuss.channel"].create({ name: "" });
|
||
|
const { openDiscuss } = await start();
|
||
|
await openDiscuss(channelId);
|
||
|
await click("button[aria-label='Emojis']");
|
||
|
await contains(".o-EmojiPicker-content", { scroll: 0 });
|
||
|
await scroll(".o-EmojiPicker-content", 150);
|
||
|
await insertText("input[placeholder='Search for an emoji']", "m");
|
||
|
await contains(".o-EmojiPicker-content", { scroll: 0 });
|
||
|
});
|
||
|
|
||
|
QUnit.test("Press Escape in emoji picker closes the emoji picker", async () => {
|
||
|
const pyEnv = await startServer();
|
||
|
const channelId = pyEnv["discuss.channel"].create({ name: "" });
|
||
|
const { openDiscuss } = await start();
|
||
|
openDiscuss(channelId);
|
||
|
await click("button[aria-label='Emojis']");
|
||
|
triggerHotkey("Escape");
|
||
|
await contains(".o-EmojiPicker", { count: 0 });
|
||
|
});
|
||
|
|
||
|
QUnit.test("Basic keyboard navigation", async () => {
|
||
|
const pyEnv = await startServer();
|
||
|
const channelId = pyEnv["discuss.channel"].create({ name: "" });
|
||
|
const { openDiscuss } = await start();
|
||
|
openDiscuss(channelId);
|
||
|
await click("button[aria-label='Emojis']");
|
||
|
await contains(".o-EmojiPicker-content .o-Emoji[data-index='0'].o-active");
|
||
|
triggerHotkey("ArrowRight");
|
||
|
await contains(".o-EmojiPicker-content .o-Emoji[data-index='1'].o-active");
|
||
|
triggerHotkey("ArrowDown");
|
||
|
await contains(`.o-EmojiPicker-content .o-Emoji[data-index='${EMOJI_PER_ROW + 1}'].o-active`);
|
||
|
triggerHotkey("ArrowLeft");
|
||
|
await contains(`.o-EmojiPicker-content .o-Emoji[data-index='${EMOJI_PER_ROW}'].o-active`);
|
||
|
triggerHotkey("ArrowUp");
|
||
|
await contains(".o-EmojiPicker-content .o-Emoji[data-index='0'].o-active");
|
||
|
const codepoints = $(".o-EmojiPicker-content .o-Emoji[data-index='0'].o-active").data(
|
||
|
"codepoints"
|
||
|
);
|
||
|
triggerHotkey("Enter");
|
||
|
await contains(".o-EmojiPicker", { count: 0 });
|
||
|
await contains(".o-mail-Composer-input", { value: codepoints });
|
||
|
});
|
||
|
|
||
|
QUnit.test("recent category (basic)", async () => {
|
||
|
const pyEnv = await startServer();
|
||
|
const channelId = pyEnv["discuss.channel"].create({ name: "" });
|
||
|
const { openDiscuss } = await start();
|
||
|
openDiscuss(channelId);
|
||
|
await click("button[aria-label='Emojis']");
|
||
|
await contains(".o-EmojiPicker-navbar [title='Frequently used']", { count: 0 });
|
||
|
await click(".o-EmojiPicker-content .o-Emoji", { text: "😀" });
|
||
|
await click("button[aria-label='Emojis']");
|
||
|
await contains(".o-EmojiPicker-navbar [title='Frequently used']");
|
||
|
await contains(".o-Emoji", {
|
||
|
text: "😀",
|
||
|
after: ["span", { textContent: "Frequently used" }],
|
||
|
before: ["span", { textContent: "Smileys & Emotion" }],
|
||
|
});
|
||
|
});
|
||
|
|
||
|
QUnit.test("emoji usage amount orders frequent emojis", async () => {
|
||
|
const pyEnv = await startServer();
|
||
|
const channelId = pyEnv["discuss.channel"].create({ name: "" });
|
||
|
const { openDiscuss } = await start();
|
||
|
openDiscuss(channelId);
|
||
|
await click("button[aria-label='Emojis']");
|
||
|
await click(".o-EmojiPicker-content .o-Emoji", { text: "😀" });
|
||
|
await click("button[aria-label='Emojis']");
|
||
|
await click(".o-EmojiPicker-content .o-Emoji", { text: "👽" });
|
||
|
await click("button[aria-label='Emojis']");
|
||
|
await click(".o-EmojiPicker-content .o-Emoji", { text: "👽" });
|
||
|
await click("button[aria-label='Emojis']");
|
||
|
await contains(".o-Emoji", {
|
||
|
text: "👽",
|
||
|
after: ["span", { textContent: "Frequently used" }],
|
||
|
before: [
|
||
|
".o-Emoji",
|
||
|
{
|
||
|
text: "😀",
|
||
|
after: ["span", { textContent: "Frequently used" }],
|
||
|
before: ["span", { textContent: "Smileys & Emotion" }],
|
||
|
},
|
||
|
],
|
||
|
});
|
||
|
});
|
||
|
|
||
|
QUnit.test("posting :wink: in message should impact recent", async () => {
|
||
|
const pyEnv = await startServer();
|
||
|
const channelId = pyEnv["discuss.channel"].create({ name: "" });
|
||
|
const { openDiscuss } = await start();
|
||
|
openDiscuss(channelId);
|
||
|
await insertText(".o-mail-Composer-input", ":wink:");
|
||
|
await click(".o-mail-Composer-send:enabled");
|
||
|
await click("button[aria-label='Emojis']");
|
||
|
await contains(".o-Emoji", {
|
||
|
text: "😉",
|
||
|
after: ["span", { textContent: "Frequently used" }],
|
||
|
before: ["span", { textContent: "Smileys & Emotion" }],
|
||
|
});
|
||
|
});
|
||
|
|
||
|
QUnit.test("posting :snowman: in message should impact recent", async () => {
|
||
|
// the snowman emoji is composed of two codepoints, making it a corner case
|
||
|
const pyEnv = await startServer();
|
||
|
const channelId = pyEnv["discuss.channel"].create({ name: "" });
|
||
|
const { openDiscuss } = await start();
|
||
|
openDiscuss(channelId);
|
||
|
await insertText(".o-mail-Composer-input", ":snowman:");
|
||
|
await click(".o-mail-Composer-send:enabled");
|
||
|
await click("button[aria-label='Emojis']");
|
||
|
await contains(".o-Emoji", {
|
||
|
text: "☃️",
|
||
|
after: ["span", { textContent: "Frequently used" }],
|
||
|
before: ["span", { textContent: "Smileys & Emotion" }],
|
||
|
});
|
||
|
});
|
||
|
|
||
|
QUnit.test("first category should be highlighted by default", async () => {
|
||
|
const pyEnv = await startServer();
|
||
|
const channelId = pyEnv["discuss.channel"].create({ name: "" });
|
||
|
const { openDiscuss } = await start();
|
||
|
openDiscuss(channelId);
|
||
|
await click("button[aria-label='Emojis']");
|
||
|
await contains(".o-EmojiPicker-navbar :nth-child(1 of .o-Emoji).o-active");
|
||
|
});
|
||
|
|
||
|
QUnit.test(
|
||
|
"selecting an emoji while holding down the Shift key prevents the emoji picker from closing",
|
||
|
async () => {
|
||
|
const pyEnv = await startServer();
|
||
|
const channelId = pyEnv["discuss.channel"].create({ name: "" });
|
||
|
const { openDiscuss } = await start();
|
||
|
openDiscuss(channelId);
|
||
|
await click("button[aria-label='Emojis']");
|
||
|
await click(".o-EmojiPicker-content .o-Emoji", { shiftKey: true, text: "👺" });
|
||
|
await contains(".o-EmojiPicker-navbar [title='Frequently used']");
|
||
|
await contains(".o-EmojiPicker");
|
||
|
await contains(".o-mail-Composer-input", { value: "👺" });
|
||
|
}
|
||
|
);
|