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) => `
`; 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(""), /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/); });