discourse-assign/test/javascripts/acceptance/post-popup-menu-test.js

106 lines
3.1 KiB
JavaScript

import { click, fillIn, visit } from "@ember/test-helpers";
import { test } from "qunit";
import {
acceptance,
publishToMessageBus,
updateCurrentUser,
} from "discourse/tests/helpers/qunit-helpers";
import topicWithAssignedPosts from "../fixtures/topic-with-assigned-posts";
const new_assignee_username = "new_assignee";
const selectors = {
assignedTo: ".post-stream article#post_2 .assigned-to",
moreButton: ".post-stream .topic-post .more-button",
popupMenu: {
unassign: ".post-assign-menu-content .unassign-btn",
editAssignment: ".post-assign-menu-content .edit-assignment-btn",
},
modal: {
assignee: ".modal-container .select-kit-header-wrapper",
assigneeInput: ".modal-container .filter-input",
assignButton: ".d-modal__footer .btn-primary",
},
};
const topic = topicWithAssignedPosts();
const post = topic.post_stream.posts[1];
acceptance("Discourse Assign | Post popup menu", function (needs) {
needs.user();
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 });
});
server.put("/assign/unassign", () => {
return helper.response({ success: true });
});
server.get("/assign/suggestions", () =>
helper.response({
assign_allowed_for_groups: [],
suggestions: [{ username: new_assignee_username }],
})
);
server.get("/u/search/users", () =>
helper.response({ users: [{ username: new_assignee_username }] })
);
});
needs.hooks.beforeEach(() => {
updateCurrentUser({ can_assign: true });
});
test("Unassigns the post", async function (assert) {
await visit("/t/assignment-topic/44");
await click(selectors.moreButton);
await click(selectors.popupMenu.unassign);
await publishToMessageBus("/staff/topic-assignment", {
type: "unassigned",
topic_id: topic.id,
post_id: post.id,
assigned_type: "User",
});
assert.dom(".popup-menu").doesNotExist("The popup menu is closed");
assert.dom(selectors.assignedTo).doesNotExist("The post is unassigned");
});
test("Reassigns the post", async function (assert) {
await visit("/t/assignment-topic/44");
await click(selectors.moreButton);
await click(selectors.popupMenu.editAssignment);
await click(selectors.modal.assignee);
await fillIn(selectors.modal.assigneeInput, new_assignee_username);
await click(selectors.modal.assignButton);
await publishToMessageBus("/staff/topic-assignment", {
type: "assigned",
topic_id: topic.id,
post_id: post.id,
assigned_type: "User",
assigned_to: {
username: new_assignee_username,
},
});
// todo: we can skip this one for now, It will be fixed it in a core PR
// assert.dom(".popup-menu").doesNotExist("The popup menu is closed");
assert
.dom(`${selectors.assignedTo} .assigned-to-username`)
.hasText(
new_assignee_username,
"The post is assigned to the new assignee"
);
});
});