98 lines
3.4 KiB
JavaScript
98 lines
3.4 KiB
JavaScript
const assert = require("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("<script>alert"));
|
|
assert.ok(html.includes("<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");
|