discourse/plugins/chat/test/javascripts/acceptance/chat-user-menu-notification...

253 lines
7.3 KiB
JavaScript

import I18n from "I18n";
import { test } from "qunit";
import { click, visit } from "@ember/test-helpers";
import {
acceptance,
exists,
query,
queryAll,
updateCurrentUser,
} from "discourse/tests/helpers/qunit-helpers";
import {
baseChatPretenders,
chatChannelPretender,
} from "../helpers/chat-pretenders";
acceptance(
"Discourse Chat - experiment user menu notifications - user cannot chat",
function (needs) {
needs.user({ has_chat_enabled: false });
needs.settings({ chat_enabled: false });
test("chat notifications tab is not displayed in user menu", async function (assert) {
await visit("/");
await click(".header-dropdown-toggle.current-user");
assert.notOk(
exists("#user-menu-button-chat-notifications"),
"button for chat notifications tab is not displayed"
);
});
}
);
acceptance(
"Discourse Chat - experimental user menu notifications ",
function (needs) {
needs.user({ redesigned_user_menu_enabled: true, has_chat_enabled: true });
needs.settings({ chat_enabled: true });
needs.pretender((server, helper) => {
baseChatPretenders(server, helper);
chatChannelPretender(server, helper);
});
test("chat notifications tab", async function (assert) {
updateCurrentUser({
grouped_unread_notifications: {
29: 3, // chat_mention notification type
31: 1, // chat_invitation notification type
},
});
await visit("/");
await click(".header-dropdown-toggle.current-user");
assert.ok(
exists("#user-menu-button-chat-notifications"),
"button for chat notifications tab is displayed"
);
assert.ok(
exists("#user-menu-button-chat-notifications .d-icon-comment"),
"displays the comment icon for chat notification tab button"
);
assert.strictEqual(
query("#user-menu-button-chat-notifications .badge-notification")
.textContent,
"4",
"displays the right badge count for chat notifications tab button"
);
});
test("chat mention notification link", async function (assert) {
await visit("/");
await click(".header-dropdown-toggle.current-user");
const chatMentionNotificationLink = queryAll(".chat-mention a")[0];
assert.strictEqual(
chatMentionNotificationLink.textContent
.trim()
.replace(/\n/g, "")
.replace(/\s+/, " "),
'hawk mentioned you in "Site"',
"displays the right text for notification"
);
assert.ok(
exists(chatMentionNotificationLink.querySelector(".d-icon-comment")),
"displays the right icon for the notification"
);
assert.strictEqual(
chatMentionNotificationLink.title,
I18n.t("notifications.titles.chat_mention"),
"has the right title attribute for notification link"
);
assert.ok(
chatMentionNotificationLink.href.endsWith(
"/chat/channel/9/site?messageId=174"
),
"has the right href attribute for notification link"
);
});
test("personal chat mention notification link", async function (assert) {
await visit("/");
await click(".header-dropdown-toggle.current-user");
const personalChatMentionNotificationLink =
queryAll(".chat-mention a")[3];
assert.strictEqual(
personalChatMentionNotificationLink.textContent
.trim()
.replace(/\n/g, "")
.replace(/\s+/, " "),
"hawk mentioned you in personal chat",
"displays the right text for notification"
);
assert.ok(
exists(
personalChatMentionNotificationLink.querySelector(".d-icon-comment")
),
"displays the right icon for the notification"
);
assert.strictEqual(
personalChatMentionNotificationLink.title,
I18n.t("notifications.titles.chat_mention"),
"has the right title attribute for notification link"
);
assert.ok(
personalChatMentionNotificationLink.href.endsWith(
"/chat/channel/9/site?messageId=174"
),
"has the right href attribute for notification link"
);
});
test("chat group mention notification link", async function (assert) {
await visit("/");
await click(".header-dropdown-toggle.current-user");
const chatGroupMentionNotificationLink = queryAll(".chat-mention a")[1];
assert.strictEqual(
chatGroupMentionNotificationLink.textContent
.trim()
.replace(/\n/g, "")
.replace(/\s+/, " "),
'hawk mentioned @engineers in "Site"',
"displays the right text for notification"
);
assert.ok(
exists(
chatGroupMentionNotificationLink.querySelector(".d-icon-comment")
),
"displays the right icon for the notification"
);
assert.strictEqual(
chatGroupMentionNotificationLink.title,
I18n.t("notifications.titles.chat_mention"),
"has the right title attribute for notification link"
);
assert.ok(
chatGroupMentionNotificationLink.href.endsWith(
"/chat/channel/9/site?messageId=174"
),
"has the right href attribute for notification link"
);
});
test("chat all mention notification link", async function (assert) {
await visit("/");
await click(".header-dropdown-toggle.current-user");
const chatAllMentionNotificationLink = queryAll(".chat-mention a")[2];
assert.strictEqual(
chatAllMentionNotificationLink.textContent
.trim()
.replace(/\n/g, "")
.replace(/\s+/, " "),
'hawk mentioned @all in "Site"',
"displays the right text for notification"
);
assert.ok(
exists(chatAllMentionNotificationLink.querySelector(".d-icon-comment")),
"displays the right icon for the notification"
);
assert.strictEqual(
chatAllMentionNotificationLink.title,
I18n.t("notifications.titles.chat_mention"),
"has the right title attribute for notification link"
);
assert.ok(
chatAllMentionNotificationLink.href.endsWith(
"/chat/channel/9/site?messageId=174"
),
"has the right href attribute for notification link"
);
});
test("chat invite notification link", async function (assert) {
await visit("/");
await click(".header-dropdown-toggle.current-user");
const chatInviteNotificationLink = queryAll(".chat-invitation a")[0];
assert.strictEqual(
chatInviteNotificationLink.textContent
.trim()
.replace(/\n/g, "")
.replace(/\s+/, " "),
"hawk invited you to join a chat channel",
"displays the right text for notification"
);
assert.ok(
exists(chatInviteNotificationLink.querySelector(".d-icon-link")),
"displays the right icon for the notification"
);
assert.strictEqual(
chatInviteNotificationLink.title,
I18n.t("notifications.titles.chat_invitation"),
"has the right title attribute for notification link"
);
assert.ok(
chatInviteNotificationLink.href.endsWith(
"/chat/channel/9/site?messageId=174"
),
"has the right href attribute for notification link"
);
});
}
);