From 1e7e52a33006c1f952fe1e2dfbee2630acc88a19 Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Fri, 27 Feb 2026 12:40:04 +0000 Subject: [PATCH] Add tests where upload should get skipped --- src/init-action-post-helper.test.ts | 79 +++++++++++++++++++++++++---- 1 file changed, 69 insertions(+), 10 deletions(-) diff --git a/src/init-action-post-helper.test.ts b/src/init-action-post-helper.test.ts index fa53ec92a..d473fdd08 100644 --- a/src/init-action-post-helper.test.ts +++ b/src/init-action-post-helper.test.ts @@ -627,6 +627,13 @@ async function testFailedSarifUpload( return result; } +const singleLanguageMatrix = JSON.stringify({ + language: "javascript", + category: "/language:javascript", + "build-mode": "none", + runner: "ubuntu-latest", +}); + async function mockRiskAssessmentEnv(matrix: string) { process.env["GITHUB_JOB"] = "analyze"; process.env["GITHUB_REPOSITORY"] = "github/codeql-action-fake-repository"; @@ -655,16 +662,9 @@ async function mockRiskAssessmentEnv(matrix: string) { } test("tryUploadSarifIfRunFailed - uploads as artifact for risk assessments", async (t) => { - const matrix = JSON.stringify({ - language: "javascript", - category: "/language:javascript", - "build-mode": "none", - runner: "ubuntu-latest", - }); - - const [uploadArtifact] = await mockRiskAssessmentEnv(matrix); - const logger = new RecordingLogger(); + const [uploadArtifact] = await mockRiskAssessmentEnv(singleLanguageMatrix); + const config = createTestConfig({ analysisKinds: [AnalysisKind.RiskAssessment], codeQLCmd: "codeql-for-testing", @@ -680,7 +680,7 @@ test("tryUploadSarifIfRunFailed - uploads as artifact for risk assessments", asy ); const expectedName = debugArtifacts.sanitizeArtifactName( - `sarif-artifact-${debugArtifacts.getArtifactSuffix(matrix)}`, + `sarif-artifact-${debugArtifacts.getArtifactSuffix(singleLanguageMatrix)}`, ); t.is(result.upload_failed_run_skipped_because, undefined); t.is(result.upload_failed_run_error, undefined); @@ -693,3 +693,62 @@ test("tryUploadSarifIfRunFailed - uploads as artifact for risk assessments", asy ), ); }); + +const skippedUploadTest = test.macro({ + exec: async ( + t: ExecutionContext, + config: Partial, + expectedSkippedReason: string, + ) => { + const logger = new RecordingLogger(); + const [uploadArtifact] = await mockRiskAssessmentEnv(singleLanguageMatrix); + const features = createFeatures([]); + + const result = await initActionPostHelper.tryUploadSarifIfRunFailed( + createTestConfig(config), + parseRepositoryNwo("github/codeql-action-fake-repository"), + features, + logger, + ); + + t.is(result.upload_failed_run_skipped_because, expectedSkippedReason); + t.assert(uploadArtifact.notCalled); + }, + + title: (providedTitle: string = "") => + `tryUploadSarifIfRunFailed - skips upload ${providedTitle}`, +}); + +test( + "without CodeQL command", + skippedUploadTest, + // No codeQLCmd + { + analysisKinds: [AnalysisKind.RiskAssessment], + languages: ["javascript"], + } satisfies Partial, + "CodeQL command not found", +); + +test( + "if no language is configured", + skippedUploadTest, + // No explicit language configuration + { + analysisKinds: [AnalysisKind.RiskAssessment], + codeQLCmd: "codeql-for-testing", + } satisfies Partial, + "Unexpectedly, the configuration is not for a single language.", +); + +test( + "if multiple languages is configured", + skippedUploadTest, + // Multiple explicit languages configured + { + analysisKinds: [AnalysisKind.RiskAssessment], + codeQLCmd: "codeql-for-testing", + languages: ["javascript", "python"], + } satisfies Partial, + "Unexpectedly, the configuration is not for a single language.", +);