2021-09-17 18:02:45 +02:00
import { FreeDatas2HTML , Selector } from "../src/freeDatas2HTML" ;
2021-08-05 18:23:19 +02:00
const errors = require ( "../src/errors.js" ) ;
2021-08-10 15:58:15 +02:00
const fixtures = require ( "./fixtures.js" ) ;
2021-08-05 18:23:19 +02:00
2021-09-21 17:46:04 +02:00
describe ( "Test du script central de FreeDatas2HTML" , ( ) = >
2021-08-05 18:23:19 +02:00
{
2021-09-17 18:02:45 +02:00
let converter : FreeDatas2HTML ;
2021-08-05 18:23:19 +02:00
2021-08-10 15:58:15 +02:00
beforeEach ( ( ) = >
2021-08-05 18:23:19 +02:00
{
2021-09-17 18:02:45 +02:00
converter = new FreeDatas2HTML ( ) ;
2021-08-10 15:58:15 +02:00
document . body . insertAdjacentHTML ( 'afterbegin' , fixtures . datasViewEltHTML ) ;
2021-08-05 18:23:19 +02:00
} ) ;
2021-08-10 15:58:15 +02:00
afterEach ( ( ) = >
2021-08-05 18:23:19 +02:00
{
document . body . removeChild ( document . getElementById ( 'fixture' ) ) ;
} ) ;
2021-09-17 18:02:45 +02:00
it ( "Doit avoir créé une instance de FreeDatas2HTML" , ( ) = >
2021-08-05 18:23:19 +02:00
{
2021-09-17 18:02:45 +02:00
expect ( converter ) . toBeInstanceOf ( FreeDatas2HTML ) ;
2021-08-05 18:23:19 +02:00
} ) ;
2021-08-12 11:39:19 +02:00
describe ( "Test des données de configuration reçues." , ( ) = >
2021-08-05 18:23:19 +02:00
{
2021-09-22 12:29:43 +02:00
it ( "Doit générer une erreur s'il n'y a pas d'élément dans la page pour l'id fourni." , ( ) = >
2021-08-05 18:23:19 +02:00
{
2021-09-22 12:29:43 +02:00
expect ( ( ) = > { return FreeDatas2HTML . checkInDOMById ( { id : "dontExist" } ) ; } ) . toThrowError ( errors . converterElementNotFound + "dontExist" ) ;
2021-08-05 18:23:19 +02:00
} ) ;
2021-09-22 12:29:43 +02:00
it ( "S'il y a bien un élément dans la page pour l'id fourni, doit retourner l'élement DOM complété." , ( ) = >
2021-08-05 18:23:19 +02:00
{
2021-09-22 12:29:43 +02:00
const eltInDOM = document . getElementById ( "datas" ) ;
const checkElt = FreeDatas2HTML . checkInDOMById ( { id : "datas" } ) ;
expect ( checkElt ) . toEqual ( { id : "datas" , eltDOM : eltInDOM } ) ;
2021-08-05 18:23:19 +02:00
} ) ;
2021-09-22 12:29:43 +02:00
2021-09-09 12:57:23 +02:00
it ( "Doit générer une erreur si l'url fournie pour le fichier de données est vide." , ( ) = >
2021-08-05 18:23:19 +02:00
{
2021-09-22 11:24:14 +02:00
expect ( ( ) = > { return converter . datasSourceUrl = " " ; } ) . toThrowError ( errors . parserNeedUrl ) ;
2021-08-05 18:23:19 +02:00
} ) ;
2021-09-22 16:25:10 +02:00
it ( "Doit retourner false si un numéro de champ n'est pas trouvé dans les données." , async ( ) = >
{
let check = converter . checkFieldExist ( 2 ) ; // aucune donnée chargée, donc le champ ne peut être trouvé
expect ( check ) . toBeFalse ( ) ;
converter . datasSourceUrl = "http://localhost:9876/datas/datas1.csv" ;
await converter . parse ( ) ;
check = converter . checkFieldExist ( - 2 ) ;
expect ( check ) . toBeFalse ( ) ;
check = converter . checkFieldExist ( 1.1 ) ;
expect ( check ) . toBeFalse ( ) ;
check = converter . checkFieldExist ( 10 ) ;
expect ( check ) . toBeFalse ( ) ;
} ) ;
it ( "Doit retourner true si un numéro de champ a bien été trouvé dans les données." , async ( ) = >
{
converter . datasSourceUrl = "http://localhost:9876/datas/datas1.csv" ;
await converter . parse ( ) ;
let check = converter . checkFieldExist ( 0 ) ;
expect ( check ) . toBeTrue ( ) ;
check = converter . checkFieldExist ( 2 ) ;
expect ( check ) . toBeTrue ( ) ;
} ) ;
2021-09-06 11:19:06 +02:00
2021-09-22 16:25:10 +02:00
it ( "Doit générer une erreur si une fonction est associée à un champ n'existant pas dans les données." , async ( ) = >
{
const simpleSort = ( a : any , b : any ) = >
{
if ( a < b )
return 1 ;
else if ( a > b )
return - 1 ;
else
return 0 ;
} ;
expect ( ( ) = > { return converter . datasSortingFunctions = [ { datasFieldNb :0 , sort :simpleSort } ] ; } ) . toThrowError ( errors . converterFieldNotFound ) ; // données non chargées
converter . datasSourceUrl = "http://localhost:9876/datas/datas1.csv" ;
await converter . parse ( ) ;
expect ( ( ) = > { return converter . datasSortingFunctions = [ { datasFieldNb :10 , sort :simpleSort } ] ; } ) . toThrowError ( errors . converterFieldNotFound ) ;
} ) ;
it ( "Doit accepter le fonction associée à un champ, de manière à ce qu'elle soit utilisable pour comparer deux valeurs." , async ( ) = >
2021-09-06 17:25:30 +02:00
{
const simpleSort = ( a : any , b : any ) = >
{
if ( a < b )
return 1 ;
else if ( a > b )
return - 1 ;
else
return 0 ;
} ;
2021-09-22 16:25:10 +02:00
converter . datasSourceUrl = "http://localhost:9876/datas/datas1.csv" ;
await converter . parse ( ) ;
2021-09-06 17:25:30 +02:00
converter . datasSortingFunctions = [ { datasFieldNb :0 , sort :simpleSort } ] ;
expect ( converter . getSortingFunctionForField ( 0 ) ) . toBeDefined ( ) ;
expect ( [ 7 , 9 , 3 , 5 ] . sort ( converter . getSortingFunctionForField ( 0 ) . sort ) ) . toEqual ( [ 9 , 7 , 5 , 3 ] ) ;
} ) ;
2021-08-10 15:58:15 +02:00
} ) ;
2021-08-12 11:39:19 +02:00
describe ( "Parsage du fichier et création du tableau de données" , ( ) = >
2021-08-10 15:58:15 +02:00
{
it ( "Doit générer une erreur si la lecture du fichier échoue." , async ( ) = >
{
converter . datasViewElt = { id : "datas" } ;
2021-08-12 11:39:19 +02:00
converter . datasSourceUrl = "http://localhost:9876/datas/dontExist.csv" ;
2021-08-12 17:43:34 +02:00
await expectAsync ( converter . parse ( ) ) . toBeRejectedWith ( new Error ( errors . parserFail ) ) ;
2021-08-10 15:58:15 +02:00
} ) ;
it ( "Doit enregistrer la liste des erreurs rencontrées en parsant le fichier." , async ( ) = >
{
converter . datasViewElt = { id : "datas" } ;
2021-08-12 11:39:19 +02:00
converter . datasSourceUrl = "http://localhost:9876/datas/datas-errors1.csv" ;
2021-08-12 17:43:34 +02:00
await converter . parse ( ) ;
2021-08-10 15:58:15 +02:00
expect ( converter . parseErrors . length ) . toBeGreaterThan ( 0 ) ;
} ) ;
2021-08-12 18:38:09 +02:00
it ( "Ne doit garder que les noms de colonne non vides." , async ( ) = >
{
converter . datasViewElt = { id : "datas" } ;
converter . datasSourceUrl = "http://localhost:9876/datas/datas-errors2.csv" ;
await converter . parse ( ) ;
2021-09-17 18:02:45 +02:00
expect ( converter . parseMetas . fields . length ) . toEqual ( 5 ) ;
2021-08-12 18:38:09 +02:00
} ) ;
2021-08-10 15:58:15 +02:00
it ( "Ne doit enregistrer aucune erreur de lecture si le fichier est ok." , async ( ) = >
{
converter . datasViewElt = { id : "datas" } ;
2021-08-12 11:39:19 +02:00
converter . datasSourceUrl = "http://localhost:9876/datas/datas1.csv" ;
2021-08-10 15:58:15 +02:00
await converter . parse ( ) ;
expect ( converter . parseErrors . length ) . toEqual ( 0 ) ;
} ) ;
2021-08-12 16:31:21 +02:00
it ( "Doit générer une erreur si au moins un des deux paramètres nécessaires au fonctionnement n'est pas fourni." , async ( ) = >
{
2021-09-22 11:24:14 +02:00
await expectAsync ( converter . run ( ) ) . toBeRejectedWith ( new Error ( errors . converterNeedDatasElt ) ) ;
2021-08-12 16:31:21 +02:00
converter . datasViewElt = { id : "datas" } ;
2021-09-22 11:24:14 +02:00
await expectAsync ( converter . run ( ) ) . toBeRejectedWith ( new Error ( errors . parserNeedUrl ) ) ;
2021-08-12 16:31:21 +02:00
} ) ;
2021-08-12 11:39:19 +02:00
it ( "Ne doit pas générer d'erreur si les deux paramètres fournis sont ok." , async ( ) = >
{
converter . datasViewElt = { id : "datas" } ;
converter . datasSourceUrl = "http://localhost:9876/datas/datas1.csv" ;
2021-08-12 16:31:21 +02:00
await expectAsync ( converter . run ( ) ) . toBeResolved ( ) ;
2021-08-12 11:39:19 +02:00
} ) ;
2021-08-12 17:57:05 +02:00
it ( "Doit générer une erreur si aucune donnée n'a été trouvée dans le fichier et ne rien afficher dans l'emplacement prévu pour les données." , async ( ) = >
2021-08-10 15:58:15 +02:00
{
converter . datasViewElt = { id : "datas" } ;
2021-08-12 11:39:19 +02:00
converter . datasSourceUrl = "http://localhost:9876/datas/nodatas.csv" ;
2021-09-22 11:24:14 +02:00
await expectAsync ( converter . run ( ) ) . toBeRejectedWith ( new Error ( errors . parserDatasNotFound ) ) ;
2021-08-10 15:58:15 +02:00
let txtDatasViewsElt = document . getElementById ( "datas" ) . innerHTML ;
2021-08-12 17:57:05 +02:00
expect ( txtDatasViewsElt ) . toEqual ( "" ) ;
2021-08-12 18:38:09 +02:00
} ) ;
it ( "Si la moindre erreur est rencontrée durant la parsage et que cela est demandé, ne rien afficher dans l'emplacement prévu pour les données." , async ( ) = >
{
converter . datasViewElt = { id : "datas" } ;
converter . datasSourceUrl = "http://localhost:9876/datas/datas-errors1.csv" ;
converter . stopIfParseErrors = true ;
await converter . run ( ) ;
let txtDatasViewsElt = document . getElementById ( "datas" ) . innerHTML ;
expect ( txtDatasViewsElt ) . toEqual ( "" ) ;
} ) ;
2021-08-31 16:59:25 +02:00
it ( "Sauf si cela est demandé, les données trouvées dans le fichier seront affichées même si des erreurs sont rencontrées durant la parsage." , async ( ) = >
2021-08-12 18:38:09 +02:00
{
converter . datasViewElt = { id : "datas" } ;
converter . datasSourceUrl = "http://localhost:9876/datas/datas-errors1.csv" ;
await converter . run ( ) ;
let txtDatasViewsElt = document . getElementById ( "datas" ) . innerHTML ;
expect ( txtDatasViewsElt ) . not . toEqual ( "" ) ;
2021-08-10 15:58:15 +02:00
} ) ;
it ( "Doit afficher un tableau correspondant aux données du fichier csv" , async ( ) = >
{
converter . datasViewElt = { id : "datas" } ;
2021-08-12 11:39:19 +02:00
converter . datasSourceUrl = "http://localhost:9876/datas/datas1.csv" ;
2021-08-10 15:58:15 +02:00
await converter . run ( ) ;
let txtDatasViewsElt = document . getElementById ( "datas" ) . innerHTML ;
expect ( txtDatasViewsElt ) . toEqual ( fixtures . datasHTML ) ;
2021-08-05 18:23:19 +02:00
} ) ;
2021-08-12 11:39:19 +02:00
} ) ;
2021-09-02 18:15:15 +02:00
2021-08-05 18:23:19 +02:00
} ) ;