diff --git a/__tests__/index.test.js b/__tests__/index.test.js index c6f7f94..2a3e2ef 100644 --- a/__tests__/index.test.js +++ b/__tests__/index.test.js @@ -128,6 +128,84 @@ describe('Azure DevOps Commit Validator', () => { // Restore context mockContext.payload.pull_request = originalPR; }); + + it('should fail if both check-commits and check-pull-request are false', async () => { + mockGetInput.mockImplementation(name => { + if (name === 'check-commits') return 'false'; + if (name === 'check-pull-request') return 'false'; + if (name === 'github-token') return 'github-token'; + return 'false'; + }); + + await run(); + + expect(mockSetFailed).toHaveBeenCalledWith( + "At least one of 'check-commits' or 'check-pull-request' must be set to true. Both are currently set to false." + ); + }); + + it('should pass when only check-commits is enabled', async () => { + mockGetInput.mockImplementation(name => { + if (name === 'check-commits') return 'true'; + if (name === 'check-pull-request') return 'false'; + if (name === 'github-token') return 'github-token'; + if (name === 'fail-if-missing-workitem-commit-link') return 'false'; + return 'false'; + }); + + mockOctokit.rest.pulls.listCommits.mockResolvedValue({ + data: [] + }); + + await run(); + + expect(mockSetFailed).not.toHaveBeenCalled(); + }); + + it('should pass when only check-pull-request is enabled', async () => { + mockGetInput.mockImplementation(name => { + if (name === 'check-commits') return 'false'; + if (name === 'check-pull-request') return 'true'; + if (name === 'github-token') return 'github-token'; + return 'false'; + }); + + mockOctokit.rest.pulls.get.mockResolvedValue({ + data: { + title: 'Test PR AB#123', + body: 'Test body' + } + }); + + await run(); + + expect(mockSetFailed).not.toHaveBeenCalled(); + }); + + it('should pass when both checks are enabled', async () => { + mockGetInput.mockImplementation(name => { + if (name === 'check-commits') return 'true'; + if (name === 'check-pull-request') return 'true'; + if (name === 'github-token') return 'github-token'; + if (name === 'fail-if-missing-workitem-commit-link') return 'false'; + return 'false'; + }); + + mockOctokit.rest.pulls.listCommits.mockResolvedValue({ + data: [] + }); + + mockOctokit.rest.pulls.get.mockResolvedValue({ + data: { + title: 'Test PR AB#123', + body: 'Test body' + } + }); + + await run(); + + expect(mockSetFailed).not.toHaveBeenCalled(); + }); }); describe('Commit validation', () => { diff --git a/badges/coverage.svg b/badges/coverage.svg index c0e9f8b..dbfed95 100644 --- a/badges/coverage.svg +++ b/badges/coverage.svg @@ -1 +1 @@ -Coverage: 80.37%Coverage80.37% \ No newline at end of file +Coverage: 80.56%Coverage80.56% \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index ebbd9ec..27c6181 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "azure-devops-work-item-link-enforcer-and-linker", - "version": "3.0.5", + "version": "3.0.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "azure-devops-work-item-link-enforcer-and-linker", - "version": "3.0.5", + "version": "3.0.6", "license": "MIT", "dependencies": { "@actions/core": "^2.0.1", diff --git a/package.json b/package.json index 549ac1d..a8cd0cd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "azure-devops-work-item-link-enforcer-and-linker", - "version": "3.0.5", + "version": "3.0.6", "private": true, "type": "module", "description": "GitHub Action to enforce that each commit in a pull request be linked to an Azure DevOps work item and automatically link the pull request to each work item ", diff --git a/src/index.js b/src/index.js index 3e2b123..a132432 100644 --- a/src/index.js +++ b/src/index.js @@ -39,6 +39,14 @@ export async function run() { const commentOnFailure = core.getInput('comment-on-failure') === 'true'; const validateWorkItemExistsFlag = core.getInput('validate-work-item-exists') === 'true'; + // Validate that at least one check is enabled + if (!checkPullRequest && !checkCommits) { + core.setFailed( + `At least one of 'check-commits' or 'check-pull-request' must be set to true. Both are currently set to false.` + ); + return; + } + // Get context const context = github.context; const pullNumber = context.payload.pull_request?.number;