From 1a5c84cd0fcd816c171633d162e45a29ba3699aa Mon Sep 17 00:00:00 2001 From: Yury Shkoda Date: Wed, 5 Jan 2022 18:35:02 +0300 Subject: [PATCH] test(formatDataForRequest): improved test coverage --- src/test/utils/formatDataForRequest.spec.ts | 56 +++++++++++++++++++++ src/utils/convertToCsv.spec.ts | 25 --------- 2 files changed, 56 insertions(+), 25 deletions(-) create mode 100644 src/test/utils/formatDataForRequest.spec.ts diff --git a/src/test/utils/formatDataForRequest.spec.ts b/src/test/utils/formatDataForRequest.spec.ts new file mode 100644 index 0000000..b560144 --- /dev/null +++ b/src/test/utils/formatDataForRequest.spec.ts @@ -0,0 +1,56 @@ +import { formatDataForRequest } from '../../utils/formatDataForRequest' + +describe('formatDataForRequest', () => { + const testTable = 'sometable' + + it('should', () => { + const testTableWithNullVars = { + [testTable]: [ + { var1: 'string', var2: 232, nullvar: 'A' }, + { var1: 'string', var2: 232, nullvar: 'B' }, + { var1: 'string', var2: 232, nullvar: '_' }, + { var1: 'string', var2: 232, nullvar: 0 }, + { var1: 'string', var2: 232, nullvar: 'z' }, + { var1: 'string', var2: 232, nullvar: null } + ], + [`$${testTable}`]: { formats: { var1: '$char12.', nullvar: 'best.' } } + } + + const expectedOutput = { + sasjs1data: `var1:$char12. var2:best. nullvar:best.\r\nstring,232,.a\r\nstring,232,.b\r\nstring,232,._\r\nstring,232,0\r\nstring,232,.z\r\nstring,232,.`, + sasjs_tables: testTable + } + + expect(formatDataForRequest(testTableWithNullVars)).toEqual(expectedOutput) + }) + + it('should return error if string is more than 32765 characters', () => { + const data = { testTable: [{ var1: 'z'.repeat(32765 + 1) }] } + + expect(() => formatDataForRequest(data)).toThrow( + new Error( + 'The max length of a string value in SASjs is 32765 characters.' + ) + ) + }) + + it('should return error if string is more than 32765 characters', () => { + const charsCount = 16 * 1000 + 1 + const allChars = 'z'.repeat(charsCount) + const data = { [testTable]: [{ var1: allChars }] } + const firstChunk = `var1:$char${charsCount}.\r\n` + const firstChunkChars = 'z'.repeat(16000 - firstChunk.length) + const secondChunkChars = 'z'.repeat( + charsCount - (16000 - firstChunk.length) + ) + + const expectedOutput = { + sasjs1data0: 2, + sasjs1data1: `${firstChunk}${firstChunkChars}`, + sasjs1data2: secondChunkChars, + sasjs_tables: testTable + } + + expect(formatDataForRequest(data)).toEqual(expectedOutput) + }) +}) diff --git a/src/utils/convertToCsv.spec.ts b/src/utils/convertToCsv.spec.ts index 0d5dd25..9ce9f9d 100644 --- a/src/utils/convertToCsv.spec.ts +++ b/src/utils/convertToCsv.spec.ts @@ -168,31 +168,6 @@ describe('convertToCsv', () => { ).toEqual(`slashWithSpecialExtra:$char13.\r\n\"\\\ts\tl\ta\ts\t\th\t\"`) }) - it('should convert not null values', () => { - const data = [ - { var1: 'string', nullvar: 'A', var2: 232 }, - { var1: 'string', nullvar: 'B', var2: 232 }, - { var1: 'string', nullvar: '_', var2: 232 }, - { var1: 'string', nullvar: 0, var2: 232 }, - { var1: 'string', nullvar: 'z', var2: 232 }, - { var1: 'string', nullvar: null, var2: 232 } - ] - - const expectedOutput = `var1:$char6. nullvar:best. var2:best.\r\nstring,.a,232\r\nstring,.b,232\r\nstring,._,232\r\nstring,0,232\r\nstring,.z,232\r\nstring,.,232` - - expect( - convertToCSV(data, { - formats: { var1: '$char6.', nullvar: 'best.' } - }) - ).toEqual(expectedOutput) - }) - - it('should return error if string is more than maxFieldValue', () => { - const data = [{ var1: 'z'.repeat(32765 + 1) }] - - expect(convertToCSV(data)).toEqual('ERROR: LARGE STRING LENGTH') - }) - it('should console log error if data has mixed types', () => { const colName = 'var1' const data = [{ [colName]: 'string' }, { [colName]: 232 }]