import { errors, FreeDatas2HTML, MixedFieldsRender } from "../../src/extensions/MixedFieldsRender"; const fixtures=require("../fixtures.js"); describe("Test du moteur de rendu alternatif avec contenus mixables, etc.", () => { let render: MixedFieldsRender; const fields=[ "Z", "Élément", "Symbole", "Famille" ] ; // Les champs des différentes lignes ne sont pas forcément dans le même ordre et certains peuvent être absents, vides ou encore en trop... const datas=[{"Z":"1","Élément":"Hydrogène","Symbole":"H","Famille":"Non-métal"},{"Famille":"Gaz noble","Élément":"Hélium","Z":"2","Symbole":"He"},{"Champ ignoré":"Je me champ ignoré !", "Z":"3","Élément":"Lithium","Famille":"Métal alcalin","Symbole":"Li"},{"Z":"4","Élément":"Béryllium","Famille":"","Champ ignoré":"Je me champ ignoré !"}] ; let renderSettings= { allBegining: "
", allEnding: "
", linesBegining: "", fieldsNamesDisplaying: "

##0## | ##1## | ##3## | ##2##

", datasLinesDisplaying: "
  • ##0## | ##1## | ##3## | ##2##
  • " }; beforeEach(() => { render=new MixedFieldsRender(renderSettings); }); it("Doit générer une erreur, si une liste de champs vide lui est fournie.", () => { expect(() => { return render.fields=[]; } ).toThrowError(errors.renderNeedFields); expect(render.fields).toEqual([]); }); it("Doit accepter toute liste de champs valide.", () => { render=new MixedFieldsRender(renderSettings); expect(() => { return render.fields=[""]; }).not.toThrowError(); // pas normal, mais pas testé par cette classe expect(render.fields).toEqual([""]); expect(() => { return render.fields=["je vois double", "je vois double"]; }).not.toThrowError(); // idem expect(render.fields).toEqual(["je vois double", "je vois double"]); expect(() => { return render.fields=["je me sens seul"]; }).not.toThrowError(); expect(render.fields).toEqual(["je me sens seul"]); }); it("Doit générer une erreur, si lancé sans avoir fourni une liste des champs.", () => { expect(() => { return render.rend2HTML(); }).toThrowError(errors.renderNeedFields); }); it("Ne doit pas générer d'erreur, si lancé avec une liste des champs, même s'il n'y a aucune donnée fournie.", () => { render.fields=fields; expect(() => { return render.rend2HTML(); }).not.toThrowError(); }); it("Doit retourner un code HTML correspondant à la configuration fournie, avec ou sans données à afficher.", () => { render.fields=fields; let html=render.rend2HTML(); expect(html).toEqual("

    Z | Élément | Famille | Symbole

    "); // Avec des données : render.datas=datas; html=render.rend2HTML(); expect(html).toEqual("

    Z | Élément | Famille | Symbole

    "); }); it("Doit retourner un code HTML prenant en compte les fonctions spécifiques d'affichage, ou encore les champs affichés plusieurs fois.", () => { const newRenderSettings= { allBegining: "
    ", allEnding: "
    ", linesBegining: "", fieldsNamesDisplaying: "

    ##0## | ##1## | ##3## | ##2##

    ", datasLinesDisplaying: "
  • ##0## | ##1## (##0##) | ##3## | ##2##
  • " }; const newRender=new MixedFieldsRender(newRenderSettings); const rendFamille2HTML=(values: {[index: string]:string} ) : string => { if(values["Famille"] !=="") return values["Famille"]; else return "Non renseigné"; // doit apparaître car "Famille" est vide mais existant pour le Béryllium. }; const rendSymbol2HTML=(values: {[index: string]:string} ) : string => { if(values["Symbole"] !=="") return values["Symbole"]; else return "Inconnu"; // ne doit pas apparaître, car "Symbole" n'existe pas du tout par le Béryllium, donc rendSymbol2HTML() ne doit pas être appelée. }; newRender.fieldRenders=[{ name:"Famille", rend2HTML: rendFamille2HTML}, { name:"Symbole", rend2HTML: rendSymbol2HTML}]; newRender.fields=fields; newRender.datas=datas; let html=newRender.rend2HTML(); expect(html).toEqual("

    Z | Élément | Famille | Symbole

    "); }); });