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",
|
"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.",
|
"description": "Visualization of data from various sources (CSV, API, HTML...) with filters, classification, pagination, etc.",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
module.exports =
|
module.exports =
|
||||||
{
|
{
|
||||||
converterElementNotFound : "Aucun élément HTML n'a été trouvé ayant comme \"id\" : ",
|
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.",
|
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.",
|
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.",
|
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.",
|
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.",
|
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.",
|
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.",
|
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.",
|
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.",
|
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.",
|
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.",
|
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.",
|
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 :
|
// Vérifie que l'élément devant afficher les données existe dans le DOM :
|
||||||
set datasViewElt(elt: DOMElement)
|
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
|
// 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[])
|
set datasSortingFunctions(SortingFunctions: SortingFunctions[])
|
||||||
{
|
{
|
||||||
this._datasSortingFunctions=[];
|
this._datasSortingFunctions=[];
|
||||||
for(let i = 0; i < SortingFunctions.length; i++)
|
for(let i = 0; i < SortingFunctions.length; i++)
|
||||||
{
|
{
|
||||||
//if(FreeDatas2HTML.isNaturalNumber(SortingFunctions[i].datasFieldNb) === false) // revoir pour tester l'existence du champ
|
if(! this.checkFieldExist(SortingFunctions[i].datasFieldNb))
|
||||||
// console.error(errors.needNaturalNumber); // -> à remplacer par un test d'existence de colonne !
|
throw new Error(errors.converterFieldNotFound);
|
||||||
//else
|
else
|
||||||
this._datasSortingFunctions.push(SortingFunctions[i]);
|
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
|
// Vérifie que le numéro de champ existe dans les données reçues
|
||||||
set datasFieldNb(datasFieldNb: number|undefined)
|
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);
|
throw new Error(errors.selectorFieldNotFound);
|
||||||
else
|
else
|
||||||
this._datasFieldNb=datasFieldNb;
|
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.
|
// Mais on peut créer un lien sur une image, un span, etc.
|
||||||
set datasFieldNb(datasFieldNb: number|undefined)
|
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);
|
throw new Error(errors.sortingFieldFieldNotFound);
|
||||||
else
|
else
|
||||||
this._datasFieldNb=datasFieldNb;
|
this._datasFieldNb=datasFieldNb;
|
||||||
|
@ -41,10 +41,32 @@ describe("Test du script central de FreeDatas2HTML", () =>
|
|||||||
expect(() => { return converter.datasSourceUrl=" "; }).toThrowError(errors.parserNeedUrl);
|
expect(() => { return converter.datasSourceUrl=" "; }).toThrowError(errors.parserNeedUrl);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Fonction spécfique de classement des données :
|
it("Doit retourner false si un numéro de champ n'est pas trouvé dans les données.", async () =>
|
||||||
it("Doit me retourner la fonction associée à une colonne, de manière à ce qu'elle soit utilisable pour comparer deux valeurs.", () =>
|
{
|
||||||
|
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) =>
|
const simpleSort = (a: any, b: any) =>
|
||||||
{
|
{
|
||||||
if(a < b)
|
if(a < b)
|
||||||
@ -54,6 +76,25 @@ describe("Test du script central de FreeDatas2HTML", () =>
|
|||||||
else
|
else
|
||||||
return 0;
|
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 }];
|
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]);
|
||||||
|
@ -46,7 +46,7 @@ describe("Test des filtres de données", () =>
|
|||||||
it("Si le numéro de champ fourni est valide, il doit être accepté.", () =>
|
it("Si le numéro de champ fourni est valide, il doit être accepté.", () =>
|
||||||
{
|
{
|
||||||
expect(() => { return selector.datasFieldNb=1; }).not.toThrowError();
|
expect(() => { return selector.datasFieldNb=1; }).not.toThrowError();
|
||||||
selector.datasFieldNb=1;
|
selector.datasFieldNb=1;
|
||||||
expect(selector.datasFieldNb).toEqual(1);
|
expect(selector.datasFieldNb).toEqual(1);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user