FIX: Only assign when suggestion is clicked (#334)

This commit is contained in:
Natalie Tay 2022-05-12 20:55:37 +08:00 committed by GitHub
parent 4065b29f69
commit 6db2e0991b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 49 additions and 38 deletions

View File

@ -90,6 +90,24 @@ export default Controller.extend({
return;
}
this.setGroupOrUser(name);
if (name) {
return this.assign();
}
},
@action
assignUsername(selected) {
if (this.isBulkAction) {
this.bulkAction(selected.firstObject);
return;
}
this.setGroupOrUser(selected.firstObject);
},
setGroupOrUser(name) {
if (this.allowedGroupsForAssignment.includes(name)) {
this.setProperties({
"model.username": null,
@ -103,14 +121,5 @@ export default Controller.extend({
"model.allowedGroups": this.taskActions.allowedGroups,
});
}
if (name) {
return this.assign();
}
},
@action
assignUsername(selected) {
this.assignUser(selected.firstObject);
},
});

View File

@ -2,37 +2,9 @@ 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) {
test("assigning a user via suggestions makes API call and closes the modal", function (assert) {
pretender.get("/assign/suggestions", () => {
return [
200,
@ -64,4 +36,34 @@ discourseModule("Unit | Controller | assign-user", function () {
assert.strictEqual(modalClosed, true);
});
test("assigning a user by selector does not close the modal", function (assert) {
pretender.get("/assign/suggestions", () => {
return [
200,
{ "Content-Type": "application/json" },
{
suggestions: [],
assign_allowed_on_groups: ["nat"],
assign_allowed_for_groups: [],
},
];
});
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("assignUsername", "nat");
assert.strictEqual(modalClosed, false);
});
});