2021-10-13 18:20:53 +02:00
|
|
|
const Papa=require("papaparse");
|
2021-10-18 10:37:44 +02:00
|
|
|
import { RemoteSourceSettings } from "../src/interfaces";
|
2021-10-13 18:20:53 +02:00
|
|
|
import { ParserForCSV as Parser } from "../src/ParserForCSV";
|
2021-10-01 13:12:45 +02:00
|
|
|
const errors=require("../src/errors.js");
|
|
|
|
|
|
|
|
describe("Tests du parseur de CSV", () =>
|
|
|
|
{
|
|
|
|
let parser: Parser;
|
|
|
|
|
|
|
|
beforeEach( () =>
|
|
|
|
{
|
|
|
|
parser=new Parser();
|
|
|
|
});
|
|
|
|
|
2021-10-13 18:20:53 +02:00
|
|
|
it("Doit avoir créé une instance du Parser et initialiser la ressource distante avec une url vide.", () =>
|
2021-10-01 13:12:45 +02:00
|
|
|
{
|
|
|
|
expect(parser).toBeInstanceOf(Parser);
|
2021-10-13 18:20:53 +02:00
|
|
|
expect(parser.datasRemoteSource.url).toEqual("");
|
2021-10-01 13:12:45 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
it("Doit générer une erreur si la chaîne de données à parser est vide.", () =>
|
|
|
|
{
|
2021-10-04 16:10:54 +02:00
|
|
|
expect(() => { return parser.datas2Parse="" }).toThrowError(errors.parserNeedDatas);
|
|
|
|
expect(() => { return parser.datas2Parse=" " }).toThrowError(errors.parserNeedDatas);
|
2021-10-01 13:12:45 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
it("Doit accepter toute chaîne de caractères non vide pour les données à parser.", () =>
|
|
|
|
{
|
|
|
|
parser. datas2Parse="datas";
|
|
|
|
expect(parser.datas2Parse).toEqual("datas");
|
|
|
|
});
|
|
|
|
|
|
|
|
it("Doit générer une erreur si le parseur est lancé sans source de données fournie.", async () =>
|
|
|
|
{
|
|
|
|
await expectAsync(parser.parse()).toBeRejectedWith(new Error(errors.parserNeedSource));
|
|
|
|
});
|
|
|
|
|
|
|
|
it("Si les données sont directement fournies, cela doit être pris en compte dans les options passées à Papa Parse.", () =>
|
|
|
|
{
|
|
|
|
// Idéalement il faudrait tester les paramètres passés à PapaParse
|
2021-10-13 18:20:53 +02:00
|
|
|
// Mais semble impossible à cause des fonctions callback ?
|
2021-10-01 13:12:45 +02:00
|
|
|
spyOn(Papa, "parse");
|
|
|
|
parser.datas2Parse="datas";
|
|
|
|
parser.parse();
|
|
|
|
expect(parser.privateOptions).toEqual(
|
|
|
|
{
|
2021-10-04 16:10:54 +02:00
|
|
|
header:true,
|
|
|
|
download:false,
|
|
|
|
downloadRequestHeaders:undefined,
|
2021-10-01 13:12:45 +02:00
|
|
|
skipEmptyLines:"greedy",
|
2021-10-04 16:10:54 +02:00
|
|
|
withCredentials:undefined
|
2021-10-01 13:12:45 +02:00
|
|
|
});
|
2021-10-13 18:20:53 +02:00
|
|
|
expect(Papa.parse).toHaveBeenCalledTimes(1);
|
2021-10-01 13:12:45 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
it("Si une ressource distante est fournie, cela doit être pris en compte dans les options passées à Papa Parse.", () =>
|
|
|
|
{
|
|
|
|
// Même remarque, test précédent
|
|
|
|
spyOn(Papa, "parse");
|
2021-10-11 16:44:20 +02:00
|
|
|
let myRemoteSource: RemoteSourceSettings={ url:"http://localhost:9876/datas/datas1.csv", withCredentials:true };
|
|
|
|
parser.setRemoteSource(myRemoteSource);
|
2021-10-01 13:12:45 +02:00
|
|
|
parser.parse();
|
|
|
|
expect(parser.privateOptions).toEqual(
|
|
|
|
{
|
2021-10-04 16:10:54 +02:00
|
|
|
header:true,
|
|
|
|
download:true,
|
2021-10-13 18:20:53 +02:00
|
|
|
downloadRequestHeaders:{},// passe une liste de headers, même vide
|
2021-10-04 16:10:54 +02:00
|
|
|
skipEmptyLines:"greedy",
|
|
|
|
withCredentials:true
|
2021-10-01 13:12:45 +02:00
|
|
|
});
|
2021-10-04 16:10:54 +02:00
|
|
|
myRemoteSource={ url:"http://localhost:9876/datas/datas1.csv", headers:[ { key:"test", value:"coucou"}, { key:"test2", value:"coucou2"}] , withCredentials:false };
|
2021-10-11 16:44:20 +02:00
|
|
|
parser.setRemoteSource(myRemoteSource);;
|
2021-10-01 13:12:45 +02:00
|
|
|
parser.parse();
|
|
|
|
expect(parser.privateOptions).toEqual(
|
|
|
|
{
|
2021-10-04 16:10:54 +02:00
|
|
|
header:true,
|
|
|
|
download:true,
|
|
|
|
downloadRequestHeaders:{ test:"coucou", test2:"coucou2"},
|
|
|
|
skipEmptyLines:"greedy",
|
|
|
|
withCredentials:false
|
2021-10-01 13:12:45 +02:00
|
|
|
});
|
|
|
|
expect(Papa.parse).toHaveBeenCalledTimes(2);
|
|
|
|
});
|
|
|
|
|
2023-03-12 18:18:22 +01:00
|
|
|
xit("Si les données à parser contiennent des noms de champ vide ou en doublon, ils doivent être ignorés et cela doit être notifié.", async () =>
|
2021-10-13 18:20:53 +02:00
|
|
|
{
|
2023-03-12 18:18:22 +01:00
|
|
|
// Test ignoré du fait d'une regression de papaparse renommant les noms de champ en doublon
|
2021-10-18 11:27:53 +02:00
|
|
|
parser.datas2Parse="field1;field2;field3;field3; ";
|
2021-10-13 18:20:53 +02:00
|
|
|
await parser.parse();
|
|
|
|
expect(parser.parseResults.fields).toEqual(["field1","field2","field3"]);
|
2021-10-18 11:27:53 +02:00
|
|
|
expect(parser.parseResults.errors).toEqual([{ row:-1, message: errors.parserFieldNameFail}, { row:-1, message: errors.parserFieldNameFail}]);
|
2021-10-13 18:20:53 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
it("Doit générer une erreur si aucun nom de champ trouvé.", async () =>
|
|
|
|
{
|
|
|
|
parser.setRemoteSource({ url:"http://localhost:9876/datas/nodatas.csv" });
|
|
|
|
await expectAsync(parser.parse()).toBeRejectedWith(new Error(errors.parserFieldsNotFound));
|
|
|
|
});
|
|
|
|
|
|
|
|
// Pas de test du fonctionnement de "Papa Parse" lui-même, car il s'agit d'un module externe.
|
2021-10-01 13:12:45 +02:00
|
|
|
it("Si le parseur a été appelé avec les données nécessaires, des résultats doivent être enregistrés.", async () =>
|
|
|
|
{
|
2021-10-11 16:44:20 +02:00
|
|
|
parser.setRemoteSource({ url:"http://localhost:9876/datas/datas1.csv" });
|
2021-10-01 13:12:45 +02:00
|
|
|
await parser.parse();
|
|
|
|
expect(parser.parseResults).not.toBeUndefined();
|
2021-10-04 16:10:54 +02:00
|
|
|
// Y compris si les données fournies sont bidon :
|
2021-10-01 13:12:45 +02:00
|
|
|
parser=new Parser();
|
|
|
|
parser.datas2Parse="datas";
|
|
|
|
await parser.parse();
|
|
|
|
expect(parser.parseResults).not.toBeUndefined();
|
2021-10-04 16:10:54 +02:00
|
|
|
// Mais dans ce cas, des erreurs doivent être reportées :
|
|
|
|
expect(parser.parseResults.errors.length).not.toEqual(0);
|
2021-10-01 13:12:45 +02:00
|
|
|
});
|
|
|
|
});
|