mirror of
https://github.com/discourse/discourse.git
synced 2025-03-06 03:09:43 +00:00
REFACTOR: Move test setup to a module
This is long overdue. We had a lot of (not linted) code to initialize our test suite as part of the Ruby `test_helper.js` bundle. This refactor moves that out to a `setup-tests` module, which imports all the modules properly, rather than using `require`. It also removes the global `server` variable which some tests were using for pretender. Those tests are fixed, and in the case of widget tests, support for a `pretend()` was added, which mimics our acceptance tests. One problematic test was removed, which overwrites `/posts` - this could break tons of other tests depending on order.
This commit is contained in:
parent
5130b4d674
commit
ef7d99b0a8
@ -18,6 +18,244 @@ acceptance("Composer Actions", {
|
|||||||
site: {
|
site: {
|
||||||
can_tag_topics: true,
|
can_tag_topics: true,
|
||||||
},
|
},
|
||||||
|
pretend(server) {
|
||||||
|
server.get("/t/130.json", () => {
|
||||||
|
return [
|
||||||
|
200,
|
||||||
|
{ "Content-Type": "application/json" },
|
||||||
|
{
|
||||||
|
post_stream: {
|
||||||
|
posts: [
|
||||||
|
{
|
||||||
|
id: 133,
|
||||||
|
name: null,
|
||||||
|
username: "bianca",
|
||||||
|
avatar_template:
|
||||||
|
"/letter_avatar_proxy/v4/letter/b/3be4f8/{size}.png",
|
||||||
|
created_at: "2020-07-05T09:28:36.371Z",
|
||||||
|
cooked:
|
||||||
|
"<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas a varius ipsum. Nunc euismod, metus non vulputate malesuada, ligula metus pharetra tortor, vel sodales arcu lacus sed mauris. Nam semper, orci vitae fringilla placerat, dui tellus convallis felis, ultricies laoreet sapien mi et metus. Mauris facilisis, mi fermentum rhoncus feugiat, dolor est vehicula leo, id porta leo ex non enim. In a ligula vel tellus commodo scelerisque non in ex. Pellentesque semper leo quam, nec varius est viverra eget. Donec vehicula sem et massa faucibus tempus.</p>",
|
||||||
|
post_number: 1,
|
||||||
|
post_type: 1,
|
||||||
|
updated_at: "2020-07-05T09:28:36.371Z",
|
||||||
|
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: 130,
|
||||||
|
topic_slug: "lorem-ipsum-dolor-sit-amet",
|
||||||
|
display_username: null,
|
||||||
|
primary_group_name: null,
|
||||||
|
primary_group_flair_url: null,
|
||||||
|
primary_group_flair_bg_color: null,
|
||||||
|
primary_group_flair_color: null,
|
||||||
|
version: 1,
|
||||||
|
can_edit: true,
|
||||||
|
can_delete: false,
|
||||||
|
can_recover: false,
|
||||||
|
can_wiki: true,
|
||||||
|
read: true,
|
||||||
|
user_title: "Tester",
|
||||||
|
title_is_group: false,
|
||||||
|
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,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
stream: [133],
|
||||||
|
},
|
||||||
|
timeline_lookup: [[1, 0]],
|
||||||
|
related_messages: [],
|
||||||
|
suggested_topics: [],
|
||||||
|
id: 130,
|
||||||
|
title: "Lorem ipsum dolor sit amet",
|
||||||
|
fancy_title: "Lorem ipsum dolor sit amet",
|
||||||
|
posts_count: 1,
|
||||||
|
created_at: "2020-07-05T09:28:36.260Z",
|
||||||
|
views: 1,
|
||||||
|
reply_count: 0,
|
||||||
|
like_count: 0,
|
||||||
|
last_posted_at: "2020-07-05T09:28:36.371Z",
|
||||||
|
visible: true,
|
||||||
|
closed: false,
|
||||||
|
archived: false,
|
||||||
|
has_summary: false,
|
||||||
|
archetype: "private_message",
|
||||||
|
slug: "lorem-ipsum-dolor-sit-amet",
|
||||||
|
category_id: null,
|
||||||
|
word_count: 86,
|
||||||
|
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_130",
|
||||||
|
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: 133,
|
||||||
|
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,
|
||||||
|
message_archived: false,
|
||||||
|
topic_timer: null,
|
||||||
|
message_bus_last_id: 5,
|
||||||
|
participant_count: 1,
|
||||||
|
pm_with_non_human_user: false,
|
||||||
|
show_read_indicator: false,
|
||||||
|
requested_group_name: null,
|
||||||
|
thumbnails: null,
|
||||||
|
tags_disable_ads: 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_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,
|
||||||
|
primary_group_flair_url: null,
|
||||||
|
primary_group_flair_color: null,
|
||||||
|
primary_group_flair_bg_color: null,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
allowed_users: [
|
||||||
|
{
|
||||||
|
id: 7,
|
||||||
|
username: "foo",
|
||||||
|
name: null,
|
||||||
|
avatar_template:
|
||||||
|
"/letter_avatar_proxy/v4/letter/f/b19c9b/{size}.png",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
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",
|
||||||
|
},
|
||||||
|
allowed_groups: [
|
||||||
|
{
|
||||||
|
id: 43,
|
||||||
|
automatic: false,
|
||||||
|
name: "foo_group",
|
||||||
|
user_count: 4,
|
||||||
|
mentionable_level: 0,
|
||||||
|
messageable_level: 99,
|
||||||
|
visibility_level: 0,
|
||||||
|
automatic_membership_email_domains: "",
|
||||||
|
primary_group: false,
|
||||||
|
title: null,
|
||||||
|
grant_trust_level: null,
|
||||||
|
incoming_email: null,
|
||||||
|
has_messages: true,
|
||||||
|
flair_url: null,
|
||||||
|
flair_bg_color: "",
|
||||||
|
flair_color: "",
|
||||||
|
bio_raw: null,
|
||||||
|
bio_cooked: null,
|
||||||
|
bio_excerpt: null,
|
||||||
|
public_admission: false,
|
||||||
|
public_exit: false,
|
||||||
|
allow_membership_requests: false,
|
||||||
|
full_name: null,
|
||||||
|
default_notification_level: 3,
|
||||||
|
membership_request_template: null,
|
||||||
|
members_visibility_level: 0,
|
||||||
|
can_see_members: true,
|
||||||
|
publish_read_state: false,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
];
|
||||||
|
});
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
test("creating new topic and then reply_as_private_message keeps attributes", async (assert) => {
|
test("creating new topic and then reply_as_private_message keeps attributes", async (assert) => {
|
||||||
@ -154,244 +392,6 @@ test("reply_as_new_topic without a new_topic draft", async (assert) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test("reply_as_new_group_message", async (assert) => {
|
test("reply_as_new_group_message", async (assert) => {
|
||||||
// eslint-disable-next-line
|
|
||||||
server.get("/t/130.json", () => {
|
|
||||||
return [
|
|
||||||
200,
|
|
||||||
{ "Content-Type": "application/json" },
|
|
||||||
{
|
|
||||||
post_stream: {
|
|
||||||
posts: [
|
|
||||||
{
|
|
||||||
id: 133,
|
|
||||||
name: null,
|
|
||||||
username: "bianca",
|
|
||||||
avatar_template:
|
|
||||||
"/letter_avatar_proxy/v4/letter/b/3be4f8/{size}.png",
|
|
||||||
created_at: "2020-07-05T09:28:36.371Z",
|
|
||||||
cooked:
|
|
||||||
"<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas a varius ipsum. Nunc euismod, metus non vulputate malesuada, ligula metus pharetra tortor, vel sodales arcu lacus sed mauris. Nam semper, orci vitae fringilla placerat, dui tellus convallis felis, ultricies laoreet sapien mi et metus. Mauris facilisis, mi fermentum rhoncus feugiat, dolor est vehicula leo, id porta leo ex non enim. In a ligula vel tellus commodo scelerisque non in ex. Pellentesque semper leo quam, nec varius est viverra eget. Donec vehicula sem et massa faucibus tempus.</p>",
|
|
||||||
post_number: 1,
|
|
||||||
post_type: 1,
|
|
||||||
updated_at: "2020-07-05T09:28:36.371Z",
|
|
||||||
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: 130,
|
|
||||||
topic_slug: "lorem-ipsum-dolor-sit-amet",
|
|
||||||
display_username: null,
|
|
||||||
primary_group_name: null,
|
|
||||||
primary_group_flair_url: null,
|
|
||||||
primary_group_flair_bg_color: null,
|
|
||||||
primary_group_flair_color: null,
|
|
||||||
version: 1,
|
|
||||||
can_edit: true,
|
|
||||||
can_delete: false,
|
|
||||||
can_recover: false,
|
|
||||||
can_wiki: true,
|
|
||||||
read: true,
|
|
||||||
user_title: "Tester",
|
|
||||||
title_is_group: false,
|
|
||||||
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,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
stream: [133],
|
|
||||||
},
|
|
||||||
timeline_lookup: [[1, 0]],
|
|
||||||
related_messages: [],
|
|
||||||
suggested_topics: [],
|
|
||||||
id: 130,
|
|
||||||
title: "Lorem ipsum dolor sit amet",
|
|
||||||
fancy_title: "Lorem ipsum dolor sit amet",
|
|
||||||
posts_count: 1,
|
|
||||||
created_at: "2020-07-05T09:28:36.260Z",
|
|
||||||
views: 1,
|
|
||||||
reply_count: 0,
|
|
||||||
like_count: 0,
|
|
||||||
last_posted_at: "2020-07-05T09:28:36.371Z",
|
|
||||||
visible: true,
|
|
||||||
closed: false,
|
|
||||||
archived: false,
|
|
||||||
has_summary: false,
|
|
||||||
archetype: "private_message",
|
|
||||||
slug: "lorem-ipsum-dolor-sit-amet",
|
|
||||||
category_id: null,
|
|
||||||
word_count: 86,
|
|
||||||
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_130",
|
|
||||||
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: 133,
|
|
||||||
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,
|
|
||||||
message_archived: false,
|
|
||||||
topic_timer: null,
|
|
||||||
message_bus_last_id: 5,
|
|
||||||
participant_count: 1,
|
|
||||||
pm_with_non_human_user: false,
|
|
||||||
show_read_indicator: false,
|
|
||||||
requested_group_name: null,
|
|
||||||
thumbnails: null,
|
|
||||||
tags_disable_ads: 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_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,
|
|
||||||
primary_group_flair_url: null,
|
|
||||||
primary_group_flair_color: null,
|
|
||||||
primary_group_flair_bg_color: null,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
allowed_users: [
|
|
||||||
{
|
|
||||||
id: 7,
|
|
||||||
username: "foo",
|
|
||||||
name: null,
|
|
||||||
avatar_template:
|
|
||||||
"/letter_avatar_proxy/v4/letter/f/b19c9b/{size}.png",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
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",
|
|
||||||
},
|
|
||||||
allowed_groups: [
|
|
||||||
{
|
|
||||||
id: 43,
|
|
||||||
automatic: false,
|
|
||||||
name: "foo_group",
|
|
||||||
user_count: 4,
|
|
||||||
mentionable_level: 0,
|
|
||||||
messageable_level: 99,
|
|
||||||
visibility_level: 0,
|
|
||||||
automatic_membership_email_domains: "",
|
|
||||||
primary_group: false,
|
|
||||||
title: null,
|
|
||||||
grant_trust_level: null,
|
|
||||||
incoming_email: null,
|
|
||||||
has_messages: true,
|
|
||||||
flair_url: null,
|
|
||||||
flair_bg_color: "",
|
|
||||||
flair_color: "",
|
|
||||||
bio_raw: null,
|
|
||||||
bio_cooked: null,
|
|
||||||
bio_excerpt: null,
|
|
||||||
public_admission: false,
|
|
||||||
public_exit: false,
|
|
||||||
allow_membership_requests: false,
|
|
||||||
full_name: null,
|
|
||||||
default_notification_level: 3,
|
|
||||||
membership_request_template: null,
|
|
||||||
members_visibility_level: 0,
|
|
||||||
can_see_members: true,
|
|
||||||
publish_read_state: false,
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
await visit("/t/lorem-ipsum-dolor-sit-amet/130");
|
await visit("/t/lorem-ipsum-dolor-sit-amet/130");
|
||||||
await click(".create.reply");
|
await click(".create.reply");
|
||||||
const composerActions = selectKit(".composer-actions");
|
const composerActions = selectKit(".composer-actions");
|
||||||
|
@ -10,8 +10,8 @@ import { Promise } from "rsvp";
|
|||||||
|
|
||||||
acceptance("Composer", {
|
acceptance("Composer", {
|
||||||
loggedIn: true,
|
loggedIn: true,
|
||||||
pretend(pretenderServer, helper) {
|
pretend(server, helper) {
|
||||||
pretenderServer.post("/uploads/lookup-urls", () => {
|
server.post("/uploads/lookup-urls", () => {
|
||||||
return helper.response([]);
|
return helper.response([]);
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@ -810,20 +810,3 @@ test("Image resizing buttons", async (assert) => {
|
|||||||
"it does not unescapes script tags in code blocks"
|
"it does not unescapes script tags in code blocks"
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("can reply to a private message", async (assert) => {
|
|
||||||
let submitted;
|
|
||||||
|
|
||||||
/* global server */
|
|
||||||
server.post("/posts", () => {
|
|
||||||
submitted = true;
|
|
||||||
return [200, { "Content-Type": "application/json" }, {}];
|
|
||||||
});
|
|
||||||
|
|
||||||
await visit("/t/34");
|
|
||||||
await click(".topic-post:eq(0) button.reply");
|
|
||||||
await fillIn(".d-editor-input", "this is the *content* of the reply");
|
|
||||||
await click("#reply-control button.create");
|
|
||||||
|
|
||||||
assert.ok(submitted);
|
|
||||||
});
|
|
||||||
|
@ -41,6 +41,10 @@ export let fixturesByUrl;
|
|||||||
|
|
||||||
export default new Pretender();
|
export default new Pretender();
|
||||||
|
|
||||||
|
export function pretenderHelpers() {
|
||||||
|
return { parsePostData, response, success };
|
||||||
|
}
|
||||||
|
|
||||||
export function applyDefaultHandlers(pretender) {
|
export function applyDefaultHandlers(pretender) {
|
||||||
// Autoload any `*-pretender` files
|
// Autoload any `*-pretender` files
|
||||||
Object.keys(requirejs.entries).forEach((e) => {
|
Object.keys(requirejs.entries).forEach((e) => {
|
||||||
|
@ -1,8 +1,6 @@
|
|||||||
import { Promise } from "rsvp";
|
import { Promise } from "rsvp";
|
||||||
import { isEmpty } from "@ember/utils";
|
import { isEmpty } from "@ember/utils";
|
||||||
import { later } from "@ember/runloop";
|
import { later } from "@ember/runloop";
|
||||||
/* global QUnit, resetSite */
|
|
||||||
|
|
||||||
import sessionFixtures from "discourse/tests/fixtures/session-fixtures";
|
import sessionFixtures from "discourse/tests/fixtures/session-fixtures";
|
||||||
import HeaderComponent from "discourse/components/site-header";
|
import HeaderComponent from "discourse/components/site-header";
|
||||||
import { forceMobile, resetMobile } from "discourse/lib/mobile";
|
import { forceMobile, resetMobile } from "discourse/lib/mobile";
|
||||||
@ -36,7 +34,10 @@ import { setURLContainer } from "discourse/lib/url";
|
|||||||
import { setDefaultOwner } from "discourse-common/lib/get-owner";
|
import { setDefaultOwner } from "discourse-common/lib/get-owner";
|
||||||
import bootbox from "bootbox";
|
import bootbox from "bootbox";
|
||||||
import { moduleFor } from "ember-qunit";
|
import { moduleFor } from "ember-qunit";
|
||||||
import { module } from "qunit";
|
import QUnit, { module } from "qunit";
|
||||||
|
import siteFixtures from "discourse/tests/fixtures/site-fixtures";
|
||||||
|
import Site from "discourse/models/site";
|
||||||
|
import createStore from "discourse/tests/helpers/create-store";
|
||||||
|
|
||||||
export function currentUser() {
|
export function currentUser() {
|
||||||
return User.create(sessionFixtures["/session/current.json"].current_user);
|
return User.create(sessionFixtures["/session/current.json"].current_user);
|
||||||
@ -114,6 +115,13 @@ $.fn.modal = AcceptanceModal;
|
|||||||
|
|
||||||
let _pretenderCallbacks = {};
|
let _pretenderCallbacks = {};
|
||||||
|
|
||||||
|
export function resetSite(siteSettings, extras) {
|
||||||
|
let siteAttrs = $.extend({}, siteFixtures["site.json"].site, extras || {});
|
||||||
|
siteAttrs.store = createStore();
|
||||||
|
siteAttrs.siteSettings = siteSettings;
|
||||||
|
return Site.resetCurrent(Site.create(siteAttrs));
|
||||||
|
}
|
||||||
|
|
||||||
export function applyPretender(name, server, helper) {
|
export function applyPretender(name, server, helper) {
|
||||||
const cb = _pretenderCallbacks[name];
|
const cb = _pretenderCallbacks[name];
|
||||||
if (cb) {
|
if (cb) {
|
||||||
@ -152,14 +160,19 @@ export function discourseModule(name, hooks) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function addPretenderCallback(name, fn) {
|
||||||
|
if (name && fn) {
|
||||||
|
_pretenderCallbacks[name] = fn;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export function acceptance(name, options) {
|
export function acceptance(name, options) {
|
||||||
|
name = `Acceptance: ${name}`;
|
||||||
options = options || {};
|
options = options || {};
|
||||||
|
|
||||||
if (options.pretend) {
|
addPretenderCallback(name, options.pretend);
|
||||||
_pretenderCallbacks[name] = options.pretend;
|
|
||||||
}
|
|
||||||
|
|
||||||
module("Acceptance: " + name, {
|
module(name, {
|
||||||
beforeEach() {
|
beforeEach() {
|
||||||
resetMobile();
|
resetMobile();
|
||||||
|
|
||||||
|
@ -1,10 +1,14 @@
|
|||||||
import { moduleForComponent } from "ember-qunit";
|
import { moduleForComponent } from "ember-qunit";
|
||||||
import componentTest from "discourse/tests/helpers/component-test";
|
import componentTest from "discourse/tests/helpers/component-test";
|
||||||
|
import { addPretenderCallback } from "discourse/tests/helpers/qunit-helpers";
|
||||||
|
|
||||||
export function moduleForWidget(name, options = {}) {
|
export function moduleForWidget(name, options = {}) {
|
||||||
|
let fullName = `widget:${name}`;
|
||||||
|
addPretenderCallback(fullName, options.pretend);
|
||||||
|
|
||||||
moduleForComponent(
|
moduleForComponent(
|
||||||
name,
|
name,
|
||||||
`widget:${name}`,
|
fullName,
|
||||||
Object.assign(
|
Object.assign(
|
||||||
{ integration: true },
|
{ integration: true },
|
||||||
{ beforeEach: options.beforeEach, afterEach: options.afterEach }
|
{ beforeEach: options.beforeEach, afterEach: options.afterEach }
|
||||||
|
189
app/assets/javascripts/discourse/tests/setup-tests.js
Normal file
189
app/assets/javascripts/discourse/tests/setup-tests.js
Normal file
@ -0,0 +1,189 @@
|
|||||||
|
import {
|
||||||
|
resetSettings,
|
||||||
|
currentSettings,
|
||||||
|
} from "discourse/tests/helpers/site-settings";
|
||||||
|
import { getOwner, setDefaultOwner } from "discourse-common/lib/get-owner";
|
||||||
|
import { setupURL, setupS3CDN } from "discourse-common/lib/get-url";
|
||||||
|
import { createHelperContext } from "discourse-common/lib/helpers";
|
||||||
|
import { buildResolver } from "discourse-common/resolver";
|
||||||
|
import createPretender, {
|
||||||
|
pretenderHelpers,
|
||||||
|
applyDefaultHandlers,
|
||||||
|
} from "discourse/tests/helpers/create-pretender";
|
||||||
|
import { flushMap } from "discourse/models/store";
|
||||||
|
import { ScrollingDOMMethods } from "discourse/mixins/scrolling";
|
||||||
|
import DiscourseURL from "discourse/lib/url";
|
||||||
|
import {
|
||||||
|
resetSite,
|
||||||
|
applyPretender,
|
||||||
|
} from "discourse/tests/helpers/qunit-helpers";
|
||||||
|
import PreloadStore from "discourse/lib/preload-store";
|
||||||
|
import User from "discourse/models/user";
|
||||||
|
import Session from "discourse/models/session";
|
||||||
|
import { clearAppEventsCache } from "discourse/services/app-events";
|
||||||
|
import QUnit from "qunit";
|
||||||
|
import MessageBus from "message-bus-client";
|
||||||
|
import deprecated from "discourse-common/lib/deprecated";
|
||||||
|
|
||||||
|
export default function setupTests(App) {
|
||||||
|
window.setResolver(buildResolver("discourse").create({ namespace: App }));
|
||||||
|
|
||||||
|
sinon.config = {
|
||||||
|
injectIntoThis: false,
|
||||||
|
injectInto: null,
|
||||||
|
properties: ["spy", "stub", "mock", "clock", "sandbox"],
|
||||||
|
useFakeTimers: true,
|
||||||
|
useFakeServer: false,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Stop the message bus so we don't get ajax calls
|
||||||
|
MessageBus.stop();
|
||||||
|
|
||||||
|
document.write(
|
||||||
|
'<div id="ember-testing-container"><div id="ember-testing"></div></div>'
|
||||||
|
);
|
||||||
|
document.write(
|
||||||
|
"<style>#ember-testing-container { position: absolute; background: white; bottom: 0; right: 0; width: 640px; height: 384px; overflow: auto; z-index: 9999; border: 1px solid #ccc; } #ember-testing { zoom: 50%; }</style>"
|
||||||
|
);
|
||||||
|
|
||||||
|
App.rootElement = "#ember-testing";
|
||||||
|
App.setupForTesting();
|
||||||
|
App.injectTestHelpers();
|
||||||
|
App.SiteSettings = currentSettings();
|
||||||
|
App.start();
|
||||||
|
|
||||||
|
// disable logster error reporting
|
||||||
|
if (window.Logster) {
|
||||||
|
window.Logster.enabled = false;
|
||||||
|
} else {
|
||||||
|
window.Logster = { enabled: false };
|
||||||
|
}
|
||||||
|
|
||||||
|
let server;
|
||||||
|
|
||||||
|
Object.defineProperty(window, "server", {
|
||||||
|
get() {
|
||||||
|
deprecated(
|
||||||
|
"Accessing the global variable `server` is deprecated. Use a `pretend()` method instead.",
|
||||||
|
{
|
||||||
|
since: "2.6.0.beta.3",
|
||||||
|
dropFrom: "2.6.0",
|
||||||
|
}
|
||||||
|
);
|
||||||
|
return server;
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.testStart(function (ctx) {
|
||||||
|
let settings = resetSettings();
|
||||||
|
server = createPretender;
|
||||||
|
applyDefaultHandlers(server);
|
||||||
|
server.handlers = [];
|
||||||
|
|
||||||
|
server.prepareBody = function (body) {
|
||||||
|
if (body && typeof body === "object") {
|
||||||
|
return JSON.stringify(body);
|
||||||
|
}
|
||||||
|
return body;
|
||||||
|
};
|
||||||
|
|
||||||
|
if (QUnit.config.logAllRequests) {
|
||||||
|
server.handledRequest = function (verb, path) {
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.log("REQ: " + verb + " " + path);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
server.unhandledRequest = function (verb, path) {
|
||||||
|
if (QUnit.config.logAllRequests) {
|
||||||
|
// eslint-disable-next-line no-console
|
||||||
|
console.log("REQ: " + verb + " " + path + " missing");
|
||||||
|
}
|
||||||
|
|
||||||
|
const error =
|
||||||
|
"Unhandled request in test environment: " + path + " (" + verb + ")";
|
||||||
|
|
||||||
|
window.console.error(error);
|
||||||
|
throw new Error(error);
|
||||||
|
};
|
||||||
|
|
||||||
|
server.checkPassthrough = (request) =>
|
||||||
|
request.requestHeaders["Discourse-Script"];
|
||||||
|
|
||||||
|
applyPretender(ctx.module, server, pretenderHelpers());
|
||||||
|
|
||||||
|
setupURL(null, "http://localhost:3000", "");
|
||||||
|
setupS3CDN(null, null);
|
||||||
|
|
||||||
|
Session.resetCurrent();
|
||||||
|
User.resetCurrent();
|
||||||
|
let site = resetSite(settings);
|
||||||
|
createHelperContext({
|
||||||
|
siteSettings: settings,
|
||||||
|
capabilities: {},
|
||||||
|
site,
|
||||||
|
});
|
||||||
|
|
||||||
|
DiscourseURL.redirectedTo = null;
|
||||||
|
DiscourseURL.redirectTo = function (url) {
|
||||||
|
DiscourseURL.redirectedTo = url;
|
||||||
|
};
|
||||||
|
|
||||||
|
PreloadStore.reset();
|
||||||
|
|
||||||
|
window.sandbox = sinon;
|
||||||
|
window.sandbox.stub(ScrollingDOMMethods, "screenNotFull");
|
||||||
|
window.sandbox.stub(ScrollingDOMMethods, "bindOnScroll");
|
||||||
|
window.sandbox.stub(ScrollingDOMMethods, "unbindOnScroll");
|
||||||
|
|
||||||
|
// Unless we ever need to test this, let's leave it off.
|
||||||
|
$.fn.autocomplete = function () {};
|
||||||
|
});
|
||||||
|
|
||||||
|
QUnit.testDone(function () {
|
||||||
|
window.sandbox.restore();
|
||||||
|
|
||||||
|
// Destroy any modals
|
||||||
|
$(".modal-backdrop").remove();
|
||||||
|
flushMap();
|
||||||
|
|
||||||
|
// ensures any event not removed is not leaking between tests
|
||||||
|
// most likely in intialisers, other places (controller, component...)
|
||||||
|
// should be fixed in code
|
||||||
|
clearAppEventsCache(getOwner(this));
|
||||||
|
|
||||||
|
MessageBus.unsubscribe("*");
|
||||||
|
server = null;
|
||||||
|
window.Mousetrap.reset();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Load ES6 tests
|
||||||
|
function getUrlParameter(name) {
|
||||||
|
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
|
||||||
|
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)");
|
||||||
|
var results = regex.exec(location.search);
|
||||||
|
return results === null
|
||||||
|
? ""
|
||||||
|
: decodeURIComponent(results[1].replace(/\+/g, " "));
|
||||||
|
}
|
||||||
|
|
||||||
|
let skipCore = getUrlParameter("qunit_skip_core") === "1";
|
||||||
|
let pluginPath = getUrlParameter("qunit_single_plugin")
|
||||||
|
? "/" + getUrlParameter("qunit_single_plugin") + "/"
|
||||||
|
: "/plugins/";
|
||||||
|
|
||||||
|
Object.keys(requirejs.entries).forEach(function (entry) {
|
||||||
|
let isTest = /\-test/.test(entry);
|
||||||
|
let regex = new RegExp(pluginPath);
|
||||||
|
let isPlugin = regex.test(entry);
|
||||||
|
|
||||||
|
if (isTest && (!skipCore || isPlugin)) {
|
||||||
|
require(entry, null, null, true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// forces 0 as duration for all jquery animations
|
||||||
|
jQuery.fx.off = true;
|
||||||
|
setDefaultOwner(App.__container__);
|
||||||
|
resetSite();
|
||||||
|
}
|
@ -40,208 +40,10 @@
|
|||||||
//= require_tree ./unit
|
//= require_tree ./unit
|
||||||
//= require_tree ../../admin/tests/admin
|
//= require_tree ../../admin/tests/admin
|
||||||
//= require plugin_tests
|
//= require plugin_tests
|
||||||
|
//= require setup-tests
|
||||||
//= require_self
|
//= require_self
|
||||||
//
|
//
|
||||||
//= require jquery.magnific-popup.min.js
|
//= require jquery.magnific-popup.min.js
|
||||||
|
|
||||||
let App = window.Discourse;
|
let setupTests = require("discourse/tests/setup-tests").default;
|
||||||
let {
|
setupTests(window.Discourse);
|
||||||
resetSettings,
|
|
||||||
currentSettings,
|
|
||||||
} = require("discourse/tests/helpers/site-settings");
|
|
||||||
let createHelperContext = require("discourse-common/lib/helpers")
|
|
||||||
.createHelperContext;
|
|
||||||
|
|
||||||
const buildResolver = require("discourse-common/resolver").buildResolver;
|
|
||||||
window.setResolver(buildResolver("discourse").create({ namespace: App }));
|
|
||||||
|
|
||||||
sinon.config = {
|
|
||||||
injectIntoThis: false,
|
|
||||||
injectInto: null,
|
|
||||||
properties: ["spy", "stub", "mock", "clock", "sandbox"],
|
|
||||||
useFakeTimers: true,
|
|
||||||
useFakeServer: false,
|
|
||||||
};
|
|
||||||
|
|
||||||
let MessageBus = require("message-bus-client").default;
|
|
||||||
|
|
||||||
// Stop the message bus so we don't get ajax calls
|
|
||||||
MessageBus.stop();
|
|
||||||
|
|
||||||
// Trick JSHint into allow document.write
|
|
||||||
var d = document;
|
|
||||||
d.write(
|
|
||||||
'<div id="ember-testing-container"><div id="ember-testing"></div></div>'
|
|
||||||
);
|
|
||||||
d.write(
|
|
||||||
"<style>#ember-testing-container { position: absolute; background: white; bottom: 0; right: 0; width: 640px; height: 384px; overflow: auto; z-index: 9999; border: 1px solid #ccc; } #ember-testing { zoom: 50%; }</style>"
|
|
||||||
);
|
|
||||||
|
|
||||||
App.rootElement = "#ember-testing";
|
|
||||||
App.setupForTesting();
|
|
||||||
App.injectTestHelpers();
|
|
||||||
App.SiteSettings = currentSettings();
|
|
||||||
App.start();
|
|
||||||
|
|
||||||
// disable logster error reporting
|
|
||||||
if (window.Logster) {
|
|
||||||
Logster.enabled = false;
|
|
||||||
} else {
|
|
||||||
window.Logster = { enabled: false };
|
|
||||||
}
|
|
||||||
|
|
||||||
var createPretender = require("discourse/tests/helpers/create-pretender", null, null, false),
|
|
||||||
siteFixtures = require("discourse/tests/fixtures/site-fixtures", null, null, false)
|
|
||||||
.default,
|
|
||||||
flushMap = require("discourse/models/store", null, null, false).flushMap,
|
|
||||||
ScrollingDOMMethods = require("discourse/mixins/scrolling", null, null, false)
|
|
||||||
.ScrollingDOMMethods,
|
|
||||||
_DiscourseURL = require("discourse/lib/url", null, null, false).default,
|
|
||||||
applyPretender = require("discourse/tests/helpers/qunit-helpers", null, null, false)
|
|
||||||
.applyPretender,
|
|
||||||
getOwner = require("discourse-common/lib/get-owner").getOwner,
|
|
||||||
setDefaultOwner = require("discourse-common/lib/get-owner").setDefaultOwner,
|
|
||||||
server,
|
|
||||||
acceptanceModulePrefix = "Acceptance: ";
|
|
||||||
|
|
||||||
function dup(obj) {
|
|
||||||
return jQuery.extend(true, {}, obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
function resetSite(siteSettings, extras) {
|
|
||||||
let createStore = require("discourse/tests/helpers/create-store").default;
|
|
||||||
let siteAttrs = $.extend({}, siteFixtures["site.json"].site, extras || {});
|
|
||||||
let Site = require("discourse/models/site").default;
|
|
||||||
siteAttrs.store = createStore();
|
|
||||||
siteAttrs.siteSettings = siteSettings;
|
|
||||||
return Site.resetCurrent(Site.create(siteAttrs));
|
|
||||||
}
|
|
||||||
|
|
||||||
QUnit.testStart(function (ctx) {
|
|
||||||
let settings = resetSettings();
|
|
||||||
server = createPretender.default;
|
|
||||||
createPretender.applyDefaultHandlers(server);
|
|
||||||
server.handlers = [];
|
|
||||||
|
|
||||||
server.prepareBody = function (body) {
|
|
||||||
if (body && typeof body === "object") {
|
|
||||||
return JSON.stringify(body);
|
|
||||||
}
|
|
||||||
return body;
|
|
||||||
};
|
|
||||||
|
|
||||||
if (QUnit.config.logAllRequests) {
|
|
||||||
server.handledRequest = function (verb, path, request) {
|
|
||||||
console.log("REQ: " + verb + " " + path);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
server.unhandledRequest = function (verb, path) {
|
|
||||||
if (QUnit.config.logAllRequests) {
|
|
||||||
console.log("REQ: " + verb + " " + path + " missing");
|
|
||||||
}
|
|
||||||
|
|
||||||
const error =
|
|
||||||
"Unhandled request in test environment: " + path + " (" + verb + ")";
|
|
||||||
|
|
||||||
window.console.error(error);
|
|
||||||
throw new Error(error);
|
|
||||||
};
|
|
||||||
|
|
||||||
server.checkPassthrough = (request) =>
|
|
||||||
request.requestHeaders["Discourse-Script"];
|
|
||||||
|
|
||||||
if (ctx.module.startsWith(acceptanceModulePrefix)) {
|
|
||||||
var helper = {
|
|
||||||
parsePostData: createPretender.parsePostData,
|
|
||||||
response: createPretender.response,
|
|
||||||
success: createPretender.success,
|
|
||||||
};
|
|
||||||
|
|
||||||
applyPretender(
|
|
||||||
ctx.module.replace(acceptanceModulePrefix, ""),
|
|
||||||
server,
|
|
||||||
helper
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
let getURL = require("discourse-common/lib/get-url");
|
|
||||||
getURL.setupURL(null, "http://localhost:3000", "");
|
|
||||||
getURL.setupS3CDN(null, null);
|
|
||||||
|
|
||||||
let User = require("discourse/models/user").default;
|
|
||||||
let Session = require("discourse/models/session").default;
|
|
||||||
Session.resetCurrent();
|
|
||||||
User.resetCurrent();
|
|
||||||
let site = resetSite(settings);
|
|
||||||
createHelperContext({
|
|
||||||
siteSettings: settings,
|
|
||||||
capabilities: {},
|
|
||||||
site,
|
|
||||||
});
|
|
||||||
|
|
||||||
_DiscourseURL.redirectedTo = null;
|
|
||||||
_DiscourseURL.redirectTo = function (url) {
|
|
||||||
_DiscourseURL.redirectedTo = url;
|
|
||||||
};
|
|
||||||
|
|
||||||
var ps = require("discourse/lib/preload-store").default;
|
|
||||||
ps.reset();
|
|
||||||
|
|
||||||
window.sandbox = sinon;
|
|
||||||
window.sandbox.stub(ScrollingDOMMethods, "screenNotFull");
|
|
||||||
window.sandbox.stub(ScrollingDOMMethods, "bindOnScroll");
|
|
||||||
window.sandbox.stub(ScrollingDOMMethods, "unbindOnScroll");
|
|
||||||
|
|
||||||
// Unless we ever need to test this, let's leave it off.
|
|
||||||
$.fn.autocomplete = function () {};
|
|
||||||
});
|
|
||||||
|
|
||||||
QUnit.testDone(function () {
|
|
||||||
window.sandbox.restore();
|
|
||||||
|
|
||||||
// Destroy any modals
|
|
||||||
$(".modal-backdrop").remove();
|
|
||||||
flushMap();
|
|
||||||
|
|
||||||
// ensures any event not removed is not leaking between tests
|
|
||||||
// most likely in intialisers, other places (controller, component...)
|
|
||||||
// should be fixed in code
|
|
||||||
require("discourse/services/app-events").clearAppEventsCache(getOwner(this));
|
|
||||||
|
|
||||||
MessageBus.unsubscribe("*");
|
|
||||||
delete window.server;
|
|
||||||
window.Mousetrap.reset();
|
|
||||||
});
|
|
||||||
|
|
||||||
// Load ES6 tests
|
|
||||||
var helpers = require("discourse/tests/helpers/qunit-helpers");
|
|
||||||
|
|
||||||
function getUrlParameter(name) {
|
|
||||||
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
|
|
||||||
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)");
|
|
||||||
var results = regex.exec(location.search);
|
|
||||||
return results === null
|
|
||||||
? ""
|
|
||||||
: decodeURIComponent(results[1].replace(/\+/g, " "));
|
|
||||||
}
|
|
||||||
|
|
||||||
var skipCore = getUrlParameter("qunit_skip_core") == "1";
|
|
||||||
var pluginPath = getUrlParameter("qunit_single_plugin")
|
|
||||||
? "/" + getUrlParameter("qunit_single_plugin") + "/"
|
|
||||||
: "/plugins/";
|
|
||||||
|
|
||||||
Object.keys(requirejs.entries).forEach(function (entry) {
|
|
||||||
var isTest = /\-test/.test(entry);
|
|
||||||
var regex = new RegExp(pluginPath);
|
|
||||||
var isPlugin = regex.test(entry);
|
|
||||||
|
|
||||||
if (isTest && (!skipCore || isPlugin)) {
|
|
||||||
require(entry, null, null, true);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// forces 0 as duration for all jquery animations
|
|
||||||
jQuery.fx.off = true;
|
|
||||||
setDefaultOwner(App.__container__);
|
|
||||||
resetSite();
|
|
||||||
|
@ -62,7 +62,7 @@ function stubUrls(imageSrcs, attachmentSrcs, otherMediaSrcs) {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
// prettier-ignore
|
// prettier-ignore
|
||||||
pretender.post("/uploads/lookup-urls", () => { //eslint-disable-line
|
pretender.post("/uploads/lookup-urls", () => {
|
||||||
return response(imageSrcs.concat(attachmentSrcs.concat(otherMediaSrcs)));
|
return response(imageSrcs.concat(attachmentSrcs.concat(otherMediaSrcs)));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { acceptance } from "discourse/tests/helpers/qunit-helpers";
|
import { acceptance } from "discourse/tests/helpers/qunit-helpers";
|
||||||
|
|
||||||
acceptance("Rendering polls with pie charts - desktop", {
|
acceptance("Rendering polls with pie charts", {
|
||||||
loggedIn: true,
|
loggedIn: true,
|
||||||
settings: { poll_enabled: true, poll_groupable_user_fields: "something" },
|
settings: { poll_enabled: true, poll_groupable_user_fields: "something" },
|
||||||
});
|
});
|
||||||
|
@ -7,6 +7,37 @@ acceptance("Rendering polls with bar charts - desktop", {
|
|||||||
beforeEach() {
|
beforeEach() {
|
||||||
clearPopupMenuOptionsCallback();
|
clearPopupMenuOptionsCallback();
|
||||||
},
|
},
|
||||||
|
pretend(server) {
|
||||||
|
server.get("/polls/voters.json", (request) => {
|
||||||
|
let body = {};
|
||||||
|
if (
|
||||||
|
request.queryParams.option_id === "68b434ff88aeae7054e42cd05a4d9056"
|
||||||
|
) {
|
||||||
|
body = {
|
||||||
|
voters: {
|
||||||
|
"68b434ff88aeae7054e42cd05a4d9056": [
|
||||||
|
{
|
||||||
|
id: 777,
|
||||||
|
username: "bruce777",
|
||||||
|
avatar_template: "/images/avatar.png",
|
||||||
|
name: "Bruce Wayne",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
body = {
|
||||||
|
voters: Array.from(new Array(5), (_, i) => ({
|
||||||
|
id: 600 + i,
|
||||||
|
username: `bruce${600 + i}`,
|
||||||
|
avatar_template: "/images/avatar.png",
|
||||||
|
name: "Bruce Wayne",
|
||||||
|
})),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return [200, { "Content-Type": "application/json" }, body];
|
||||||
|
});
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
test("Polls", async (assert) => {
|
test("Polls", async (assert) => {
|
||||||
@ -43,24 +74,6 @@ test("Public poll", async (assert) => {
|
|||||||
"it should display the right number of voters"
|
"it should display the right number of voters"
|
||||||
);
|
);
|
||||||
|
|
||||||
// eslint-disable-next-line
|
|
||||||
server.get("/polls/voters.json", () => {
|
|
||||||
const body = {
|
|
||||||
voters: {
|
|
||||||
"68b434ff88aeae7054e42cd05a4d9056": [
|
|
||||||
{
|
|
||||||
id: 777,
|
|
||||||
username: "bruce777",
|
|
||||||
avatar_template: "/images/avatar.png",
|
|
||||||
name: "Bruce Wayne",
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
return [200, { "Content-Type": "application/json" }, body];
|
|
||||||
});
|
|
||||||
|
|
||||||
await click(".poll-voters-toggle-expand:first a");
|
await click(".poll-voters-toggle-expand:first a");
|
||||||
|
|
||||||
assert.equal(
|
assert.equal(
|
||||||
@ -89,20 +102,6 @@ test("Public number poll", async (assert) => {
|
|||||||
"user URL does not exist"
|
"user URL does not exist"
|
||||||
);
|
);
|
||||||
|
|
||||||
// eslint-disable-next-line
|
|
||||||
server.get("/polls/voters.json", () => {
|
|
||||||
const body = {
|
|
||||||
voters: Array.from(new Array(5), (_, i) => ({
|
|
||||||
id: 600 + i,
|
|
||||||
username: `bruce${600 + i}`,
|
|
||||||
avatar_template: "/images/avatar.png",
|
|
||||||
name: "Bruce Wayne",
|
|
||||||
})),
|
|
||||||
};
|
|
||||||
|
|
||||||
return [200, { "Content-Type": "application/json" }, body];
|
|
||||||
});
|
|
||||||
|
|
||||||
await click(".poll-voters-toggle-expand:first a");
|
await click(".poll-voters-toggle-expand:first a");
|
||||||
|
|
||||||
assert.equal(
|
assert.equal(
|
||||||
|
@ -8,6 +8,21 @@ acceptance("Rendering polls with bar charts - mobile", {
|
|||||||
beforeEach() {
|
beforeEach() {
|
||||||
clearPopupMenuOptionsCallback();
|
clearPopupMenuOptionsCallback();
|
||||||
},
|
},
|
||||||
|
pretend(server) {
|
||||||
|
// eslint-disable-next-line
|
||||||
|
server.get("/polls/voters.json", () => {
|
||||||
|
const body = {
|
||||||
|
voters: Array.from(new Array(10), (_, i) => ({
|
||||||
|
id: 500 + i,
|
||||||
|
username: `bruce${500 + i}`,
|
||||||
|
avatar_template: "/images/avatar.png",
|
||||||
|
name: "Bruce Wayne",
|
||||||
|
})),
|
||||||
|
};
|
||||||
|
|
||||||
|
return [200, { "Content-Type": "application/json" }, body];
|
||||||
|
});
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
test("Public number poll", async (assert) => {
|
test("Public number poll", async (assert) => {
|
||||||
@ -29,20 +44,6 @@ test("Public number poll", async (assert) => {
|
|||||||
"user URL does not exist"
|
"user URL does not exist"
|
||||||
);
|
);
|
||||||
|
|
||||||
// eslint-disable-next-line
|
|
||||||
server.get("/polls/voters.json", () => {
|
|
||||||
const body = {
|
|
||||||
voters: Array.from(new Array(10), (_, i) => ({
|
|
||||||
id: 500 + i,
|
|
||||||
username: `bruce${500 + i}`,
|
|
||||||
avatar_template: "/images/avatar.png",
|
|
||||||
name: "Bruce Wayne",
|
|
||||||
})),
|
|
||||||
};
|
|
||||||
|
|
||||||
return [200, { "Content-Type": "application/json" }, body];
|
|
||||||
});
|
|
||||||
|
|
||||||
await click(".poll-voters-toggle-expand:first a");
|
await click(".poll-voters-toggle-expand:first a");
|
||||||
|
|
||||||
assert.equal(
|
assert.equal(
|
||||||
|
@ -5,7 +5,58 @@ import {
|
|||||||
widgetTest,
|
widgetTest,
|
||||||
} from "discourse/tests/helpers/widget-test";
|
} from "discourse/tests/helpers/widget-test";
|
||||||
|
|
||||||
moduleForWidget("discourse-poll");
|
let requests = 0;
|
||||||
|
|
||||||
|
moduleForWidget("discourse-poll", {
|
||||||
|
pretend(server) {
|
||||||
|
server.put("/polls/vote", () => {
|
||||||
|
++requests;
|
||||||
|
return [
|
||||||
|
200,
|
||||||
|
{ "Content-Type": "application/json" },
|
||||||
|
{
|
||||||
|
poll: {
|
||||||
|
name: "poll",
|
||||||
|
type: "regular",
|
||||||
|
status: "open",
|
||||||
|
results: "always",
|
||||||
|
options: [
|
||||||
|
{ id: "1f972d1df351de3ce35a787c89faad29", html: "yes", votes: 1 },
|
||||||
|
{ id: "d7ebc3a9beea2e680815a1e4f57d6db6", html: "no", votes: 0 },
|
||||||
|
],
|
||||||
|
voters: 1,
|
||||||
|
chart_type: "bar",
|
||||||
|
},
|
||||||
|
vote: ["1f972d1df351de3ce35a787c89faad29"],
|
||||||
|
},
|
||||||
|
];
|
||||||
|
});
|
||||||
|
|
||||||
|
server.put("/polls/vote", () => {
|
||||||
|
++requests;
|
||||||
|
return [
|
||||||
|
200,
|
||||||
|
{ "Content-Type": "application/json" },
|
||||||
|
{
|
||||||
|
poll: {
|
||||||
|
name: "poll",
|
||||||
|
type: "regular",
|
||||||
|
status: "open",
|
||||||
|
results: "always",
|
||||||
|
options: [
|
||||||
|
{ id: "1f972d1df351de3ce35a787c89faad29", html: "yes", votes: 1 },
|
||||||
|
{ id: "d7ebc3a9beea2e680815a1e4f57d6db6", html: "no", votes: 0 },
|
||||||
|
],
|
||||||
|
voters: 1,
|
||||||
|
chart_type: "bar",
|
||||||
|
groups: "foo",
|
||||||
|
},
|
||||||
|
vote: ["1f972d1df351de3ce35a787c89faad29"],
|
||||||
|
},
|
||||||
|
];
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
const template = `{{mount-widget
|
const template = `{{mount-widget
|
||||||
widget="discourse-poll"
|
widget="discourse-poll"
|
||||||
@ -44,31 +95,7 @@ widgetTest("can vote", {
|
|||||||
},
|
},
|
||||||
|
|
||||||
async test(assert) {
|
async test(assert) {
|
||||||
let requests = 0;
|
requests = 0;
|
||||||
|
|
||||||
/* global server */
|
|
||||||
server.put("/polls/vote", () => {
|
|
||||||
++requests;
|
|
||||||
return [
|
|
||||||
200,
|
|
||||||
{ "Content-Type": "application/json" },
|
|
||||||
{
|
|
||||||
poll: {
|
|
||||||
name: "poll",
|
|
||||||
type: "regular",
|
|
||||||
status: "open",
|
|
||||||
results: "always",
|
|
||||||
options: [
|
|
||||||
{ id: "1f972d1df351de3ce35a787c89faad29", html: "yes", votes: 1 },
|
|
||||||
{ id: "d7ebc3a9beea2e680815a1e4f57d6db6", html: "no", votes: 0 },
|
|
||||||
],
|
|
||||||
voters: 1,
|
|
||||||
chart_type: "bar",
|
|
||||||
},
|
|
||||||
vote: ["1f972d1df351de3ce35a787c89faad29"],
|
|
||||||
},
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
await click("li[data-poll-option-id='1f972d1df351de3ce35a787c89faad29']");
|
await click("li[data-poll-option-id='1f972d1df351de3ce35a787c89faad29']");
|
||||||
assert.equal(requests, 1);
|
assert.equal(requests, 1);
|
||||||
@ -115,32 +142,7 @@ widgetTest("cannot vote if not member of the right group", {
|
|||||||
},
|
},
|
||||||
|
|
||||||
async test(assert) {
|
async test(assert) {
|
||||||
let requests = 0;
|
requests = 0;
|
||||||
|
|
||||||
/* global server */
|
|
||||||
server.put("/polls/vote", () => {
|
|
||||||
++requests;
|
|
||||||
return [
|
|
||||||
200,
|
|
||||||
{ "Content-Type": "application/json" },
|
|
||||||
{
|
|
||||||
poll: {
|
|
||||||
name: "poll",
|
|
||||||
type: "regular",
|
|
||||||
status: "open",
|
|
||||||
results: "always",
|
|
||||||
options: [
|
|
||||||
{ id: "1f972d1df351de3ce35a787c89faad29", html: "yes", votes: 1 },
|
|
||||||
{ id: "d7ebc3a9beea2e680815a1e4f57d6db6", html: "no", votes: 0 },
|
|
||||||
],
|
|
||||||
voters: 1,
|
|
||||||
chart_type: "bar",
|
|
||||||
groups: "foo",
|
|
||||||
},
|
|
||||||
vote: ["1f972d1df351de3ce35a787c89faad29"],
|
|
||||||
},
|
|
||||||
];
|
|
||||||
});
|
|
||||||
|
|
||||||
await click("li[data-poll-option-id='1f972d1df351de3ce35a787c89faad29']");
|
await click("li[data-poll-option-id='1f972d1df351de3ce35a787c89faad29']");
|
||||||
assert.equal(
|
assert.equal(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user