import { freeCSV2HTML } from "../src/freeCSV2HTML"; const errors=require("../src/errors.js"); const fixtures=require("./fixtures.js"); describe("freeCSV2HTML", () => { let converter: freeCSV2HTML; beforeEach( () => { converter=new freeCSV2HTML(); document.body.insertAdjacentHTML('afterbegin', fixtures.datasViewEltHTML); }); afterEach( () => { document.body.removeChild(document.getElementById('fixture')); }); it("Doit avoir créé une instance de freeCSV2HTML", () => { expect(converter).toBeInstanceOf(freeCSV2HTML); }); 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 pour afficher les données.", () => { expect(() => { return converter.datasViewElt={ id:"dontExist" }; }).toThrowError(errors.elementNotFound+"dontExist"); }); it("Ne doit pas générer une erreur s'il y a bien un élément dans la page pour l'id fourni pour afficher les données.", () => { expect(() => { return converter.datasViewElt={ id:"datas" }; }).not.toThrowError(); }); it("Doit générer une erreur s'il n'y a pas un élément dans la page pour chaque id fourni pour afficher un des sélecteurs.", () => { expect(() =>{ return converter.datasSelectors=[{ colCSV:2, id:"selector2" },{ colCSV:3, id:"selector3" }]; }).toThrowError(errors.elementNotFound+"selector3"); }); it("Doit générer une erreur si tous les numéros de colonne des sélecteurs ne sont pas des nombres naturels.", () => { expect(() => { return converter.datasSelectors=[{ colCSV:2.3, id:"selector1" },{ colCSV:3, id:"selector2" }]; }).toThrowError(errors.needNaturalNumber); expect(() => { return converter.datasSelectors=[{ colCSV:2, id:"selector1" },{ colCSV:-1, id:"selector2" }]; }).toThrowError(errors.needNaturalNumber); }); it("Ne doit pas générer une erreur si toutes les informations fournies pour les sélecteurs sont correctes.", () => { expect(() => { return converter.datasSelectors=[{ colCSV:0, id:"selector1" },{ colCSV:3, id:"selector2" }]; }).not.toThrowError(); }); 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.needUrl); }); }); describe("Parsage du fichier et création du tableau de données", () => { 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.needDatasElt)); converter.datasViewElt={ id:"datas" }; await expectAsync( converter.run()).toBeRejectedWith(new Error(errors.needUrl)); }); 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 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("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 afficher une erreur dans la page si aucune donnée n'a été trouvée dans le fichier.", async () => { converter.datasViewElt={ id:"datas" }; converter.datasSourceUrl="http://localhost:9876/datas/nodatas.csv"; await converter.run(); let txtDatasViewsElt=document.getElementById("datas").innerHTML; expect(txtDatasViewsElt).toEqual(errors.datasNotFound); }); 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); }); }); describe("Création et action des sélecteurs permettant de filter les données affichées.", () => { beforeEach( () => { converter.datasViewElt={ id:"datas" }; converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv"; }); it("Doit générer une erreur si au moins un des numéros de colonne fournis pour les sélecteurs ne correspond pas à une des colonne du fichier.", async () => { converter.datasSelectors=[{ colCSV:0, id:"selector1"},{ colCSV:5, id:"selector2"}]; await expectAsync(converter.run()).toBeRejectedWith(new Error(errors.selectorFieldNotFound)); }); it("Ne doit pas pas générer d'erreur si tous les numéros de colonne des sélecteurs correspondent pas à une des colonne du fichier.", async () => { converter.datasSelectors=[{ colCSV:3, id:"selector1"},{ colCSV:4, id:"selector2"}]; await expectAsync(converter.run()).not.toBeRejected(); }); it("Pour chaque sélecteur demandé, doit générer un élement