2021-10-25 10:53:54 +02:00
import { FreeDatas2HTML , Pagination } from "../src/FreeDatas2HTML" ;
2021-09-21 17:46:04 +02:00
const errors = require ( "../src/errors.js" ) ;
const fixtures = require ( "./fixtures.js" ) ;
2021-10-07 12:43:29 +02:00
describe ( "Test de la pagination." , ( ) = >
2021-09-21 17:46:04 +02:00
{
let converter : FreeDatas2HTML ;
let pagination : Pagination ;
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-10-20 12:36:09 +02:00
converter . datasViewElt = { id : "datas" } ;
2021-09-30 12:52:33 +02:00
await converter . run ( ) ;
2021-09-21 17:46:04 +02:00
pagination = new Pagination ( converter , { id : "pages" } , "Page à afficher :" ) ;
} ) ;
afterEach ( ( ) = >
{
document . body . removeChild ( document . getElementById ( "fixture" ) ) ;
} ) ;
describe ( "Test des options de pagination." , ( ) = >
{
it ( "Doit retourner un booléen indiquant si un nombre est un entier positif ou non." , ( ) = >
{
expect ( Pagination . isPositiveInteger ( - 1 ) ) . toBeFalse ( ) ;
expect ( Pagination . isPositiveInteger ( 1.25 ) ) . toBeFalse ( ) ;
expect ( Pagination . isPositiveInteger ( 0 ) ) . toBeFalse ( ) ;
expect ( Pagination . isPositiveInteger ( 1 ) ) . toBeTrue ( ) ;
} ) ;
2021-10-20 12:36:09 +02:00
it ( "Doit générer une erreur si la pagination est initialisée sans données à traiter." , ( ) = >
2021-09-21 17:46:04 +02:00
{
2021-10-11 16:44:20 +02:00
converter = new FreeDatas2HTML ( "CSV" ) ;
2021-09-21 17:46:04 +02:00
expect ( ( ) = > { return new Pagination ( converter , { id : "pages" } ) ; } ) . toThrowError ( errors . paginationNeedDatas ) ;
} ) ;
2021-09-22 12:29:43 +02:00
2021-10-20 12:36:09 +02:00
it ( "Ne doit pas générer d'erreur si initialisé correctement" , ( ) = >
2021-09-21 17:46:04 +02:00
{
expect ( ( ) = > { return new Pagination ( converter , { id : "pages" } ) ; } ) . not . toThrowError ( ) ;
} ) ;
2021-10-20 12:36:09 +02:00
it ( "Doit générer une erreur si la pagination par défaut n'est pas un entier positif." , ( ) = >
2021-09-21 17:46:04 +02:00
{
2021-10-20 12:36:09 +02:00
expect ( ( ) = > { return pagination . selectedValue = 0 ; } ) . toThrowError ( errors . needPositiveInteger ) ;
2021-09-21 17:46:04 +02:00
} ) ;
2021-10-20 12:36:09 +02:00
it ( "Doit accepter toute valeur de pagination par défaut valide, y compris \"undefined\"." , ( ) = >
2021-09-21 17:46:04 +02:00
{
2021-10-20 12:36:09 +02:00
expect ( ( ) = > { return pagination . selectedValue = 10 ; } ) . not . toThrowError ( ) ;
expect ( pagination . selectedValue ) . toEqual ( 10 ) ;
expect ( ( ) = > { return pagination . selectedValue = undefined ; } ) . not . toThrowError ( ) ;
expect ( pagination . selectedValue ) . toBeUndefined ( ) ;
2021-09-21 17:46:04 +02:00
} ) ;
2021-10-20 12:36:09 +02:00
it ( "Doit générer une erreur si les options de pagination sont initialisées avec un tableau de valeurs comptant moins de 2 valeurs distinctes." , ( ) = >
2021-09-21 17:46:04 +02:00
{
2021-10-20 12:36:09 +02:00
expect ( ( ) = > { return pagination . options = { displayElement : { id : "paginationOptions" } , values : [ ] } ; } ) . toThrowError ( errors . paginationNeedOptionsValues ) ;
expect ( ( ) = > { return pagination . options = { displayElement : { id : "paginationOptions" } , values : [ 10 ] } ; } ) . toThrowError ( errors . paginationNeedOptionsValues ) ;
expect ( ( ) = > { return pagination . options = { displayElement : { id : "paginationOptions" } , values : [ 10 , 10 ] } ; } ) . toThrowError ( errors . paginationNeedOptionsValues ) ;
2021-09-21 17:46:04 +02:00
} ) ;
2021-10-20 12:36:09 +02:00
it ( "Doit générer une erreur si au moins une des options de pagination fournies n'est pas un entier positif." , ( ) = >
2021-09-21 17:46:04 +02:00
{
2021-10-20 12:36:09 +02:00
expect ( ( ) = > { return pagination . options = { displayElement : { id : "paginationOptions" } , values : [ 0 , 10 , 20 ] } ; } ) . toThrowError ( errors . needPositiveInteger ) ;
} ) ;
it ( "Doit accepter toutes les options de pagination valides." , ( ) = >
{
const domElement = document . getElementById ( "paginationOptions" ) ;
expect ( ( ) = > { return pagination . options = { displayElement : { id : "paginationOptions" } , values : [ 1 , 2 ] } ; } ) . not . toThrowError ( ) ;
expect ( pagination . options ) . toEqual ( { displayElement : { id : "paginationOptions" , eltDOM : domElement } , values : [ 1 , 2 ] , name : "Pagination" } ) ;
// Doublons ignorés mais anomalie non bloquante :
expect ( ( ) = > { return pagination . options = { displayElement : { id : "paginationOptions" } , values : [ 10 , 20 , 20 ] } ; } ) . not . toThrowError ( ) ;
expect ( pagination . options ) . toEqual ( { displayElement : { id : "paginationOptions" , eltDOM : domElement } , values : [ 10 , 20 ] , name : "Pagination" } ) ;
// L'ordre des valeurs proposées est libre :
expect ( ( ) = > { return pagination . options = { displayElement : { id : "paginationOptions" } , values : [ 100 , 20 , 50 , 10 ] } ; } ) . not . toThrowError ( ) ;
expect ( pagination . options ) . toEqual ( { displayElement : { id : "paginationOptions" , eltDOM : domElement } , values : [ 100 , 20 , 50 , 10 ] , name : "Pagination" } ) ;
// Undefined accepté :
expect ( ( ) = > { return pagination . options = undefined ; } ) . not . toThrowError ( ) ;
expect ( pagination . options ) . toBeUndefined ( ) ;
// Un libellé pour l'affichage peut aussi être fourni
expect ( ( ) = > { return pagination . options = { displayElement : { id : "paginationOptions" } , values : [ 10 , 50 ] , name : "La pagination" } } ) . not . toThrowError ( ) ;
expect ( pagination . options ) . toEqual ( { displayElement : { id : "paginationOptions" , eltDOM : domElement } , values : [ 10 , 50 ] , name : "La pagination" } ) ;
2021-09-21 17:46:04 +02:00
} ) ;
2021-10-20 12:36:09 +02:00
it ( "Doit générer une erreur si la pagination par défaut ne fait pas partie des valeurs proposées en option." , ( ) = >
2021-09-21 17:46:04 +02:00
{
2021-09-22 11:35:36 +02:00
expect ( ( ) = > { pagination . options = { displayElement : { id : "paginationOptions" } , values : [ 10 , 20 , 50 ] } ; return pagination . selectedValue = 15 ; } ) . toThrowError ( errors . paginationNeedByfaultValueBeInOptions ) ;
2021-10-20 12:36:09 +02:00
// Idem dans l'autre sens :
2021-09-22 11:35:36 +02:00
expect ( ( ) = > { pagination . selectedValue = 15 ; return pagination . options = { displayElement : { id : "paginationOptions" } , values : [ 10 , 20 , 50 ] } ; } ) . toThrowError ( errors . paginationNeedByfaultValueBeInOptions ) ;
2021-09-21 17:46:04 +02:00
} ) ;
2021-10-20 12:36:09 +02:00
it ( "Doit accepter des valeurs cohérentes pour les options et la valeur par défaut." , ( ) = >
2021-09-21 17:46:04 +02:00
{
2021-10-20 12:36:09 +02:00
expect ( ( ) = > { pagination . options = { displayElement : { id : "paginationOptions" } , values : [ 20 , 50 ] } ; return pagination . selectedValue = 50 ; } ) . not . toThrowError ( ) ;
// Idem dans l'autre sens :
expect ( ( ) = > { pagination . selectedValue = 20 ; return pagination . options = { displayElement : { id : "paginationOptions" } , values : [ 10 , 20 ] } ; } ) . not . toThrowError ( ) ;
2021-09-21 17:46:04 +02:00
} ) ;
} ) ;
describe ( "Création et action des sélecteurs liés à la pagination des données." , ( ) = >
{
2021-10-20 12:36:09 +02:00
beforeEach ( ( ) = >
2021-09-21 17:46:04 +02:00
{
pagination . options = { displayElement : { id : "paginationOptions" } , values : [ 10 , 20 , 50 , 500 ] , name : "Choix de pagination :" } ;
2021-09-27 17:29:58 +02:00
pagination . selectedValue = 10 ;
2021-10-20 12:36:09 +02:00
pagination . options2HTML ( ) ;
2021-09-21 17:46:04 +02:00
converter . pagination = pagination ;
} ) ;
2021-10-20 12:36:09 +02:00
it ( "Doit générer une erreur, si lancé sans options de pagination." , ( ) = >
{
pagination . options = undefined ;
expect ( ( ) = > { return pagination . options2HTML ( ) ; } ) . toThrowError ( errors . pagination2HTMLFail ) ;
2021-09-21 17:46:04 +02:00
} ) ;
2021-10-20 12:36:09 +02:00
it ( "Si des options de pagination sont fournies, doit générer un élement <select> listant les valeurs possibles." , ( ) = >
2021-09-21 17:46:04 +02:00
{
2021-10-20 12:36:09 +02:00
pagination . options2HTML ( ) ;
expect ( document . getElementById ( "paginationOptions" ) . innerHTML ) . toEqual ( fixtures . selectorForPagination ) ;
2021-09-21 17:46:04 +02:00
} ) ;
2021-10-20 12:36:09 +02:00
it ( "Si une valeur de pagination par défaut est connue, elle doit être sélectionnée dans la liste." , ( ) = >
{
pagination . selectedValue = 20 ;
pagination . options2HTML ( ) ;
const selectElement = document . getElementById ( "freeDatas2HTMLPaginationSelector" ) as HTMLInputElement ;
expect ( selectElement . value ) . toEqual ( "2" ) ;
} ) ;
it ( "La manipulation du sélecteur de pagination doit enregistrer la valeur sélectionnée et appeler la fonction actualisant l'affichage." , ( ) = >
2021-09-27 17:29:58 +02:00
{
spyOn ( converter , "refreshView" ) ;
2021-10-20 12:36:09 +02:00
const selectElement = document . getElementById ( "freeDatas2HTMLPaginationSelector" ) as HTMLInputElement ;
selectElement . value = "2" ;
2021-09-27 17:29:58 +02:00
selectElement . dispatchEvent ( new Event ( 'change' ) ) ;
2021-10-20 12:36:09 +02:00
expect ( pagination . selectedValue ) . toEqual ( 20 ) ;
2021-09-27 17:29:58 +02:00
expect ( converter . refreshView ) . toHaveBeenCalledTimes ( 1 ) ;
selectElement . value = "0" ;
selectElement . dispatchEvent ( new Event ( 'change' ) ) ;
2021-10-20 12:36:09 +02:00
expect ( pagination . selectedValue ) . toBeUndefined ( ) ;
2021-09-27 17:29:58 +02:00
expect ( converter . refreshView ) . toHaveBeenCalledTimes ( 2 ) ;
} ) ;
2021-10-20 12:36:09 +02:00
it ( "S'il n'y a pas de pagination définie, le sélecteur de pages ne doit pas être proposé." , ( ) = >
2021-09-21 17:46:04 +02:00
{
2021-10-20 12:36:09 +02:00
pagination . selectedValue = undefined ;
2021-10-26 18:02:43 +02:00
pagination . pages2HTML ( ) ;
2021-10-20 12:36:09 +02:00
const selectElement = document . getElementById ( "pages" ) . innerHTML ;
expect ( selectElement ) . toEqual ( "" ) ;
} ) ;
it ( "S'il n'y pa plus de données que le nombre de lignes par page, le sélecteur de pages ne doit pas être proposé." , ( ) = >
{
2021-10-26 18:02:43 +02:00
pagination . selectedValue = 500 ;
pagination . pages2HTML ( ) ;
2021-10-20 12:36:09 +02:00
const selectElement = document . getElementById ( "pages" ) . innerHTML ;
expect ( selectElement ) . toEqual ( "" ) ;
2021-09-21 17:46:04 +02:00
} ) ;
2021-10-20 12:36:09 +02:00
2021-10-26 18:02:43 +02:00
it ( "S'il y a plus de données que le nombre de lignes autorisées par page, un <select> listant les pages doit être affiché." , ( ) = >
2021-09-21 17:46:04 +02:00
{
2021-10-26 18:02:43 +02:00
pagination . pages2HTML ( ) ;
const selectElement = document . getElementById ( "pages" ) . innerHTML ;
2021-10-20 12:36:09 +02:00
expect ( selectElement ) . toEqual ( fixtures . selectorForManyPages ) ;
2021-09-21 17:46:04 +02:00
} ) ;
2022-07-15 13:27:28 +02:00
/ * i t ( " A p r è s c h a q u e a c t u a l i s a t i o n d e l a l i s t e d e p a g e s , l a v a l e u r s é l e c t i o n n é e e s t r e m i s e à 0 . " , ( ) = >
2021-09-21 17:46:04 +02:00
{
2021-10-26 18:02:43 +02:00
pagination . pages2HTML ( ) ;
2021-10-20 12:55:23 +02:00
let selectElement = document . getElementById ( "freeDatas2HTMLPagesSelector" ) as HTMLInputElement ;
expect ( pagination . pages . selectedValue ) . toEqual ( 1 ) ;
pagination . pages . selectedValue = 2 ;
2021-10-26 18:02:43 +02:00
pagination . pages2HTML ( ) ;
2021-10-20 12:55:23 +02:00
selectElement = document . getElementById ( "freeDatas2HTMLPagesSelector" ) as HTMLInputElement ;
expect ( pagination . pages . selectedValue ) . toEqual ( 1 ) ;
2022-07-15 13:27:28 +02:00
} ) ; * /
2021-10-20 12:36:09 +02:00
2022-07-14 14:13:24 +02:00
it ( "La manipulation du sélecteur de pages doit enregistrer la valeur sélectionnée et appeler la fonction actualisant l'affichage, tout en gardant la page choisie présélectionnée." , ( ) = >
2021-10-20 12:36:09 +02:00
{
2021-10-26 18:02:43 +02:00
pagination . pages2HTML ( ) ;
2021-10-20 12:36:09 +02:00
spyOn ( converter , "refreshView" ) ;
const selectElement = document . getElementById ( "freeDatas2HTMLPagesSelector" ) as HTMLInputElement ;
selectElement . value = "4" ;
2021-09-21 17:46:04 +02:00
selectElement . dispatchEvent ( new Event ( 'change' ) ) ;
2021-10-20 12:36:09 +02:00
expect ( pagination . pages . selectedValue ) . toEqual ( 4 ) ;
expect ( converter . refreshView ) . toHaveBeenCalledTimes ( 1 ) ;
2022-07-14 14:13:24 +02:00
let selectElementAfter = document . getElementById ( "freeDatas2HTMLPagesSelector" ) as HTMLInputElement ;
expect ( selectElementAfter . value ) . toEqual ( "4" ) ;
2021-10-20 12:36:09 +02:00
selectElement . value = "1" ;
2021-09-21 17:46:04 +02:00
selectElement . dispatchEvent ( new Event ( 'change' ) ) ;
2021-10-20 12:36:09 +02:00
expect ( pagination . pages . selectedValue ) . toEqual ( 1 ) ;
expect ( converter . refreshView ) . toHaveBeenCalledTimes ( 2 ) ;
2022-07-14 14:13:24 +02:00
selectElementAfter = document . getElementById ( "freeDatas2HTMLPagesSelector" ) as HTMLInputElement ;
expect ( selectElementAfter . value ) . toEqual ( "1" ) ;
2021-09-21 17:46:04 +02:00
} ) ;
2022-07-14 14:13:24 +02:00
it ( "Tout actualisation de l'affichage non généré par le choix d'une page, doit supprimer ce choix." , ( ) = >
{
pagination . pages2HTML ( ) ;
const selectElement = document . getElementById ( "freeDatas2HTMLPagesSelector" ) as HTMLInputElement ;
selectElement . value = "4" ;
selectElement . dispatchEvent ( new Event ( 'change' ) ) ;
converter . refreshView ( ) ;
const selectElementAfter = document . getElementById ( "freeDatas2HTMLPagesSelector" ) as HTMLInputElement ;
expect ( selectElementAfter . value ) . toEqual ( "1" ) ;
} ) ;
2021-09-21 17:46:04 +02:00
} ) ;
} ) ;