156 lines
8.4 KiB
TypeScript
156 lines
8.4 KiB
TypeScript
import { ParserForJSON as Parser } from "../src/freeDatas2HTMLParserForJSON";
|
|
const errors=require("../src/errors.js");
|
|
|
|
describe("Tests du parseur de JSON", () =>
|
|
{
|
|
let parser: Parser;
|
|
|
|
beforeEach( () =>
|
|
{
|
|
parser=new Parser();
|
|
});
|
|
|
|
it("Doit avoir créé une instance du Parser", () =>
|
|
{
|
|
expect(parser).toBeInstanceOf(Parser);
|
|
});
|
|
|
|
it("Doit générer une erreur si la chaîne de données à parser est vide.", () =>
|
|
{
|
|
expect(() => { return parser.datas2Parse="" }).toThrowError(errors.parserNeedDatas);
|
|
expect(() => { return parser.datas2Parse=" " }).toThrowError(errors.parserNeedDatas);
|
|
});
|
|
|
|
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 le parseur a été appelé avec des données correctes, des résultats doivent être enregistrés.", async () =>
|
|
{
|
|
parser.datas2Parse= `[{ "nom": "dugenoux"},{ "nom": "dupont"}]`;
|
|
await parser.parse();
|
|
expect(parser.parseResults).not.toBeUndefined();
|
|
});
|
|
|
|
describe("Accès à des données distantes.", () =>
|
|
{
|
|
it("Doit générer une erreur, si l'accès aux données distantes est défaillant.", async () =>
|
|
{
|
|
parser.setRemoteSource({ url:"http://localhost:9876/datas/posts.jso" }); // une seule lettre vous manque...
|
|
await expectAsync(parser.parse()).toBeRejectedWith(new Error(errors.parserRemoteFail));
|
|
});
|
|
|
|
it("Si le parseur a été appelé avec une url fournissant des données correctes, des résultats doivent être enregistrés.", async () =>
|
|
{
|
|
parser.setRemoteSource({ url:"http://localhost:9876/datas/posts.json" });
|
|
await parser.parse();
|
|
expect(parser.parseResults).not.toBeUndefined();
|
|
});
|
|
});
|
|
|
|
describe("Noms des champs et données fournies dans deux tableaux distincts.", () =>
|
|
{
|
|
it("Les valeurs fournies pour les champs doivent être des chaînes de caractères.", () =>
|
|
{
|
|
const fields=["nom",24,"prénom", true,{ field:"champ"},"âge",["je suis un nom de champ"]];
|
|
expect(Parser.trimAllFields(fields)).toEqual(["nom","prénom", "âge"]);
|
|
});
|
|
|
|
it("Les espaces entourant les noms de champs doivent être supprimés.", () =>
|
|
{
|
|
const fields=[" nom","prénom ", " âge "];
|
|
expect(Parser.trimAllFields(fields)).toEqual(["nom","prénom", "âge"]);
|
|
});
|
|
|
|
it("Si des champs en trop sont trouvés dans une ligne de données, ils doivent être ignorés. Idem pour les champs absents.", async () =>
|
|
{
|
|
parser.datas2Parse=`{ "fields": ["nom","prénom", "âge"], "datas": [["dugenoux","henri",25,"je me champ en trop"],["michu","mariette"]] }`;
|
|
await parser.parse();
|
|
expect(parser.parseResults.fields).toEqual(["nom","prénom", "âge"]);
|
|
expect(parser.parseResults.datas).toEqual([{nom:"dugenoux","prénom":"henri", "âge":"25"}, {nom:"michu","prénom":"mariette"}]);
|
|
});
|
|
|
|
it("Si certaines des données fournies ont un type non accepté, elles doivent être ignorées et les erreurs doivent être reportées.", async () =>
|
|
{
|
|
parser.datas2Parse=`{ "fields": ["nom","prénom", "âge"], "datas": [["dugenoux",{ "prenom":"henri"},25],["michu","mariette",null]] }`;
|
|
await parser.parse();
|
|
expect(parser.parseResults.fields).toEqual(["nom","prénom", "âge"]);
|
|
expect(parser.parseResults.datas).toEqual([{nom:"dugenoux", "âge":"25"}, {nom:"michu","prénom":"mariette"}]);
|
|
expect(parser.parseResults.errors[0]).toEqual({row:0,message:errors.parserTypeError+"object"});
|
|
expect(parser.parseResults.errors[1]).toEqual({row:1,message:errors.parserTypeError+"object"});
|
|
});
|
|
|
|
it("Un enregistrement n'ayant aucune donnée valide sera ignoré.", async () =>
|
|
{
|
|
parser.datas2Parse=`{ "fields": ["nom","prénom", "âge"], "datas": [["dugenoux","henri",25],[null,{ "prenom":"mariette"},[58]]] }`;
|
|
await parser.parse();
|
|
expect(parser.parseResults.fields).toEqual(["nom","prénom", "âge"]);
|
|
expect(parser.parseResults.datas).toEqual([{nom:"dugenoux","prénom":"henri", "âge":"25"}]);
|
|
});
|
|
|
|
it("Si toutes les données fournies sont ok, on doit les retrouver en résultat.", async () =>
|
|
{
|
|
parser.datas2Parse=`{ "fields": ["nom","prénom", "âge"], "datas": [["dugenoux","henri",25],["michu","mariette",58]] }`;
|
|
await parser.parse();
|
|
expect(parser.parseResults.fields).toEqual(["nom","prénom", "âge"]);
|
|
expect(parser.parseResults.datas).toEqual([{nom:"dugenoux","prénom":"henri", "âge":"25"}, {nom:"michu","prénom":"mariette", "âge":"58"}]);
|
|
});
|
|
});
|
|
|
|
describe("Données fournies sous forme de tableau d'objets.", () =>
|
|
{
|
|
it("Les espaces entourant les noms de champs doivent être supprimés.", async () =>
|
|
{
|
|
parser.datas2Parse=`[{"nom ":"dugenoux"," prénom":"henri"," âge ":25},{"nom":"michu","prénom":"mariette","âge":58}]`;
|
|
await parser.parse();
|
|
expect(parser.parseResults.fields).toEqual(["nom","prénom", "âge"]);
|
|
});
|
|
|
|
it("Si certaines des données fournies ont un type non accepté, elles doivent être ignorées ainsi que leur attribut. Et les erreurs doivent être reportées.", async () =>
|
|
{
|
|
parser.datas2Parse=`[{"nom":"dugenoux","prénom":{"value":"henri"},"âge":25},{"âge":"58","nom":"michu","prénom":"mariette","pseudo":["madame Michu"]}]`;
|
|
await parser.parse();
|
|
expect(parser.parseResults.fields).toEqual(["nom", "âge", "prénom"]);
|
|
expect(parser.parseResults.datas).toEqual([{nom:"dugenoux", "âge":"25"}, {"âge":"58", nom:"michu", "prénom":"mariette"}]);
|
|
expect(parser.parseResults.errors[0]).toEqual({row:0,message:errors.parserTypeError+"object"});
|
|
expect(parser.parseResults.errors[1]).toEqual({row:1,message:errors.parserTypeError+"object"});
|
|
});
|
|
|
|
it("Un enregistrement n'ayant aucune donnée valide doit être ignoré.", async () =>
|
|
{
|
|
parser.datas2Parse=`[{"nom":["dugenoux"],"prénom":{"value":"henri"},"âge":null},{"nom":"michu","prénom":"mariette","âge":58}]`;
|
|
await parser.parse();
|
|
expect(parser.parseResults.fields).toEqual(["nom", "prénom", "âge"]);
|
|
expect(parser.parseResults.datas).toEqual([{ nom:"michu","prénom":"mariette","âge":"58"}]);
|
|
});
|
|
|
|
it("Si toutes les données fournies sont ok, on doit les retrouver en résultat.", async () =>
|
|
{
|
|
parser.datas2Parse=`[{"nom":"dugenoux","prénom":"henri","âge":25},{"nom":"michu","prénom":"mariette","âge":58}]`;
|
|
await parser.parse();
|
|
expect(parser.parseResults.fields).toEqual(["nom","prénom", "âge"]);
|
|
expect(parser.parseResults.datas).toEqual([{nom:"dugenoux","prénom":"henri", "âge":"25"}, {nom:"michu","prénom":"mariette", "âge":"58"}]);
|
|
// Tous les objets n'ont pas forcément les mêmes attributs, ni dans le même ordre
|
|
parser.datas2Parse=`[{"nom":"dugenoux","prénom":"henri","âge":"25"},{"âge":"58","nom":"michu","pseudo":"madame Michu"}]`;
|
|
await parser.parse();
|
|
expect(parser.parseResults.fields).toEqual(["nom","prénom", "âge", "pseudo"]);
|
|
expect(parser.parseResults.datas).toEqual([{nom:"dugenoux","prénom":"henri", "âge":"25"}, {"âge":"58", nom:"michu", pseudo:"madame Michu" }]);
|
|
});
|
|
});
|
|
|
|
it("Doit générer une erreur si les champs n'ont pas été trouvés dans les données.", async () =>
|
|
{
|
|
parser.datas2Parse=`{ "field": [" nom","prénom ", " âge "], "datas": [["dugenoux","henri","25"]] }`; // manque un "s" à fields :)
|
|
await expectAsync(parser.parse()).toBeRejectedWith(new Error(errors.parserFail));
|
|
parser.datas2Parse=`[{" ":"dugenoux"," ":"henri"},{" ":"michu"," ":" "}]`;
|
|
await expectAsync(parser.parse()).toBeRejectedWith(new Error(errors.parserFail));
|
|
});
|
|
|
|
}); |