import { convertToCSV } from './convertToCsv' describe('convertToCsv', () => { it('should convert single quoted values', () => { const data = [ { foo: `'bar'`, bar: 'abc' }, { foo: 'sadf', bar: 'def' }, { foo: 'asd', bar: `'qwert'` } ] const expectedOutput = `foo:$char5. bar:$char7.\r\n"'bar'",abc\r\nsadf,def\r\nasd,"'qwert'"` expect(convertToCSV(data)).toEqual(expectedOutput) }) it('should convert double quoted values', () => { const data = [ { foo: `"bar"`, bar: 'abc' }, { foo: 'sadf', bar: 'def' }, { foo: 'asd', bar: `"qwert"` } ] const expectedOutput = `foo:$char5. bar:$char7.\r\n"""bar""",abc\r\nsadf,def\r\nasd,"""qwert"""` expect(convertToCSV(data)).toEqual(expectedOutput) }) it('should convert values with mixed quotes', () => { const data = [{ foo: `'blah'`, bar: `"blah"` }] const expectedOutput = `foo:$char6. bar:$char6.\r\n"'blah'","""blah"""` expect(convertToCSV(data)).toEqual(expectedOutput) }) it('should convert values with mixed quotes', () => { const data = [{ foo: `'blah,"'`, bar: `"blah,blah" "` }] const expectedOutput = `foo:$char8. bar:$char13.\r\n"'blah,""'","""blah,blah"" """` expect(convertToCSV(data)).toEqual(expectedOutput) }) it('should convert values with mixed quotes', () => { const data = [{ foo: `',''`, bar: `","` }] const expectedOutput = `foo:$char4. bar:$char3.\r\n"',''",""","""` expect(convertToCSV(data)).toEqual(expectedOutput) }) it('should convert values with mixed quotes', () => { const data = [{ foo: `','`, bar: `,"` }] const expectedOutput = `foo:$char3. bar:$char2.\r\n"','",","""` expect(convertToCSV(data)).toEqual(expectedOutput) }) it('should convert values with mixed quotes', () => { const data = [{ foo: `"`, bar: `'` }] const expectedOutput = `foo:$char1. bar:$char1.\r\n"""","'"` expect(convertToCSV(data)).toEqual(expectedOutput) }) it('should convert values with mixed quotes', () => { const data = [{ foo: `,`, bar: `',` }] const expectedOutput = `foo:$char1. bar:$char2.\r\n",","',"` expect(convertToCSV(data)).toEqual(expectedOutput) }) it('should convert values with number cases 1', () => { const data = [ { col1: 42, col2: null, col3: 'x', col4: null }, { col1: 42, col2: null, col3: 'x', col4: null }, { col1: 42, col2: null, col3: 'x', col4: null }, { col1: 42, col2: null, col3: 'x', col4: '' }, { col1: 42, col2: null, col3: 'x', col4: '' } ] const expectedOutput = `col1:best. col2:best. col3:$char1. col4:$char1.\r\n42,.,x,\r\n42,.,x,\r\n42,.,x,\r\n42,.,x,\r\n42,.,x,` expect(convertToCSV(data)).toEqual(expectedOutput) }) it('should convert values with number cases 2', () => { const data = [ { col1: 42, col2: null, col3: 'x', col4: '' }, { col1: 42, col2: null, col3: 'x', col4: '' }, { col1: 42, col2: null, col3: 'x', col4: '' }, { col1: 42, col2: 1.62, col3: 'x', col4: 'x' }, { col1: 42, col2: 1.62, col3: 'x', col4: 'x' } ] const expectedOutput = `col1:best. col2:best. col3:$char1. col4:$char1.\r\n42,.,x,\r\n42,.,x,\r\n42,.,x,\r\n42,1.62,x,x\r\n42,1.62,x,x` expect(convertToCSV(data)).toEqual(expectedOutput) }) it('should convert values with common special characters', () => { expect(convertToCSV([{ tab: '\t' }])).toEqual(`tab:$char1.\r\n\"\t\"`) expect(convertToCSV([{ lf: '\n' }])).toEqual(`lf:$char1.\r\n\"\n\"`) expect(convertToCSV([{ semicolon: ';semi' }])).toEqual( `semicolon:$char5.\r\n;semi` ) expect(convertToCSV([{ percent: '%' }])).toEqual(`percent:$char1.\r\n%`) expect(convertToCSV([{ singleQuote: "'" }])).toEqual( `singleQuote:$char1.\r\n\"'\"` ) expect(convertToCSV([{ doubleQuote: '"' }])).toEqual( `doubleQuote:$char1.\r\n""""` ) expect(convertToCSV([{ crlf: '\r\n' }])).toEqual(`crlf:$char2.\r\n\"\n\"`) expect(convertToCSV([{ euro: '€euro' }])).toEqual(`euro:$char7.\r\n€euro`) expect(convertToCSV([{ banghash: '!#banghash' }])).toEqual( `banghash:$char10.\r\n!#banghash` ) }) it('should convert values with other special characters', () => { const data = [ { speech0: '"speech', pct: '%percent', speech: '"speech', slash: '\\slash', slashWithSpecial: '\\\tslash', macvar: '&sysuserid', chinese: '传/傳chinese', sigma: 'Σsigma', at: '@at', serbian: 'Српски', dollar: '$' } ] const expectedOutput = `speech0:$char7. pct:$char8. speech:$char7. slash:$char6. slashWithSpecial:$char7. macvar:$char10. chinese:$char14. sigma:$char7. at:$char3. serbian:$char12. dollar:$char1.\r\n"""speech",%percent,"""speech",\\slash,\"\\\tslash\",&sysuserid,传/傳chinese,Σsigma,@at,Српски,$` expect(convertToCSV(data)).toEqual(expectedOutput) expect(convertToCSV([{ speech: 'menext' }])).toEqual( `speech:$char6.\r\nmenext` ) expect(convertToCSV([{ speech: 'me\nnext' }])).toEqual( `speech:$char7.\r\n\"me\nnext\"` ) expect(convertToCSV([{ speech: `me'next` }])).toEqual( `speech:$char7.\r\n\"me'next\"` ) expect(convertToCSV([{ speech: `me"next` }])).toEqual( `speech:$char7.\r\n\"me""next\"` ) expect(convertToCSV([{ speech: `me""next` }])).toEqual( `speech:$char8.\r\n\"me""""next\"` ) expect(convertToCSV([{ slashWithSpecial: '\\\tslash' }])).toEqual( `slashWithSpecial:$char7.\r\n\"\\\tslash\"` ) expect(convertToCSV([{ slashWithSpecial: '\\ \tslash' }])).toEqual( `slashWithSpecial:$char8.\r\n\"\\ \tslash\"` ) expect( convertToCSV([{ slashWithSpecialExtra: '\\\ts\tl\ta\ts\t\th\t' }]) ).toEqual(`slashWithSpecialExtra:$char13.\r\n\"\\\ts\tl\ta\ts\t\th\t\"`) }) })