Files
cookiecode/test/cookiecode.test.js
T
2026-07-21 22:30:36 +02:00

110 lines
3.4 KiB
JavaScript

const assert = require("node:assert");
const CookieCode = require("../dist/cookiecode.js");
CookieCode.configurer({ sortie: "test", afficherNotions: true });
const texteRecette = CookieCode.recette("Cookie au chocolat")
.prendre("farine", 200, "g")
.prendre("sucre", 100, "g")
.utiliser("saladier")
.ajouter("farine")
.melanger()
.repeter(2, (recette) => {
recette.melanger();
})
.cuire(12, "minutes")
.toText();
assert.match(texteRecette, /Recette : Cookie au chocolat/);
assert.match(texteRecette, /1\. Prendre 200 g de farine\./);
assert.match(texteRecette, /2\. Prendre 100 g de sucre\./);
assert.match(texteRecette, /3\. Utiliser saladier\./);
assert.match(texteRecette, /6\. Repeter 2 fois :/);
assert.match(texteRecette, /6\.1\. Melanger\./);
assert.match(texteRecette, /Ingredients = variables : farine, sucre/);
assert.match(texteRecette, /Materiel \/ valeurs fixes = constantes : saladier/);
assert.match(texteRecette, /Repeter = boucle/);
const pate = CookieCode.preparation("pate").definir("texture", "trop seche");
const texteCondition = CookieCode.recette("Pate a cookies")
.si(
() => pate.est("trop seche"),
(recette) => {
recette.ajouter("lait", 20, "ml");
},
)
.toText();
assert.match(texteCondition, /Si condition fournie :/);
assert.match(texteCondition, /1\.1\. Ajouter 20 ml de lait\./);
assert.match(texteCondition, /Si = condition/);
const html = CookieCode.recette("<script>alert('xss')</script>")
.ajouter("<img src=x onerror=alert(1)>")
.toHTML();
assert.ok(!html.includes("<script>alert"));
assert.ok(!html.includes("<img src=x"));
assert.ok(html.includes("&lt;script&gt;alert"));
assert.ok(html.includes("&lt;img src=x"));
const recetteDefi = CookieCode.recette("Cookie defi")
.prendre("farine", 200, "g")
.prendre("sucre", 100, "g")
.prendre("chocolat", 150, "g")
.ajouter("farine")
.ajouter("sucre")
.ajouter("chocolat")
.melanger()
.repeter(2, (recette) => {
recette.melanger();
})
.cuire(12, "minutes")
.servir();
const rapport = recetteDefi.analyser();
assert.deepStrictEqual(rapport.ingredients, ["farine", "sucre", "chocolat"]);
assert.ok(rapport.actions.includes("repeter"));
assert.strictEqual(rapport.utiliseBoucle, true);
assert.strictEqual(rapport.termineParServir, true);
assert.deepStrictEqual(rapport.erreurs, []);
const defiCookie = CookieCode.defi("Cookie avec boucle", {
ingredientsMinimum: 3,
actionsObligatoires: ["melanger", "cuire", "servir"],
boucleObligatoire: true,
terminerParServir: true,
interdireErreurs: true,
});
const verification = CookieCode.verifier(recetteDefi, defiCookie);
assert.strictEqual(verification.reussi, true);
assert.match(verification.toText(), /Resultat : reussi/);
assert.match(verification.toText(), /✅ Tu as utilise 3 ingredient\(s\)\./);
const recetteIncomplete = CookieCode.recette("Cookie incomplet")
.prendre("farine", 200, "g")
.melanger();
const verificationIncomplete = CookieCode.verifier(
recetteIncomplete,
defiCookie,
);
assert.strictEqual(verificationIncomplete.reussi, false);
assert.match(
verificationIncomplete.toText(),
/❌ Il faut au moins 3 ingredient\(s\)\./,
);
assert.match(
verificationIncomplete.toText(),
/❌ Il manque une boucle : essaie avec \.repeter\(\)\./,
);
assert.match(
verificationIncomplete.toText(),
/❌ Ta recette doit se terminer par \.servir\(\)\./,
);
assert.strictEqual(CookieCode.version, "0.2.0");
console.log("CookieCode tests: OK");