170 lines
4.9 KiB
JavaScript
170 lines
4.9 KiB
JavaScript
import { click, settled, visit } from "@ember/test-helpers";
|
|
import { test } from "qunit";
|
|
import {
|
|
acceptance,
|
|
publishToMessageBus,
|
|
} from "discourse/tests/helpers/qunit-helpers";
|
|
import topicWithAssignedPosts from "../fixtures/topic-with-assigned-posts";
|
|
|
|
const topic = topicWithAssignedPosts();
|
|
const firstReply = topic.post_stream.posts[1];
|
|
const secondReply = topic.post_stream.posts[2];
|
|
const new_assignee_1 = "user_1";
|
|
const new_assignee_2 = "user_2";
|
|
|
|
acceptance("Discourse Assign | Edit assignments modal", function (needs) {
|
|
needs.user({ can_assign: true });
|
|
needs.settings({
|
|
assign_enabled: true,
|
|
});
|
|
|
|
needs.pretender((server, helper) => {
|
|
server.get("/t/44.json", () => helper.response(topic));
|
|
server.put("/assign/assign", () => {
|
|
return helper.response({ success: true });
|
|
});
|
|
|
|
const suggestions = [
|
|
{ username: new_assignee_1 },
|
|
{ username: new_assignee_2 },
|
|
];
|
|
server.get("/assign/suggestions", () =>
|
|
helper.response({
|
|
assign_allowed_for_groups: [],
|
|
suggestions,
|
|
})
|
|
);
|
|
server.get("/u/search/users", () =>
|
|
helper.response({
|
|
users: suggestions,
|
|
})
|
|
);
|
|
});
|
|
|
|
test("reassigning topic", async function (assert) {
|
|
await visit("/t/assignment-topic/44");
|
|
await openModal();
|
|
await selectAssignee(new_assignee_1);
|
|
|
|
await submitModal();
|
|
await receiveAssignedMessage(topic, new_assignee_1);
|
|
|
|
assert
|
|
.dom(".post-stream article#post_1 .assigned-to .assigned-to--user a")
|
|
.hasText(new_assignee_1, "The topic is assigned to a new assignee");
|
|
});
|
|
|
|
test("reassigning posts", async function (assert) {
|
|
await visit("/t/assignment-topic/44");
|
|
await openModal();
|
|
|
|
await selectPost(1);
|
|
await expandAssigneeChooser();
|
|
await selectAssignee(new_assignee_1);
|
|
|
|
await selectPost(2);
|
|
await expandAssigneeChooser();
|
|
await selectAssignee(new_assignee_2);
|
|
|
|
await submitModal();
|
|
await receiveAssignedMessage(firstReply, new_assignee_1);
|
|
await receiveAssignedMessage(secondReply, new_assignee_2);
|
|
|
|
assert
|
|
.dom(".post-stream article#post_2 .assigned-to .assigned-to-username")
|
|
.hasText(new_assignee_1, "The first reply is assigned to a new assignee");
|
|
|
|
assert
|
|
.dom(".post-stream article#post_3 .assigned-to .assigned-to-username")
|
|
.hasText(
|
|
new_assignee_2,
|
|
"The second reply is assigned to a new assignee"
|
|
);
|
|
});
|
|
|
|
test("reassigning topic and posts in one go", async function (assert) {
|
|
await visit("/t/assignment-topic/44");
|
|
await openModal();
|
|
await selectAssignee(new_assignee_1);
|
|
|
|
await selectPost(1);
|
|
await expandAssigneeChooser();
|
|
await selectAssignee(new_assignee_2);
|
|
|
|
await selectPost(2);
|
|
await expandAssigneeChooser();
|
|
await selectAssignee(new_assignee_2);
|
|
|
|
await submitModal();
|
|
await receiveAssignedMessage(topic, new_assignee_1);
|
|
await receiveAssignedMessage(firstReply, new_assignee_2);
|
|
await receiveAssignedMessage(secondReply, new_assignee_2);
|
|
|
|
assert
|
|
.dom(".post-stream article#post_1 .assigned-to .assigned-to--user a")
|
|
.hasText(new_assignee_1, "The topic is assigned to a new assignee");
|
|
|
|
assert
|
|
.dom(".post-stream article#post_2 .assigned-to .assigned-to-username")
|
|
.hasText(new_assignee_2, "The first reply is assigned to a new assignee");
|
|
|
|
assert
|
|
.dom(".post-stream article#post_3 .assigned-to .assigned-to-username")
|
|
.hasText(
|
|
new_assignee_2,
|
|
"The second reply is assigned to a new assignee"
|
|
);
|
|
});
|
|
|
|
async function expandAssigneeChooser() {
|
|
await click(
|
|
".modal-container #assignee-chooser-header .select-kit-header-wrapper"
|
|
);
|
|
}
|
|
|
|
async function openModal() {
|
|
await click("#topic-footer-dropdown-reassign .btn");
|
|
await click(`li[data-value='reassign']`);
|
|
}
|
|
|
|
// todo remove this function and all calls to it after we start updating UI right away
|
|
// (there is no need to wait for a message bus message in the browser of a user
|
|
// who did reassignment, but we do that at the moment)
|
|
async function receiveAssignedMessage(target, newAssignee) {
|
|
const targetIsAPost = !!target.topic_id;
|
|
|
|
let topicId, postId;
|
|
if (targetIsAPost) {
|
|
topicId = target.topic_id;
|
|
postId = target.id;
|
|
} else {
|
|
topicId = target.id;
|
|
postId = false;
|
|
}
|
|
|
|
await publishToMessageBus("/staff/topic-assignment", {
|
|
type: "assigned",
|
|
topic_id: topicId,
|
|
post_id: postId,
|
|
assigned_type: "User",
|
|
assigned_to: {
|
|
username: newAssignee,
|
|
},
|
|
});
|
|
await settled();
|
|
}
|
|
|
|
async function selectPost(number) {
|
|
await click(".target .single-select .select-kit-header-wrapper");
|
|
await click(`li[title='Post #${number}']`);
|
|
}
|
|
|
|
async function selectAssignee(username) {
|
|
await click(`.email-group-user-chooser-row[data-value='${username}']`);
|
|
}
|
|
|
|
async function submitModal() {
|
|
await click(".d-modal__footer .btn-primary");
|
|
}
|
|
});
|