mirror of
https://ghfast.top/https://github.com/discourse/discourse-category-experts.git
synced 2026-07-15 11:36:31 +08:00
140 lines
4.6 KiB
JavaScript
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();
|
|
});
|
|
}
|
|
);
|