137 lines
6.6 KiB
TypeScript
137 lines
6.6 KiB
TypeScript
import { FreeDatas2HTML, Selector, SortingField } from "../src/freeDatas2HTML";
|
|
|
|
const errors=require("../src/errors.js");
|
|
const fixtures=require("./fixtures.js");
|
|
|
|
describe("Test des champs de classement.", () =>
|
|
{
|
|
let converter: FreeDatas2HTML;
|
|
let sortingField: SortingField;
|
|
|
|
beforeEach( async () =>
|
|
{
|
|
document.body.insertAdjacentHTML("afterbegin", fixtures.datasViewEltHTML);
|
|
converter=new FreeDatas2HTML();
|
|
converter.datasViewElt={ id:"datas" };
|
|
converter.datasSourceUrl="http://localhost:9876/datas/datas1.csv";
|
|
await converter.run();
|
|
sortingField=new SortingField(converter);
|
|
});
|
|
|
|
afterEach( () =>
|
|
{
|
|
document.body.removeChild(document.getElementById("fixture"));
|
|
});
|
|
|
|
describe("Test des données reçues pour configurer le champ de classement.", () =>
|
|
{
|
|
it("Doit générer une erreur, si initialisé sans fournir la liste des champs servant à classer les données.", () =>
|
|
{
|
|
converter=new FreeDatas2HTML();
|
|
expect(() => { return new SortingField(converter); }).toThrowError(errors.sortingFieldNeedDatas);
|
|
});
|
|
|
|
it("Doit générer une erreur, si initialisé sans élements HTML textuels dans la page servant d'entêtes aux données.", () =>
|
|
{
|
|
expect(() => { return new SortingField(converter, "th.cols"); }).toThrowError(errors.sortingsFieldNotInHTML);
|
|
});
|
|
|
|
it("Doit générer une erreur, si le nombre d'éléments du DOM devant servir d'entêtes est différent du nombre de champs des données.", () =>
|
|
{
|
|
expect(() => { return new SortingField(converter, "td"); }).toThrowError(errors.sortingFieldsNbFail);
|
|
});
|
|
|
|
it("Ne doit pas générer d'erreur, si initialisé avec des données correctes.", () =>
|
|
{
|
|
expect(() => { return new SortingField(converter, "th"); }).not.toThrowError();
|
|
expect(() => { return new SortingField(converter); }).not.toThrowError();
|
|
});
|
|
|
|
it("Doit générer une erreur, si le numéro du champ de classement n'existe pas dans les données.", () =>
|
|
{
|
|
expect(() => { return sortingField.datasFieldNb=9; }).toThrowError(errors.sortingFieldFieldNotFound);
|
|
expect(() => { return sortingField.datasFieldNb=-1; }).toThrowError(errors.sortingFieldFieldNotFound);
|
|
expect(() => { return sortingField.datasFieldNb=1.1; }).toThrowError(errors.sortingFieldFieldNotFound);
|
|
});
|
|
|
|
it("Si le numéro de champ fourni est valide, il doit être accepté.", () =>
|
|
{
|
|
expect(() => { return sortingField.datasFieldNb=1; }).not.toThrowError();
|
|
sortingField.datasFieldNb=1;
|
|
expect(sortingField.datasFieldNb).toEqual(1);
|
|
});
|
|
});
|
|
|
|
describe("Création et action des liens permettant de classer les données affichées.", () =>
|
|
{
|
|
it("Doit générer un élement lien <a> avec comme ancre l'élément HTML correspondant au nom de la colonne.", () =>
|
|
{
|
|
sortingField.datasFieldNb=0;
|
|
sortingField.field2HTML();
|
|
let sortingField2=new SortingField(converter);
|
|
sortingField2.datasFieldNb=2;
|
|
sortingField2.field2HTML();
|
|
let getTH=document.getElementsByTagName("th");
|
|
expect(getTH[0].innerHTML).toEqual(fixtures.sortingColumn1HTML);
|
|
expect(getTH[2].innerHTML).toEqual(fixtures.sortingColumn2HTML);
|
|
});
|
|
|
|
});
|
|
|
|
describe("Action des colonnes de classement en corrélation avec le convertiseur.", () =>
|
|
{
|
|
it("Le 1er clic sur l'entête d'une des colonnes doit classer les données dans le sens ascendant, puis descendant et ainsi de suite.", async () =>
|
|
{
|
|
sortingField.datasFieldNb=2;
|
|
sortingField.field2HTML();
|
|
converter.datasSortingFields=[sortingField];
|
|
let getTHLink=document.querySelector("th a") as HTMLElement;
|
|
getTHLink.click();// tri ascendant
|
|
let getTR=document.querySelectorAll("tr");
|
|
let txtDatasViewsElt=getTR[1].innerHTML;
|
|
expect(txtDatasViewsElt).toEqual("<td>89</td><td>Actinium</td><td>Ac</td><td>Actinide</td><td>≤ 1</td>");
|
|
getTHLink.click();// tri descendant
|
|
getTR=document.querySelectorAll("tr");
|
|
txtDatasViewsElt=getTR[1].innerHTML;
|
|
expect(txtDatasViewsElt).toEqual("<td>40</td><td>Zirconium</td><td>Zr</td><td>Métal de transition</td><td>> 100000</td>");
|
|
getTHLink.click();// de nouveau ascendant
|
|
getTR=document.querySelectorAll("tr");
|
|
txtDatasViewsElt=getTR[1].innerHTML;
|
|
expect(txtDatasViewsElt).toEqual("<td>89</td><td>Actinium</td><td>Ac</td><td>Actinide</td><td>≤ 1</td>");
|
|
});
|
|
|
|
it("Prise en compte d'une fonction spécifique associée au champ de classement.", async () =>
|
|
{
|
|
const mySort=(a: any, b: any, order: "asc"|"desc"="asc") =>
|
|
{
|
|
const values=[ "> 100000", "> 1 et < 100 000", "≤ 1", "Traces", "Inexistant"];
|
|
if(order === "desc")
|
|
values.reverse();
|
|
if(values.indexOf(a) > values.indexOf(b))
|
|
return -1;
|
|
else if(values.indexOf(a) < values.indexOf(b))
|
|
return 1;
|
|
else
|
|
return 0;
|
|
};
|
|
converter.datasSortingFunctions=[{ datasFieldNb: 4, sort:mySort }];
|
|
sortingField.datasFieldNb=4;
|
|
sortingField.field2HTML();
|
|
converter.datasSortingFields=[sortingField];
|
|
let getTHLink=document.querySelector("th a") as HTMLElement;
|
|
getTHLink.click();// tri ascendant
|
|
let getTR=document.querySelectorAll("tr");
|
|
let txtDatasViewsElt=getTR[1].innerHTML;
|
|
expect(txtDatasViewsElt).toEqual("<td>95</td><td>Américium</td><td>Am</td><td>Actinide</td><td>Inexistant</td>");
|
|
getTHLink.click();// tri descendant
|
|
getTR=document.querySelectorAll("tr");
|
|
txtDatasViewsElt=getTR[1].innerHTML;
|
|
expect(txtDatasViewsElt).toEqual("<td>1</td><td>Hydrogène</td><td>H</td><td>Non-métal</td><td>> 100000</td>");
|
|
getTHLink.click();// de nouveau ascendant
|
|
getTR=document.querySelectorAll("tr");
|
|
txtDatasViewsElt=getTR[1].innerHTML;
|
|
expect(txtDatasViewsElt).toEqual("<td>95</td><td>Américium</td><td>Am</td><td>Actinide</td><td>Inexistant</td>");
|
|
});
|
|
});
|
|
|
|
}); |