* initial esm conversion Signed-off-by: Brian DeHamer <bdehamer@github.com> * esm'ify jest tests Signed-off-by: Brian DeHamer <bdehamer@github.com> * lint issues Signed-off-by: Brian DeHamer <bdehamer@github.com> * debug mock Signed-off-by: Brian DeHamer <bdehamer@github.com> * glob updated Signed-off-by: Brian DeHamer <bdehamer@github.com> * async all file functions Signed-off-by: Brian DeHamer <bdehamer@github.com> * update @actions/github Signed-off-by: Brian DeHamer <bdehamer@github.com> * update @actions/attest Signed-off-by: Brian DeHamer <bdehamer@github.com> * rebuild package-lock.json Signed-off-by: Brian DeHamer <bdehamer@github.com> * use experimental flag for jest in ci Signed-off-by: Brian DeHamer <bdehamer@github.com> * remove stray istanbul ignore Signed-off-by: Brian DeHamer <bdehamer@github.com> * Optimize getSubjectFromPath to avoid concurrent stat calls Co-authored-by: bdehamer <398027+bdehamer@users.noreply.github.com> * Fix boundary condition for MAX_SUBJECT_COUNT check Co-authored-by: bdehamer <398027+bdehamer@users.noreply.github.com> * Improve error message clarity for subject count limit Co-authored-by: bdehamer <398027+bdehamer@users.noreply.github.com> * Update test to match new error message format Co-authored-by: bdehamer <398027+bdehamer@users.noreply.github.com> * rebuild dist Signed-off-by: Brian DeHamer <bdehamer@github.com> * Fix parseSBOMFromPath to check file size before reading Co-authored-by: bdehamer <398027+bdehamer@users.noreply.github.com> * Build package with updated changes Co-authored-by: bdehamer <398027+bdehamer@users.noreply.github.com> --------- Signed-off-by: Brian DeHamer <bdehamer@github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: bdehamer <398027+bdehamer@users.noreply.github.com>
49 lines
1.4 KiB
TypeScript
49 lines
1.4 KiB
TypeScript
import type { Predicate } from '@actions/attest'
|
|
import { jest } from '@jest/globals'
|
|
|
|
// Mock function
|
|
const mockBuildSLSAProvenancePredicate = jest.fn<() => Promise<Predicate>>()
|
|
|
|
// Mock @actions/attest
|
|
jest.unstable_mockModule('@actions/attest', () => ({
|
|
buildSLSAProvenancePredicate: mockBuildSLSAProvenancePredicate
|
|
}))
|
|
|
|
// Dynamic import after mocking
|
|
const { generateProvenancePredicate } = await import('../src/provenance')
|
|
|
|
describe('generateProvenancePredicate', () => {
|
|
const mockPredicate = {
|
|
type: 'https://slsa.dev/provenance/v1',
|
|
params: {
|
|
buildDefinition: {
|
|
buildType: 'https://actions.github.io/buildtypes/workflow/v1'
|
|
},
|
|
runDetails: {
|
|
builder: { id: 'https://github.com/actions/runner' }
|
|
}
|
|
}
|
|
}
|
|
|
|
beforeEach(() => {
|
|
jest.clearAllMocks()
|
|
mockBuildSLSAProvenancePredicate.mockResolvedValue(mockPredicate)
|
|
})
|
|
|
|
it('returns the SLSA provenance predicate', async () => {
|
|
const result = await generateProvenancePredicate()
|
|
|
|
expect(mockBuildSLSAProvenancePredicate).toHaveBeenCalledTimes(1)
|
|
expect(result).toEqual(mockPredicate)
|
|
})
|
|
|
|
it('propagates errors from buildSLSAProvenancePredicate', async () => {
|
|
const error = new Error('Failed to build provenance')
|
|
mockBuildSLSAProvenancePredicate.mockRejectedValue(error)
|
|
|
|
await expect(generateProvenancePredicate()).rejects.toThrow(
|
|
'Failed to build provenance'
|
|
)
|
|
})
|
|
})
|