DEV: Fix failing share topic tests (#16309)

Since 3fd7b31a2a 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.
This commit is contained in:
Martin Brennan 2022-03-29 17:11:44 +10:00 committed by GitHub
parent ad89bd5ac1
commit 045be237a0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 38 additions and 22 deletions

View File

@ -1,7 +1,9 @@
import Controller from "@ember/controller"; import Controller from "@ember/controller";
import { action } from "@ember/object"; import { action } from "@ember/object";
import { getAbsoluteURL } from "discourse-common/lib/get-url"; import { getAbsoluteURL } from "discourse-common/lib/get-url";
import discourseComputed from "discourse-common/utils/decorators"; import discourseComputed, {
afterRender,
} from "discourse-common/utils/decorators";
import { longDateNoYear } from "discourse/lib/formatter"; import { longDateNoYear } from "discourse/lib/formatter";
import Sharing from "discourse/lib/sharing"; import Sharing from "discourse/lib/sharing";
import showModal from "discourse/lib/show-modal"; import showModal from "discourse/lib/show-modal";
@ -9,7 +11,6 @@ import { bufferedProperty } from "discourse/mixins/buffered-content";
import ModalFunctionality from "discourse/mixins/modal-functionality"; import ModalFunctionality from "discourse/mixins/modal-functionality";
import I18n from "I18n"; import I18n from "I18n";
import Category from "discourse/models/category"; import Category from "discourse/models/category";
import { scheduleOnce } from "@ember/runloop";
import { getOwner } from "discourse-common/lib/get-owner"; import { getOwner } from "discourse-common/lib/get-owner";
export default Controller.extend( export default Controller.extend(
@ -19,7 +20,6 @@ export default Controller.extend(
topic: null, topic: null,
post: null, post: null,
allowInvites: false, allowInvites: false,
restrictedGroups: null,
onShow() { onShow() {
this.setProperties({ this.setProperties({
@ -28,35 +28,23 @@ export default Controller.extend(
allowInvites: false, allowInvites: false,
}); });
this.appEvents.on( this._showRestrictedGroupWarning();
"modal:body-shown", this._selectUrl();
this,
this.showRestrictedGroupWarning
);
scheduleOnce("afterRender", this, this.selectUrl);
}, },
onClose() { @afterRender
this.appEvents.off( _showRestrictedGroupWarning() {
"modal:body-shown",
this,
this.showRestrictedGroupWarning
);
},
showRestrictedGroupWarning() {
if (!this.model) { if (!this.model) {
return; return;
} }
Category.reloadBySlugPath(this.model.slug).then((result) => { Category.reloadBySlugPath(this.model.slug).then((result) => {
const groups = result.category.group_permissions.mapBy("group_name"); 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( this.flash(
I18n.t("topic.share.restricted_groups", { I18n.t("topic.share.restricted_groups", {
count: groups.length, count: groups.length,
groups: groups.join(", "), groupNames: groups.join(", "),
}), }),
"warning" "warning"
); );
@ -64,7 +52,8 @@ export default Controller.extend(
}); });
}, },
selectUrl() { @afterRender
_selectUrl() {
const input = document.querySelector("input.invite-link"); const input = document.querySelector("input.invite-link");
if (input && !this.site.mobileView) { if (input && !this.site.mobileView) {
// if the input is auto-focused on mobile, iOS requires two taps of the copy button // if the input is auto-focused on mobile, iOS requires two taps of the copy button

View File

@ -1,8 +1,10 @@
import CategoryFixtures from "discourse/tests/fixtures/category-fixtures"; import CategoryFixtures from "discourse/tests/fixtures/category-fixtures";
import I18n from "I18n";
import { click, visit } from "@ember/test-helpers"; import { click, visit } from "@ember/test-helpers";
import { import {
acceptance, acceptance,
exists, exists,
query,
queryAll, queryAll,
} from "discourse/tests/helpers/qunit-helpers"; } from "discourse/tests/helpers/qunit-helpers";
import selectKit from "discourse/tests/helpers/select-kit-helper"; import selectKit from "discourse/tests/helpers/select-kit-helper";
@ -28,6 +30,10 @@ acceptance("Share and Invite modal", function (needs) {
await click("#topic-footer-button-share-and-invite"); await click("#topic-footer-button-share-and-invite");
assert.ok(exists(".share-topic-modal"), "it shows the modal"); 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( assert.ok(
queryAll("input.invite-link") queryAll("input.invite-link")
@ -64,6 +70,14 @@ acceptance("Share and Invite modal", function (needs) {
exists("#modal-alert.alert-warning"), exists("#modal-alert.alert-warning"),
"it shows restricted 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"
);
}); });
}); });
@ -71,6 +85,12 @@ acceptance("Share and Invite modal - mobile", function (needs) {
needs.user(); needs.user();
needs.mobileView(); 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) { test("Topic footer mobile button", async function (assert) {
await visit("/t/internationalization-localization/280"); await visit("/t/internationalization-localization/280");
@ -90,6 +110,13 @@ acceptance("Share and Invite modal - mobile", function (needs) {
acceptance("Share url with badges disabled - desktop", function (needs) { acceptance("Share url with badges disabled - desktop", function (needs) {
needs.user(); needs.user();
needs.settings({ enable_badges: false }); 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) { test("topic footer button - badges disabled - desktop", async function (assert) {
await visit("/t/internationalization-localization/280"); await visit("/t/internationalization-localization/280");
await click("#topic-footer-button-share-and-invite"); await click("#topic-footer-button-share-and-invite");