From 5503499514c73671a931071da8bdfcad016332b0 Mon Sep 17 00:00:00 2001 From: Natalie Tay Date: Wed, 11 May 2022 16:17:33 +0800 Subject: [PATCH] FIX: Assigning a user without notes assigns and closes the modal (#329) --- .../controllers/assign-user.js | 7 ++ .../controllers/assign-user-test.js | 67 +++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 test/javascripts/controllers/assign-user-test.js diff --git a/assets/javascripts/discourse-assign/controllers/assign-user.js b/assets/javascripts/discourse-assign/controllers/assign-user.js index 5968732..7f39a43 100644 --- a/assets/javascripts/discourse-assign/controllers/assign-user.js +++ b/assets/javascripts/discourse-assign/controllers/assign-user.js @@ -19,6 +19,9 @@ export default Controller.extend({ this.allowedGroups = []; ajax("/assign/suggestions").then((data) => { + if (this.isDestroying || this.isDestroyed) { + return; + } this.set("assignSuggestions", data.suggestions); this.set("allowedGroups", data.assign_allowed_on_groups); this.set("allowedGroupsForAssignment", data.assign_allowed_for_groups); @@ -100,6 +103,10 @@ export default Controller.extend({ "model.allowedGroups": this.taskActions.allowedGroups, }); } + + if (name) { + return this.assign(); + } }, @action diff --git a/test/javascripts/controllers/assign-user-test.js b/test/javascripts/controllers/assign-user-test.js new file mode 100644 index 0000000..5f7d765 --- /dev/null +++ b/test/javascripts/controllers/assign-user-test.js @@ -0,0 +1,67 @@ +import EmberObject from "@ember/object"; +import pretender from "discourse/tests/helpers/create-pretender"; +import { discourseModule } from "discourse/tests/helpers/qunit-helpers"; +import { test } from "qunit"; +import { Promise } from "rsvp"; + +discourseModule("Unit | Controller | assign-user", function () { + test("doesn't set suggestions and fails gracefully if controller is destroyed", function (assert) { + let resolveSuggestions; + pretender.get("/assign/suggestions", () => { + return new Promise((resolve) => { + resolveSuggestions = resolve; + }); + }); + const controller = this.getController("assign-user", { + model: { + target: EmberObject.create({}), + }, + }); + + controller.destroy(); + resolveSuggestions([ + 200, + { "Content-Type": "application/json" }, + { + suggestions: [], + assign_allowed_on_groups: ["nat"], + assign_allowed_for_groups: [], + }, + ]); + + assert.strictEqual(controller.get("assign_allowed_on_groups"), undefined); + }); + + test("assigning a user closes the modal", function (assert) { + pretender.get("/assign/suggestions", () => { + return [ + 200, + { "Content-Type": "application/json" }, + { + suggestions: [], + assign_allowed_on_groups: ["nat"], + assign_allowed_for_groups: [], + }, + ]; + }); + pretender.put("/assign/assign", () => { + return [200, { "Content-Type": "application/json" }, {}]; + }); + + let modalClosed = false; + const controller = this.getController("assign-user", { + model: { + target: EmberObject.create({}), + }, + allowedGroupsForAssignment: ["nat"], + taskActions: { allowedGroups: [] }, + }); + controller.set("actions.closeModal", () => { + modalClosed = true; + }); + + controller.send("assignUser", "nat"); + + assert.strictEqual(modalClosed, true); + }); +});