diff options
Diffstat (limited to 'src/tools/json-to-csv/json-to-csv.service.test.ts')
-rw-r--r-- | src/tools/json-to-csv/json-to-csv.service.test.ts | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/src/tools/json-to-csv/json-to-csv.service.test.ts b/src/tools/json-to-csv/json-to-csv.service.test.ts new file mode 100644 index 0000000..c27bf9b --- /dev/null +++ b/src/tools/json-to-csv/json-to-csv.service.test.ts @@ -0,0 +1,89 @@ +import { describe, expect, it } from 'vitest'; +import { convertArrayToCsv, getHeaders } from './json-to-csv.service'; + +describe('json-to-csv service', () => { + describe('getHeaders', () => { + it('extracts all the keys from the array of objects', () => { + expect(getHeaders({ array: [{ a: 1, b: 2 }, { a: 3, c: 4 }] })).toEqual(['a', 'b', 'c']); + }); + + it('returns an empty array if the array is empty', () => { + expect(getHeaders({ array: [] })).toEqual([]); + }); + }); + + describe('convertArrayToCsv', () => { + it('converts an array of objects to a CSV string', () => { + const array = [ + { a: 1, b: 2 }, + { a: 3, b: 4 }, + + ]; + + expect(convertArrayToCsv({ array })).toMatchInlineSnapshot(` + "a,b + 1,2 + 3,4" + `); + }); + + it('converts an array of objects with different keys to a CSV string', () => { + const array = [ + { a: 1, b: 2 }, + { a: 3, c: 4 }, + ]; + + expect(convertArrayToCsv({ array })).toMatchInlineSnapshot(` + "a,b,c + 1,2, + 3,,4" + `); + }); + + it('when a value is null, it is converted to the string "null"', () => { + const array = [ + { a: null, b: 2 }, + ]; + + expect(convertArrayToCsv({ array })).toMatchInlineSnapshot(` + "a,b + null,2" + `); + }); + + it('when a value is undefined, it is converted to an empty string', () => { + const array = [ + { a: undefined, b: 2 }, + { b: 3 }, + ]; + + expect(convertArrayToCsv({ array })).toMatchInlineSnapshot(` + "a,b + ,2 + ,3" + `); + }); + + it('when a value contains a comma, it is wrapped in double quotes', () => { + const array = [ + { a: 'hello, world', b: 2 }, + ]; + + expect(convertArrayToCsv({ array })).toMatchInlineSnapshot(` + "a,b + \\"hello, world\\",2" + `); + }); + + it('when a value contains a double quote, it is escaped with another double quote', () => { + const array = [ + { a: 'hello "world"', b: 2 }, + ]; + + expect(convertArrayToCsv({ array })).toMatchInlineSnapshot(` + "a,b + hello \\\\\\"world\\\\\\",2" + `); + }); + }); +}); |