2021-08-05 18:23:19 +02:00
import { freeCSV2HTML } from "../src/freeCSV2HTML" ;
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-08-10 15:58:15 +02:00
describe ( "freeCSV2HTML" , ( ) = >
2021-08-05 18:23:19 +02:00
{
let converter : freeCSV2HTML ;
2021-08-10 15:58:15 +02:00
beforeEach ( ( ) = >
2021-08-05 18:23:19 +02:00
{
converter = new freeCSV2HTML ( ) ;
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-08-10 15:58:15 +02:00
it ( "Doit avoir créé une instance de freeCSV2HTML" , ( ) = >
2021-08-05 18:23:19 +02:00
{
expect ( converter ) . toBeInstanceOf ( freeCSV2HTML ) ;
} ) ;
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-08-10 15:58:15 +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 pour afficher les données." , ( ) = >
2021-08-05 18:23:19 +02:00
{
2021-08-12 11:39:19 +02:00
expect ( ( ) = > { return converter . datasViewElt = { id : "dontExist" } ; } ) . toThrowError ( errors . elementNotFound + "dontExist" ) ;
2021-08-05 18:23:19 +02:00
} ) ;
2021-08-10 15:58:15 +02:00
it ( "Ne doit pas générer une erreur s'il y a bien un élément dans la page pour l'id fourni pour afficher les données." , ( ) = >
2021-08-05 18:23:19 +02:00
{
2021-08-12 11:39:19 +02:00
expect ( ( ) = > { return converter . datasViewElt = { id : "datas" } ; } ) . not . toThrowError ( ) ;
2021-08-05 18:23:19 +02:00
} ) ;
2021-08-12 17:43:34 +02:00
it ( "Ne doit accepter que les sélecteurs pour lesquels un élément a été trouvé dans la page pour l'id fourni." , ( ) = >
2021-08-05 18:23:19 +02:00
{
2021-08-12 17:43:34 +02:00
converter . datasSelectors = [ { colCSV :2 , id : "selector2" } , { colCSV :3 , id : "selector3" } ] ;
expect ( converter . datasSelectors . length ) . toEqual ( 1 ) ;
expect ( converter . datasSelectors [ 0 ] . id ) . toEqual ( "selector2" ) ;
2021-08-05 18:23:19 +02:00
} ) ;
2021-08-12 17:43:34 +02:00
it ( "Ne doit accepter que les sélecteurs pour lesquels les numéros de colonne fourrnis sont des nombres naturels." , ( ) = >
2021-08-05 18:23:19 +02:00
{
2021-08-12 17:43:34 +02:00
converter . datasSelectors = [ { colCSV :2.3 , id : "selector1" } , { colCSV :3 , id : "selector2" } ] ;
expect ( converter . datasSelectors . length ) . toEqual ( 1 ) ;
expect ( converter . datasSelectors [ 0 ] . id ) . toEqual ( "selector2" ) ;
converter . datasSelectors = [ { colCSV :2 , id : "selector1" } , { colCSV : - 1 , id : "selector2" } ] ;
expect ( converter . datasSelectors . length ) . toEqual ( 1 ) ;
expect ( converter . datasSelectors [ 0 ] . id ) . toEqual ( "selector1" ) ;
2021-08-10 15:58:15 +02:00
} ) ;
2021-08-12 17:43:34 +02:00
it ( "Doit accepter tous les sélecteurs si leurs informations sont valides." , ( ) = >
2021-08-10 15:58:15 +02:00
{
2021-08-12 17:43:34 +02:00
converter . datasSelectors = [ { colCSV :0 , id : "selector1" } , { colCSV :3 , id : "selector2" } ] ;
expect ( converter . datasSelectors . length ) . toEqual ( 2 ) ;
2021-08-10 15:58:15 +02:00
} ) ;
2021-08-12 17:43:34 +02:00
2021-08-10 15:58:15 +02:00
it ( "Doit générer une erreur si l'url fournie pour le fichier de données est vide." , ( ) = >
{
2021-08-12 11:39:19 +02:00
expect ( ( ) = > { return converter . datasSourceUrl = " " ; } ) . toThrowError ( errors . needUrl ) ;
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 ( ) ;
expect ( converter . parseMeta . fields . length ) . toEqual ( 5 ) ;
} ) ;
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 ( ) = >
{
await expectAsync ( converter . run ( ) ) . toBeRejectedWith ( new Error ( errors . needDatasElt ) ) ;
converter . datasViewElt = { id : "datas" } ;
await expectAsync ( converter . run ( ) ) . toBeRejectedWith ( new Error ( errors . needUrl ) ) ;
} ) ;
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-08-12 17:57:05 +02:00
await expectAsync ( converter . run ( ) ) . toBeRejectedWith ( new Error ( errors . datasNotFound ) ) ;
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 ( "" ) ;
} ) ;
it ( "Sauf si cela est demandé, même si des erreurs sont rencontrées durant la parsage, les données trouvées dans le fichier seront affichées." , async ( ) = >
{
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-08-12 17:43:34 +02:00
2021-08-12 11:39:19 +02:00
describe ( "Création et action des sélecteurs permettant de filter les données affichées." , ( ) = >
{
beforeEach ( ( ) = >
2021-08-11 15:24:00 +02:00
{
converter . datasViewElt = { id : "datas" } ;
2021-08-12 11:39:19 +02:00
converter . datasSourceUrl = "http://localhost:9876/datas/datas1.csv" ;
} ) ;
it ( "Doit générer une erreur si au moins un des numéros de colonne fournis pour les sélecteurs ne correspond pas à une des colonne du fichier." , async ( ) = >
{
2021-08-11 15:24:00 +02:00
converter . datasSelectors = [ { colCSV :0 , id : "selector1" } , { colCSV :5 , id : "selector2" } ] ;
await expectAsync ( converter . run ( ) ) . toBeRejectedWith ( new Error ( errors . selectorFieldNotFound ) ) ;
} ) ;
2021-08-12 11:39:19 +02:00
it ( "Ne doit pas pas générer d'erreur si tous les numéros de colonne des sélecteurs correspondent pas à une des colonne du fichier." , async ( ) = >
2021-08-11 15:24:00 +02:00
{
converter . datasSelectors = [ { colCSV :3 , id : "selector1" } , { colCSV :4 , id : "selector2" } ] ;
await expectAsync ( converter . run ( ) ) . not . toBeRejected ( ) ;
} ) ;
2021-08-12 11:39:19 +02:00
it ( "Pour chaque sélecteur demandé, doit générer un élement <select> listant les valeurs distinctes du fichier, classées par ordre alphabétique." , async ( ) = >
2021-08-11 15:24:00 +02:00
{
converter . datasSelectors = [ { colCSV :3 , id : "selector1" } , { colCSV :4 , id : "selector2" } ] ;
await converter . run ( ) ;
expect ( document . getElementById ( "selector1" ) . innerHTML ) . toEqual ( fixtures . selector1HTML ) ;
expect ( document . getElementById ( "selector2" ) . innerHTML ) . toEqual ( fixtures . selector2HTML ) ;
} ) ;
2021-08-11 17:25:56 +02:00
it ( "Le choix d'un option dans un des sélecteurs doit modifier le contenu du tableau pour ne garder que les données correspondantes ou les afficher toutes si sélection 0." , async ( ) = >
2021-08-11 15:24:00 +02:00
{
converter . datasSelectors = [ { colCSV :3 , id : "selector1" } , { colCSV :4 , id : "selector2" } ] ;
await converter . run ( ) ;
let selectElement = document . getElementById ( "CSVDatasSelector0" ) as HTMLInputElement ;
selectElement . value = "4" ;
selectElement . dispatchEvent ( new Event ( 'change' ) ) ;
let txtDatasViewsElt = document . getElementById ( "datas" ) . innerHTML ;
2021-08-12 11:39:19 +02:00
expect ( txtDatasViewsElt ) . toEqual ( fixtures . datasHTMLFor1Select ) ;
2021-08-11 15:24:00 +02:00
selectElement . value = "0" ;
selectElement . dispatchEvent ( new Event ( 'change' ) ) ;
txtDatasViewsElt = document . getElementById ( "datas" ) . innerHTML ;
expect ( txtDatasViewsElt ) . toEqual ( fixtures . datasHTML ) ;
} ) ;
2021-08-11 17:25:56 +02:00
2021-08-12 11:39:19 +02:00
it ( "Si plusieurs sélecteurs sont utilisés, seules les données correspondant aux différents choix doivent être affichées. Il peut n'y avoir aucun résultat." , async ( ) = >
2021-08-11 17:25:56 +02:00
{
converter . datasSelectors = [ { colCSV :3 , id : "selector1" } , { colCSV :4 , id : "selector2" } ] ;
await converter . run ( ) ;
let selectElement = document . getElementById ( "CSVDatasSelector0" ) as HTMLInputElement ;
selectElement . value = "2" ;
selectElement = document . getElementById ( "CSVDatasSelector1" ) as HTMLInputElement ;
selectElement . value = "1" ;
selectElement . dispatchEvent ( new Event ( 'change' ) ) ;
let txtDatasViewsElt = document . getElementById ( "datas" ) . innerHTML ;
2021-08-12 11:39:19 +02:00
expect ( txtDatasViewsElt ) . toEqual ( fixtures . datasHTMLFor2Select ) ;
2021-08-11 17:25:56 +02:00
selectElement . value = "4" ;
selectElement . dispatchEvent ( new Event ( 'change' ) ) ;
txtDatasViewsElt = document . getElementById ( "datas" ) . innerHTML ;
2021-08-12 11:39:19 +02:00
expect ( txtDatasViewsElt ) . toEqual ( fixtures . datasHTMLFor2SelectNone ) ;
2021-08-11 17:25:56 +02:00
} ) ;
2021-08-05 18:23:19 +02:00
} ) ;
2021-08-12 17:43:34 +02:00
2021-08-05 18:23:19 +02:00
} ) ;