import { FreeDatas2HTML, Selector } from "../src/freeDatas2HTML"; const errors=require("../src/errors.js"); const fixtures=require("./fixtures.js"); describe("Test du script central de FreeDatas2HTML", () => { let converter: FreeDatas2HTML; beforeEach( () => { converter=new FreeDatas2HTML(); document.body.insertAdjacentHTML('afterbegin', fixtures.datasViewEltHTML); }); afterEach( () => { document.body.removeChild(document.getElementById('fixture')); }); it("Doit avoir créé une instance de FreeDatas2HTML", () => { expect(converter).toBeInstanceOf(FreeDatas2HTML); }); describe("Test des données de configuration reçues.", () => { it("Doit générer une erreur s'il n'y a pas d'élément dans la page pour l'id fourni.", () => { expect(() => { return FreeDatas2HTML.checkInDOMById({ id:"dontExist" }); }).toThrowError(errors.converterElementNotFound+"dontExist"); }); it("S'il y a bien un élément dans la page pour l'id fourni, doit retourner l'élement DOM complété.", () => { const eltInDOM=document.getElementById("datas"); const checkElt=FreeDatas2HTML.checkInDOMById({ id:"datas" }); expect(checkElt).toEqual({ id:"datas", eltDOM: eltInDOM }); }); it("Doit générer une erreur si l'url fournie pour le fichier de données est vide.", () => { expect(() => { return converter.datasSourceUrl=" "; }).toThrowError(errors.parserNeedUrl); }); // Fonction spécfique de classement des données : it("Doit me retourner la fonction associée à une colonne, de manière à ce qu'elle soit utilisable pour comparer deux valeurs.", () => { // Fonction volontairement basique, car ce n'est pas la fonction que l'on teste ici, mais le fait que l'on puisse l'utiliser ! const simpleSort = (a: any, b: any) => { if(a < b) return 1; else if(a > b) return -1; else return 0; }; converter.datasSortingFunctions=[{ datasFieldNb:0, sort:simpleSort }]; expect(converter.getSortingFunctionForField(0)).toBeDefined(); expect([7,9,3,5].sort(converter.getSortingFunctionForField(0).sort)).toEqual([9,7,5,3]); }); }); describe("Parsage du fichier et création du tableau de données", () => { it("Doit générer une erreur si la lecture du fichier échoue.", async () => { converter.datasViewElt={ id:"datas" }; converter.datasSourceUrl="http://localhost:9876/datas/dontExist.csv"; await expectAsync(converter.parse()).toBeRejectedWith(new Error(errors.parserFail)); }); it("Doit enregistrer la liste des erreurs rencontrées en parsant le fichier.", async () => { converter.datasViewElt={ id:"datas" }; converter.datasSourceUrl="http://localhost:9876/datas/datas-errors1.csv"; await converter.parse(); expect(converter.parseErrors.length).toBeGreaterThan(0); }); it("Ne doit garder que les noms de colonne non vides.", async () => { converter.datasViewElt={ id:"datas" }; converter.datasSourceUrl="http://localhost:9876/datas/datas-errors2.csv"; await converter.parse(); expect(converter.parseMetas.fields.length).toEqual(5); }); it("Ne doit enregistrer aucune erreur de lecture si le fichier est ok.", async () => { converter.datasViewElt={ id:"datas" }; converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv"; await converter.parse(); expect(converter.parseErrors.length).toEqual(0); }); it("Doit générer une erreur si au moins un des deux paramètres nécessaires au fonctionnement n'est pas fourni.", async () => { await expectAsync(converter.run()).toBeRejectedWith(new Error(errors.converterNeedDatasElt)); converter.datasViewElt={ id:"datas" }; await expectAsync(converter.run()).toBeRejectedWith(new Error(errors.parserNeedUrl)); }); it("Ne doit pas générer d'erreur si les deux paramètres fournis sont ok.", async () => { converter.datasViewElt={ id:"datas" }; converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv"; await expectAsync(converter.run()).toBeResolved(); }); it("Doit générer une erreur si aucune donnée n'a été trouvée dans le fichier et ne rien afficher dans l'emplacement prévu pour les données.", async () => { converter.datasViewElt={ id:"datas" }; converter.datasSourceUrl="http://localhost:9876/datas/nodatas.csv"; await expectAsync(converter.run()).toBeRejectedWith(new Error(errors.parserDatasNotFound)); let txtDatasViewsElt=document.getElementById("datas").innerHTML; expect(txtDatasViewsElt).toEqual(""); }); it("Si la moindre erreur est rencontrée durant la parsage et que cela est demandé, ne rien afficher dans l'emplacement prévu pour les données.", async () => { converter.datasViewElt={ id:"datas" }; converter.datasSourceUrl="http://localhost:9876/datas/datas-errors1.csv"; converter.stopIfParseErrors=true; await converter.run(); let txtDatasViewsElt=document.getElementById("datas").innerHTML; expect(txtDatasViewsElt).toEqual(""); }); it("Sauf si cela est demandé, les données trouvées dans le fichier seront affichées même si des erreurs sont rencontrées durant la parsage.", async () => { converter.datasViewElt={ id:"datas" }; converter.datasSourceUrl="http://localhost:9876/datas/datas-errors1.csv"; await converter.run(); let txtDatasViewsElt=document.getElementById("datas").innerHTML; expect(txtDatasViewsElt).not.toEqual(""); }); it("Doit afficher un tableau correspondant aux données du fichier csv", async () => { converter.datasViewElt={ id:"datas" }; converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv"; await converter.run(); let txtDatasViewsElt=document.getElementById("datas").innerHTML; expect(txtDatasViewsElt).toEqual(fixtures.datasHTML); }); }); });