1
0
mirror of https://github.com/sasjs/adapter.git synced 2025-12-11 09:24:35 +00:00
Files
adapter/sasjs-tests/src/testSuites/RequestData.ts
2021-05-07 10:30:27 +03:00

319 lines
10 KiB
TypeScript

import SASjs from '@sasjs/adapter'
import { TestSuite } from '@sasjs/test-framework'
const stringData: any = { table1: [{ col1: 'first col value' }] }
const numericData: any = { table1: [{ col1: 3.14159265 }] }
const multiColumnData: any = {
table1: [{ col1: 42, col2: 1.618, col3: 'x', col4: 'x' }]
}
const multipleRowsWithNulls: any = {
table1: [
{ 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 multipleColumnsWithNulls: any = {
table1: [
{ 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 getLongStringData = (length = 32764) => {
let x = 'X'
for (let i = 1; i <= length; i++) {
x = x + 'X'
}
const data: any = { table1: [{ col1: x }] }
return data
}
const getLargeObjectData = () => {
const data = { table1: [{ big: 'data' }] }
for (let i = 1; i < 10000; i++) {
data.table1.push(data.table1[0])
}
return data
}
export const sendArrTests = (adapter: SASjs): TestSuite => ({
name: 'sendArr',
tests: [
{
title: 'Absolute paths',
description: 'Should work with absolute paths to SAS jobs',
test: () => {
return adapter.request('/Public/app/common/sendArr', stringData)
},
assertion: (res: any) => {
return res.table1[0][0] === stringData.table1[0].col1
}
},
{
title: 'Single string value',
description: 'Should send an array with a single string value',
test: () => {
return adapter.request('common/sendArr', stringData)
},
assertion: (res: any) => {
return res.table1[0][0] === stringData.table1[0].col1
}
},
{
title: 'Long string value',
description:
'Should send an array with a long string value under 32765 characters',
test: () => {
return adapter.request('common/sendArr', getLongStringData())
},
assertion: (res: any) => {
const longStringData = getLongStringData()
return res.table1[0][0] === longStringData.table1[0].col1
}
},
{
title: 'Overly long string value',
description:
'Should error out with long string values over 32765 characters',
test: () => {
const data = getLongStringData(32767)
return adapter.request('common/sendArr', data).catch((e) => e)
},
assertion: (error: any) => {
return !!error && !!error.error && !!error.error.message
}
},
{
title: 'Single numeric value',
description: 'Should send an array with a single numeric value',
test: () => {
return adapter.request('common/sendArr', numericData)
},
assertion: (res: any) => {
return res.table1[0][0] === numericData.table1[0].col1
}
},
{
title: 'Multiple columns',
description: 'Should handle data with multiple columns',
test: () => {
return adapter.request('common/sendArr', multiColumnData)
},
assertion: (res: any) => {
return (
res.table1[0][0] === multiColumnData.table1[0].col1 &&
res.table1[0][1] === multiColumnData.table1[0].col2 &&
res.table1[0][2] === multiColumnData.table1[0].col3 &&
res.table1[0][3] === multiColumnData.table1[0].col4
)
}
},
{
title: 'Multiple rows with nulls',
description: 'Should handle data with multiple rows with null values',
test: () => {
return adapter.request('common/sendArr', multipleRowsWithNulls)
},
assertion: (res: any) => {
let result = true
multipleRowsWithNulls.table1.forEach((_: any, index: number) => {
result =
result &&
res.table1[index][0] === multipleRowsWithNulls.table1[index].col1
result =
result &&
res.table1[index][1] === multipleRowsWithNulls.table1[index].col2
result =
result &&
res.table1[index][2] === multipleRowsWithNulls.table1[index].col3
result =
result &&
res.table1[index][3] ===
(multipleRowsWithNulls.table1[index].col4 || ' ')
})
return result
}
},
{
title: 'Multiple columns with nulls',
description: 'Should handle data with multiple columns with null values',
test: () => {
return adapter.request('common/sendArr', multipleColumnsWithNulls)
},
assertion: (res: any) => {
let result = true
multipleColumnsWithNulls.table1.forEach((_: any, index: number) => {
result =
result &&
res.table1[index][0] === multipleColumnsWithNulls.table1[index].col1
result =
result &&
res.table1[index][1] === multipleColumnsWithNulls.table1[index].col2
result =
result &&
res.table1[index][2] === multipleColumnsWithNulls.table1[index].col3
result =
result &&
res.table1[index][3] ===
(multipleColumnsWithNulls.table1[index].col4 || ' ')
})
return result
}
}
]
})
export const sendObjTests = (adapter: SASjs): TestSuite => ({
name: 'sendObj',
tests: [
{
title: 'Invalid column name',
description: 'Should throw an error',
test: async () => {
const invalidData: any = {
'1 invalid table': [{ col1: 42 }]
}
return adapter.request('common/sendObj', invalidData).catch((e) => e)
},
assertion: (error: any) =>
!!error && !!error.error && !!error.error.message
},
{
title: 'Single string value',
description: 'Should send an object with a single string value',
test: () => {
return adapter.request('common/sendObj', stringData)
},
assertion: (res: any) => {
return res.table1[0].COL1 === stringData.table1[0].col1
}
},
{
title: 'Long string value',
description:
'Should send an object with a long string value under 32765 characters',
test: () => {
return adapter.request('common/sendObj', getLongStringData())
},
assertion: (res: any) => {
const longStringData = getLongStringData()
return res.table1[0].COL1 === longStringData.table1[0].col1
}
},
{
title: 'Overly long string value',
description:
'Should error out with long string values over 32765 characters',
test: () => {
return adapter
.request('common/sendObj', getLongStringData(32767))
.catch((e) => e)
},
assertion: (error: any) => {
return !!error && !!error.error && !!error.error.message
}
},
{
title: 'Single numeric value',
description: 'Should send an object with a single numeric value',
test: () => {
return adapter.request('common/sendObj', numericData)
},
assertion: (res: any) => {
return res.table1[0].COL1 === numericData.table1[0].col1
}
},
{
title: 'Large data volume',
description: 'Should send an object with a large amount of data',
test: () => {
return adapter.request('common/sendObj', getLargeObjectData())
},
assertion: (res: any) => {
const data = getLargeObjectData()
return res.table1[9000].BIG === data.table1[9000].big
}
},
{
title: 'Multiple columns',
description: 'Should handle data with multiple columns',
test: () => {
return adapter.request('common/sendObj', multiColumnData)
},
assertion: (res: any) => {
return (
res.table1[0].COL1 === multiColumnData.table1[0].col1 &&
res.table1[0].COL2 === multiColumnData.table1[0].col2 &&
res.table1[0].COL3 === multiColumnData.table1[0].col3 &&
res.table1[0].COL4 === multiColumnData.table1[0].col4
)
}
},
{
title: 'Multiple rows with nulls',
description: 'Should handle data with multiple rows with null values',
test: () => {
return adapter.request('common/sendObj', multipleRowsWithNulls)
},
assertion: (res: any) => {
let result = true
multipleRowsWithNulls.table1.forEach((_: any, index: number) => {
result =
result &&
res.table1[index].COL1 === multipleRowsWithNulls.table1[index].col1
result =
result &&
res.table1[index].COL2 === multipleRowsWithNulls.table1[index].col2
result =
result &&
res.table1[index].COL3 === multipleRowsWithNulls.table1[index].col3
result =
result &&
res.table1[index].COL4 ===
(multipleRowsWithNulls.table1[index].col4 || ' ')
})
return result
}
},
{
title: 'Multiple columns with nulls',
description: 'Should handle data with multiple columns with null values',
test: () => {
return adapter.request('common/sendObj', multipleColumnsWithNulls)
},
assertion: (res: any) => {
let result = true
multipleColumnsWithNulls.table1.forEach((_: any, index: number) => {
result =
result &&
res.table1[index].COL1 ===
multipleColumnsWithNulls.table1[index].col1
result =
result &&
res.table1[index].COL2 ===
multipleColumnsWithNulls.table1[index].col2
result =
result &&
res.table1[index].COL3 ===
multipleColumnsWithNulls.table1[index].col3
result =
result &&
res.table1[index].COL4 ===
(multipleColumnsWithNulls.table1[index].col4 || ' ')
})
return result
}
}
]
})