Files
David TaylorandGitHub 666b5dddde DEV: Move discourse-common/(utils|lib) to discourse/lib (#30733)
`discourse-common` was created in the past to share logic between the
'wizard' app and the main 'discourse' app. Since then, the wizard has
been consolidated into the main app, so the separation of
`discourse-common` is no longer useful.

This commit moves `discourse-common/(lib|utils)/*` into
`discourse/lib/*`, adds shims for the imports, and updates existing
uses in core.
2025-01-13 13:02:49 +00:00

225 lines
7.0 KiB
JavaScript

import { click, triggerKeyEvent, visit } from "@ember/test-helpers";
import { test } from "qunit";
import { cloneJSON } from "discourse/lib/object";
import directoryFixtures from "discourse/tests/fixtures/directory-fixtures";
import pretender, { response } from "discourse/tests/helpers/create-pretender";
import { acceptance, queryAll } from "discourse/tests/helpers/qunit-helpers";
import { i18n } from "discourse-i18n";
acceptance("User Directory", function () {
test("Visit Page", async function (assert) {
await visit("/u");
assert.dom(document.body).hasClass("users-page", "has the body class");
assert
.dom(".directory .directory-table .directory-table__row")
.exists("has a list of users");
});
test("Visit All Time", async function (assert) {
await visit("/u?period=all");
assert.dom(".time-read").exists("has time read column");
});
test("Visit Without Usernames", async function (assert) {
await visit("/u?exclude_usernames=system");
assert.dom(document.body).hasClass("users-page", "has the body class");
assert
.dom(".directory .directory-table .directory-table__row")
.exists("has a list of users");
});
test("Visit With Group Exclusion", async function (assert) {
let queryParams;
pretender.get("/directory_items", (request) => {
queryParams = request.queryParams;
return response(cloneJSON(directoryFixtures["directory_items"]));
});
await visit("/u?exclude_groups=trust_level_0");
assert.strictEqual(
queryParams.exclude_groups,
"trust_level_0",
"includes the right query param in the API call"
);
});
test("Searchable user fields display as links", async function (assert) {
pretender.get("/directory_items", () => {
return response(cloneJSON(directoryFixtures["directory_items"]));
});
await visit("/u");
assert
.dom(
".directory .directory-table__body .directory-table__row:first-child .directory-table__value--user-field a"
)
.exists("User field is displayed as a link");
assert
.dom(
".directory .directory-table__body .directory-table__row:first-child .directory-table__value--user-field a"
)
.hasAttribute(
"href",
"/u?name=Blue&order=likes_received",
"The link points to the correct URL"
);
assert
.dom(
".directory .directory-table__body .directory-table__row:first-child .directory-table__value--user-field a"
)
.hasText("Blue", "Link text is correct");
});
test("Visit With Group Filter", async function (assert) {
await visit("/u?group=trust_level_0");
assert.dom(document.body).hasClass("users-page", "has the body class");
assert
.dom(".directory .directory-table .directory-table__row")
.exists("has a list of users");
});
test("Custom user fields are present", async function (assert) {
await visit("/u");
assert
.dom(
".directory .directory-table__body .directory-table__row:first-child .directory-table__value--user-field"
)
.hasText("Blue");
});
test("Can sort table via keyboard", async function (assert) {
await visit("/u");
const secondHeading =
".users-directory .directory-table__header div:nth-child(2) .header-contents";
await triggerKeyEvent(secondHeading, "keypress", "Enter");
assert
.dom(`${secondHeading} .d-icon-chevron-up`)
.exists("list has been sorted");
});
test("Visit with no users", async function (assert) {
pretender.get("/directory_items", () => {
return response({
directory_items: [],
meta: {
last_updated_at: "2024-05-13T18:42:32.000Z",
total_rows_directory_items: 0,
},
});
});
await visit("/u");
assert
.dom(".empty-state-body")
.hasText(
i18n("directory.no_results.body"),
"a JIT message is shown when there are no users"
);
});
test("Visit with no search results", async function (assert) {
pretender.get("/directory_items", () => {
return response({
directory_items: [],
meta: {
last_updated_at: "2024-05-13T18:42:32.000Z",
total_rows_directory_items: 0,
},
});
});
await visit("/u?name=somenamethatdoesnotexist");
assert
.dom(".empty-state-body")
.hasText(
i18n("directory.no_results_with_search"),
"a different JIT message is used when there are no results for the search term"
);
});
});
acceptance("User directory - Editing columns", function (needs) {
needs.user({ moderator: true, admin: true });
test("The automatic columns are checked and the user field columns are unchecked by default", async function (assert) {
await visit("/u");
await click(".open-edit-columns-btn");
const columns = queryAll(
".edit-directory-columns-container .edit-directory-column"
);
assert.strictEqual(columns.length, 9);
const checked = queryAll(
".edit-directory-columns-container .edit-directory-column input[type='checkbox']:checked"
);
assert.strictEqual(checked.length, 7);
const unchecked = queryAll(
".edit-directory-columns-container .edit-directory-column input[type='checkbox']:not(:checked)"
);
assert.strictEqual(unchecked.length, 2);
});
const fetchColumns = function () {
return queryAll(".edit-directory-columns-container .edit-directory-column");
};
test("Reordering and restoring default positions", async function (assert) {
await visit("/u");
await click(".open-edit-columns-btn");
let columns;
columns = fetchColumns();
assert.dom(".column-name", columns[3]).hasText("Replies Posted");
assert.dom(".column-name", columns[4]).hasText("Topics Viewed");
// Click on row 4 and see if they are swapped
await click(columns[4].querySelector(".move-column-up"));
columns = fetchColumns();
assert.dom(".column-name", columns[3]).hasText("Topics Viewed");
assert.dom(".column-name", columns[4]).hasText("Replies Posted");
const moveUserFieldColumnUpBtn =
columns[columns.length - 1].querySelector(".move-column-up");
await click(moveUserFieldColumnUpBtn);
await click(moveUserFieldColumnUpBtn);
await click(moveUserFieldColumnUpBtn);
await click(moveUserFieldColumnUpBtn);
columns = fetchColumns();
assert.dom(".column-name", columns[4]).hasText("Favorite Color");
assert.dom(".column-name", columns[5]).hasText("Replies Posted");
// Now click restore default and check order of column names
await click(".reset-to-default");
let columnNames = queryAll(
".edit-directory-columns-container .edit-directory-column .column-name"
).toArray();
columnNames = columnNames.map((el) => el.textContent.trim());
assert.deepEqual(columnNames, [
"Received",
"Given",
"Topics Created",
"Replies Posted",
"Topics Viewed",
"Posts Read",
"Days Visited",
"[en.an_extra_field]",
"Favorite Color",
]);
});
});