UNPKG

nested_json_to_csv

Version:
100 lines (99 loc) 3.67 kB
import { IFactory } from "../interfaces/IFactory"; import { IParser, ParserOptions } from "../interfaces/IParser"; import { Csv } from "../models/Csv"; import { ParserFactory } from "../providers/factories/ParserFactory"; import { JsonParserService } from "../providers/services/JsonParserService"; describe("Json test", () => { test("simple single json to csv", () => { const json = { name: "fox", id: "31245324", }; let parserFactory: IFactory = new ParserFactory(); const parser: IParser = parserFactory.make("jsonParser", json, { hasId: false, single: true, }); expect(parser).toBeInstanceOf(JsonParserService); const headers = ["id", "name"]; const csv: Csv = parser.parse(headers); const data: string = csv.make(); const rows = csv.makeRows().getRows(); expect(rows).toEqual([["31245324", "fox"]]); expect(data).toEqual("id,name\n31245324,fox,"); expect(csv.getHeaders()).toEqual(headers); }); test("simple mutiple json to csv", () => { const json = { user: { name: "fox", id: "31245324" }, child: { name: "fox", id: "31245324" }, }; let parserFactory: IFactory = new ParserFactory(); const parser: IParser = parserFactory.make("jsonParser", json, { hasId: false, single: false, }); expect(parser).toBeInstanceOf(JsonParserService); const headers = ["id", "name"]; const csv: Csv = parser.parse(headers); const data: string = csv.make(); const rows = csv.makeRows().getRows(); expect(rows).toEqual([ ["31245324", "fox"], ["31245324", "fox"], ]); expect(data).toEqual("id,name\n31245324,fox,\n31245324,fox,\n"); expect(csv.getHeaders()).toEqual(headers); }); test("complex nested json to csv", () => { const json = { user: { name: "fox", uid: "31245324", address: { city: "nowhere" } }, child: { name: "fox", uid: "31245324", address: { city: "where" } }, }; let parserFactory: IFactory = new ParserFactory(); const parser: IParser = parserFactory.make("jsonParser", json, { hasId: true, single: false, }); expect(parser).toBeInstanceOf(JsonParserService); const headers = ["uid", "name", "address.city"]; const csv: Csv = parser.parse(headers); const data: string = csv.make(); const rows = csv.makeRows().getRows(); expect(rows).toEqual([ ["user", "31245324", "fox", "nowhere"], ["child", "31245324", "fox", "where"], ]); expect(data).toEqual( "id,uid,name,address.city\nuser,31245324,fox,nowhere,\nchild,31245324,fox,where,\n" ); expect(csv.getHeaders()).toEqual(headers); }); test("complex nested json to csv with defualt values", () => { const json = { user: { name: "fox", uid: "31245324", address: { city: "nowhere" } }, child: { name: "fox", uid: "31245324" }, }; let parserFactory: IFactory = new ParserFactory(); const options: ParserOptions = { hasId: true, single: false, setDefaultValues: true, }; const parser: IParser = parserFactory.make("jsonParser", json, options); expect(parser).toBeInstanceOf(JsonParserService); const headers = ["uid", "name", "address.city"]; const csv: Csv = parser.parse(headers); const data: string = csv.make(); const rows = csv.makeRows().getRows(); console.log(rows); expect(rows).toEqual([ ["user", "31245324", "fox", "nowhere"], ["child", "31245324", "fox"], ]); expect(data).toEqual( "id,uid,name,address.city\nuser,31245324,fox,nowhere,\nchild,31245324,fox,,\n" ); expect(csv.getHeaders()).toEqual(headers); }); });