discourse/plugins/poll/test/javascripts/acceptance/poll-quote-test.js.es6
Martin Brennan 0c42a1e5f3
FEATURE: Topic-level bookmarks (#14353)
Allows creating a bookmark with the `for_topic` flag introduced in d1d2298a4c set to true. This happens when clicking on the Bookmark button in the topic footer when no other posts are bookmarked. In a later PR, when clicking on these topic-level bookmarks the user will be taken to the last unread post in the topic, not the OP. Only the OP can have a topic level bookmark, and users can also make a post-level bookmark on the OP of the topic.

I had to do some pretty heavy refactors because most of the bookmark code in the JS topics controller was centred around instances of Post JS models, but the topic level bookmark is not centred around a post. Some refactors were just for readability as well.

Also removes some missed reminderType code from the purge in 41e19adb0d
2021-09-21 08:45:47 +10:00

439 lines
14 KiB
JavaScript

import { acceptance, count } from "discourse/tests/helpers/qunit-helpers";
import { clearPopupMenuOptionsCallback } from "discourse/controllers/composer";
import { test } from "qunit";
import { visit } from "@ember/test-helpers";
acceptance("Poll quote", function (needs) {
needs.user();
needs.settings({ poll_enabled: true });
needs.hooks.beforeEach(() => {
clearPopupMenuOptionsCallback();
});
needs.pretender((server, helper) => {
server.get("/posts/by_number/130/1", () => {
return helper.response({
id: 133,
name: null,
username: "bianca",
avatar_template: "/letter_avatar_proxy/v4/letter/b/3be4f8/{size}.png",
created_at: "2020-08-17T12:05:24.577Z",
cooked:
'<div class="poll" data-poll-status="open" data-poll-name="poll1" data-poll-results="always" data-poll-charttype="bar" data-poll-type="regular">\n<div>\n<div class="poll-container">\n<ul>\n<li data-poll-option-id="bf48cd4958a17180e2a298e246988f94">Alpha</li>\n<li data-poll-option-id="c19aa835729ab0413a84a2c9850c4005">Beta</li>\n</ul>\n</div>\n<div class="poll-info">\n<p>\n<span class="info-number">0</span>\n<span class="info-label">voters</span>\n</p>\n</div>\n</div>\n</div>\n<div class="poll" data-poll-status="open" data-poll-name="poll2" data-poll-results="always" data-poll-charttype="bar" data-poll-type="regular">\n<div>\n<div class="poll-container">\n<ul>\n<li data-poll-option-id="def034c6770c6fd3754c054ef9ec4721">First</li>\n<li data-poll-option-id="e0f55d1a981683789bec2a0b05eb70ef">Second</li>\n</ul>\n</div>\n<div class="poll-info">\n<p>\n<span class="info-number">0</span>\n<span class="info-label">voters</span>\n</p>\n</div>\n</div>\n</div>',
post_number: 1,
post_type: 1,
updated_at: "2020-08-17T12:05:24.577Z",
reply_count: 0,
reply_to_post_number: null,
quote_count: 0,
incoming_link_count: 0,
reads: 1,
readers_count: 0,
score: 0.2,
yours: true,
topic_id: 130,
topic_slug: "topic-with-two-polls",
display_username: null,
primary_group_name: null,
flair_url: null,
flair_bg_color: null,
flair_color: null,
version: 1,
can_edit: true,
can_delete: false,
can_recover: false,
can_wiki: true,
user_title: "Tester",
title_is_group: false,
bookmarked: false,
bookmarks: [],
raw:
"[poll name=poll1 type=regular results=always chartType=bar]\n* Alpha\n* Beta\n[/poll]\n\n[poll name=poll2 type=regular results=always chartType=bar]\n* First\n* Second\n[/poll]",
actions_summary: [
{
id: 3,
can_act: true,
},
{
id: 4,
can_act: true,
},
{
id: 8,
can_act: true,
},
{
id: 7,
can_act: true,
},
],
moderator: false,
admin: true,
staff: true,
user_id: 1,
hidden: false,
trust_level: 0,
deleted_at: null,
user_deleted: false,
edit_reason: null,
can_view_edit_history: true,
wiki: false,
reviewable_id: null,
reviewable_score_count: 0,
reviewable_score_pending_count: 0,
calendar_details: [],
polls: [
{
name: "poll1",
type: "regular",
status: "open",
results: "always",
options: [
{
id: "bf48cd4958a17180e2a298e246988f94",
html: "Alpha",
votes: 0,
},
{
id: "c19aa835729ab0413a84a2c9850c4005",
html: "Beta",
votes: 0,
},
],
voters: 0,
chart_type: "bar",
},
{
name: "poll2",
type: "regular",
status: "open",
results: "always",
options: [
{
id: "def034c6770c6fd3754c054ef9ec4721",
html: "First",
votes: 0,
},
{
id: "e0f55d1a981683789bec2a0b05eb70ef",
html: "Second",
votes: 0,
},
],
voters: 0,
chart_type: "bar",
},
],
});
});
server.get("/t/topic_with_two_quoted_polls.json", () => {
return helper.response({
post_stream: {
posts: [
{
id: 134,
name: null,
username: "bianca",
avatar_template:
"/letter_avatar_proxy/v4/letter/b/3be4f8/{size}.png",
created_at: "2020-08-17T12:08:24.043Z",
cooked:
'<aside class="quote quote-modified" data-post="1" data-topic="130">\n <div class="title">\n <div class="quote-controls"></div>\n <img alt="" width="20" height="20" src="/letter_avatar_proxy/v4/letter/b/3be4f8/40.png" class="avatar">\n <a href="//forum.example.com/t/topic-with-two-polls/130">Topic with two polls</a> \n </div>\n <blockquote>\n <a href="/t/topic-with-two-polls/130/1">poll</a>\n<a href="/t/topic-with-two-polls/130/1">poll</a>\n </blockquote>\n</aside>\n',
post_number: 1,
post_type: 1,
updated_at: "2020-08-17T12:08:24.043Z",
reply_count: 0,
reply_to_post_number: null,
quote_count: 0,
incoming_link_count: 0,
reads: 1,
readers_count: 0,
score: 0,
yours: true,
topic_id: 131,
topic_slug: "topic-with-two-quoted-polls",
display_username: null,
primary_group_name: null,
flair_url: null,
flair_bg_color: null,
flair_color: null,
version: 1,
can_edit: true,
can_delete: false,
can_recover: false,
can_wiki: true,
link_counts: [
{
url: "http://forum.example.com/t/topic-with-two-polls/130",
internal: true,
reflection: false,
title: "Topic with two polls",
clicks: 0,
},
],
read: true,
user_title: "Tester",
title_is_group: false,
bookmarked: false,
bookmarks: [],
actions_summary: [
{
id: 3,
can_act: true,
},
{
id: 4,
can_act: true,
},
{
id: 8,
can_act: true,
},
{
id: 7,
can_act: true,
},
],
moderator: false,
admin: true,
staff: true,
user_id: 1,
hidden: false,
trust_level: 0,
deleted_at: null,
user_deleted: false,
edit_reason: null,
can_view_edit_history: true,
wiki: false,
reviewable_id: 0,
reviewable_score_count: 0,
reviewable_score_pending_count: 0,
calendar_details: [],
},
],
stream: [134],
},
timeline_lookup: [[1, 0]],
suggested_topics: [
{
id: 7,
title: "Welcome to Discourse",
fancy_title: "Welcome to Discourse",
slug: "welcome-to-discourse",
posts_count: 1,
reply_count: 0,
highest_post_number: 1,
image_url: null,
created_at: "2020-08-11T12:43:04.894Z",
last_posted_at: "2020-08-11T12:43:04.959Z",
bumped: true,
bumped_at: "2020-08-11T12:43:04.959Z",
archetype: "regular",
unseen: false,
last_read_post_number: 1,
unread_posts: 0,
pinned: false,
unpinned: true,
visible: true,
closed: false,
archived: false,
notification_level: 1,
bookmarked: false,
bookmarks: [],
liked: false,
tags: [],
like_count: 0,
views: 1,
category_id: 1,
featured_link: null,
posters: [
{
extras: "latest single",
description: "Original Poster, Most Recent Poster",
user: {
id: 5,
username: "foo2",
name: null,
avatar_template:
"/letter_avatar_proxy/v4/letter/f/8edcca/{size}.png",
},
},
],
},
{
id: 130,
title: "Topic with two polls",
fancy_title: "Topic with two polls",
slug: "topic-with-two-polls",
posts_count: 1,
reply_count: 0,
highest_post_number: 1,
image_url: null,
created_at: "2020-08-17T12:05:24.500Z",
last_posted_at: "2020-08-17T12:05:24.577Z",
bumped: true,
bumped_at: "2020-08-17T12:05:24.577Z",
archetype: "regular",
unseen: false,
last_read_post_number: 1,
unread_posts: 0,
pinned: false,
unpinned: null,
visible: true,
closed: false,
archived: false,
notification_level: 3,
bookmarked: false,
bookmarks: [],
liked: false,
tags: [],
like_count: 0,
views: 1,
category_id: 1,
featured_link: null,
posters: [
{
extras: "latest single",
description: "Original Poster, Most Recent Poster",
user: {
id: 1,
username: "bianca",
name: null,
avatar_template:
"/letter_avatar_proxy/v4/letter/b/3be4f8/{size}.png",
},
},
],
},
],
tags: [],
id: 131,
title: "Topic with two quoted polls",
fancy_title: "Topic with two quoted polls",
posts_count: 1,
created_at: "2020-08-17T12:08:23.918Z",
views: 1,
reply_count: 0,
like_count: 0,
last_posted_at: "2020-08-17T12:08:24.043Z",
visible: true,
closed: false,
archived: false,
has_summary: false,
archetype: "regular",
slug: "topic-with-two-quoted-polls",
category_id: 1,
word_count: 9,
deleted_at: null,
user_id: 1,
featured_link: null,
pinned_globally: false,
pinned_at: null,
pinned_until: null,
image_url: null,
draft: null,
draft_key: "topic_131",
draft_sequence: 0,
posted: true,
unpinned: null,
pinned: false,
current_post_number: 1,
highest_post_number: 1,
last_read_post_number: 1,
last_read_post_id: 134,
deleted_by: null,
has_deleted: false,
actions_summary: [
{
id: 4,
count: 0,
hidden: false,
can_act: true,
},
{
id: 8,
count: 0,
hidden: false,
can_act: true,
},
{
id: 7,
count: 0,
hidden: false,
can_act: true,
},
],
chunk_size: 20,
bookmarked: false,
bookmarks: [],
topic_timer: null,
message_bus_last_id: 2,
participant_count: 1,
queued_posts_count: 0,
show_read_indicator: false,
thumbnails: null,
can_vote: false,
vote_count: null,
user_voted: false,
details: {
notification_level: 3,
notifications_reason_id: 1,
can_move_posts: true,
can_edit: true,
can_delete: true,
can_remove_allowed_users: true,
can_invite_to: true,
can_invite_via_email: true,
can_create_post: true,
can_reply_as_new_topic: true,
can_flag_topic: true,
can_convert_topic: true,
can_review_topic: true,
can_close_topic: true,
can_archive_topic: true,
can_split_merge_topic: true,
can_edit_staff_notes: true,
can_remove_self_id: 1,
participants: [
{
id: 1,
username: "bianca",
name: null,
avatar_template:
"/letter_avatar_proxy/v4/letter/b/3be4f8/{size}.png",
post_count: 1,
primary_group_name: null,
flair_url: null,
flair_color: null,
flair_bg_color: null,
},
],
created_by: {
id: 1,
username: "bianca",
name: null,
avatar_template:
"/letter_avatar_proxy/v4/letter/b/3be4f8/{size}.png",
},
last_poster: {
id: 1,
username: "bianca",
name: null,
avatar_template:
"/letter_avatar_proxy/v4/letter/b/3be4f8/{size}.png",
},
},
pending_posts: [],
});
});
});
test("renders and extends", async function (assert) {
await visit("/t/-/topic_with_two_quoted_polls");
await click(".quote-controls");
assert.equal(count(".poll"), 2, "polls are rendered");
assert.equal(count(".poll-buttons"), 2, "polls are extended");
});
});