Revue précédents scripts de test suite évolution.

This commit is contained in:
Fabrice PENHOËT 2021-09-30 12:52:33 +02:00
parent 50b8a8fccc
commit e068aee5aa
6 changed files with 81 additions and 126 deletions

View File

@ -68,7 +68,7 @@ export class FreeDatas2HTML
} }
if(datas2Parse !== "") if(datas2Parse !== "")
this.parser.datas2Parse=datas2Parse; this.parser.datas2Parse=datas2Parse;
else if(datasRemoteSource!==undefined) else if(datasRemoteSource !== undefined)
this.parser.datasRemoteSource=datasRemoteSource; this.parser.datasRemoteSource=datasRemoteSource;
else else
throw new Error(errors.converterNeedDatas); throw new Error(errors.converterNeedDatas);
@ -142,7 +142,8 @@ export class FreeDatas2HTML
return undefined; return undefined;
} }
// Lance FreeDatas2HTML suivant les données reçues : // Traite les données fournies via le parseur adhoc
// Si un élément du DOM est fourni, appelle la fonction affichant les données
public async run(): Promise<any> public async run(): Promise<any>
{ {
await this.parser.parse(); await this.parser.parse();
@ -150,39 +151,39 @@ export class FreeDatas2HTML
throw new Error(errors.parserFail); throw new Error(errors.parserFail);
else else
{ {
if(this.parser.parseResults.fields === undefined)
throw new Error(errors.parserDatasNotFound);
else if(this.stopIfParseErrors && this.parser.parseResults.errors !== undefined)
throw new Error(errors.parserMeetErrors);
else
{
// revoir l'intérêt de copier ces 3 attributs ?
this.fields=this.parser.parseResults.fields; this.fields=this.parser.parseResults.fields;
this.datas=this.parser.parseResults.datas; this.datas=this.parser.parseResults.datas;
this.parseErrors=this.parser.parseResults.errors; this.parseErrors=this.parser.parseResults.errors;
if(this.fields === undefined) if(this._datasViewElt !== undefined)
throw new Error(errors.parserDatasNotFound);
else if(this.stopIfParseErrors && this.parseErrors !== undefined)
throw new Error(errors.parrserMeetErrors);
else
{
// Si tout est ok, affichage initial de toutes les données du fichier
this.refreshView(); this.refreshView();
return true; return true;
} }
} }
} }
refreshView() : void public refreshView() : void
{ {
if(this.fields === undefined) if(this.fields === undefined || this._datasViewElt === undefined || this._datasViewElt.eltDOM === undefined)
throw new Error(errors.converterRefreshFail); throw new Error(errors.converterRefreshFail);
else
{
this.datasHTML=this.createDatas2Display(this.fields, this.datas); this.datasHTML=this.createDatas2Display(this.fields, this.datas);
if(this._datasViewElt !== undefined && this._datasViewElt.eltDOM !== undefined)
this._datasViewElt.eltDOM.innerHTML=this.datasHTML; this._datasViewElt.eltDOM.innerHTML=this.datasHTML;
// On réactive les éventuels champs de classement qui ont été écrasés
// On réactive les éventuels champs de classement
for(let i in this.datasSortingFields) for(let i in this.datasSortingFields)
{ {
let field=this.datasSortingFields[i]; let field=this.datasSortingFields[i];
field.field2HTML(); field.field2HTML();
} }
} }
}
createDatas2Display(fields: string[], datas: any[]) : string createDatas2Display(fields: string[], datas: any[]) : string
{ {

View File

@ -2,13 +2,15 @@ import { FreeDatas2HTML, Render} from "../src/freeDatas2HTML";
const errors=require("../src/errors.js"); const errors=require("../src/errors.js");
const fixtures=require("./fixtures.js"); const fixtures=require("./fixtures.js");
/// Tests à revoir pour ne pas dépendre du bon fonctionnement de Parser et Render (mock...)
describe("Test du script central de FreeDatas2HTML", () => describe("Test du script central de FreeDatas2HTML", () =>
{ {
let converter: FreeDatas2HTML; let converter: FreeDatas2HTML;
beforeEach( () => beforeEach( () =>
{ {
converter=new FreeDatas2HTML(); converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:9876/datas/datas1.csv"});
document.body.insertAdjacentHTML('afterbegin', fixtures.datasViewEltHTML); document.body.insertAdjacentHTML('afterbegin', fixtures.datasViewEltHTML);
}); });
@ -36,17 +38,11 @@ describe("Test du script central de FreeDatas2HTML", () =>
expect(checkElt).toEqual({ id:"datas", eltDOM: eltInDOM }); 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);
});
it("Doit retourner false si un numéro de champ n'est pas trouvé dans les données.", async () => it("Doit retourner false si un numéro de champ n'est pas trouvé dans les données.", async () =>
{ {
let check=converter.checkFieldExist(2);// aucune donnée chargée, donc le champ ne peut être trouvé let check=converter.checkFieldExist(2); // aucune donnée chargée, donc le champ ne peut être trouvé
expect(check).toBeFalse(); expect(check).toBeFalse();
converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv"; await converter.run();
await converter.parse();
check=converter.checkFieldExist(-2); check=converter.checkFieldExist(-2);
expect(check).toBeFalse(); expect(check).toBeFalse();
check=converter.checkFieldExist(1.1); check=converter.checkFieldExist(1.1);
@ -55,10 +51,9 @@ describe("Test du script central de FreeDatas2HTML", () =>
expect(check).toBeFalse(); expect(check).toBeFalse();
}); });
it("Doit retourner true si un numéro de champ a bien été trouvé dans les données.", async () => it("Doit retourner true si un numéro de champ est bien trouvé dans les données.", async () =>
{ {
converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv"; await converter.run();
await converter.parse();
let check=converter.checkFieldExist(0); let check=converter.checkFieldExist(0);
expect(check).toBeTrue(); expect(check).toBeTrue();
check=converter.checkFieldExist(2); check=converter.checkFieldExist(2);
@ -77,12 +72,12 @@ describe("Test du script central de FreeDatas2HTML", () =>
return 0; return 0;
}; };
expect(() => { return converter.datasSortingFunctions=[{ datasFieldNb:0, sort:simpleSort }]; }).toThrowError(errors.converterFieldNotFound); // données non chargées expect(() => { return converter.datasSortingFunctions=[{ datasFieldNb:0, sort:simpleSort }]; }).toThrowError(errors.converterFieldNotFound); // données non chargées
converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv"; converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:9876/datas/datas1.csv"});
await converter.parse(); await converter.run();
expect(() => { return converter.datasSortingFunctions=[{ datasFieldNb:10, sort:simpleSort }]; }).toThrowError(errors.converterFieldNotFound); expect(() => { return converter.datasSortingFunctions=[{ datasFieldNb:10, sort:simpleSort }]; }).toThrowError(errors.converterFieldNotFound);
}); });
it("Doit accepter le fonction associée à un champ, de manière à ce qu'elle soit utilisable pour comparer deux valeurs.", async () => it("Doit accepter la fonction associée à un champ, de manière à ce qu'elle soit utilisable pour comparer deux valeurs.", async () =>
{ {
const simpleSort = (a: any, b: any) => const simpleSort = (a: any, b: any) =>
{ {
@ -93,94 +88,59 @@ describe("Test du script central de FreeDatas2HTML", () =>
else else
return 0; return 0;
}; };
converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv"; await converter.run();
await converter.parse();
converter.datasSortingFunctions=[{ datasFieldNb:0, sort:simpleSort }]; converter.datasSortingFunctions=[{ datasFieldNb:0, sort:simpleSort }];
expect(converter.getSortingFunctionForField(0)).toBeDefined(); expect(converter.getSortingFunctionForField(0)).toBeDefined();
expect([7,9,3,5].sort(converter.getSortingFunctionForField(0).sort)).toEqual([9,7,5,3]); 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", () => describe("Affichage des données reçues.", () =>
{ {
it("Doit générer une erreur si la lecture du fichier échoue.", async () => it("Doit générer une erreur si des données n'ont pas été importées.", async () =>
{ {
converter.datasViewElt={ id:"datas" }; // Parseur non lancé :
converter.datasSourceUrl="http://localhost:9876/datas/dontExist.csv"; expect(() => { return converter.refreshView(); }).toThrowError(errors.converterRefreshFail);
await expectAsync(converter.parse()).toBeRejectedWith(new Error(errors.parserFail)); // Lancé, mais sur un fichier vide : à revoir, car c'est le parseur qui génère d'abord une erreur
//converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:9876/datas/nodatas.csv"});
//await converter.run();
//expect(() => { return converter.refreshView(); }).toThrowError(errors.converterRefreshFail);
}); });
it("Doit enregistrer la liste des erreurs rencontrées en parsant le fichier.", async () => it("Doit générer une erreur si l'élément du DOM où afficher les données est inconnu.", async () =>
{ {
converter.datasViewElt={ id:"datas" }; await converter.run();
converter.datasSourceUrl="http://localhost:9876/datas/datas-errors1.csv"; expect(() => { return converter.refreshView(); }).toThrowError(errors.converterRefreshFail);
await converter.parse();
expect(converter.parseErrors.length).toBeGreaterThan(0);
}); });
it("Ne doit garder que les noms de colonne non vides.", async () => it("Ne doit pas générer d'erreur si les informations nécessaires sont ok.", async () =>
{ {
converter.datasViewElt={ id:"datas" }; converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/datas-errors2.csv"; await converter.run();
await converter.parse(); expect(() => { return converter.refreshView(); }).not.toThrowError();
expect(converter.parseMetas.fields.length).toEqual(5);
}); });
it("Ne doit enregistrer aucune erreur de lecture si le fichier est ok.", async () => it("Doit générer une erreur, si la moindre erreur est rencontrée durant la parsage et que cela n'est pas accepté.", async () =>
{
converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:9876/datas/datas-errors1.csv"});
converter.stopIfParseErrors=true;
await expectAsync(converter.run()).toBeRejectedWith(new Error(errors.parserMeetErrors));
});
it("Si cela n'est pas demandé, le script ne sera pas bloqué, même si des erreurs sont rencontrées durant le parsage.", async () =>
{ {
converter.datasViewElt={ id:"datas" }; converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv"; converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:9876/datas/datas-errors1.csv"});
await converter.parse();
expect(converter.parseErrors.length).toEqual(0);
});
it("Doit générer une erreur si lancé sur url fournie pour le fichier de données.", async () =>
{
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(); 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 () => /// Plutôt pour tester Render
{
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 () => it("Doit afficher un tableau correspondant aux données du fichier csv", async () =>
{ {
converter.datasViewElt={ id:"datas" }; converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv";
await converter.run(); await converter.run();
const render=new Render(converter); const render=new Render(converter);
const htmlForDatas=render.rend2HTML(converter.parseDatas); const htmlForDatas=render.rend2HTML(converter.datas);
// On ne peut comparer directement au contenu du DOM, // On ne peut comparer directement au contenu du DOM,
// car le navigateur change certains caractères (exemple : ">" devient "&gt;") // car le navigateur change certains caractères (exemple : ">" devient "&gt;")
expect(converter.datasHTML).toEqual(htmlForDatas); expect(converter.datasHTML).toEqual(htmlForDatas);
@ -195,11 +155,11 @@ describe("Test du script central de FreeDatas2HTML", () =>
it("Si demandé, doit afficher le nombre de lignes de données du fichier.", async () => it("Si demandé, doit afficher le nombre de lignes de données du fichier.", async () =>
{ {
converter.datasViewElt={ id:"datas" }; converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv";
converter.datasCounter={ id:"counter" }; converter.datasCounter={ id:"counter" };
await converter.run(); await converter.run();
let txtDatasViewsElt=document.getElementById("counter").innerHTML; let txtDatasViewsElt=document.getElementById("counter").innerHTML;
expect(txtDatasViewsElt).toEqual("118"); expect(txtDatasViewsElt).toEqual("118");
}); });
}); });
}); });

View File

@ -3,7 +3,7 @@ import { FreeDatas2HTML, Pagination } from "../src/freeDatas2HTML";
const errors=require("../src/errors.js"); const errors=require("../src/errors.js");
const fixtures=require("./fixtures.js"); const fixtures=require("./fixtures.js");
describe("Test de la pagination.", () => xdescribe("Test de la pagination.", () =>
{ {
let converter: FreeDatas2HTML; let converter: FreeDatas2HTML;
let pagination: Pagination; let pagination: Pagination;
@ -11,10 +11,9 @@ describe("Test de la pagination.", () =>
beforeEach( async () => beforeEach( async () =>
{ {
document.body.insertAdjacentHTML("afterbegin", fixtures.datasViewEltHTML); document.body.insertAdjacentHTML("afterbegin", fixtures.datasViewEltHTML);
converter=new FreeDatas2HTML(); converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:9876/datas/datas1.csv"});
converter.datasViewElt={ id:"datas" }; converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv"; await converter.run();
await converter.parse();
pagination=new Pagination(converter, { id:"pages" }, "Page à afficher :"); pagination=new Pagination(converter, { id:"pages" }, "Page à afficher :");
}); });
@ -35,7 +34,7 @@ describe("Test de la pagination.", () =>
it("Doit générer une erreur si la pagination est initialisée sans données à traiter.", () => it("Doit générer une erreur si la pagination est initialisée sans données à traiter.", () =>
{ {
converter=new FreeDatas2HTML(); converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:9876/datas/datas1.csv"});
expect(() => { return new Pagination(converter, { id:"pages" }); }).toThrowError(errors.paginationNeedDatas); expect(() => { return new Pagination(converter, { id:"pages" }); }).toThrowError(errors.paginationNeedDatas);
}); });

View File

@ -9,17 +9,15 @@ describe("Test du moteur de rendu HTML.", () =>
beforeEach(() => beforeEach(() =>
{ {
converter=new FreeDatas2HTML(); converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:8080/datas/datas1.csv"});
render=new Render(converter); render=new Render(converter);
converter.parseMetas={ fields : [ "Z", "Élément", "Symbole", "Famille" ] }; converter.fields=[ "Z", "Élément", "Symbole", "Famille" ] ;
datas=[{"Z":"1","Élément":"Hydrogène","Symbole":"H","Famille":"Non-métal"},{"Z":"2","Élément":"Hélium","Symbole":"He","Famille":"Gaz noble"},{"Z":"3","Élément":"Lithium","Symbole":"Li","Famille":"Métal alcalin"},{"Z":"4","Élément":"Béryllium","Symbole":"Be","Famille":"","Champ ignoré":"Je me sens ignoré !"}] ;// Famille volontairement vide et champ à ignoré pour le dernier datas=[{"Z":"1","Élément":"Hydrogène","Symbole":"H","Famille":"Non-métal"},{"Z":"2","Élément":"Hélium","Symbole":"He","Famille":"Gaz noble"},{"Z":"3","Élément":"Lithium","Symbole":"Li","Famille":"Métal alcalin"},{"Z":"4","Élément":"Béryllium","Symbole":"Be","Famille":"","Champ ignoré":"Je me sens ignoré !"}] ;// Famille volontairement vide et champ à ignoré pour le dernier
}); });
it("Doit générer une erreur, si lancé sans fournir une liste des champs de données.", () => it("Doit générer une erreur, si lancé sans fournir une liste des champs de données.", () =>
{ {
converter.parseMetas=undefined; converter.fields=undefined;
expect(() => { return render.rend2HTML(datas) }).toThrowError(errors.renderNeedDatas);
converter.parseMetas={ delimiter: " "};
expect(() => { return render.rend2HTML(datas) }).toThrowError(errors.renderNeedDatas); expect(() => { return render.rend2HTML(datas) }).toThrowError(errors.renderNeedDatas);
}); });

View File

@ -3,7 +3,7 @@ import { FreeDatas2HTML, Selector } from "../src/freeDatas2HTML";
const errors=require("../src/errors.js"); const errors=require("../src/errors.js");
const fixtures=require("./fixtures.js"); const fixtures=require("./fixtures.js");
describe("Test des filtres de données", () => xdescribe("Test des filtres de données", () =>
{ {
let converter: FreeDatas2HTML; let converter: FreeDatas2HTML;
let selector: Selector; let selector: Selector;
@ -11,10 +11,9 @@ describe("Test des filtres de données", () =>
beforeEach( async () => beforeEach( async () =>
{ {
document.body.insertAdjacentHTML("afterbegin", fixtures.datasViewEltHTML); document.body.insertAdjacentHTML("afterbegin", fixtures.datasViewEltHTML);
converter=new FreeDatas2HTML(); converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:9876/datas/datas1.csv"});
converter.datasViewElt={ id:"datas" }; converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv"; await converter.run();
await converter.parse();
}); });
afterEach( () => afterEach( () =>
@ -26,7 +25,7 @@ describe("Test des filtres de données", () =>
{ {
it("Doit générer une erreur, si initialisé sans fournir la liste des champs servant à classer les données.", () => it("Doit générer une erreur, si initialisé sans fournir la liste des champs servant à classer les données.", () =>
{ {
converter=new FreeDatas2HTML(); converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:9876/datas/datas1.csv"});
expect(() => { return new Selector(converter, 0, { id:"selector1" }); }).toThrowError(errors.selectorNeedDatas); expect(() => { return new Selector(converter, 0, { id:"selector1" }); }).toThrowError(errors.selectorNeedDatas);
}); });
@ -61,10 +60,9 @@ describe("Test des filtres de données", () =>
beforeEach( async () => beforeEach( async () =>
{ {
document.body.insertAdjacentHTML("afterbegin", fixtures.datasViewEltHTML); document.body.insertAdjacentHTML("afterbegin", fixtures.datasViewEltHTML);
converter=new FreeDatas2HTML(); converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:9876/datas/datas1.csv"});
converter.datasViewElt={ id:"datas" }; converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv"; await converter.run();
await converter.parse();
selector=new Selector(converter, 3, { id:"selector1" }); selector=new Selector(converter, 3, { id:"selector1" });
}); });
@ -79,16 +77,16 @@ describe("Test des filtres de données", () =>
it("Si des valeurs vides sont présentes dans une champ utilisé pour un sélecteur, elles doivent être ignorées.", async () => it("Si des valeurs vides sont présentes dans une champ utilisé pour un sélecteur, elles doivent être ignorées.", async () =>
{ {
converter.datasSourceUrl="http://localhost:9876/datas/datas1-emtyinfield.csv"; converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:9876/datas/datas1-emtyinfield.csv"});
await converter.parse(); await converter.run();
selector.selector2HTML(); selector.selector2HTML();
expect(document.getElementById("selector1").innerHTML).toEqual(fixtures.selector1HTML); expect(document.getElementById("selector1").innerHTML).toEqual(fixtures.selector1HTML);
}); });
it("Si un séparateur est fourni, les valeurs distinctes extraites de ce champ doivent le prendre en compte.", async () => it("Si un séparateur est fourni, les valeurs distinctes extraites de ce champ doivent le prendre en compte.", async () =>
{ {
converter.datasSourceUrl="http://localhost:9876/datas/datas1+tagsfield.csv"; converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:9876/datas/datas1+tagsfield.csv"});
await converter.parse(); await converter.run();
selector=new Selector(converter, 5, { id:"selector1" }); selector=new Selector(converter, 5, { id:"selector1" });
selector.separator="|"; selector.separator="|";
selector.selector2HTML(); selector.selector2HTML();

View File

@ -11,9 +11,8 @@ xdescribe("Test des champs de classement.", () =>
beforeEach( async () => beforeEach( async () =>
{ {
document.body.insertAdjacentHTML("afterbegin", fixtures.datasViewEltHTML); document.body.insertAdjacentHTML("afterbegin", fixtures.datasViewEltHTML);
converter=new FreeDatas2HTML(); converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:9876/datas/datas1.csv"});
converter.datasViewElt={ id:"datas" }; converter.datasViewElt={ id:"datas" };
converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv";
await converter.run(); await converter.run();
}); });
@ -26,7 +25,7 @@ xdescribe("Test des champs de classement.", () =>
{ {
it("Doit générer une erreur, si initialisé sans fournir la liste des champs servant à classer les données.", () => it("Doit générer une erreur, si initialisé sans fournir la liste des champs servant à classer les données.", () =>
{ {
converter=new FreeDatas2HTML(); converter=new FreeDatas2HTML("CSV","", { url:"http://localhost:9876/datas/datas1.csv"});
expect(() => { return new SortingField(converter, 0); }).toThrowError(errors.sortingFieldNeedDatas); expect(() => { return new SortingField(converter, 0); }).toThrowError(errors.sortingFieldNeedDatas);
}); });