diff --git a/app/assets/javascripts/discourse/app/controllers/composer.js b/app/assets/javascripts/discourse/app/controllers/composer.js index 36139cffd39..81cfa6af1c6 100644 --- a/app/assets/javascripts/discourse/app/controllers/composer.js +++ b/app/assets/javascripts/discourse/app/controllers/composer.js @@ -649,27 +649,30 @@ export default class ComposerController extends Controller { const [linkWarn, linkInfo] = linkLookup.check(post, href); - if (linkWarn && !this.get("isWhispering")) { - let body; + if (linkWarn && !this.isWhispering) { if (linkInfo.username === this.currentUser.username) { - body = I18n.t("composer.duplicate_link_same_user", { - domain: linkInfo.domain, - post_url: topic.urlForPostNumber(linkInfo.post_number), - ago: shortDate(linkInfo.posted_at), + this.appEvents.trigger("composer-messages:create", { + extraClass: "custom-body", + templateName: "education", + body: I18n.t("composer.duplicate_link_same_user", { + domain: linkInfo.domain, + post_url: topic.urlForPostNumber(linkInfo.post_number), + ago: shortDate(linkInfo.posted_at), + }), }); } else { - body = I18n.t("composer.duplicate_link", { - domain: linkInfo.domain, - username: linkInfo.username, - post_url: topic.urlForPostNumber(linkInfo.post_number), - ago: shortDate(linkInfo.posted_at), + this.appEvents.trigger("composer-messages:create", { + extraClass: "custom-body duplicate-link-message", + templateName: "education", + body: I18n.t("composer.duplicate_link", { + domain: linkInfo.domain, + username: linkInfo.username, + post_url: topic.urlForPostNumber(linkInfo.post_number), + ago: shortDate(linkInfo.posted_at), + }), }); } - this.appEvents.trigger("composer-messages:create", { - extraClass: "custom-body", - templateName: "education", - body, - }); + return false; } } diff --git a/app/assets/javascripts/discourse/tests/acceptance/composer-messages-test.js b/app/assets/javascripts/discourse/tests/acceptance/composer-messages-test.js index 8d78ac5114a..aab3fdc86bb 100644 --- a/app/assets/javascripts/discourse/tests/acceptance/composer-messages-test.js +++ b/app/assets/javascripts/discourse/tests/acceptance/composer-messages-test.js @@ -3,9 +3,16 @@ import { exists, query, } from "discourse/tests/helpers/qunit-helpers"; -import { click, fillIn, triggerKeyEvent, visit } from "@ember/test-helpers"; +import { + click, + fillIn, + triggerKeyEvent, + visit, + waitUntil, +} from "@ember/test-helpers"; import { test } from "qunit"; import I18n from "I18n"; +import pretender, { response } from "../helpers/create-pretender"; acceptance("Composer - Messages", function (needs) { needs.user(); @@ -22,13 +29,14 @@ acceptance("Composer - Messages", function (needs) { test("Shows warning in composer if user hasn't been seen in a long time.", async function (assert) { await visit("/u/charlie"); await click("button.compose-pm"); - assert.ok( - !exists(".composer-popup"), + assert.false( + exists(".composer-popup"), "composer warning is not shown by default" ); + await triggerKeyEvent(".d-editor-input", "keyup", "Space"); - assert.ok(exists(".composer-popup"), "shows composer warning message"); - assert.ok( + assert.true(exists(".composer-popup"), "shows composer warning message"); + assert.true( query(".composer-popup").innerHTML.includes( I18n.t("composer.user_not_seen_in_a_while.single", { usernames: ['@charlie'], @@ -60,13 +68,14 @@ acceptance("Composer - Messages - Cannot see group", function (needs) { test("Shows warning in composer if group hasn't been invited", async function (assert) { await visit("/t/130"); await click("button.create"); - assert.ok( - !exists(".composer-popup"), + assert.false( + exists(".composer-popup"), "composer warning is not shown by default" ); + await fillIn(".d-editor-input", "Mention @staff"); - assert.ok(exists(".composer-popup"), "shows composer warning message"); - assert.ok( + assert.true(exists(".composer-popup"), "shows composer warning message"); + assert.true( query(".composer-popup").innerHTML.includes( I18n.t("composer.cannot_see_group_mention.not_allowed", { group: "staff", @@ -79,13 +88,14 @@ acceptance("Composer - Messages - Cannot see group", function (needs) { test("Shows warning in composer if group hasn't been invited, but some members have access already", async function (assert) { await visit("/t/130"); await click("button.create"); - assert.ok( - !exists(".composer-popup"), + assert.false( + exists(".composer-popup"), "composer warning is not shown by default" ); + await fillIn(".d-editor-input", "Mention @staff2"); - assert.ok(exists(".composer-popup"), "shows composer warning message"); - assert.ok( + assert.true(exists(".composer-popup"), "shows composer warning message"); + assert.true( query(".composer-popup").innerHTML.includes( I18n.t("composer.cannot_see_group_mention.some_not_allowed", { group: "staff2", @@ -96,3 +106,54 @@ acceptance("Composer - Messages - Cannot see group", function (needs) { ); }); }); + +acceptance("Composer - Messages - Duplicate links", function (needs) { + needs.user(); + + test("Shows the warning", async function (assert) { + pretender.get("/inline-onebox", () => + response({ + "inline-oneboxes": [], + }) + ); + + let receivedMessages = false; + pretender.get("/composer_messages", () => { + receivedMessages = true; + return response({ + composer_messages: [], + extras: { + duplicate_lookup: { + "test.localhost/t/testing-topic/123/4567": { + domain: "test.localhost", + username: "uwe_keim", + posted_at: "2021-01-01T12:00:00.000Z", + post_number: 1, + }, + }, + }, + }); + }); + + await visit("/t/internationalization-localization/280"); + await click("button.create"); + + // Work around the lack of CSS transitions in the test env + query("#reply-control").dispatchEvent(new Event("transitionend")); + + assert + .dom(".composer-popup") + .doesNotExist("composer warning is not shown by default"); + + await waitUntil(() => receivedMessages); + + await fillIn( + ".d-editor-input", + "Here's a link: https://test.localhost/t/testing-topic/123/4567" + ); + + assert + .dom(".composer-popup.duplicate-link-message") + .exists("shows composer warning message"); + }); +}); diff --git a/app/controllers/composer_messages_controller.rb b/app/controllers/composer_messages_controller.rb index 3785e257288..893a30dec5e 100644 --- a/app/controllers/composer_messages_controller.rb +++ b/app/controllers/composer_messages_controller.rb @@ -22,7 +22,6 @@ class ComposerMessagesController < ApplicationController usernames = params.require(:usernames) users = ComposerMessagesFinder.user_not_seen_in_a_while(usernames) user_count = users.count - warning_message = nil if user_count > 0 message_locale =