discourse/plugins/chat/test/javascripts/components/chat-header-icon-test.gjs
Jarek Radosz 893fcf714b
DEV: Remove plugin names from test titles (#39418)
Those are now automatically included in testem's output.
2026-04-21 19:19:52 +02:00

109 lines
3.4 KiB
Text

import { tracked } from "@glimmer/tracking";
import { render, settled } from "@ember/test-helpers";
import { module, test } from "qunit";
import sinon from "sinon";
import { forceMobile } from "discourse/lib/mobile";
import { setupRenderingTest } from "discourse/tests/helpers/component-test";
import { i18n } from "discourse-i18n";
import Icon from "discourse/plugins/chat/discourse/components/chat/header/icon";
import { HEADER_INDICATOR_PREFERENCE_ALL_NEW } from "discourse/plugins/chat/discourse/lib/chat-constants";
module("Component | chat-header-icon", function (hooks) {
setupRenderingTest(hooks);
test("full page - never separated sidebar mode", async function (assert) {
this.currentUser.user_option.chat_separate_sidebar_mode = "never";
sinon
.stub(this.owner.lookup("service:chat-state-manager"), "isFullPageActive")
.value(true);
await render(<template><Icon /></template>);
assert
.dom(".icon.btn-flat")
.hasAttribute("title", i18n("chat.title_capitalized"))
.hasAttribute("href", "/chat");
assert.dom(".d-icon-d-chat").exists();
});
test("full page - always separated mode", async function (assert) {
this.currentUser.user_option.chat_separate_sidebar_mode = "always";
sinon
.stub(this.owner.lookup("service:chat-state-manager"), "isFullPageActive")
.value(true);
await render(<template><Icon /></template>);
assert
.dom(".icon.btn-flat")
.hasAttribute("title", i18n("chat.exit"))
.hasAttribute("href", "/latest");
assert.dom(".d-icon-shuffle").exists();
});
test("mobile", async function (assert) {
const testState = new (class {
@tracked isActive = false;
})();
forceMobile();
await render(
<template><Icon @isActive={{testState.isActive}} /></template>
);
assert
.dom(".icon.btn-flat")
.hasAttribute("title", i18n("chat.title_capitalized"))
.hasAttribute("href", "/chat");
assert
.dom(".d-icon-d-chat")
.exists("chat icon is rendered if chat is inactive");
testState.isActive = true;
await settled();
assert
.dom(".d-icon-d-chat")
.doesNotExist("chat icon is not rendered if chat is active");
});
test("full page - with unread", async function (assert) {
this.currentUser.user_option.chat_separate_sidebar_mode = "always";
this.currentUser.user_option.chat_header_indicator_preference =
HEADER_INDICATOR_PREFERENCE_ALL_NEW;
sinon
.stub(this.owner.lookup("service:chat-state-manager"), "isFullPageActive")
.value(true);
await render(<template><Icon @urgentCount={{1}} /></template>);
assert
.dom(".icon.btn-flat")
.hasAttribute("title", i18n("chat.exit"))
.hasAttribute("href", "/latest");
assert.dom(".d-icon-shuffle").exists();
assert.dom(".chat-channel-unread-indicator__number").doesNotExist();
});
test("drawer - with unread", async function (assert) {
this.currentUser.user_option.chat_separate_sidebar_mode = "always";
this.currentUser.user_option.chat_header_indicator_preference =
HEADER_INDICATOR_PREFERENCE_ALL_NEW;
await render(<template><Icon @urgentCount={{1}} /></template>);
assert
.dom(".icon.btn-flat")
.hasAttribute("title", i18n("sidebar.panels.chat.label"))
.hasAttribute("href", "/chat");
assert.dom(".d-icon-d-chat").exists();
assert
.dom(".chat-channel-unread-indicator__number")
.exists()
.containsText("1");
});
});