FreeDatas2HTML/tests/freeCSV2HTMLSpec.ts

174 lines
8.6 KiB
TypeScript

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("Setting freeCSV2HTML", () =>
{
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:"dontExistId" }; }).toThrowError(errors.elementNotFound+"dontExistId");
});
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 d'éléments 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 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("Running freeCSV2HTML", () =>
{
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/fake.csv";
await expectAsync( converter.parse()).toBeRejectedWith(new Error(errors.parserFail));
});
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/elements-chimiques.csv";
await expectAsync( converter.run()).toBeResolved();
});
it("Doit enregistrer la liste des erreurs rencontrées en parsant le fichier.", async () =>
{
converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/elements-chimiques-erreurs.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/elements-chimiques.csv";
await converter.parse();
expect(converter.parseErrors.length).toEqual(0);
});
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/elements-chimiques-vide.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/elements-chimiques.csv";
await converter.run();
let txtDatasViewsElt=document.getElementById("datas").innerHTML;
expect(txtDatasViewsElt).toEqual(fixtures.datasHTML);
});
it("Doit générer une erreur si au moins un des numéros de colonne des sélecteurs ne correspond pas à une des colonne du fichier.", async () =>
{
converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/elements-chimiques.csv";
converter.datasSelectors=[{ colCSV:0, id:"selector1"},{ colCSV:5, id:"selector2"}];
await expectAsync(converter.run()).toBeRejectedWith(new Error(errors.selectorFieldNotFound));
});
it("Ne doit 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.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/elements-chimiques.csv";
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 <select> listant les valeurs distinctes du fichier, classées par ordre alphabétique.", async () =>
{
converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/elements-chimiques.csv";
converter.datasSelectors=[{ colCSV:3, id:"selector1"},{ colCSV:4, id:"selector2"}];
await converter.run();
expect(document.getElementById("selector1").innerHTML).toEqual(fixtures.selector1HTML);
expect(document.getElementById("selector2").innerHTML).toEqual(fixtures.selector2HTML);
});
it("Le choix d'un option dans un des sélecteurs doit modifier le contenu du tableau pour ne garder que les données valides pour ce choix et afficher toutes les données si sélection 0.", async () =>
{
converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/elements-chimiques.csv";
converter.datasSelectors=[{ colCSV:3, id:"selector1"},{ colCSV:4, id:"selector2"}];
await converter.run();
let selectElement = document.getElementById("CSVDatasSelector0") as HTMLInputElement;
selectElement.value="4";
selectElement.dispatchEvent(new Event('change'));
let txtDatasViewsElt=document.getElementById("datas").innerHTML;
expect(txtDatasViewsElt).toEqual(fixtures.datasHTMLForSelect1);
selectElement.value="0";
selectElement.dispatchEvent(new Event('change'));
txtDatasViewsElt=document.getElementById("datas").innerHTML;
expect(txtDatasViewsElt).toEqual(fixtures.datasHTML);
selectElement = document.getElementById("CSVDatasSelector1") as HTMLInputElement;
selectElement.value="1";
selectElement.dispatchEvent(new Event('change'));
txtDatasViewsElt=document.getElementById("datas").innerHTML;
expect(txtDatasViewsElt).toEqual(fixtures.datasHTMLForSelect2);
selectElement.value="0";
selectElement.dispatchEvent(new Event('change'));
txtDatasViewsElt=document.getElementById("datas").innerHTML;
expect(txtDatasViewsElt).toEqual(fixtures.datasHTML);
});
});
});