import { setupTest } from "ember-qunit"; import { module, test } from "qunit"; import { withPluginApi } from "discourse/lib/plugin-api"; import pretender from "discourse/tests/helpers/create-pretender"; import { logIn } from "discourse/tests/helpers/qunit-helpers"; import ChatMessageInteractor, { resetRemovedChatComposerSecondaryActions, } from "discourse/plugins/chat/discourse/lib/chat-message-interactor"; import ChatFabricators from "discourse/plugins/chat/discourse/lib/fabricators"; module("Chat | Unit | Utility | plugin-api", function (hooks) { setupTest(hooks); test("#sendChatMessage", async function (assert) { const done = assert.async(); pretender.post("/chat/1", (request) => { assert.strictEqual(request.url, "/chat/1"); assert.strictEqual(request.requestBody, "thread_id=2&message=hello"); done(); return [200, {}, {}]; }); withPluginApi("1.1.0", async (api) => { await api.sendChatMessage(1, { message: "hello", threadId: 2 }); }); }); test("#removeChatComposerSecondaryActions", async function (assert) { withPluginApi("1.1.0", async (api) => { // assert that the api method is defined assert.strictEqual( typeof api.removeChatComposerSecondaryActions, "function" ); const user = logIn(this.owner); const message = new ChatFabricators(this.owner).message({ user }); const interactor = new ChatMessageInteractor( this.owner, message, "channel" ); // assert that the initial secondary actions are present const secondaryActions = interactor.secondaryActions; assert.true(secondaryActions.length > 0); try { // remove the first secondary action listed api.removeChatComposerSecondaryActions(secondaryActions[0].id); const updatedSecondaryActions = interactor.secondaryActions; // assert that the secondary action was removed assert.true( updatedSecondaryActions.length < secondaryActions.length, "the updated secondary actions must contain less items than the original" ); assert.false( updatedSecondaryActions .map((v) => v.id) .includes(secondaryActions[0]), "the updated secondary actions must not include the removed action" ); } finally { // reset the secondary actions removed to prevent leakage to other tests resetRemovedChatComposerSecondaryActions(); } }); }); });