From f0574564c42c887ef0c54221430d3068cd145c47 Mon Sep 17 00:00:00 2001 From: Martin Brennan Date: Tue, 29 Mar 2022 17:11:44 +1000 Subject: [PATCH] DEV: Fix failing share topic tests (#16309) Since 3fd7b31a2aa79dabcc34625c10877fcf737d5855 some tests were failing with this error: > Error: Unhandled request in test environment: /c/feature/find_by_slug.json > (GET) at http://localhost:7357/assets/test-helpers.js This commit fixes the issue by adding the missing pretender. Also noticed while fixing this that the parameter for the translation was incorrect -- it was `group` instead of `groupNames`, so that is fixed here too, along with moving the onShow functions into @afterRender decorated private functions. There is no need for the appevent listeners. --- .../discourse/app/controllers/share-topic.js | 26 ++++++------------ .../tests/acceptance/share-topic-test.js | 27 +++++++++++++++++++ 2 files changed, 35 insertions(+), 18 deletions(-) diff --git a/app/assets/javascripts/discourse/app/controllers/share-topic.js b/app/assets/javascripts/discourse/app/controllers/share-topic.js index c693cf9190f..3e620fc9ef9 100644 --- a/app/assets/javascripts/discourse/app/controllers/share-topic.js +++ b/app/assets/javascripts/discourse/app/controllers/share-topic.js @@ -1,7 +1,9 @@ import Controller from "@ember/controller"; import { action } from "@ember/object"; import { getAbsoluteURL } from "discourse-common/lib/get-url"; -import discourseComputed from "discourse-common/utils/decorators"; +import discourseComputed, { + afterRender, +} from "discourse-common/utils/decorators"; import { ajax } from "discourse/lib/ajax"; import { extractError } from "discourse/lib/ajax-error"; import Sharing from "discourse/lib/sharing"; @@ -16,38 +18,26 @@ export default Controller.extend( bufferedProperty("invite"), { topic: null, - restrictedGroups: null, onShow() { this.set("showNotifyUsers", false); - this.appEvents.on( - "modal:body-shown", - this, - this.showRestrictedGroupWarning - ); + this._showRestrictedGroupWarning(); }, - onClose() { - this.appEvents.off( - "modal:body-shown", - this, - this.showRestrictedGroupWarning - ); - }, - - showRestrictedGroupWarning() { + @afterRender + _showRestrictedGroupWarning() { if (!this.model) { return; } Category.reloadBySlugPath(this.model.slug).then((result) => { const groups = result.category.group_permissions.mapBy("group_name"); - if (groups && !groups.any((x) => x === "everyone")) { + if (groups && !groups.any((group) => group === "everyone")) { this.flash( I18n.t("topic.share.restricted_groups", { count: groups.length, - groups: groups.join(", "), + groupNames: groups.join(", "), }), "warning" ); diff --git a/app/assets/javascripts/discourse/tests/acceptance/share-topic-test.js b/app/assets/javascripts/discourse/tests/acceptance/share-topic-test.js index 26f2509c0a0..16617a45960 100644 --- a/app/assets/javascripts/discourse/tests/acceptance/share-topic-test.js +++ b/app/assets/javascripts/discourse/tests/acceptance/share-topic-test.js @@ -1,9 +1,11 @@ import CategoryFixtures from "discourse/tests/fixtures/category-fixtures"; +import I18n from "I18n"; import { click, visit } from "@ember/test-helpers"; import { acceptance, count, exists, + query, queryAll, } from "discourse/tests/helpers/qunit-helpers"; import selectKit from "discourse/tests/helpers/select-kit-helper"; @@ -29,6 +31,10 @@ acceptance("Share and Invite modal", function (needs) { await click("#topic-footer-button-share-and-invite"); assert.ok(exists(".share-topic-modal"), "it shows the modal"); + assert.notOk( + exists("#modal-alert.alert-warning"), + "it does not show the alert with restricted groups" + ); assert.ok( queryAll("input.invite-link") @@ -71,6 +77,14 @@ acceptance("Share and Invite modal", function (needs) { exists("#modal-alert.alert-warning"), "it shows restricted warning" ); + assert.strictEqual( + query("#modal-alert.alert-warning").innerText, + I18n.t("topic.share.restricted_groups", { + count: 1, + groupNames: "moderators", + }), + "it shows correct restricted group name" + ); }); }); @@ -78,6 +92,12 @@ acceptance("Share and Invite modal - mobile", function (needs) { needs.user(); needs.mobileView(); + needs.pretender((server, helper) => { + server.get("/c/feature/find_by_slug.json", () => + helper.response(200, CategoryFixtures["/c/1/show.json"]) + ); + }); + test("Topic footer mobile button", async function (assert) { await visit("/t/internationalization-localization/280"); @@ -97,6 +117,13 @@ acceptance("Share and Invite modal - mobile", function (needs) { acceptance("Share url with badges disabled - desktop", function (needs) { needs.user(); needs.settings({ enable_badges: false }); + + needs.pretender((server, helper) => { + server.get("/c/feature/find_by_slug.json", () => + helper.response(200, CategoryFixtures["/c/1/show.json"]) + ); + }); + test("topic footer button - badges disabled - desktop", async function (assert) { await visit("/t/internationalization-localization/280"); await click("#topic-footer-button-share-and-invite");