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-10 15:58:15 +02:00
describe ( "Setting freeCSV2HTML" , ( ) = >
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-10 15:58:15 +02:00
expect ( ( ) = > { return converter . datasViewElt = { id : "dontExistId" } ; } ) . toThrowError ( errors . elementNotFound + "dontExistId" ) ;
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-10 15:58:15 +02:00
expect ( ( ) = > { return converter . datasViewElt = { id : "datas" } ; } ) . not . toThrowError ( ) ;
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éments dans la page pour chaque id fourni pour afficher un des sélecteurs." , ( ) = >
2021-08-05 18:23:19 +02:00
{
2021-08-10 15:58:15 +02:00
expect ( ( ) = > { return converter . datasSelectors = [ { colCSV :2 , id : "selector2" } , { colCSV :3 , id : "selector3" } ] ; } ) . toThrowError ( errors . elementNotFound + "selector3" ) ;
2021-08-05 18:23:19 +02:00
} ) ;
2021-08-10 15:58:15 +02:00
it ( "Doit générer une erreur si tous les numéros de colonne des sélecteurs ne sont pas des nombres naturels." , ( ) = >
2021-08-05 18:23:19 +02:00
{
2021-08-10 15:58:15 +02:00
expect ( ( ) = > { return converter . datasSelectors = [ { colCSV :2.3 , id : "selector1" } , { colCSV :3 , id : "selector2" } ] ; } ) . toThrowError ( errors . needNaturalNumber ) ;
expect ( ( ) = > { return converter . datasSelectors = [ { colCSV :2 , id : "selector1" } , { colCSV : - 1 , id : "selector2" } ] ; } ) . toThrowError ( errors . needNaturalNumber ) ;
} ) ;
it ( "Ne doit pas générer une erreur si les informations fournies pour les sélecteurs sont correctes." , ( ) = >
{
expect ( ( ) = > { return converter . datasSelectors = [ { colCSV :0 , id : "selector1" } , { colCSV :3 , id : "selector2" } ] ; } ) . not . toThrowError ( ) ;
} ) ;
it ( "Doit générer une erreur si l'url fournie pour le fichier de données est vide." , ( ) = >
{
expect ( ( ) = > { return converter . datasSourceUrl = " " ; } ) . toThrowError ( errors . needUrl ) ;
} ) ;
} ) ;
describe ( "Running freeCSV2HTML" , ( ) = >
{
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 ) ) ;
} ) ;
it ( "Doit générer une erreur si la lecture du fichier échoue." , async ( ) = >
{
converter . datasViewElt = { id : "datas" } ;
converter . datasSourceUrl = "http://localhost:9876/datas/fake.csv" ;
await expectAsync ( converter . parse ( ) ) . toBeRejectedWith ( new Error ( errors . parserFail ) ) ;
} ) ;
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/elements-chimiques.csv" ;
await expectAsync ( converter . run ( ) ) . toBeResolved ( ) ;
} ) ;
it ( "Doit enregistrer la liste des erreurs rencontrées en parsant le fichier." , async ( ) = >
{
converter . datasViewElt = { id : "datas" } ;
converter . datasSourceUrl = "http://localhost:9876/datas/elements-chimiques-erreurs.csv" ;
await converter . parse ( ) ;
expect ( converter . parseErrors . length ) . toBeGreaterThan ( 0 ) ;
} ) ;
it ( "Ne doit enregistrer aucune erreur de lecture si le fichier est ok." , async ( ) = >
{
converter . datasViewElt = { id : "datas" } ;
converter . datasSourceUrl = "http://localhost:9876/datas/elements-chimiques.csv" ;
await converter . parse ( ) ;
expect ( converter . parseErrors . length ) . toEqual ( 0 ) ;
} ) ;
it ( "Doit afficher une erreur dans la page si aucune donnée n'a été trouvée dans le fichier." , async ( ) = >
{
converter . datasViewElt = { id : "datas" } ;
converter . datasSourceUrl = "http://localhost:9876/datas/elements-chimiques-vide.csv" ;
await converter . run ( ) ;
let txtDatasViewsElt = document . getElementById ( "datas" ) . innerHTML ;
expect ( txtDatasViewsElt ) . toEqual ( errors . datasNotFound ) ;
} ) ;
it ( "Doit afficher un tableau correspondant aux données du fichier csv" , async ( ) = >
{
converter . datasViewElt = { id : "datas" } ;
converter . datasSourceUrl = "http://localhost:9876/datas/elements-chimiques.csv" ;
await converter . run ( ) ;
let txtDatasViewsElt = document . getElementById ( "datas" ) . innerHTML ;
expect ( txtDatasViewsElt ) . toEqual ( fixtures . datasHTML ) ;
2021-08-05 18:23:19 +02:00
} ) ;
2021-08-11 15:24:00 +02:00
it ( "Doit générer une erreur si au moins un des numéros de colonne des sélecteurs ne correspond pas à une des colonne du fichier." , async ( ) = >
{
converter . datasViewElt = { id : "datas" } ;
converter . datasSourceUrl = "http://localhost:9876/datas/elements-chimiques.csv" ;
converter . datasSelectors = [ { colCSV :0 , id : "selector1" } , { colCSV :5 , id : "selector2" } ] ;
await expectAsync ( converter . run ( ) ) . toBeRejectedWith ( new Error ( errors . selectorFieldNotFound ) ) ;
} ) ;
it ( "Ne doit pas générer d'erreur si tous les numéros de colonne des sélecteurs correspondent pas à une des colonne du fichier." , async ( ) = >
{
converter . datasViewElt = { id : "datas" } ;
converter . datasSourceUrl = "http://localhost:9876/datas/elements-chimiques.csv" ;
converter . datasSelectors = [ { colCSV :3 , id : "selector1" } , { colCSV :4 , id : "selector2" } ] ;
await expectAsync ( converter . run ( ) ) . not . toBeRejected ( ) ;
} ) ;
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 ( ) = >
{
converter . datasViewElt = { id : "datas" } ;
converter . datasSourceUrl = "http://localhost:9876/datas/elements-chimiques.csv" ;
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 . datasViewElt = { id : "datas" } ;
converter . datasSourceUrl = "http://localhost:9876/datas/elements-chimiques.csv" ;
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 ;
expect ( txtDatasViewsElt ) . toEqual ( fixtures . datasHTMLForSelect1 ) ;
selectElement . value = "0" ;
selectElement . dispatchEvent ( new Event ( 'change' ) ) ;
txtDatasViewsElt = document . getElementById ( "datas" ) . innerHTML ;
expect ( txtDatasViewsElt ) . toEqual ( fixtures . datasHTML ) ;
selectElement = document . getElementById ( "CSVDatasSelector1" ) as HTMLInputElement ;
2021-08-11 17:25:56 +02:00
selectElement . value = "4" ;
2021-08-11 15:24:00 +02:00
selectElement . dispatchEvent ( new Event ( 'change' ) ) ;
txtDatasViewsElt = document . getElementById ( "datas" ) . innerHTML ;
expect ( txtDatasViewsElt ) . toEqual ( fixtures . datasHTMLForSelect2 ) ;
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
it ( "Si plusieurs sélecteurs sont utilisés, seules les données correspondant aux différents choix sont affichées." , async ( ) = >
{
converter . datasViewElt = { id : "datas" } ;
converter . datasSourceUrl = "http://localhost:9876/datas/elements-chimiques.csv" ;
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 ;
expect ( txtDatasViewsElt ) . toEqual ( fixtures . datasHTMLForSelect3 ) ;
selectElement . value = "4" ;
selectElement . dispatchEvent ( new Event ( 'change' ) ) ;
txtDatasViewsElt = document . getElementById ( "datas" ) . innerHTML ;
expect ( txtDatasViewsElt ) . toEqual ( fixtures . datasHTMLForSelect4 ) ;
} ) ;
2021-08-05 18:23:19 +02:00
} ) ;
} ) ;