0
0
Fork 0
mirror of https://github.com/discourse/discourse.git synced 2026-08-14 13:58:53 +08:00
discourse/plugins/discourse-solved/test/javascripts/acceptance/discourse-solved-post-menu-test.js
2026-06-01 11:34:47 -05:00

162 lines
4.5 KiB
JavaScript
Vendored

import { click, triggerEvent, visit } from "@ember/test-helpers";
import { test } from "qunit";
import { acceptance } from "discourse/tests/helpers/qunit-helpers";
import { i18n } from "discourse-i18n";
import { postStreamWithAcceptedAnswerExcerpt } from "../helpers/discourse-solved-helpers";
function nestedTopicWithUnacceptedAnswer() {
const topicView = postStreamWithAcceptedAnswerExcerpt(null);
const [opPost, answerPost] = topicView.post_stream.posts;
const topic = { ...topicView };
delete topic.post_stream;
delete topic.timeline_lookup;
return {
topic: {
...topic,
accepted_answers: [],
has_accepted_answer: false,
},
op_post: {
...opPost,
topic_accepted_answer: false,
},
roots: [
{
...answerPost,
accepted_answer: false,
topic_accepted_answer: false,
reply_to_post_number: 1,
direct_reply_count: 0,
total_descendant_count: 0,
children: [],
},
],
page: 0,
has_more_roots: false,
sort: "top",
message_bus_last_id: 0,
};
}
acceptance("Post Menu | Accept and Unaccept", function (needs) {
needs.user({ admin: true });
needs.settings({
solved_enabled: true,
allow_solved_on_all_topics: true,
nested_replies_enabled: true,
});
needs.pretender((server, helper) => {
server.post("/solution/accept", () =>
helper.response(
postStreamWithAcceptedAnswerExcerpt(null).accepted_answers
)
);
server.post("/solution/unaccept", () => helper.response([]));
server.get("/t/12.json", () =>
helper.response(postStreamWithAcceptedAnswerExcerpt(null))
);
server.get("/n/test-solved/23.json", () =>
helper.response(nestedTopicWithUnacceptedAnswer())
);
});
test("accepting and unaccepting a post works", async function (assert) {
await visit("/t/without-excerpt/12");
assert
.dom("#post_2 .post-action-menu__solved-accepted")
.exists("Unaccept button is visible")
.hasText(i18n("solved.solution"), "Unaccept button has correct text");
await click("#post_2 .post-action-menu__solved-accepted");
assert
.dom("#post_2 .post-action-menu__solved-unaccepted")
.exists("Accept button is visible");
await click("#post_2 .post-action-menu__solved-unaccepted");
assert
.dom("#post_2 .post-action-menu__solved-accepted")
.exists("Unaccept button is visible again");
});
test("accepting a post in nested view updates the post menu button", async function (assert) {
await visit("/n/test-solved/23");
assert
.dom(
'.nested-post__article[data-post-number="2"] .post-action-menu__solved-unaccepted'
)
.exists("Accept button is visible");
await click(
'.nested-post__article[data-post-number="2"] .post-action-menu__solved-unaccepted'
);
assert
.dom(
'.nested-post__article[data-post-number="2"] .post-action-menu__solved-accepted'
)
.exists("Unaccept button is visible after accepting the solution");
});
test("hides/shows the accepting user based on setting", async function (assert) {
await visit("/t/without-excerpt/12");
assert
.dom("#post_2 .post-action-menu__solved-accepted")
.exists("Unaccept button is visible")
.hasText(i18n("solved.solution"), "Unaccept button has correct text");
assert
.dom(
"#post_2 .fk-d-tooltip__trigger-container .post-action-menu__solved-accepted"
)
.doesNotExist();
this.siteSettings.show_who_marked_solved = true;
await visit("/t/without-excerpt/12");
assert
.dom(
"#post_2 .fk-d-tooltip__trigger-container .post-action-menu__solved-accepted"
)
.exists();
await triggerEvent(
"#post_2 .post-action-menu__solved-accepted",
"pointermove"
);
assert
.dom(
"#post_2 .fk-d-tooltip__content[data-identifier='post-action-menu__solved-accepted-tooltip']"
)
.hasText(i18n("solved.marked_solved_by", { user: "tomtom" }));
this.siteSettings.display_name_on_posts = true;
await visit("/t/without-excerpt/12");
assert
.dom(
"#post_2 .fk-d-tooltip__trigger-container .post-action-menu__solved-accepted"
)
.exists();
await triggerEvent(
"#post_2 .post-action-menu__solved-accepted",
"pointermove"
);
assert
.dom(
"#post_2 .fk-d-tooltip__content[data-identifier='post-action-menu__solved-accepted-tooltip']"
)
.hasText(i18n("solved.marked_solved_by", { user: "Tomtom" }));
});
});