mirror of
https://github.com/discourse/discourse.git
synced 2024-12-09 16:13:38 +08:00
1060e4573a
The complexity of the situation is that we don't want to load faker into production by default but fabricators and styleguide are available on production. This is made possible through app/assets/javascripts/discourse/app/lib/load-faker.js which contains a function to ensure faker is loaded asynchronously (loadFaker) and another function to access the loaded faker (getLoadedFaker). Note 1: this commit also refactors fabricators to have access to context and use faker where possible Note 2: this commit moves automation to admin bundle --------- Co-authored-by: David Taylor <david@taylorhq.com>
92 lines
3.2 KiB
Plaintext
92 lines
3.2 KiB
Plaintext
import { getOwner } from "@ember/application";
|
|
import { render } from "@ember/test-helpers";
|
|
import { module, test } from "qunit";
|
|
import CoreFabricators from "discourse/lib/fabricators";
|
|
import { setupRenderingTest } from "discourse/tests/helpers/component-test";
|
|
import { exists, query } from "discourse/tests/helpers/qunit-helpers";
|
|
import ChannelIcon from "discourse/plugins/chat/discourse/components/channel-icon";
|
|
import ChatFabricators from "discourse/plugins/chat/discourse/lib/fabricators";
|
|
import { CHATABLE_TYPES } from "discourse/plugins/chat/discourse/models/chat-channel";
|
|
|
|
module("Discourse Chat | Component | <ChannelIcon />", function (hooks) {
|
|
setupRenderingTest(hooks);
|
|
|
|
test("category channel - badge", async function (assert) {
|
|
const channel = new ChatFabricators(getOwner(this)).channel();
|
|
|
|
await render(<template><ChannelIcon @channel={{channel}} /></template>);
|
|
|
|
assert.strictEqual(
|
|
query(".chat-channel-icon.--category-badge").getAttribute("style"),
|
|
`color: #${channel.chatable.color}`
|
|
);
|
|
});
|
|
|
|
test("category channel - escapes label", async function (assert) {
|
|
const channel = new ChatFabricators(getOwner(this)).channel({
|
|
chatable_type: CHATABLE_TYPES.categoryChannel,
|
|
title: "<div class='xss'>evil</div>",
|
|
});
|
|
|
|
await render(<template><ChannelIcon @channel={{channel}} /></template>);
|
|
|
|
assert.false(exists(".xss"));
|
|
});
|
|
|
|
test("category channel - read restricted", async function (assert) {
|
|
const channel = new ChatFabricators(getOwner(this)).channel({
|
|
chatable: new CoreFabricators(getOwner(this)).category({
|
|
read_restricted: true,
|
|
}),
|
|
});
|
|
|
|
await render(<template><ChannelIcon @channel={{channel}} /></template>);
|
|
|
|
assert.true(exists(".d-icon-lock"));
|
|
});
|
|
|
|
test("category channel - not read restricted", async function (assert) {
|
|
const channel = new ChatFabricators(getOwner(this)).channel({
|
|
chatable: new CoreFabricators(getOwner(this)).category({
|
|
read_restricted: false,
|
|
}),
|
|
});
|
|
|
|
await render(<template><ChannelIcon @channel={{channel}} /></template>);
|
|
|
|
assert.false(exists(".d-icon-lock"));
|
|
});
|
|
|
|
test("dm channel - one user", async function (assert) {
|
|
const channel = new ChatFabricators(getOwner(this)).directMessageChannel({
|
|
chatable: new ChatFabricators(getOwner(this)).directMessage({
|
|
users: [new CoreFabricators(getOwner(this)).user()],
|
|
}),
|
|
});
|
|
const user = channel.chatable.users[0];
|
|
|
|
await render(<template><ChannelIcon @channel={{channel}} /></template>);
|
|
|
|
assert.true(exists(`.chat-user-avatar .avatar[title="${user.username}"]`));
|
|
});
|
|
|
|
test("dm channel - multiple users", async function (assert) {
|
|
const channel = new ChatFabricators(getOwner(this)).directMessageChannel({
|
|
users: [
|
|
new CoreFabricators(getOwner(this)).user(),
|
|
new CoreFabricators(getOwner(this)).user(),
|
|
new CoreFabricators(getOwner(this)).user(),
|
|
],
|
|
});
|
|
channel.chatable.group = true;
|
|
const users = channel.chatable.users;
|
|
|
|
await render(<template><ChannelIcon @channel={{channel}} /></template>);
|
|
|
|
assert.strictEqual(
|
|
parseInt(query(".chat-channel-icon.--users-count").innerText.trim(), 10),
|
|
users.length
|
|
);
|
|
});
|
|
});
|