discourse-category-experts/test/javascripts/acceptance/endorsement-checkboxes-test.js
David Taylor 5b7a64e582
Some checks are pending
Discourse Plugin / ci (push) Waiting to run
DEV: Replace deprecated queryAll in tests (#237)
2026-07-14 15:52:54 +01:00

140 lines
4.6 KiB
JavaScript

import { click, findAll, visit } from "@ember/test-helpers";
import { test } from "qunit";
import userFixtures from "discourse/tests/fixtures/user-fixtures";
import { acceptance, query } from "discourse/tests/helpers/qunit-helpers";
import categories from "../category-expert-categories";
acceptance(
"Discourse Category Experts - No existing endorsements",
function (needs) {
needs.user();
needs.settings({ enable_category_experts: true });
needs.site({ categories });
needs.pretender((server, helper) => {
let cardResponse = JSON.parse(
JSON.stringify(userFixtures["/u/charlie/card.json"])
);
cardResponse.user.category_expert_endorsements = [];
server.get("/u/charlie/card.json", () => helper.response(cardResponse));
server.get("/category-experts/endorsable-categories/charlie.json", () =>
helper.response({
categories: [
{ id: 517, name: "Some Category" },
{ id: 10, name: "A different one" },
],
extras: { remaining_endorsements: 10 },
})
);
});
test("It allows the current user to endorse another via the user card", async (assert) => {
await visit("/t/internationalization-localization/280");
await click(".topic-map__users-trigger");
await click('a[data-user-card="charlie"]');
await click(".category-expert-endorse-btn");
assert.dom(".category-experts-endorsement-row").exists({ count: 2 });
let saveBtn = query(".category-endorsement-save");
assert.dom(saveBtn).isDisabled();
await click(".category-experts-endorsement-row");
assert.dom(saveBtn).isNotDisabled();
});
}
);
acceptance("Discourse Category Experts - Has endorsement", function (needs) {
needs.user();
needs.settings({ enable_category_experts: true });
needs.site({ categories });
needs.pretender((server, helper) => {
let cardResponse = JSON.parse(
JSON.stringify(userFixtures["/u/charlie/card.json"])
);
cardResponse.user.category_expert_endorsements = [
{
category_id: 517,
endorsed_user_id: cardResponse.user.id,
id: 1,
},
{
category_id: 10, // invalid category_id. UI should ignore this!
endorsed_user_id: cardResponse.user.id,
id: 2,
},
];
server.get("/u/charlie/card.json", () => helper.response(cardResponse));
server.get("/category-experts/endorsable-categories/charlie.json", () =>
helper.response({
categories: [
{ id: 517, name: "Some Category" },
{ id: 10, name: "A different one" },
],
extras: { remaining_endorsements: 10 },
})
);
});
test("It shows the endorse button when the current user hasn't endorsed the user yet", async (assert) => {
await visit("/t/internationalization-localization/280");
await click(".topic-map__users-trigger");
await click('a[data-user-card="charlie"]');
assert.dom(".category-expert-existing-endorsements").exists({ count: 1 });
await click(".category-expert-endorse-edit");
const checkboxes = findAll(".category-experts-endorsement-row input");
assert.strictEqual(checkboxes.length, 2);
assert.dom(checkboxes[0]).isDisabled();
assert.dom(checkboxes[1]).isNotDisabled();
const saveBtn = query(".category-endorsement-save");
assert.dom(saveBtn).isDisabled();
await click(checkboxes[1]);
assert.dom(saveBtn).isNotDisabled();
});
});
acceptance(
"Discourse Category Experts - No endorsements remaining",
function (needs) {
needs.user();
needs.settings({ enable_category_experts: true });
needs.site({ categories });
needs.pretender((server, helper) => {
let cardResponse = JSON.parse(
JSON.stringify(userFixtures["/u/charlie/card.json"])
);
cardResponse.user.category_expert_endorsements = [];
server.get("/u/charlie/card.json", () => helper.response(cardResponse));
server.get("/category-experts/endorsable-categories/charlie.json", () =>
helper.response({
categories: [
{ id: 517, name: "Some Category" },
{ id: 10, name: "A different one" },
],
extras: { remaining_endorsements: 0 },
})
);
});
test("shows the out of endorsements alert instead of the save button", async (assert) => {
await visit("/t/internationalization-localization/280");
await click(".topic-map__users-trigger");
await click('a[data-user-card="charlie"]');
await click(".category-expert-endorse-btn");
assert.dom(".category-endorsement-save").doesNotExist();
assert.dom(".out-of-endorsements-alert").exists();
});
}
);