65 lines
1.9 KiB
JavaScript
65 lines
1.9 KiB
JavaScript
import assert from "node:assert/strict";
|
||
import test from "node:test";
|
||
import {
|
||
assertPlausibleChange,
|
||
formatChanges,
|
||
getChanges,
|
||
getGuildMembers,
|
||
parseGuildMembers,
|
||
} from "../src/features/membersChecker.js";
|
||
|
||
const guildPage = (members) => `
|
||
<div class="box_list_area">
|
||
<ul class="adventure_list_table">
|
||
<li>
|
||
${members
|
||
.map(
|
||
(member) =>
|
||
`<span class="guild_name"><span class="text"><a>${member}</a></span></span>`,
|
||
)
|
||
.join("")}
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
`;
|
||
|
||
test("parseGuildMembers extrait et nettoie les noms", () => {
|
||
assert.deepEqual(parseGuildMembers(guildPage([" Alpha ", "Beta"])), ["Alpha", "Beta"]);
|
||
});
|
||
|
||
test("parseGuildMembers refuse une page sans membres", () => {
|
||
assert.throws(() => parseGuildMembers("<html></html>"), /Aucun membre trouvé/);
|
||
});
|
||
|
||
test("parseGuildMembers refuse les doublons", () => {
|
||
assert.throws(() => parseGuildMembers(guildPage(["Alpha", "Alpha"])), /double/);
|
||
});
|
||
|
||
test("getChanges détecte les arrivées et départs", () => {
|
||
assert.deepEqual(getChanges(["Alpha", "Beta"], ["Beta", "Gamma"]), {
|
||
added: ["Gamma"],
|
||
removed: ["Alpha"],
|
||
});
|
||
});
|
||
|
||
test("assertPlausibleChange refuse une chute brutale de l'effectif", () => {
|
||
const oldMembers = Array.from({ length: 20 }, (_, index) => `Membre-${index}`);
|
||
assert.throws(
|
||
() => assertPlausibleChange(oldMembers, ["Membre-0", "Membre-1"]),
|
||
/Extraction suspecte/,
|
||
);
|
||
});
|
||
|
||
test("formatChanges produit le message Discord", () => {
|
||
assert.equal(
|
||
formatChanges({ added: ["Gamma"], removed: ["Alpha"] }),
|
||
"⚔️ **Changement dans la liste des membres :**\n" +
|
||
"➕ Nouveaux membres : Gamma\n" +
|
||
"➖ Membres partis : Alpha",
|
||
);
|
||
});
|
||
|
||
test("getGuildMembers refuse une erreur HTTP", async () => {
|
||
const fakeFetch = async () => ({ ok: false, status: 503 });
|
||
await assert.rejects(getGuildMembers("https://example.test", fakeFetch), /HTTP 503/);
|
||
});
|