/* jshint node:true */
/* jshint esversion: 6 */
/* jshint -W030 */

const { assert } = require("chai");
const jsonexport = require("../lib/index");
const os = require("os");

describe("Zero", () => {
  it("array", async () => {
    const values = [
      {
        name: "Bob",
        lastName: "Smith",
        age: 0,
        family: {
          name: "Peter",
          type: "Father",
        },
      },
      {
        name: "James",
        lastName: "David",
        age: 21,
        family: {
          name: "Julie",
          type: "Mother",
          size: 0,
        },
      },
      {
        name: "Robert",
        lastName: "Miller",
        age: 24,
        family: {
          name: "Miller",
          size: 12,
        },
        location: [1231, 3214, 4214, 0],
      },
      {
        name: "David",
        lastName: "Martin",
        nickname: "dmartin",
        age: 45,
      },
    ];

    const csv = await jsonexport(values, {});
    assert.equal(
      csv,
      `name,lastName,age,family.name,family.type,family.size,location,nickname${os.EOL}Bob,Smith,0,Peter,Father${os.EOL}James,David,21,Julie,Mother,0${os.EOL}Robert,Miller,24,Miller,,12,1231;3214;4214;0${os.EOL}David,Martin,45,,,,,dmartin`
    );
  });

  it("object", async () => {
    const value = {
      name: "Bob",
      lastName: "Smith",
      age: 0,
      family: {
        name: "Peter",
        type: "Father",
        size: 0,
      },
      location: [1231, 3214, 4214, 0],
    };

    const csv = await jsonexport(value, {});
    assert.equal(
      csv,
      `name,Bob${os.EOL}lastName,Smith${os.EOL}age,0${os.EOL}family.name,Peter${os.EOL}family.type,Father${os.EOL}family.size,0${os.EOL}location,1231;3214;4214;0`
    );
  });
});

describe("False", () => {
  it("array", async () => {
    const values = [
      {
        name: "Bob",
        lastName: "Smith",
        age: 0,
        bachelor: false,
        family: {
          name: "Peter",
          type: "Father",
          nuclear: true,
        },
      },
      {
        name: "James",
        lastName: "David",
        age: 21,
        bachelor: false,
        family: {
          name: "Julie",
          type: "Mother",
          size: 0,
          nuclear: true,
        },
      },
      {
        name: "Robert",
        lastName: "Miller",
        age: 24,
        bachelor: true,
        family: {
          name: "Miller",
          size: 12,
          nuclear: false,
        },
        location: [1231, 3214, 4214, 0],
      },
      {
        name: "David",
        lastName: "Martin",
        nickname: "dmartin",
        age: 45,
        pets: [false,false,true],
      },
    ];

    const csv = await jsonexport(values, {});
    assert.equal(
      csv,
      `name,lastName,age,bachelor,family.name,family.type,family.nuclear,family.size,location,nickname,pets${os.EOL}Bob,Smith,0,false,Peter,Father,true${os.EOL}James,David,21,false,Julie,Mother,true,0${os.EOL}Robert,Miller,24,true,Miller,,false,12,1231;3214;4214;0${os.EOL}David,Martin,45,,,,,,,dmartin,false;false;true`
    );
  });

  it("object", async () => {
    const value = {
      name: "Bob",
      lastName: "Smith",
      age: 0,
      bachelor: false,
      family: {
        name: "Peter",
        type: "Father",
        size: 0,
        nuclear: false,
      },
      location: [1231, 3214, 4214, 0],
      pets: [false,false,true],
    };

    const csv = await jsonexport(value, {});
    assert.equal(
      csv,
      `name,Bob${os.EOL}lastName,Smith${os.EOL}age,0${os.EOL}bachelor,false${os.EOL}family.name,Peter${os.EOL}family.type,Father${os.EOL}family.size,0${os.EOL}family.nuclear,false${os.EOL}location,1231;3214;4214;0${os.EOL}pets,false;false;true`
    );
  });
});