160 lines
4.2 KiB
JavaScript
160 lines
4.2 KiB
JavaScript
/**
|
|
* JSON to CSV tests.
|
|
*
|
|
* @author mshwed [m@ttshwed.com]
|
|
*
|
|
* @copyright Crown Copyright 2019
|
|
* @license Apache-2.0
|
|
*/
|
|
import TestRegister from "../../lib/TestRegister.mjs";
|
|
|
|
const EXPECTED_CSV_SINGLE = "a,b,c\r\n1,2,3\r\n";
|
|
const EXPECTED_CSV_MULTIPLE = "a,b,c\r\n1,2,3\r\n1,2,3\r\n";
|
|
const EXPECTED_CSV_EMPTY = "\r\n\r\n";
|
|
|
|
TestRegister.addTests([
|
|
{
|
|
name: "JSON to CSV: strings as values",
|
|
input: JSON.stringify({a: "1", b: "2", c: "3"}),
|
|
expectedOutput: EXPECTED_CSV_SINGLE,
|
|
recipeConfig: [
|
|
{
|
|
op: "JSON to CSV",
|
|
args: [",", "\\r\\n"]
|
|
},
|
|
],
|
|
},
|
|
{
|
|
name: "JSON to CSV: numbers as values",
|
|
input: JSON.stringify({a: 1, b: 2, c: 3}),
|
|
expectedOutput: EXPECTED_CSV_SINGLE,
|
|
recipeConfig: [
|
|
{
|
|
op: "JSON to CSV",
|
|
args: [",", "\\r\\n"]
|
|
},
|
|
],
|
|
},
|
|
{
|
|
name: "JSON to CSV: numbers and strings as values",
|
|
input: JSON.stringify({a: 1, b: "2", c: 3}),
|
|
expectedOutput: EXPECTED_CSV_SINGLE,
|
|
recipeConfig: [
|
|
{
|
|
op: "JSON to CSV",
|
|
args: [",", "\\r\\n"]
|
|
},
|
|
],
|
|
},
|
|
{
|
|
name: "JSON to CSV: JSON as an array",
|
|
input: JSON.stringify([{a: 1, b: "2", c: 3}]),
|
|
expectedOutput: EXPECTED_CSV_SINGLE,
|
|
recipeConfig: [
|
|
{
|
|
op: "JSON to CSV",
|
|
args: [",", "\\r\\n"]
|
|
},
|
|
],
|
|
},
|
|
{
|
|
name: "JSON to CSV: multiple JSON values in an array",
|
|
input: JSON.stringify([{a: 1, b: "2", c: 3}, {a: 1, b: "2", c: 3}]),
|
|
expectedOutput: EXPECTED_CSV_MULTIPLE,
|
|
recipeConfig: [
|
|
{
|
|
op: "JSON to CSV",
|
|
args: [",", "\\r\\n"]
|
|
},
|
|
],
|
|
},
|
|
{
|
|
name: "JSON to CSV: empty JSON",
|
|
input: JSON.stringify({}),
|
|
expectedOutput: EXPECTED_CSV_EMPTY,
|
|
recipeConfig: [
|
|
{
|
|
op: "JSON to CSV",
|
|
args: [",", "\\r\\n"]
|
|
},
|
|
],
|
|
},
|
|
{
|
|
name: "JSON to CSV: empty JSON in array",
|
|
input: JSON.stringify([{}]),
|
|
expectedOutput: EXPECTED_CSV_EMPTY,
|
|
recipeConfig: [
|
|
{
|
|
op: "JSON to CSV",
|
|
args: [",", "\\r\\n"]
|
|
},
|
|
],
|
|
},
|
|
{
|
|
name: "JSON to CSV: nested JSON",
|
|
input: JSON.stringify({a: 1, b: {c: 2, d: 3}}),
|
|
expectedOutput: "a,b.c,b.d\r\n1,2,3\r\n",
|
|
recipeConfig: [
|
|
{
|
|
op: "JSON to CSV",
|
|
args: [",", "\\r\\n"]
|
|
},
|
|
],
|
|
},
|
|
{
|
|
name: "JSON to CSV: nested array",
|
|
input: JSON.stringify({a: 1, b: [2, 3]}),
|
|
expectedOutput: "a,b.0,b.1\r\n1,2,3\r\n",
|
|
recipeConfig: [
|
|
{
|
|
op: "JSON to CSV",
|
|
args: [",", "\\r\\n"]
|
|
},
|
|
],
|
|
},
|
|
{
|
|
name: "JSON to CSV: nested JSON, nested array",
|
|
input: JSON.stringify({a: 1, b: {c: [2, 3], d: 4}}),
|
|
expectedOutput: "a,b.c.0,b.c.1,b.d\r\n1,2,3,4\r\n",
|
|
recipeConfig: [
|
|
{
|
|
op: "JSON to CSV",
|
|
args: [",", "\\r\\n"]
|
|
},
|
|
],
|
|
},
|
|
{
|
|
name: "JSON to CSV: nested array, nested JSON",
|
|
input: JSON.stringify({a: 1, b: [{c: 3, d: 4}]}),
|
|
expectedOutput: "a,b.0.c,b.0.d\r\n1,3,4\r\n",
|
|
recipeConfig: [
|
|
{
|
|
op: "JSON to CSV",
|
|
args: [",", "\\r\\n"]
|
|
},
|
|
],
|
|
},
|
|
{
|
|
name: "JSON to CSV: nested array, nested array",
|
|
input: JSON.stringify({a: 1, b: [[2, 3]]}),
|
|
expectedOutput: "a,b.0.0,b.0.1\r\n1,2,3\r\n",
|
|
recipeConfig: [
|
|
{
|
|
op: "JSON to CSV",
|
|
args: [",", "\\r\\n"]
|
|
},
|
|
],
|
|
},
|
|
{
|
|
name: "JSON to CSV: nested JSON, nested JSON",
|
|
input: JSON.stringify({a: 1, b: { c: { d: 2, e: 3}}}),
|
|
expectedOutput: "a,b.c.d,b.c.e\r\n1,2,3\r\n",
|
|
recipeConfig: [
|
|
{
|
|
op: "JSON to CSV",
|
|
args: [",", "\\r\\n"]
|
|
},
|
|
],
|
|
}
|
|
]);
|