1
0
mirror of https://github.com/sasjs/adapter.git synced 2025-12-11 01:14:36 +00:00
Files
adapter/sasjs-tests/src/testSuites/RequestData.ts
Mihajlo Medjedovic 5efb294ff2 fix: tests updated
2020-11-25 12:03:07 +01:00

318 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;
}
}
]
});