From d3afdbb5081e7cefce85494c11f7730359758042 Mon Sep 17 00:00:00 2001 From: webmasterdevices Date: Mon, 17 Mar 2025 07:12:53 +0000 Subject: [PATCH] Create test-attest --- test-attest | 194 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 194 insertions(+) create mode 100644 test-attest diff --git a/test-attest b/test-attest new file mode 100644 index 0000000..363245d --- /dev/null +++ b/test-attest @@ -0,0 +1,194 @@ +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 + + 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