Mutualisation de la méthode contrôleur qu'un numéro de champ est valide.
This commit is contained in:
parent
fb9e69a2b7
commit
7b313ae150
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "freedatas2html",
|
||||
"version": "0.4.2",
|
||||
"version": "0.4.3",
|
||||
"description": "Visualization of data from various sources (CSV, API, HTML...) with filters, classification, pagination, etc.",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
|
@ -1,6 +1,7 @@
|
||||
module.exports =
|
||||
{
|
||||
converterElementNotFound : "Aucun élément HTML n'a été trouvé ayant comme \"id\" : ",
|
||||
converterFieldNotFound : "Le champ n'existe pas dans les données ou les données n'ont pas encore été chargées.",
|
||||
converterNeedDatasElt: "Merci de fournir un id valide pour l'élément où afficher les données.",
|
||||
converterRefreshFail: "Le nom des champs et l'élement du DOM receveur sont nécessaires à l'affichage des données.",
|
||||
pagination2HTMLFail : "Toutes les donnée nécessaires à la création des sélecteurs de pagination n'ont pas été fournies.",
|
||||
@ -13,11 +14,12 @@ module.exports =
|
||||
parserNeedUrl: "Merci de fournir une url valide pour le fichier à parser.",
|
||||
selector2HTMLFail: "Le création d'un filtre dans le DOM nécessite l'initialisation de l'élément HTML et du numéro du champs à filter.",
|
||||
selectorCheckIsOkFail: "Le test est lancé sur un filtre incorrectement initialisé ou sur un attribut absent de la donnée à tester.",
|
||||
selectorFieldNotFound: "Au moins une des colonnes devant servir à filtrer les données n'existe pas dans le fichier.",
|
||||
selectorFieldNotFound: "Au moins un des champs devant servir à filtrer les données n'existe pas dans le fichier.",
|
||||
selectorNeedDatas: "Le création d'un filtre nécessite la transmission des données à filtrer.",
|
||||
selectorSelectedIndexNotFound: "La valeur sélectionnée n'a pas été trouvée dans la liste des champs.",
|
||||
sortingField2HTMLFail: "Toutes les donnée nécessaires à la création du lien de classement n'ont pas été fournies.",
|
||||
sortingFieldNeedDatas: "Le création d'un champ de classement nécessite la transmission de la liste des champs.",
|
||||
sortingFieldFieldNotFound: "Au moins un des champs devant permettre de classer les données n'existe pas dans le fichier.",
|
||||
sortingFieldsNbFail: "Le nombre de champs trouvés dans le DOM ne correspond pas à celui des données à classer.",
|
||||
sortingFieldsNotInHTML: "Les champs pouvant servir à classer les données n'ont pas été trouvés dans le DOM.",
|
||||
};
|
@ -51,6 +51,15 @@ export class FreeDatas2HTML
|
||||
}
|
||||
}
|
||||
|
||||
// Vérifie qu'un champ existe bien dans les données
|
||||
public checkFieldExist(nb: number) : boolean
|
||||
{
|
||||
if(this.parseMetas === undefined || this.parseMetas.fields === undefined || this.parseMetas.fields[nb] === undefined)
|
||||
return false;
|
||||
else
|
||||
return true;
|
||||
}
|
||||
|
||||
// Vérifie que l'élément devant afficher les données existe dans le DOM :
|
||||
set datasViewElt(elt: DOMElement)
|
||||
{
|
||||
@ -67,14 +76,15 @@ export class FreeDatas2HTML
|
||||
}
|
||||
|
||||
// Vérifie que les numéros de champs pour lesquels il y a des fonctions de classement spécifiques sont cohérents
|
||||
// ! Ne peut être testé qu'après avoir reçu les données
|
||||
set datasSortingFunctions(SortingFunctions: SortingFunctions[])
|
||||
{
|
||||
this._datasSortingFunctions=[];
|
||||
for(let i = 0; i < SortingFunctions.length; i++)
|
||||
{
|
||||
//if(FreeDatas2HTML.isNaturalNumber(SortingFunctions[i].datasFieldNb) === false) // revoir pour tester l'existence du champ
|
||||
// console.error(errors.needNaturalNumber); // -> à remplacer par un test d'existence de colonne !
|
||||
//else
|
||||
if(! this.checkFieldExist(SortingFunctions[i].datasFieldNb))
|
||||
throw new Error(errors.converterFieldNotFound);
|
||||
else
|
||||
this._datasSortingFunctions.push(SortingFunctions[i]);
|
||||
}
|
||||
}
|
||||
|
@ -35,7 +35,7 @@ export class Selector implements Selectors
|
||||
// Vérifie que le numéro de champ existe dans les données reçues
|
||||
set datasFieldNb(datasFieldNb: number|undefined)
|
||||
{
|
||||
if(datasFieldNb !== undefined && this._converter.parseMetas!.fields![datasFieldNb] === undefined)
|
||||
if(datasFieldNb === undefined || ! this._converter.checkFieldExist(Number(datasFieldNb)))
|
||||
throw new Error(errors.selectorFieldNotFound);
|
||||
else
|
||||
this._datasFieldNb=datasFieldNb;
|
||||
|
@ -35,7 +35,7 @@ export class SortingField implements SortingFields
|
||||
// Mais on peut créer un lien sur une image, un span, etc.
|
||||
set datasFieldNb(datasFieldNb: number|undefined)
|
||||
{
|
||||
if(datasFieldNb !== undefined && this._converter.parseMetas!.fields![datasFieldNb] === undefined)
|
||||
if(datasFieldNb === undefined || ! this._converter.checkFieldExist(Number(datasFieldNb)))
|
||||
throw new Error(errors.sortingFieldFieldNotFound);
|
||||
else
|
||||
this._datasFieldNb=datasFieldNb;
|
||||
|
@ -41,10 +41,32 @@ describe("Test du script central de FreeDatas2HTML", () =>
|
||||
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.", () =>
|
||||
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é
|
||||
expect(check).toBeFalse();
|
||||
converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv";
|
||||
await converter.parse();
|
||||
check=converter.checkFieldExist(-2);
|
||||
expect(check).toBeFalse();
|
||||
check=converter.checkFieldExist(1.1);
|
||||
expect(check).toBeFalse();
|
||||
check=converter.checkFieldExist(10);
|
||||
expect(check).toBeFalse();
|
||||
});
|
||||
|
||||
it("Doit retourner true si un numéro de champ a bien été trouvé dans les données.", async () =>
|
||||
{
|
||||
converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv";
|
||||
await converter.parse();
|
||||
let check=converter.checkFieldExist(0);
|
||||
expect(check).toBeTrue();
|
||||
check=converter.checkFieldExist(2);
|
||||
expect(check).toBeTrue();
|
||||
});
|
||||
|
||||
it("Doit générer une erreur si une fonction est associée à un champ n'existant pas dans les données.", async () =>
|
||||
{
|
||||
// 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)
|
||||
@ -54,6 +76,25 @@ describe("Test du script central de FreeDatas2HTML", () =>
|
||||
else
|
||||
return 0;
|
||||
};
|
||||
expect(() => { return converter.datasSortingFunctions=[{ datasFieldNb:0, sort:simpleSort }]; }).toThrowError(errors.converterFieldNotFound); // données non chargées
|
||||
converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv";
|
||||
await converter.parse();
|
||||
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 () =>
|
||||
{
|
||||
const simpleSort = (a: any, b: any) =>
|
||||
{
|
||||
if(a < b)
|
||||
return 1;
|
||||
else if(a > b)
|
||||
return -1;
|
||||
else
|
||||
return 0;
|
||||
};
|
||||
converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv";
|
||||
await converter.parse();
|
||||
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]);
|
||||
|
Loading…
Reference in New Issue
Block a user