This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/tests/acceptance/group-test.js
Jarek Radosz a17d54d0bf
DEV: De-arrowify tests (#11068)
Using arrow functions changes `this` context, which is undesired in tests, e.g. it makes it impossible to setup things like pretender (`this.server`) in `beforeEach` hooks.

Ember guides always use classic functions in examples (e.g. https://guides.emberjs.com/release/testing/test-types/), and that's what it uses in its own test suite, as do various addons and ember apps.

It was also already used in Discourse where `this` was required. Moving forward, it will be needed in more places as we migrate toward ember-cli.

(I might later add a custom rule to eslint-discourse-ember to enforce this)
2020-10-30 17:37:32 +01:00

293 lines
8.3 KiB
JavaScript

import { queryAll } from "discourse/tests/helpers/qunit-helpers";
import { click, visit } from "@ember/test-helpers";
import { test } from "qunit";
import I18n from "I18n";
import selectKit from "discourse/tests/helpers/select-kit-helper";
import { acceptance, count } from "discourse/tests/helpers/qunit-helpers";
function setupGroupPretender(server, helper) {
server.post("/groups/Macdonald/request_membership", () => {
return helper.response({
relative_url: "/t/internationalization-localization/280",
});
});
}
function setupGroupTest(needs) {
needs.settings({ enable_group_directory: true });
}
acceptance("Group - Anonymous", function (needs) {
setupGroupTest(needs);
needs.pretender(setupGroupPretender);
test("Anonymous Viewing Group", async function (assert) {
await visit("/g/discourse");
assert.equal(
count(".nav-pills li a[title='Messages']"),
0,
"it does not show group messages navigation link"
);
await click(".nav-pills li a[title='Activity']");
assert.ok(count(".user-stream-item") > 0, "it lists stream items");
await click(".activity-nav li a[href='/g/discourse/activity/topics']");
assert.ok(queryAll(".topic-list"), "it shows the topic list");
assert.equal(count(".topic-list-item"), 2, "it lists stream items");
await click(".activity-nav li a[href='/g/discourse/activity/mentions']");
assert.ok(count(".user-stream-item") > 0, "it lists stream items");
assert.ok(
queryAll(".nav-pills li a[title='Edit Group']").length === 0,
"it should not show messages tab if user is not admin"
);
assert.ok(
queryAll(".nav-pills li a[title='Logs']").length === 0,
"it should not show Logs tab if user is not admin"
);
assert.ok(count(".user-stream-item") > 0, "it lists stream items");
const groupDropdown = selectKit(".group-dropdown");
await groupDropdown.expand();
assert.equal(groupDropdown.rowByIndex(1).name(), "discourse");
assert.equal(
groupDropdown.rowByIndex(0).name(),
I18n.t("groups.index.all").toLowerCase()
);
this.siteSettings.enable_group_directory = false;
await visit("/g");
await visit("/g/discourse");
await groupDropdown.expand();
assert.equal(
queryAll(".group-dropdown-filter").length,
0,
"it should not display the default header"
);
});
test("Anonymous Viewing Automatic Group", async function (assert) {
await visit("/g/moderators");
assert.equal(
count(".nav-pills li a[title='Manage']"),
0,
"it does not show group messages navigation link"
);
});
});
acceptance("Group - Authenticated", function (needs) {
setupGroupTest(needs);
needs.user();
needs.pretender((server, helper) => {
setupGroupPretender(server, helper);
server.get(
"/topics/private-messages-group/eviltrout/alternative-group.json",
() => {
return helper.response({ topic_list: { topics: [] } });
}
);
server.get(
"/topics/private-messages-group/eviltrout/discourse.json",
() => {
return helper.response({
users: [
{
id: 2,
username: "bruce1",
avatar_template:
"/user_avatar/meta.discourse.org/bruce1/{size}/5245.png",
},
{
id: 3,
username: "CodingHorror",
avatar_template:
"/user_avatar/meta.discourse.org/codinghorror/{size}/5245.png",
},
],
primary_groups: [],
topic_list: {
can_create_topic: true,
draft: null,
draft_key: "new_topic",
draft_sequence: 0,
per_page: 30,
topics: [
{
id: 12199,
title: "This is a private message 1",
fancy_title: "This is a private message 1",
slug: "this-is-a-private-message-1",
posts_count: 0,
reply_count: 0,
highest_post_number: 0,
image_url: null,
created_at: "2018-03-16T03:38:45.583Z",
last_posted_at: null,
bumped: true,
bumped_at: "2018-03-16T03:38:45.583Z",
unseen: false,
pinned: false,
unpinned: null,
visible: true,
closed: false,
archived: false,
bookmarked: null,
liked: null,
views: 0,
like_count: 0,
has_summary: false,
archetype: "private_message",
last_poster_username: "bruce1",
category_id: null,
pinned_globally: false,
featured_link: null,
posters: [
{
extras: "latest single",
description: "Original Poster, Most Recent Poster",
user_id: 2,
primary_group_id: null,
},
],
participants: [
{
extras: "latest",
description: null,
user_id: 2,
primary_group_id: null,
},
{
extras: null,
description: null,
user_id: 3,
primary_group_id: null,
},
],
},
],
},
});
}
);
});
test("User Viewing Group", async function (assert) {
await visit("/g");
await click(".group-index-request");
assert.equal(
queryAll(".modal-header").text().trim(),
I18n.t("groups.membership_request.title", { group_name: "Macdonald" })
);
assert.equal(
queryAll(".request-group-membership-form textarea").val(),
"Please add me"
);
await click(".modal-footer .btn-primary");
assert.equal(
queryAll(".fancy-title").text().trim(),
"Internationalization / localization"
);
await visit("/g/discourse");
await click(".group-message-button");
assert.ok(count("#reply-control") === 1, "it opens the composer");
assert.equal(
queryAll(".ac-wrap .item").text(),
"discourse",
"it prefills the group name"
);
});
test("Admin viewing group messages when there are no messages", async function (assert) {
await visit("/g/alternative-group");
await click(".nav-pills li a[title='Messages']");
assert.equal(
queryAll(".alert").text().trim(),
I18n.t("choose_topic.none_found"),
"it should display the right alert"
);
});
test("Admin viewing group messages", async function (assert) {
await visit("/g/discourse");
await click(".nav-pills li a[title='Messages']");
assert.equal(
queryAll(".topic-list-item .link-top-line").text().trim(),
"This is a private message 1",
"it should display the list of group topics"
);
});
test("Admin Viewing Group", async function (assert) {
await visit("/g/discourse");
assert.ok(
queryAll(".nav-pills li a[title='Manage']").length === 1,
"it should show manage group tab if user is admin"
);
assert.equal(
count(".group-message-button"),
1,
"it displays show group message button"
);
assert.equal(
queryAll(".group-info-name").text(),
"Awesome Team",
"it should display the group name"
);
});
test("Moderator Viewing Group", async function (assert) {
await visit("/g/alternative-group");
assert.ok(
queryAll(".nav-pills li a[title='Manage']").length === 1,
"it should show manage group tab if user can_admin_group"
);
await click(".group-members-add.btn");
assert.ok(
queryAll(".group-add-members-modal .group-add-members-make-owner"),
"it allows moderators to set group owners"
);
await click(".group-add-members-modal .modal-close");
const memberDropdown = selectKit(".group-member-dropdown:first");
await memberDropdown.expand();
assert.equal(
memberDropdown.rowByIndex(0).name(),
I18n.t("groups.members.remove_member")
);
assert.equal(
memberDropdown.rowByIndex(1).name(),
I18n.t("groups.members.make_owner")
);
});
});