upgrade project and add deploy workflow
Some checks failed
Deploy Abondance Bot / deploy (push) Failing after 24s

This commit is contained in:
Shinuwa 2026-06-28 20:02:44 +02:00
parent 0dabb7c3c0
commit 3a50bd061a
10 changed files with 358 additions and 108 deletions

View file

@ -0,0 +1,65 @@
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/);
});