mirror of
https://github.com/discourse/discourse.git
synced 2024-12-02 08:33:41 +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>
117 lines
3.8 KiB
JavaScript
117 lines
3.8 KiB
JavaScript
import { getOwner } from "@ember/application";
|
|
import { click, render } from "@ember/test-helpers";
|
|
import hbs from "htmlbars-inline-precompile";
|
|
import { module, test } from "qunit";
|
|
import { setupRenderingTest } from "discourse/tests/helpers/component-test";
|
|
import pretender from "discourse/tests/helpers/create-pretender";
|
|
import { query, queryAll } from "discourse/tests/helpers/qunit-helpers";
|
|
import I18n from "discourse-i18n";
|
|
import ChatFabricators from "discourse/plugins/chat/discourse/lib/fabricators";
|
|
|
|
module("Discourse Chat | Component | chat-notice", function (hooks) {
|
|
setupRenderingTest(hooks);
|
|
|
|
test("displays all notices for a channel", async function (assert) {
|
|
this.channel = new ChatFabricators(getOwner(this)).channel();
|
|
this.manager = this.container.lookup(
|
|
"service:chat-channel-notices-manager"
|
|
);
|
|
this.manager.handleNotice({
|
|
channel_id: this.channel.id,
|
|
text_content: "hello",
|
|
});
|
|
this.manager.handleNotice({
|
|
channel_id: this.channel.id,
|
|
text_content: "goodbye",
|
|
});
|
|
this.manager.handleNotice({
|
|
channel_id: this.channel.id + 1,
|
|
text_content: "N/A",
|
|
});
|
|
|
|
await render(hbs`<ChatNotices @channel={{this.channel}} />`);
|
|
|
|
const notices = queryAll(".chat-notices .chat-notices__notice");
|
|
|
|
assert.strictEqual(notices.length, 2, "Two notices are rendered");
|
|
|
|
assert.true(notices[0].innerText.includes("hello"));
|
|
assert.true(notices[1].innerText.includes("goodbye"));
|
|
});
|
|
|
|
test("Notices can be cleared", async function (assert) {
|
|
this.channel = new ChatFabricators(getOwner(this)).channel();
|
|
this.manager = this.container.lookup(
|
|
"service:chat-channel-notices-manager"
|
|
);
|
|
this.manager.handleNotice({
|
|
channel_id: this.channel.id,
|
|
text_content: "hello",
|
|
});
|
|
|
|
await render(hbs`<ChatNotices @channel={{this.channel}} />`);
|
|
|
|
assert.strictEqual(
|
|
queryAll(".chat-notices .chat-notices__notice").length,
|
|
1,
|
|
"Notice is present"
|
|
);
|
|
|
|
await click(query(".chat-notices__notice__clear"), "Clear the notice");
|
|
|
|
assert.strictEqual(
|
|
queryAll(".chat-notices .chat-notices__notice").length,
|
|
0,
|
|
"Notice was cleared"
|
|
);
|
|
});
|
|
test("MentionWithoutMembership notice renders", async function (assert) {
|
|
this.channel = new ChatFabricators(getOwner(this)).channel();
|
|
this.manager = this.container.lookup(
|
|
"service:chat-channel-notices-manager"
|
|
);
|
|
const text = "Joffrey can't chat, hermano";
|
|
this.manager.handleNotice({
|
|
channel_id: this.channel.id,
|
|
notice_type: "mention_without_membership",
|
|
data: { user_ids: [1], message_id: 1, text },
|
|
});
|
|
|
|
await render(hbs`<ChatNotices @channel={{this.channel}} />`);
|
|
|
|
assert.strictEqual(
|
|
queryAll(
|
|
".chat-notices .chat-notices__notice .mention-without-membership-notice"
|
|
).length,
|
|
1,
|
|
"Notice is present"
|
|
);
|
|
|
|
assert.dom(".mention-without-membership-notice__body__text").hasText(text);
|
|
assert
|
|
.dom(".mention-without-membership-notice__body__link")
|
|
.hasText(I18n.t("chat.mention_warning.invite"));
|
|
|
|
pretender.post(`/chat/api/channels/${this.channel.id}/invites`, () => {
|
|
return [200, { "Content-Type": "application/json" }, {}];
|
|
});
|
|
|
|
await click(
|
|
query(".mention-without-membership-notice__body__link"),
|
|
"Invites the user"
|
|
);
|
|
|
|
// I would love to test that the invitation sent text is present here but
|
|
// dismiss is called right away instead of waiting 3 seconds.. Not much we can
|
|
// do about this - at least we are testing that nothing broke all the way through
|
|
// clearing the notice
|
|
assert.strictEqual(
|
|
queryAll(
|
|
".chat-notices .chat-notices__notice .mention-without-membership-notice"
|
|
).length,
|
|
0,
|
|
"Notice has been cleared"
|
|
);
|
|
});
|
|
});
|