docker-attest-build-provenance/test-attest
2025-03-17 07:12:53 +00:00

195 lines
4.9 KiB
Plaintext

test-attest-provenance:
name: Test attest-provenance action
17 changes: 17 additions & alot of additions
__tests__/index.test.ts
Viewed
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
/**
* Unit tests for the action's entrypoint, src/index.ts
*/
import * as main from '../src/main'
// Mock the action's entrypoint
const runMock = jest.spyOn(main, 'run').mockImplementation()
describe('index', () => {
it('calls run when imported', async () => {
// eslint-disable-next-line @typescript-eslint/no-require-imports
require('../src/index')
expect(runMock).toHaveBeenCalled()
})
})
103 changes: 103 additions & 0 deletions103
__tests__/main.test.ts
Viewed
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
import * as core from '@actions/core'
import * as main from '../src/main'
// Mock the GitHub Actions core library
jest.mock('@actions/core')
const setOutputMock = jest.spyOn(core, 'setOutput')
const setFailedMock = jest.spyOn(core, 'setFailed')
// Ensure that setFailed doesn't set an exit code during tests
setFailedMock.mockImplementation(() => {})
describe('main action', () => {
let outputs = {} as Record<string, string>
beforeEach(() => {
jest.resetAllMocks()
setOutputMock.mockImplementation((key, value) => {
outputs[key] = value
})
})
afterEach(() => {
outputs = {}
})
it('successfully run main', async () => {
const originalEnv = process.env
process.env = {
...originalEnv,
GITHUB_REPOSITORY: 'owner/repo',
GITHUB_REF: 'refs/heads/main',
GITHUB_SHA: 'babca52ab0c93ae16539e5923cb0d7403b9a093b',
GITHUB_WORKFLOW_REF: 'owner/repo/.github/workflows/main.yml@main',
GITHUB_SERVER_URL: 'https://github.com',
GITHUB_EVENT_NAME: 'push',
GITHUB_REPOSITORY_ID: 'repo-id',
GITHUB_REPOSITORY_OWNER_ID: 'owner-id',
GITHUB_RUN_ID: 'run-id',
GITHUB_RUN_ATTEMPT: 'run-attempt',
RUNNER_ENVIRONMENT: 'github-hosted'
}
// Run the main function
await main.run()
// Verify that outputs were set correctly
expect(setOutputMock).toHaveBeenCalledTimes(2)
// Define the expected object
const expectedObject = {
buildDefinition: {
buildType:
'https://slsa-framework.github.io/github-actions-buildtypes/workflow/v1',
externalParameters: {
workflow: {
path: '.github/workflows/main.yml',
ref: 'main',
repository: 'https://github.com/owner/repo'
}
},
internalParameters: {
github: {
event_name: 'push',
repository_id: 'repo-id',
repository_owner_id: 'owner-id'
}
},
resolvedDependencies: [
{
digest: {
gitCommit: 'babca52ab0c93ae16539e5923cb0d7403b9a093b'
},
uri: 'git+https://github.com/owner/repo@refs/heads/main'
}
]
},
runDetails: {
builder: {
id: 'https://github.com/actions/runner/github-hosted'
},
metadata: {
invocationId:
'https://github.com/owner/repo/actions/runs/run-id/attempts/run-attempt'
}
}
}
Collaborator
@bdehamer bdehamer on Feb 29, 2024
Instead of having this big, expected fixture here this is a good use case for .toMatchSnapshot().
See https://github.com/actions/toolkit/blob/0c735ba79dc9a148f98956164de52845f2e6f057/packages/attest/__tests__/provenance.test.ts#L25 for an example.
@webmasterdevices Reply...
// Use the expected object in the test assertion
expect(setOutputMock).toHaveBeenNthCalledWith(
1,
'predicate',
expectedObject
)
expect(setOutputMock).toHaveBeenNthCalledWith(
2,
'predicate-type',
'https://slsa.dev/provenance/v1'
)
process.env = originalEnv
})
})
1 change: 1 addition & 0 deletions1
jest.setup.js
Viewed
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
process.stdout.write = jest.fn()
3 changes: 3 additions & 0 deletions3
package.json
Viewed
Original file line number Diff line number Diff line change
@@ -46,6 +46,9 @@
"js",
"ts"
],
"setupFilesAfterEnv": [
"./jest.setup.js"
],
"testMatch": [
"**/*.test.ts"
],
Unchanged files with check annotations Preview
.github/linters/tsconfig.json
{
Check warning on line 1 in .github/linters/tsconfig.json
GitHub Actions
/ Lint Codebase
File ignored by default.
"$schema": "https://json.schemastore.org/tsconfig",
"extends": "../../tsconfig.json",
"compilerOptions": {
.prettierrc.json
{
Check warning on line 1 in .prettierrc.json
GitHub Actions
/ Lint Codebase
File ignored by default.
"printWidth": 80,
"tabWidth": 2,
"useTabs": false,
Footer
© 2025 GitHub, Inc.
Footer navigation
Terms
Privacy
Security
Status
Docs
Contact
Manage cookies
Do not share my personal information