Skip to content

Commit 40089a0

Browse files
committed
fixed tests
1 parent 2daf5a0 commit 40089a0

File tree

3 files changed

+217
-1
lines changed

3 files changed

+217
-1
lines changed

.github/workflows/npm-test.yml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
name: 'npm test'
2+
on:
3+
push:
4+
pull_request:
5+
6+
jobs:
7+
build:
8+
runs-on: ubuntu-latest
9+
10+
steps:
11+
- uses: actions/[email protected]
12+
- name: Use Node.js 16
13+
uses: actions/[email protected]
14+
with:
15+
node-version: 16.x
16+
- run: npm ci
17+
- run: npm test
18+

lib/assert.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ function assertResult(core) {
4646

4747
if (!RESULT) throw new Error("Result from StackQL execution is missing.");
4848

49+
// if no EXPECTED_RESULTS_STR, EXPECTED_RESULTS_FILE_PATH or EXPECTED_ROWS, fail the action
50+
if (!EXPECTED_RESULTS_STR && !EXPECTED_RESULTS_FILE_PATH && !EXPECTED_ROWS) throw new Error("❌ Cannot find expected result, file path or expected rows");
51+
4952
const actualResult = parseResult(RESULT);
5053

5154
core.info("🔍 Checking results...");
@@ -64,4 +67,9 @@ function assertResult(core) {
6467
}
6568
}
6669

67-
module.exports = { assertResult };
70+
module.exports = {
71+
parseResult,
72+
getExpectedResult,
73+
checkResult,
74+
assertResult
75+
};

lib/tests/assert.test.js

