2021-09-17 18:02:45 +02:00
import { FreeDatas2HTML , Selector } from "../src/freeDatas2HTML" ;
const errors = require ( "../src/errors.js" ) ;
const fixtures = require ( "./fixtures.js" ) ;
describe ( "Test des filtres de données" , ( ) = >
{
let converter : FreeDatas2HTML ;
let selector : Selector ;
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 . parse ( ) ;
} ) ;
afterEach ( ( ) = >
{
document . body . removeChild ( document . getElementById ( "fixture" ) ) ;
} ) ;
describe ( "Test des données reçues pour configurer un filtre." , ( ) = >
{
it ( "Doit générer une erreur, si initialisé sans fournir la liste des champs servant à classer les données." , ( ) = >
{
converter = new FreeDatas2HTML ( ) ;
2021-09-22 17:12:00 +02:00
expect ( ( ) = > { return new Selector ( converter , 0 , { id : "selector1" } ) ; } ) . toThrowError ( errors . selectorNeedDatas ) ;
2021-09-17 18:02:45 +02:00
} ) ;
2021-09-20 11:09:30 +02:00
it ( "Doit générer une erreur, si le numéro de champ fourni n'existe pas dans les données." , ( ) = >
2021-09-17 18:02:45 +02:00
{
2021-09-22 17:12:00 +02:00
expect ( ( ) = > { return new Selector ( converter , 9 , { id : "selector1" } ) ; } ) . toThrowError ( errors . selectorFieldNotFound ) ;
expect ( ( ) = > { return new Selector ( converter , - 1 , { id : "selector1" } ) ; } ) . toThrowError ( errors . selectorFieldNotFound ) ;
expect ( ( ) = > { return new Selector ( converter , 1.1 , { id : "selector1" } ) ; } ) . toThrowError ( errors . selectorFieldNotFound ) ;
2021-09-17 18:02:45 +02:00
} ) ;
2021-09-22 17:12:00 +02:00
2021-09-17 18:02:45 +02:00
it ( "Si un séparateur vide est fourni pour un filtre, il doit être ignoré." , ( ) = >
2021-09-22 17:12:00 +02:00
{
selector = new Selector ( converter , 0 , { id : "selector1" } ) ;
2021-09-17 18:02:45 +02:00
selector . separator = "" ;
expect ( selector . separator ) . toBeUndefined ( ) ;
} ) ;
2021-09-22 17:12:00 +02:00
it ( "Si toutes les paramètres sont correctes, ils doivent être acceptés." , ( ) = >
{
const elt = document . getElementById ( "selector1" ) ;
const selector = new Selector ( converter , 2 , { id : "selector1" } ) ;
selector . separator = "," ;
expect ( selector . datasFieldNb ) . toEqual ( 2 ) ;
expect ( selector . datasViewElt ) . toEqual ( { id : "selector1" , eltDOM :elt } ) ;
expect ( selector . separator ) . toEqual ( "," ) ;
} ) ;
2021-09-17 18:02:45 +02:00
} ) ;
describe ( "Création et action des sélecteurs permettant de filter les données affichées." , ( ) = >
{
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 . parse ( ) ;
2021-09-22 17:12:00 +02:00
selector = new Selector ( converter , 3 , { id : "selector1" } ) ;
2021-09-17 18:02:45 +02:00
} ) ;
it ( "Doit générer un élement <select> listant les valeurs distinctes du champ spécifié, classées dans le bon ordre." , ( ) = >
{
selector . selector2HTML ( ) ;
expect ( document . getElementById ( "selector1" ) . innerHTML ) . toEqual ( fixtures . selector1HTML ) ;
2021-09-22 17:12:00 +02:00
selector = new Selector ( converter , 4 , { id : "selector2" } ) ;
2021-09-17 18:02:45 +02:00
selector . selector2HTML ( ) ;
expect ( document . getElementById ( "selector2" ) . innerHTML ) . toEqual ( fixtures . selector2HTML ) ;
} ) ;
it ( "Si des valeurs vides sont présentes dans une champ utilisé pour un sélecteur, elles doivent être ignorées." , async ( ) = >
{
converter . datasSourceUrl = "http://localhost:9876/datas/datas1-emtyinfield.csv" ;
await converter . parse ( ) ;
selector . selector2HTML ( ) ;
expect ( document . getElementById ( "selector1" ) . innerHTML ) . toEqual ( fixtures . selector1HTML ) ;
} ) ;
it ( "Si un séparateur est fourni, les valeurs distinctes extraites de ce champ doivent le prendre en compte." , async ( ) = >
{
converter . datasSourceUrl = "http://localhost:9876/datas/datas1+tagsfield.csv" ;
await converter . parse ( ) ;
2021-09-22 17:12:00 +02:00
selector = new Selector ( converter , 5 , { id : "selector1" } ) ;
2021-09-17 18:02:45 +02:00
selector . separator = "|" ;
selector . selector2HTML ( ) ;
expect ( document . getElementById ( "selector1" ) . innerHTML ) . toEqual ( fixtures . selector1HTMLWithSeparator ) ;
} ) ;
it ( "Si une fonction spécifique est fournie pour le champ utilisé pour ce filtre, elle doit être prise en compte." , ( ) = >
{
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 } ] ;
2021-09-22 17:12:00 +02:00
selector = new Selector ( converter , 4 , { id : "selector1" } ) ;
2021-09-17 18:02:45 +02:00
selector . separator = "|" ;
selector . selector2HTML ( ) ;
expect ( document . getElementById ( "selector1" ) . innerHTML ) . toEqual ( fixtures . selector1HTMLWithFunction ) ;
} ) ;
2021-09-20 11:09:30 +02:00
it ( "Doit générer une erreur si une donnée est testée pour un sélecteur non correctement initialisé." , ( ) = >
{
let data2Test = {
"Z (numéro atomique)" : "53" ,
"Élément" : "Iode" ,
"Symbole" : "I" ,
"Famille" : "Halogène" ,
"Abondance des éléments dans la croûte terrestre (μg/k)" : "> 1 et < 100 000" ,
} ;
expect ( ( ) = > { selector . dataIsOk ( data2Test ) ; } ) . toThrowError ( errors . selectorCheckIsOkFail ) ;
} ) ;
it ( "Doit retourner false, si la donnée testée ne possède pas le champ sur lequel les données sont filtrées." , ( ) = >
2021-09-17 18:02:45 +02:00
{
selector . selector2HTML ( ) ;
let selectElement = document . getElementById ( "freeDatas2HTML_selector1" ) as HTMLInputElement ;
selectElement . value = "4" ;
2021-09-22 17:12:00 +02:00
let data2Test = { // le champ à filtrer ("Famille") est manquant
2021-09-17 18:02:45 +02:00
"Z (numéro atomique)" : "53" ,
"Élément" : "Iode" ,
"Symbole" : "I" ,
"Abondance des éléments dans la croûte terrestre (μg/k)" : "> 1 et < 100 000" ,
} ;
expect ( selector . dataIsOk ( data2Test ) ) . toBeFalse ( ) ;
2021-09-20 11:09:30 +02:00
} ) ;
it ( "Doit retourner false, si une donnée testée ne correspond pas à la valeur sélectionnée pour le filtre." , ( ) = >
{
selector . selector2HTML ( ) ;
let selectElement = document . getElementById ( "freeDatas2HTML_selector1" ) as HTMLInputElement ;
selectElement . value = "4" ;
let data2Test = {
2021-09-17 18:02:45 +02:00
"Z (numéro atomique)" : "53" ,
"Élément" : "Iode" ,
"Symbole" : "I" ,
2021-09-20 11:09:30 +02:00
"Famille" : "Halogene" , // manque un accent :)
2021-09-17 18:02:45 +02:00
"Abondance des éléments dans la croûte terrestre (μg/k)" : "> 1 et < 100 000" ,
} ;
2021-09-20 11:09:30 +02:00
expect ( selector . dataIsOk ( data2Test ) ) . toBeFalse ( ) ;
2021-09-17 18:02:45 +02:00
} ) ;
2021-09-20 11:09:30 +02:00
it ( "Doit retourner true, si une donnée testée correspond pas à la valeur sélectionnée pour ce filtre." , ( ) = >
2021-09-17 18:02:45 +02:00
{
selector . selector2HTML ( ) ;
let selectElement = document . getElementById ( "freeDatas2HTML_selector1" ) as HTMLInputElement ;
selectElement . value = "4" ;
let data2Test = {
"Z (numéro atomique)" : "53" ,
"Élément" : "Iode" ,
"Symbole" : "I" ,
"Famille" : "Halogène" ,
"Abondance des éléments dans la croûte terrestre (μg/k)" : "> 1 et < 100 000" ,
} ;
expect ( selector . dataIsOk ( data2Test ) ) . toBeTrue ( ) ;
} ) ;
it ( "Doit toujours retourner true, si aucune valeur sélectionnée dans la liste." , ( ) = >
{
selector . selector2HTML ( ) ;
let data2Test = {
"Z (numéro atomique)" : "530" ,
"Élément" : "Yode" ,
"Symbole" : "L" ,
"Famille" : "Halogene" ,
"Abondance des éléments" : "> 1 et < 100 000" ,
} ;
expect ( selector . dataIsOk ( data2Test ) ) . toBeTrue ( ) ;
} ) ;
} ) ;
describe ( "Action des sélecteurs en corrélation avec le convertisseur." , ( ) = >
{
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 . parse ( ) ;
2021-09-22 17:12:00 +02:00
selector = new Selector ( converter , 3 , { id : "selector1" } ) ;
selector . selector2HTML ( ) ;
2021-09-17 18:02:45 +02:00
} ) ;
it ( "Le choix d'une option dans un des sélecteurs doit modifier le contenu du tableau pour ne garder que les données correspondantes et les afficher toutes si sélection 0." , ( ) = >
{
converter . datasSelectors = [ selector ] ;
let selectElement = document . getElementById ( "freeDatas2HTML_selector1" ) as HTMLInputElement ;
selectElement . value = "4" ;
selectElement . dispatchEvent ( new Event ( 'change' ) ) ;
let txtDatasViewsElt = document . getElementById ( "datas" ) . innerHTML ;
expect ( txtDatasViewsElt ) . toEqual ( fixtures . datasHTMLFor1Select ) ;
selectElement . value = "0" ;
selectElement . dispatchEvent ( new Event ( 'change' ) ) ;
txtDatasViewsElt = document . getElementById ( "datas" ) . innerHTML ;
expect ( txtDatasViewsElt ) . toEqual ( fixtures . datasHTML ) ;
} ) ;
it ( "Si plusieurs sélecteurs sont utilisés, seules les données correspondant à tous ces choix doivent être affichées. Il peut n'y avoir aucun résultat." , ( ) = >
{
2021-09-22 17:12:00 +02:00
let selector2 = new Selector ( converter , 4 , { id : "selector2" } ) ;
2021-09-17 18:02:45 +02:00
selector2 . selector2HTML ( ) ;
converter . datasSelectors = [ selector , selector2 ] ;
let selectElement = document . getElementById ( "freeDatas2HTML_selector1" ) as HTMLInputElement ;
selectElement . value = "2" ;
selectElement = document . getElementById ( "freeDatas2HTML_selector2" ) as HTMLInputElement ;
selectElement . value = "1" ;
selectElement . dispatchEvent ( new Event ( 'change' ) ) ;
let txtDatasViewsElt = document . getElementById ( "datas" ) . innerHTML ;
expect ( txtDatasViewsElt ) . toEqual ( fixtures . datasHTMLFor2Select ) ;
selectElement . value = "4" ;
selectElement . dispatchEvent ( new Event ( 'change' ) ) ;
txtDatasViewsElt = document . getElementById ( "datas" ) . innerHTML ;
expect ( txtDatasViewsElt ) . toEqual ( fixtures . datasHTMLFor2SelectNone ) ;
} ) ;
it ( "Si un séparateur est fourni pour un sélecteur, lorsque qu'une valeur y est sélectionnée, toutes les lignes de données la contenant doivent être affichées." , async ( ) = >
{
converter . datasSourceUrl = "http://localhost:9876/datas/datas1+tagsfield.csv" ;
await converter . parse ( ) ;
2021-09-22 17:12:00 +02:00
selector = new Selector ( converter , 5 , { id : "selector1" } ) ;
2021-09-17 18:02:45 +02:00
selector . separator = "|" ;
selector . selector2HTML ( ) ;
converter . datasSelectors = [ selector ] ;
let selectElement = document . getElementById ( "freeDatas2HTML_selector1" ) as HTMLInputElement ;
selectElement . value = "11" ; //="Exemple10" retournant une seule ligne
selectElement . dispatchEvent ( new Event ( 'change' ) ) ;
let txtDatasViewsElt = document . getElementById ( "datas" ) . innerHTML ;
expect ( txtDatasViewsElt ) . toEqual ( fixtures . datasHTMLForSelectTagsField ) ;
} ) ;
2021-09-22 17:12:00 +02:00
it ( "Les filtres basés sur un séparateur peuvent fonctionner avec un autre filtre." , async ( ) = >
2021-09-17 18:02:45 +02:00
{
converter . datasSourceUrl = "http://localhost:9876/datas/datas1+tagsfield.csv" ;
await converter . parse ( ) ;
2021-09-22 17:12:00 +02:00
selector = new Selector ( converter , 4 , { id : "selector1" } ) ;
2021-09-17 18:02:45 +02:00
selector . selector2HTML ( ) ;
2021-09-22 17:12:00 +02:00
let selector2 = new Selector ( converter , 5 , { id : "selector2" } ) ;
2021-09-17 18:02:45 +02:00
selector2 . separator = "|" ;
selector2 . selector2HTML ( ) ;
2021-09-22 17:12:00 +02:00
converter . datasSelectors = [ selector , selector2 ] ;
2021-09-17 18:02:45 +02:00
let selectElement = document . getElementById ( "freeDatas2HTML_selector2" ) as HTMLInputElement ;
selectElement . value = "11" ; //="Exemple10" retournant une seule ligne
selectElement . dispatchEvent ( new Event ( 'change' ) ) ;
let txtDatasViewsElt = document . getElementById ( "datas" ) . innerHTML ;
expect ( txtDatasViewsElt ) . toEqual ( fixtures . datasHTMLForSelectTagsField ) ;
selectElement = document . getElementById ( "freeDatas2HTML_selector1" ) as HTMLInputElement ;
selectElement . value = "1" ; // doit garder la ligne
selectElement . dispatchEvent ( new Event ( 'change' ) ) ;
expect ( txtDatasViewsElt ) . toEqual ( fixtures . datasHTMLForSelectTagsField ) ;
selectElement . value = "3" ; // doit supprimer la ligne restant
selectElement . dispatchEvent ( new Event ( 'change' ) ) ;
txtDatasViewsElt = document . getElementById ( "datas" ) . innerHTML ;
expect ( txtDatasViewsElt ) . toEqual ( "<table><thead><tr><th>Z (numéro atomique)</th><th>Élément</th><th>Symbole</th><th>Famille</th><th>Abondance des éléments dans la croûte terrestre (μg/k)</th><th>Étiquettes</th></tr></thead><tbody></tbody></table>" ) ;
} ) ;
} ) ;
} ) ;