-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added tests for `validateGithubActions` workflow See: #13604
- Loading branch information
1 parent
f725614
commit 2fa6af3
Showing
4 changed files
with
205 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
54 changes: 54 additions & 0 deletions
54
workflow_tests/assertions/validateGithubActionsAssertions.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
const utils = require('../utils/utils'); | ||
|
||
const assertVerifyJobExecuted = (workflowResult, didExecute = true) => { | ||
const steps = [ | ||
utils.getStepAssertion( | ||
'Checkout', | ||
true, | ||
null, | ||
'VERIFY', | ||
'Checkout', | ||
[{key: 'fetch-depth', value: '0'}], | ||
[], | ||
), | ||
utils.getStepAssertion( | ||
'Setup Node', | ||
true, | ||
null, | ||
'VERIFY', | ||
'Setup Node', | ||
[], | ||
[], | ||
), | ||
utils.getStepAssertion( | ||
'Verify Javascript Action Builds', | ||
true, | ||
null, | ||
'VERIFY', | ||
'Verify Javascript Action Builds', | ||
[], | ||
[], | ||
), | ||
utils.getStepAssertion( | ||
'Validate actions and workflows', | ||
true, | ||
null, | ||
'VERIFY', | ||
'Validate actions and workflows', | ||
[], | ||
[], | ||
), | ||
]; | ||
|
||
for (const expectedStep of steps) { | ||
if (didExecute) { | ||
expect(workflowResult).toEqual(expect.arrayContaining([expectedStep])); | ||
} else { | ||
expect(workflowResult).not.toEqual(expect.arrayContaining([expectedStep])); | ||
} | ||
} | ||
}; | ||
|
||
module.exports = { | ||
assertVerifyJobExecuted, | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,41 @@ | ||
const utils = require('../utils/utils'); | ||
|
||
// verify | ||
const VALIDATEGITHUBACTIONS__VERIFY__CHECKOUT__STEP_MOCK = utils.getMockStep( | ||
'Checkout', | ||
'Checkout', | ||
'VERIFY', | ||
['fetch-depth'], | ||
[], | ||
); | ||
const VALIDATEGITHUBACTIONS__VERIFY__SETUP_NODE__STEP_MOCK = utils.getMockStep( | ||
'Setup Node', | ||
'Setup Node', | ||
'VERIFY', | ||
[], | ||
[], | ||
); | ||
const VALIDATEGITHUBACTIONS__VERIFY__VERIFY_JAVASCRIPT_ACTION_BUILDS__STEP_MOCK = utils.getMockStep( | ||
'Verify Javascript Action Builds', | ||
'Verify Javascript Action Builds', | ||
'VERIFY', | ||
[], | ||
[], | ||
); | ||
const VALIDATEGITHUBACTIONS__VERIFY__VALIDATE_ACTIONS_AND_WORKFLOWS__STEP_MOCK = utils.getMockStep( | ||
'Validate actions and workflows', | ||
'Validate actions and workflows', | ||
'VERIFY', | ||
[], | ||
[], | ||
); | ||
const VALIDATEGITHUBACTIONS__VERIFY__STEP_MOCKS = [ | ||
VALIDATEGITHUBACTIONS__VERIFY__CHECKOUT__STEP_MOCK, | ||
VALIDATEGITHUBACTIONS__VERIFY__SETUP_NODE__STEP_MOCK, | ||
VALIDATEGITHUBACTIONS__VERIFY__VERIFY_JAVASCRIPT_ACTION_BUILDS__STEP_MOCK, | ||
VALIDATEGITHUBACTIONS__VERIFY__VALIDATE_ACTIONS_AND_WORKFLOWS__STEP_MOCK, | ||
]; | ||
|
||
module.exports = { | ||
VALIDATEGITHUBACTIONS__VERIFY__STEP_MOCKS, | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,106 @@ | ||
const path = require('path'); | ||
const kieMockGithub = require('@kie/mock-github'); | ||
const utils = require('./utils/utils'); | ||
const assertions = require('./assertions/validateGithubActionsAssertions'); | ||
const mocks = require('./mocks/validateGithubActionsMocks'); | ||
const eAct = require('./utils/ExtendedAct'); | ||
|
||
jest.setTimeout(60 * 1000); | ||
let mockGithub; | ||
const FILES_TO_COPY_INTO_TEST_REPO = [ | ||
{ | ||
src: path.resolve(__dirname, '..', '.github', 'actions'), | ||
dest: '.github/actions', | ||
}, | ||
{ | ||
src: path.resolve(__dirname, '..', '.github', 'libs'), | ||
dest: '.github/libs', | ||
}, | ||
{ | ||
src: path.resolve(__dirname, '..', '.github', 'scripts'), | ||
dest: '.github/scripts', | ||
}, | ||
{ | ||
src: path.resolve(__dirname, '..', '.github', 'workflows', 'validateGithubActions.yml'), | ||
dest: '.github/workflows/validateGithubActions.yml', | ||
}, | ||
]; | ||
|
||
describe('test workflow validateGithubActions', () => { | ||
const githubToken = 'dummy_github_token'; | ||
const actor = 'Dummy Actor'; | ||
beforeEach(async () => { | ||
// create a local repository and copy required files | ||
mockGithub = new kieMockGithub.MockGithub({ | ||
repo: { | ||
testValidateGithubActionsWorkflowRepo: { | ||
files: FILES_TO_COPY_INTO_TEST_REPO, | ||
}, | ||
}, | ||
}); | ||
|
||
await mockGithub.setup(); | ||
}); | ||
|
||
afterEach(async () => { | ||
await mockGithub.teardown(); | ||
}); | ||
describe('pull request opened', () => { | ||
const event = 'pull_request'; | ||
const eventOptions = { | ||
action: 'opened', | ||
}; | ||
it('executes verification', async () => { | ||
const repoPath = mockGithub.repo.getPath('testValidateGithubActionsWorkflowRepo') || ''; | ||
const workflowPath = path.join(repoPath, '.github', 'workflows', 'validateGithubActions.yml'); | ||
let act = new eAct.ExtendedAct(repoPath, workflowPath); | ||
act = utils.setUpActParams( | ||
act, | ||
event, | ||
eventOptions, | ||
{}, | ||
githubToken, | ||
); | ||
const testMockSteps = { | ||
verify: mocks.VALIDATEGITHUBACTIONS__VERIFY__STEP_MOCKS, | ||
}; | ||
const result = await act | ||
.runEvent(event, { | ||
workflowFile: path.join(repoPath, '.github', 'workflows'), | ||
mockSteps: testMockSteps, | ||
actor, | ||
}); | ||
|
||
assertions.assertVerifyJobExecuted(result); | ||
}); | ||
}); | ||
describe('pull request synchronized', () => { | ||
const event = 'pull_request'; | ||
const eventOptions = { | ||
action: 'synchronize', | ||
}; | ||
it('executes verification', async () => { | ||
const repoPath = mockGithub.repo.getPath('testValidateGithubActionsWorkflowRepo') || ''; | ||
const workflowPath = path.join(repoPath, '.github', 'workflows', 'validateGithubActions.yml'); | ||
let act = new eAct.ExtendedAct(repoPath, workflowPath); | ||
act = utils.setUpActParams( | ||
act, | ||
event, | ||
eventOptions, | ||
{}, | ||
githubToken, | ||
); | ||
const testMockSteps = { | ||
verify: mocks.VALIDATEGITHUBACTIONS__VERIFY__STEP_MOCKS, | ||
}; | ||
const result = await act | ||
.runEvent(event, { | ||
workflowFile: path.join(repoPath, '.github', 'workflows'), | ||
mockSteps: testMockSteps, | ||
actor, | ||
}); | ||
|
||
assertions.assertVerifyJobExecuted(result); | ||
}); | ||
}); | ||
}); |