Lines changed: 190 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,190 @@
1+
const {checkResult, parseResult, assertResult, getExpectedResult} = require('../assert')
2+
3+
describe('parseResult', ()=>{
4+
5+
it('should parsedResult correctly', ()=>{
6+
const resultString = `[{"name":"stackql-demo-001","status":"TERMINATED"}]`
7+
const expected = [{"name":"stackql-demo-001","status":"TERMINATED"}]
8+
const actual = parseResult(resultString);
9+
expect(actual).toEqual(expected);
10+
})
11+
})
12+
13+
describe('getExpectedResult', ()=>{
14+
it('should return expectedResult when expectedResultStr is passed', ()=>{
15+
const expectedResultStr = `[{"name":"stackql-demo-001","status":"TERMINATED"}]`
16+
const expectedResult = [{"name":"stackql-demo-001","status":"TERMINATED"}]
17+
18+
const actual = getExpectedResult(expectedResultStr, undefined);
19+
20+
expect(actual).toEqual(expectedResult);
21+
})
22+
23+
it('should return expectedResult when expectedResultFilePath is passed', ()=>{
24+
const expectedResultFilePath = 'lib/tests/success-result.json'
25+
const expectedResult = [{"name":"stackql-demo-001","status":"TERMINATED"}]
26+
27+
const actual = getExpectedResult(undefined, expectedResultFilePath);
28+
29+
expect(actual).toEqual(expectedResult);
30+
})
31+
32+
})
33+
34+
describe('checkResult', () => {
35+
const core = {
36+
info: jest.fn(),
37+
error: jest.fn(),
38+
setFailed: jest.fn()
39+
};
40+
41+
beforeEach(() => {
42+
core.info.mockClear();
43+
core.error.mockClear();
44+
core.setFailed.mockClear();
45+
});
46+
47+
it('should return false and log an error when the actual length does not match expected rows', () => {
48+
const expectedRows = "3";
49+
const actualResult = [{}, {}, {}, {}]; // 4 items, should not match expectedRows
50+
51+
const result = checkResult(core, undefined, actualResult, expectedRows);
52+
53+
expect(result).toBe(false);
54+
expect(core.error).toHaveBeenCalledWith(`Expected rows: ${expectedRows}, got: ${actualResult.length}`);
55+
});
56+
57+
it('should return true when the actual length matches expected rows', () => {
58+
const expectedRows = "2";
59+
const actualResult = [{}, {}]; // 2 items, matches expectedRows
60+
61+
const result = checkResult(core, undefined, actualResult, expectedRows);
62+
63+
expect(result).toBe(true);
64+
expect(core.error).not.toHaveBeenCalled();
65+
});
66+
67+
it('should return false and log an error when expected does not match actual and expectedRows is undefined', () => {
68+
const expected = [{ name: "test1" }, { name: "test2" }];
69+
const actual = [{ name: "test1" }, { name: "test3" }];
70+
71+
const result = checkResult(core, expected, actual, undefined);
72+
73+
expect(result).toBe(false);
74+
expect(core.error).toHaveBeenCalledWith(`Expected results do not match actual results.\nExpected: ${JSON.stringify(expected)}\nActual: ${JSON.stringify(actual)}`);
75+
});
76+
77+
it('should return true when expected matches actual and expectedRows is undefined', () => {
78+
const expected = [{ name: "test1" }, { name: "test2" }];
79+
const actual = [{ name: "test1" }, { name: "test2" }];
80+
81+
const result = checkResult(core, expected, actual, undefined);
82+
83+
expect(result).toBe(true);
84+
expect(core.error).not.toHaveBeenCalled();
85+
});
86+
});
87+
88+
describe('assertResult', ()=>{
89+
let coreObj;
90+
91+
const ACTION_ENV = {
92+
RESULT: `[{"name":"stackql-demo-001","status":"TERMINATED"}]`,
93+
EXPECTED_RESULTS_STR: `[{"name":"stackql-demo-001","status":"TERMINATED"}]`,
94+
EXPECTED_RESULTS_FILE_PATH: 'test.json',
95+
EXPECTED_ROWS: 1
96+
}
97+
98+
beforeEach(() => {
99+
jest.resetModules()
100+
process.env = {...ACTION_ENV}
101+
coreObj = {
102+
setFailed: jest.fn(),
103+
info: jest.fn(),
104+
error: jest.fn(),
105+
}
106+
})
107+
afterEach(() => {
108+
process.env = ACTION_ENV
109+
})
110+
111+
112+
it('it should setFailed when there is expected results are undefined', () => {
113+
process.env.EXPECTED_RESULTS_FILE_PATH = undefined
114+
process.env.EXPECTED_RESULTS_STR = undefined
115+
process.env.EXPECTED_ROWS = undefined
116+
117+
assertResult(coreObj)
118+
119+
expect(coreObj.setFailed).toHaveBeenCalledWith('Assertion error: ❌ Cannot find expected result, file path or expected rows')
120+
});
121+
122+
it('it should setFailed when actual result is not equal to expected result', () => {
123+
process.env.RESULT= "[{\"name\":\"stackql-demo-001\",\"status\":\"RUNNING\"}]"
124+
125+
assertResult(coreObj)
126+
127+
expect(coreObj.setFailed).toHaveBeenCalledWith(expect.stringContaining('StackQL Assert Failed'))
128+
});
129+
130+
it('it should not setFailed when actual result equal to expected result', () => {
131+
assertResult(coreObj)
132+
133+
expect(coreObj.setFailed).not.toHaveBeenCalled()
134+
expect(coreObj.info).toHaveBeenCalledWith(expect.stringContaining('StackQL Assert Successful'))
135+
});
136+
137+
it('it should setFailed when actual result is not equal to expected result', () => {
138+
process.env.EXPECTED_RESULTS_STR= undefined;
139+
process.env.EXPECTED_RESULTS_FILE_PATH = 'lib/tests/failed-result.json'
140+
141+
assertResult(coreObj)
142+
143+
expect(coreObj.setFailed).toHaveBeenCalledWith(expect.stringContaining('StackQL Assert Failed'))
144+
});
145+
146+
it('it should not setFailed when actual result equal to expected result in file', () => {
147+
process.env.EXPECTED_RESULTS_STR= undefined;
148+
process.env.EXPECTED_RESULTS_FILE_PATH = 'lib/tests/success-result.json'
149+
150+
assertResult(coreObj)
151+
152+
expect(coreObj.setFailed).not.toHaveBeenCalled()
153+
expect(coreObj.info).toHaveBeenCalledWith(expect.stringContaining('StackQL Assert Successful'))
154+
})
155+
156+
it('it should setFailed when actual result does not match expected rows', () => {
157+
process.env.EXPECTED_RESULTS_STR= undefined;
158+
process.env.EXPECTED_RESULTS_FILE_PATH = undefined;
159+
process.env.EXPECTED_ROWS = 2
160+
161+
assertResult(coreObj)
162+
163+
expect(coreObj.setFailed).toHaveBeenCalledWith(expect.stringContaining('StackQL Assert Failed'))
164+
});
165+
166+
it('it should not setFailed when actual result match expected rows', ()=>{
167+
process.env.EXPECTED_RESULTS_STR= undefined;
168+
process.env.EXPECTED_RESULTS_FILE_PATH = undefined;
169+
process.env.EXPECTED_ROWS = 1
170+
171+
assertResult(coreObj)
172+
173+
expect(coreObj.setFailed).not.toHaveBeenCalled()
174+
expect(coreObj.info).toHaveBeenCalledWith(expect.stringContaining('StackQL Assert Successful'))
175+
})
176+
177+
it('it should not setFailed when actual result match expected rows in string number', ()=>{
178+
process.env.EXPECTED_RESULTS_STR= undefined;
179+
process.env.EXPECTED_RESULTS_FILE_PATH = undefined;
180+
process.env.EXPECTED_ROWS = '1'
181+
182+
assertResult(coreObj)
183+
184+
expect(coreObj.setFailed).not.toHaveBeenCalled()
185+
expect(coreObj.info).toHaveBeenCalledWith(expect.stringContaining('StackQL Assert Successful'))
186+
})
187+
188+
189+
190+
})

0 commit comments

Comments
 (0)