2021-10-25 10:53:54 +02:00
|
|
|
import { FreeDatas2HTML, SortingField } from "../src/FreeDatas2HTML";
|
2021-09-20 18:01:09 +02:00
|
|
|
const errors=require("../src/errors.js");
|
|
|
|
const fixtures=require("./fixtures.js");
|
|
|
|
|
2021-10-07 12:43:29 +02:00
|
|
|
describe("Test des champs de classement.", () =>
|
2021-09-20 18:01:09 +02:00
|
|
|
{
|
|
|
|
let converter: FreeDatas2HTML;
|
|
|
|
let sortingField: SortingField;
|
|
|
|
|
|
|
|
beforeEach( async () =>
|
|
|
|
{
|
|
|
|
document.body.insertAdjacentHTML("afterbegin", fixtures.datasViewEltHTML);
|
2021-10-11 16:44:20 +02:00
|
|
|
converter=new FreeDatas2HTML("CSV");
|
|
|
|
converter.parser.setRemoteSource({ url:"http://localhost:9876/datas/datas1.csv" });
|
2021-09-20 18:01:09 +02:00
|
|
|
converter.datasViewElt={ id:"datas" };
|
2021-10-07 12:43:29 +02:00
|
|
|
await converter.run();
|
|
|
|
const fields=document.querySelectorAll("th");
|
2021-09-20 18:01:09 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
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.", () =>
|
|
|
|
{
|
2021-10-11 16:44:20 +02:00
|
|
|
converter=new FreeDatas2HTML("CSV");
|
2021-10-19 13:05:27 +02:00
|
|
|
// Pas lancé converter.run() donc les données n'ont pas été parsées :
|
2021-09-22 17:36:11 +02:00
|
|
|
expect(() => { return new SortingField(converter, 0); }).toThrowError(errors.sortingFieldNeedDatas);
|
2021-09-20 18:01:09 +02:00
|
|
|
});
|
|
|
|
|
2021-10-07 12:43:29 +02:00
|
|
|
it("Doit générer une erreur, si initialisé avec un numéro du champ de classement n'existant pas dans les données.", () =>
|
|
|
|
{
|
2021-10-19 13:05:27 +02:00
|
|
|
expect(() => { return new SortingField(converter, 9); }).toThrowError(errors.sortingFieldNotFound);
|
|
|
|
expect(() => { return new SortingField(converter, -1); }).toThrowError(errors.sortingFieldNotFound);
|
|
|
|
expect(() => { return new SortingField(converter, 1.1); }).toThrowError(errors.sortingFieldNotFound);
|
2021-10-07 12:43:29 +02:00
|
|
|
});
|
|
|
|
|
2021-09-20 18:01:09 +02:00
|
|
|
it("Doit générer une erreur, si initialisé sans élements HTML textuels dans la page servant d'entêtes aux données.", () =>
|
|
|
|
{
|
2021-09-22 17:36:11 +02:00
|
|
|
expect(() => { return new SortingField(converter, 0, "th.cols"); }).toThrowError(errors.sortingsFieldNotInHTML);
|
2021-09-20 18:01:09 +02:00
|
|
|
});
|
|
|
|
|
2021-10-19 13:05:27 +02:00
|
|
|
it("Doit générer une erreur, si le nombre d'éléments trouvés dans le DOM pour les entêtes est différent du nombre de champs des données.", () =>
|
2021-09-20 18:01:09 +02:00
|
|
|
{
|
2021-09-22 17:36:11 +02:00
|
|
|
expect(() => { return new SortingField(converter, 0, "td"); }).toThrowError(errors.sortingFieldsNbFail);
|
2021-09-20 18:01:09 +02:00
|
|
|
});
|
|
|
|
|
2021-10-07 12:43:29 +02:00
|
|
|
it("Si tous les paramètres sont ok, ils doivent être acceptés.", () =>
|
2021-09-20 18:01:09 +02:00
|
|
|
{
|
2021-09-22 17:36:11 +02:00
|
|
|
const sortingField=new SortingField(converter, 1, "th");
|
2021-09-20 18:01:09 +02:00
|
|
|
expect(sortingField.datasFieldNb).toEqual(1);
|
2021-09-22 17:36:11 +02:00
|
|
|
expect(sortingField.fieldsDOMSelector).toEqual("th");
|
2021-09-20 18:01:09 +02:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2021-10-19 13:05:27 +02:00
|
|
|
describe("Création et action des liens permettant de classer les données affichées.", () =>
|
|
|
|
{
|
2021-09-20 18:01:09 +02:00
|
|
|
it("Doit générer un élement lien <a> avec comme ancre l'élément HTML correspondant au nom de la colonne.", () =>
|
|
|
|
{
|
2021-09-22 17:36:11 +02:00
|
|
|
let sortingField=new SortingField(converter, 0);
|
2021-09-20 18:01:09 +02:00
|
|
|
sortingField.field2HTML();
|
2021-09-22 17:36:11 +02:00
|
|
|
let sortingField2=new SortingField(converter, 2);
|
2021-09-20 18:01:09 +02:00
|
|
|
sortingField2.field2HTML();
|
|
|
|
let getTH=document.getElementsByTagName("th");
|
|
|
|
expect(getTH[0].innerHTML).toEqual(fixtures.sortingColumn1HTML);
|
|
|
|
expect(getTH[2].innerHTML).toEqual(fixtures.sortingColumn2HTML);
|
|
|
|
});
|
|
|
|
|
2021-10-19 13:05:27 +02:00
|
|
|
it("Lorsqu'ils sont cliqués, doivent transmettre l'information au convertisseur + lui demander d'actualiser l'affichage.", () =>
|
2021-09-20 18:01:09 +02:00
|
|
|
{
|
2021-10-19 13:05:27 +02:00
|
|
|
const sortingField1=new SortingField(converter, 2);
|
|
|
|
sortingField1.field2HTML();
|
|
|
|
const sortingField2=new SortingField(converter, 3);
|
|
|
|
sortingField2.field2HTML();
|
|
|
|
converter.datasSortingFields=[sortingField1, sortingField2];
|
|
|
|
|
|
|
|
let getTHLinks=document.querySelectorAll("th a") as NodeListOf<HTMLElement>;
|
|
|
|
spyOn(converter, "refreshView");
|
|
|
|
getTHLinks[0].click();// tri ascendant 1er champ
|
|
|
|
expect(sortingField1.converter.datasSortedField).toEqual(sortingField1);
|
|
|
|
expect(sortingField1.converter.datasSortedField.order).toEqual("asc");
|
|
|
|
expect(converter.refreshView).toHaveBeenCalledTimes(1);
|
|
|
|
|
|
|
|
getTHLinks[1].click();// tri ascendant mais sur le second champ
|
|
|
|
expect(sortingField2.converter.datasSortedField).toEqual(sortingField2);
|
|
|
|
expect(sortingField2.converter.datasSortedField.order).toEqual("asc");
|
|
|
|
expect(converter.refreshView).toHaveBeenCalledTimes(2);
|
|
|
|
|
|
|
|
getTHLinks[0].click();// tri descendant sur le 1er champ
|
|
|
|
expect(sortingField1.converter.datasSortedField).toEqual(sortingField1);
|
|
|
|
expect(sortingField1.converter.datasSortedField.order).toEqual("desc");
|
|
|
|
expect(converter.refreshView).toHaveBeenCalledTimes(3);
|
|
|
|
|
|
|
|
getTHLinks[0].click();// de nouveau ascendant
|
|
|
|
expect(sortingField1.converter.datasSortedField).toEqual(sortingField1);
|
|
|
|
expect(sortingField1.converter.datasSortedField.order).toEqual("asc");
|
|
|
|
expect(converter.refreshView).toHaveBeenCalledTimes(4);
|
2021-09-20 18:01:09 +02:00
|
|
|
});
|
2021-10-19 13:05:27 +02:00
|
|
|
});
|
2021-09-20 18:01:09 +02:00
|
|
|
});
|