abondance-bot/test/membersChecker.test.js
Shinuwa 3a50bd061a
Some checks failed
Deploy Abondance Bot / deploy (push) Failing after 24s
upgrade project and add deploy workflow
2026-06-28 20:02:44 +02:00

65 lines
1.9 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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/);
});