Suppression des erreurs lorsque les informations fournis pour un sélecteur ne sont pas correctes. Il sera juste ignoré.

This commit is contained in:
Fabrice PENHOËT 2021-08-12 17:43:34 +02:00
parent 61bc5eaa76
commit f963f8fa68
3 changed files with 39 additions and 32 deletions

View File

@ -4,7 +4,7 @@ module.exports =
elementNotFound : "Aucun élément HTML n'a été trouvé ayant comme \"id\" : ", elementNotFound : "Aucun élément HTML n'a été trouvé ayant comme \"id\" : ",
needDatasElt: "Merci de fournir un id valide pour l'élément où afficher les données.", needDatasElt: "Merci de fournir un id valide pour l'élément où afficher les données.",
needNaturalNumber: "Merci de fournir un nombre entier supérieur ou égal à zéro pour désigner chaque colonne.", needNaturalNumber: "Merci de fournir un nombre entier supérieur ou égal à zéro pour désigner chaque colonne.",
needUrl: "Merci de fournir l'url du fichier CSV à parser.", needUrl: "Merci de fournir une url valide pour le fichier CSV à parser.",
parserFail: "La lecture des données du fichier a échoué.", parserFail: "La lecture des données du fichier a échoué.",
selectorFieldNotFound: "Au moins une des colonnes devant servir à filtrer les données n'existe pas dans le fichier.", selectorFieldNotFound: "Au moins une des colonnes devant servir à filtrer les données n'existe pas dans le fichier.",
}; };

View File

