2021-09-21 17:46:04 +02:00
import { FreeDatas2HTML , Pagination } from "../src/freeDatas2HTML" ;
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-09-21 17:46:04 +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 ( ) ;
} ) ;
it ( "Doit générer une erreur si la pagination est initialisée sans données à traiter." , ( ) = >
{
2021-10-11 16:44:20 +02:00
converter = new FreeDatas2HTML ( "CSV" ) ;
converter . parser . setRemoteSource ( { url : "http://localhost:9876/datas/datas1.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-09-21 17:46:04 +02:00
it ( "Ne doit pas générer d'erreur si initialisé correctement" , ( ) = >
{
expect ( ( ) = > { return new Pagination ( converter , { id : "pages" } ) ; } ) . not . toThrowError ( ) ;
} ) ;
it ( "Doit générer une erreur si les options de pagination sont initialisées avec un tableau de valeurs vide." , ( ) = >
{
2021-09-22 11:24:14 +02:00
expect ( ( ) = > { return pagination . options = { displayElement : { id : "paginationOptions" } , values : [ ] } ; } ) . toThrowError ( errors . paginationNeedOptionsValues ) ;
2021-09-21 17:46:04 +02:00
} ) ;
it ( "Doit générer une erreur si au moins une des options de pagination fournies n'est pas un entier positif." , ( ) = >
{
expect ( ( ) = > { return pagination . options = { displayElement : { id : "paginationOptions" } , values : [ 0 , 10 , 20 ] } ; } ) . toThrowError ( errors . needPositiveInteger ) ;
} ) ;
it ( "Ne doit pas générer d'erreur si les options de pagination fournies sont correctes." , ( ) = >
{
const test = { displayElement : { id : "paginationOptions" } , values : [ 10 , 20 , 50 ] , name : "La pagination" } ;
expect ( ( ) = > { return pagination . options = test } ) . not . toThrowError ( ) ;
expect ( pagination . options ) . toEqual ( test ) ;
} ) ;
it ( "Doit générer une erreur si la pagination par défaut n'est pas un entier positif." , ( ) = >
{
expect ( ( ) = > { return pagination . selectedValue = 0 ; } ) . toThrowError ( errors . needPositiveInteger ) ;
} ) ;
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-22 11:35:36 +02:00
expect ( ( ) = > { pagination . options = { displayElement : { id : "paginationOptions" } , values : [ 10 , 20 , 50 ] } ; return pagination . selectedValue = 15 ; } ) . toThrowError ( errors . paginationNeedByfaultValueBeInOptions ) ;
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
} ) ;
it ( "Doit accepter une pagination par défaut correcte, avec ou sans options proposées." , ( ) = >
{
expect ( ( ) = > { return pagination . selectedValue = 10 ; } ) . not . toThrowError ( ) ;
pagination . options = { displayElement : { id : "paginationOptions" } , values : [ 10 , 20 , 50 ] } ;
expect ( ( ) = > { return pagination . selectedValue = 10 ; } ) . not . toThrowError ( ) ;
} ) ;
} ) ;
describe ( "Création et action des sélecteurs liés à la pagination des données." , ( ) = >
{
beforeEach ( async ( ) = >
{
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-09-21 17:46:04 +02:00
pagination . rend2HTML ( ) ;
converter . pagination = pagination ;
await converter . run ( ) ;
} ) ;
it ( "Si des options de pagination sont fournies, doit générer un élement <select> listant les valeurs possibles." , ( ) = >
{
expect ( document . getElementById ( "paginationOptions" ) . innerHTML ) . toEqual ( fixtures . selectorForPagination ) ;
} ) ;
it ( "Si une valeur de pagination par défaut fournie, ne doit pas afficher plus de données." , ( ) = >
{
let getTR = document . getElementsByTagName ( "tr" ) ;
expect ( getTR . length ) . toEqual ( pagination . selectedValue + 1 ) ; // 1er TR sert aux titres
} ) ;
2021-09-27 17:29:58 +02:00
it ( "La manipulation du sélecteur de pagination doit appeler la fonction actualisant l'affichage." , ( ) = >
{
spyOn ( converter , "refreshView" ) ;
let selectElement = document . getElementById ( "freeDatas2HTMLPaginationSelector" ) as HTMLInputElement ;
selectElement . value = "2" ;
selectElement . dispatchEvent ( new Event ( 'change' ) ) ;
expect ( converter . refreshView ) . toHaveBeenCalledTimes ( 1 ) ;
selectElement . value = "0" ;
selectElement . dispatchEvent ( new Event ( 'change' ) ) ;
expect ( converter . refreshView ) . toHaveBeenCalledTimes ( 2 ) ;
} ) ;
2021-09-21 17:46:04 +02:00
it ( "Si une des options de pagination fournies est sélectionnée, doit afficher le nombre de résultats correspondants." , ( ) = >
{
let selectElement = document . getElementById ( "freeDatas2HTMLPaginationSelector" ) as HTMLInputElement ;
selectElement . value = "2" ; // = 20 éléments / page
selectElement . dispatchEvent ( new Event ( 'change' ) ) ;
let getTR = document . getElementsByTagName ( "tr" ) ;
expect ( getTR . length ) . toEqual ( 21 ) ;
selectElement . value = "3" ; // = 50 éléments / page
selectElement . dispatchEvent ( new Event ( 'change' ) ) ;
getTR = document . getElementsByTagName ( "tr" ) ;
expect ( getTR . length ) . toEqual ( 51 ) ;
selectElement . value = "0" ; // = pas de Pagination, on affiche les 118 lignes du fichier
selectElement . dispatchEvent ( new Event ( 'change' ) ) ;
getTR = document . getElementsByTagName ( "tr" ) ;
expect ( getTR . length ) . toEqual ( 119 ) ;
} ) ;
it ( "Si il y a plus de données que le nombre de lignes autorisées par page, un <select> listant les pages doit être affiché." , ( ) = >
{
let selectElement = document . getElementById ( "pages" ) . innerHTML ;
expect ( selectElement ) . toEqual ( fixtures . selectorForPages ) ;
} ) ;
2021-09-27 17:29:58 +02:00
it ( "La manipulation du sélecteur de pages doit appeler la fonction actualisant l'affichage." , ( ) = >
{
spyOn ( converter , "refreshView" ) ;
let selectElement = document . getElementById ( "freeDatas2HTMLPagesSelector" ) as HTMLInputElement ;
selectElement . value = "2" ;
selectElement . dispatchEvent ( new Event ( 'change' ) ) ;
expect ( converter . refreshView ) . toHaveBeenCalledTimes ( 1 ) ;
selectElement . value = "0" ;
selectElement . dispatchEvent ( new Event ( 'change' ) ) ;
expect ( converter . refreshView ) . toHaveBeenCalledTimes ( 2 ) ;
} ) ;
2021-09-21 17:46:04 +02:00
it ( "Si l'utilisateur sélectionne une des pages proposées, l'affichage des résultats doit s'adapter en prenant en compte la pagination sélectionnée." , ( ) = >
{
let selectElement = document . getElementById ( "freeDatas2HTMLPaginationSelector" ) as HTMLInputElement ;
selectElement . value = "3" ; // = 50 éléments / page
selectElement . dispatchEvent ( new Event ( 'change' ) ) ;
selectElement = document . getElementById ( "freeDatas2HTMLPagesSelector" ) as HTMLInputElement ;
selectElement . value = "2" ;
selectElement . dispatchEvent ( new Event ( 'change' ) ) ;
let getTR = document . getElementsByTagName ( "tr" ) ;
expect ( getTR [ 1 ] . innerHTML ) . toEqual ( fixtures . firstLineForPageSelection1 ) ;
expect ( getTR [ 50 ] . innerHTML ) . toEqual ( fixtures . lastLineForPageSelection1 ) ;
selectElement . value = "3" ; // troisième page = incomplète (18 enregistrements)
selectElement . dispatchEvent ( new Event ( 'change' ) ) ;
getTR = document . getElementsByTagName ( "tr" ) ;
expect ( getTR [ 1 ] . innerHTML ) . toEqual ( fixtures . firstLineForPageSelection2 ) ;
expect ( getTR [ 18 ] . innerHTML ) . toEqual ( fixtures . lastLineForPageSelection2 ) ;
expect ( getTR [ 50 ] ) . toBeUndefined ( ) ;
} ) ;
} ) ;
} ) ;