nested_json_to_csv
Version:
100 lines (99 loc) • 3.67 kB
text/typescript
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);
});
});