@ -48,20 +48,28 @@ export class freeCSV2HTML
set datasSelectors(selectionElts: selectors[]) set datasSelectors(selectionElts: selectors[])
{ {
this._datasSelectors=[]; // remise à zéro
let checkContainerExist: HTMLElement|null; let checkContainerExist: HTMLElement|null;
for(let i = 0; i < selectionElts.length; i++) for(let i = 0; i < selectionElts.length; i++)
{ {
checkContainerExist=document.getElementById(selectionElts[i].id); checkContainerExist=document.getElementById(selectionElts[i].id);
if(checkContainerExist === null) if(checkContainerExist === null)
throw new Error(errors.elementNotFound+selectionElts[i].id); console.error(errors.elementNotFound+selectionElts[i].id);
else if(Number.isInteger( selectionElts[i].colCSV) === false || selectionElts[i].colCSV < 0) else if(Number.isInteger( selectionElts[i].colCSV) === false || selectionElts[i].colCSV < 0)
throw new Error(errors.needNaturalNumber); console.error(errors.needNaturalNumber);
else else
selectionElts[i].eltDOM=checkContainerExist; {
selectionElts[i].eltDOM=checkContainerExist;
this._datasSelectors.push(selectionElts[i]);
}
} }
this._datasSelectors=selectionElts;
} }
get datasSelectors() : selectors[]
{
return this._datasSelectors;
}
public async parse(): Promise<any> public async parse(): Promise<any>
{ {
const converter=this; const converter=this;
@ -99,6 +107,7 @@ export class freeCSV2HTML
throw new Error(errors.needDatasElt); throw new Error(errors.needDatasElt);
if(this._datasSourceUrl === "" ) if(this._datasSourceUrl === "" )
throw new Error(errors.needUrl); throw new Error(errors.needUrl);
await this.parse(); await this.parse();
if(this.parseDatas.length === 0 || this.parseMeta!.fields === undefined) // je force avec "!", car l'existence de parseMeta certaine après parse(). if(this.parseDatas.length === 0 || this.parseMeta!.fields === undefined) // je force avec "!", car l'existence de parseMeta certaine après parse().
@ -110,7 +119,7 @@ export class freeCSV2HTML
{ {
let converter=this; let converter=this;
// Affichage initial des données du fichier // Affichage initial des données du fichier
this.datasHTML=this.createDatasHTML(this.parseMeta.fields, this.parseDatas); this.datasHTML=this.createDatasHTML(this.parseMeta!.fields, this.parseDatas);
this._datasViewElt.eltDOM.innerHTML=this.datasHTML; this._datasViewElt.eltDOM.innerHTML=this.datasHTML;
// Si demandé, création des listes permettant de filter les données // Si demandé, création des listes permettant de filter les données
@ -120,11 +129,11 @@ export class freeCSV2HTML
let selectorsHTML : string [] = []; let selectorsHTML : string [] = [];
for(let i in this._datasSelectors) for(let i in this._datasSelectors)
{ {
if(this._datasSelectors[i].colCSV > (this.parseMeta.fields.length-1)) if(this._datasSelectors[i].colCSV > (this.parseMeta!.fields.length-1))
throw new Error(errors.selectorFieldNotFound); throw new Error(errors.selectorFieldNotFound);
else else
{ {
let values=[], colName=this.parseMeta.fields[this._datasSelectors[i].colCSV]; let values=[], colName=this.parseMeta!.fields[this._datasSelectors[i].colCSV];
for (let row in this.parseDatas) for (let row in this.parseDatas)
{ {
if(values.indexOf(this.parseDatas[row][colName].trim()) === -1) if(values.indexOf(this.parseDatas[row][colName].trim()) === -1)

View File

@ -34,22 +34,29 @@ describe("freeCSV2HTML", () =>
expect(() => { return converter.datasViewElt={ id:"datas" }; }).not.toThrowError(); 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.", () => it("Ne doit accepter que les sélecteurs pour lesquels un élément a été trouvé dans la page pour l'id fourni.", () =>
{ {
expect(() =>{ return converter.datasSelectors=[{ colCSV:2, id:"selector2" },{ colCSV:3, id:"selector3" }]; }).toThrowError(errors.elementNotFound+"selector3"); converter.datasSelectors=[{ colCSV:2, id:"selector2" },{ colCSV:3, id:"selector3" }];
expect(converter.datasSelectors.length).toEqual(1);
expect(converter.datasSelectors[0].id).toEqual("selector2");
}); });
it("Doit générer une erreur si tous les numéros de colonne des sélecteurs ne sont pas des nombres naturels.", () => it("Ne doit accepter que les sélecteurs pour lesquels les numéros de colonne fourrnis sont des nombres naturels.", () =>
{ {
expect(() => { return converter.datasSelectors=[{ colCSV:2.3, id:"selector1" },{ colCSV:3, id:"selector2" }]; }).toThrowError(errors.needNaturalNumber); converter.datasSelectors=[{ colCSV:2.3, id:"selector1" },{ colCSV:3, id:"selector2" }];
expect(() => { return converter.datasSelectors=[{ colCSV:2, id:"selector1" },{ colCSV:-1, id:"selector2" }]; }).toThrowError(errors.needNaturalNumber); expect(converter.datasSelectors.length).toEqual(1);
}); expect(converter.datasSelectors[0].id).toEqual("selector2");
converter.datasSelectors=[{ colCSV:2, id:"selector1" },{ colCSV:-1, id:"selector2" }];
it("Ne doit pas générer une erreur si toutes les informations fournies pour les sélecteurs sont correctes.", () => expect(converter.datasSelectors.length).toEqual(1);
{ expect(converter.datasSelectors[0].id).toEqual("selector1");
expect(() => { return converter.datasSelectors=[{ colCSV:0, id:"selector1" },{ colCSV:3, id:"selector2" }]; }).not.toThrowError();
}); });
it("Doit accepter tous les sélecteurs si leurs informations sont valides.", () =>
{
converter.datasSelectors=[{ colCSV:0, id:"selector1" },{ colCSV:3, id:"selector2" }];
expect(converter.datasSelectors.length).toEqual(2);
});
it("Doit générer une erreur si l'url fournie pour le fichier de données est vide.", () => 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); expect(() => { return converter.datasSourceUrl=" "; }).toThrowError(errors.needUrl);
@ -62,14 +69,14 @@ describe("freeCSV2HTML", () =>
{ {
converter.datasViewElt={ id:"datas" }; converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/dontExist.csv"; converter.datasSourceUrl="http://localhost:9876/datas/dontExist.csv";
await expectAsync(converter.run()).toBeRejectedWith(new Error(errors.parserFail)); await expectAsync(converter.parse()).toBeRejectedWith(new Error(errors.parserFail));
}); });
it("Doit enregistrer la liste des erreurs rencontrées en parsant le fichier.", async () => it("Doit enregistrer la liste des erreurs rencontrées en parsant le fichier.", async () =>
{ {
converter.datasViewElt={ id:"datas" }; converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/datas-errors1.csv"; converter.datasSourceUrl="http://localhost:9876/datas/datas-errors1.csv";
await converter.run(); await converter.parse();
expect(converter.parseErrors.length).toBeGreaterThan(0); expect(converter.parseErrors.length).toBeGreaterThan(0);
}); });
@ -94,16 +101,7 @@ describe("freeCSV2HTML", () =>
converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv"; converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv";
await expectAsync(converter.run()).toBeResolved(); await expectAsync(converter.run()).toBeResolved();
}); });
it("Doit afficher une erreur dans la page si la lecture du fichier échoue.", async () =>
{
converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/dontExist.csv";
await converter.run();
let txtDatasViewsElt=document.getElementById("datas").innerHTML;
expect(txtDatasViewsElt).toEqual(errors.parserFail);
});
it("Doit afficher une erreur dans la page si aucune donnée n'a été trouvée dans le fichier.", async () => 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.datasViewElt={ id:"datas" };
@ -122,7 +120,7 @@ describe("freeCSV2HTML", () =>
expect(txtDatasViewsElt).toEqual(fixtures.datasHTML); expect(txtDatasViewsElt).toEqual(fixtures.datasHTML);
}); });
}); });
describe("Création et action des sélecteurs permettant de filter les données affichées.", () => describe("Création et action des sélecteurs permettant de filter les données affichées.", () =>
{ {
beforeEach( () => beforeEach( () =>
@ -187,5 +185,5 @@ describe("freeCSV2HTML", () =>
expect(txtDatasViewsElt).toEqual(fixtures.datasHTMLFor2SelectNone); expect(txtDatasViewsElt).toEqual(fixtures.datasHTMLFor2SelectNone);
}); });
}); });
}); });