mirror of
https://github.com/sasjs/adapter.git
synced 2025-12-15 18:54:36 +00:00
171 lines
5.8 KiB
TypeScript
171 lines
5.8 KiB
TypeScript
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\"`)
|
|
})
|
|
})
|