discourse/plugins/chat/test/javascripts/components/chat-user-card-button-test.gjs
Régis Hanol 9b693adad9
FIX: show chat DM button when personal messages are restricted (#37920)
When `personal_message_enabled_groups` was set to exclude regular users
(e.g. staff only), the Chat button on user cards and profiles was hidden
even though chat has its own independent permission system
(`direct_message_enabled_groups`).

The `ChatDirectMessageButton` component checked
`can_send_private_message_to_user` which internally gates on
`personal_message_enabled_groups`, causing the PM admin setting to leak
into chat button visibility.

This removes the `can_send_private_message_to_user` check from the
component and instead adds `recipient_allows_direct_messages?` to the
`can_chat_user` serializer. This ensures the chat DM button respects
chat-specific permissions (`direct_message_enabled_groups`,
`chat_allowed_groups`) and the per-user opt-out
(`allow_private_messages`) without being affected by PM group
restrictions.

https://meta.discourse.org/t/396442
2026-02-19 12:37:25 +01:00

46 lines
1.5 KiB
Text
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { getOwner } from "@ember/owner";
import { render } from "@ember/test-helpers";
import { module, test } from "qunit";
import sinon from "sinon";
import CoreFabricators from "discourse/lib/fabricators";
import { setupRenderingTest } from "discourse/tests/helpers/component-test";
import DirectMessageButton from "discourse/plugins/chat/discourse/components/chat/direct-message-button";
module(
"Discourse Chat | Component | <Chat::DirectMessageButton />",
function (hooks) {
setupRenderingTest(hooks);
test("when current user can send direct messages", async function (assert) {
sinon
.stub(this.owner.lookup("service:chat"), "userCanDirectMessage")
.value(true);
this.user = new CoreFabricators(getOwner(this)).user();
await render(
<template>
<DirectMessageButton @user={{this.user}} @modal={{true}} />
</template>
);
assert.dom(".chat-direct-message-btn").exists("it shows the chat button");
});
test("when current user cant send direct messages", async function (assert) {
sinon
.stub(this.owner.lookup("service:chat"), "userCanDirectMessage")
.value(false);
this.user = new CoreFabricators(getOwner(this)).user();
await render(
<template>
<DirectMessageButton @user={{this.user}} @modal={{true}} />
</template>
);
assert
.dom(".chat-direct-message-btn")
.doesNotExist("it doesnt show the chat button");
});
}
);