discourse/plugins/chat/test/javascripts/components/chat-channel-preview-card-test.js
Jan Cernik cbbaeb55b5
FIX: Don't autojoin users when they have ready-only permissions (#20213)
After this change, in order to join a chat channel, a user needs to be in a group with at least “Reply” permission for the category. If the user only has “See” permission, they are able to preview the channel, but not join it or send messages. The auto-join function also follows this new restriction.

---------

Co-authored-by: Martin Brennan <martin@discourse.org>
2023-05-10 08:45:13 -03:00

96 lines
2.9 KiB
JavaScript

import { setupRenderingTest } from "discourse/tests/helpers/component-test";
import { exists, query } from "discourse/tests/helpers/qunit-helpers";
import hbs from "htmlbars-inline-precompile";
import { render } from "@ember/test-helpers";
import { module, test } from "qunit";
import fabricators from "../helpers/fabricators";
module(
"Discourse Chat | Component | chat-channel-preview-card",
function (hooks) {
setupRenderingTest(hooks);
hooks.beforeEach(function () {
this.set(
"channel",
fabricators.chatChannel({ chatable_type: "Category" })
);
this.channel.description = "Important stuff is announced here.";
this.channel.title = "announcements";
this.channel.meta = { can_join_chat_channel: true };
this.currentUser.set("has_chat_enabled", true);
this.siteSettings.chat_enabled = true;
});
test("channel title", async function (assert) {
await render(hbs`<ChatChannelPreviewCard @channel={{this.channel}} />`);
assert.strictEqual(
query(".chat-channel-title__name").innerText,
this.channel.title,
"it shows the channel title"
);
assert.true(
exists(query(".chat-channel-title__category-badge")),
"it shows the category hashtag badge"
);
});
test("channel description", async function (assert) {
await render(hbs`<ChatChannelPreviewCard @channel={{this.channel}} />`);
assert.strictEqual(
query(".chat-channel-preview-card__description").innerText,
this.channel.description,
"the channel description is shown"
);
});
test("no channel description", async function (assert) {
this.channel.description = null;
await render(hbs`<ChatChannelPreviewCard @channel={{this.channel}} />`);
assert.false(
exists(".chat-channel-preview-card__description"),
"no line is left for the channel description if there is none"
);
assert.true(
exists(".chat-channel-preview-card.-no-description"),
"it adds a modifier class for styling"
);
});
test("join", async function (assert) {
await render(hbs`<ChatChannelPreviewCard @channel={{this.channel}} />`);
assert.true(
exists(".toggle-channel-membership-button.-join"),
"it shows the join channel button"
);
});
test("browse all", async function (assert) {
await render(hbs`<ChatChannelPreviewCard @channel={{this.channel}} />`);
assert.true(
exists(".chat-channel-preview-card__browse-all"),
"it shows a link to browse all channels"
);
});
test("closed channel", async function (assert) {
this.channel.status = "closed";
await render(hbs`<ChatChannelPreviewCard @channel={{this.channel}} />`);
assert.false(
exists(".chat-channel-preview-card__join-channel-btn"),
"it does not show the join channel button"
);
});
}
);