diff --git a/src/upload-sarif.test.ts b/src/upload-sarif.test.ts index 64759ad5b..be14e2d63 100644 --- a/src/upload-sarif.test.ts +++ b/src/upload-sarif.test.ts @@ -14,7 +14,7 @@ import { getRunnerLogger } from "./logging"; import { createFeatures, setupTests } from "./testing-utils"; import { UploadResult } from "./upload-lib"; import * as uploadLib from "./upload-lib"; -import { findAndUpload, uploadSarif, UploadSarifResults } from "./upload-sarif"; +import { findAndUpload, uploadSarif } from "./upload-sarif"; import * as util from "./util"; setupTests(test); @@ -85,17 +85,25 @@ test( }, ); +interface UploadSarifExpectedResult { + uploadResult?: UploadResult; + expectedFiles?: string[]; +} + const uploadSarifMacro = test.macro({ exec: async ( t: ExecutionContext, sarifFiles: string[], sarifPath: (tempDir: string) => string = (tempDir) => tempDir, - expectedResult: UploadSarifResults, + expectedResult: Partial>, ) => { await util.withTmpDir(async (tempDir) => { const logger = getRunnerLogger(true); const testPath = sarifPath(tempDir); const features = createFeatures([]); + + const toFullPath = (filename: string) => path.join(tempDir, filename); + const uploadSpecifiedFiles = sinon.stub( uploadLib, "uploadSpecifiedFiles", @@ -113,16 +121,38 @@ const uploadSarifMacro = test.macro({ ? CodeScanning : CodeQuality, ) - .resolves(expectedResult[analysisKind as AnalysisKind]); + .resolves(expectedResult[analysisKind as AnalysisKind]?.uploadResult); } - for (const sarifFile of sarifFiles) { - fs.writeFileSync(path.join(tempDir, sarifFile), ""); + const fullSarifPaths = sarifFiles.map(toFullPath); + for (const sarifFile of fullSarifPaths) { + fs.writeFileSync(sarifFile, ""); } const actual = await uploadSarif(logger, features, "", testPath); - t.deepEqual(actual, expectedResult); + for (const analysisKind of Object.values(AnalysisKind)) { + const analyisKindResult = expectedResult[analysisKind]; + if (analyisKindResult) { + t.deepEqual(actual[analysisKind], analyisKindResult.uploadResult); + + t.assert( + uploadSpecifiedFiles.calledWith( + analyisKindResult.expectedFiles?.map(toFullPath) ?? + fullSarifPaths, + sinon.match.any, + sinon.match.any, + features, + logger, + analysisKind === AnalysisKind.CodeScanning + ? CodeScanning + : CodeQuality, + ), + ); + } else { + t.is(actual[analysisKind], undefined); + } + } }); }, title: (providedTitle = "") => `uploadSarif - ${providedTitle}`, @@ -135,8 +165,10 @@ test( (tempDir) => path.join(tempDir, "test.sarif"), { "code-scanning": { - statusReport: {}, - sarifID: "code-scanning-sarif", + uploadResult: { + statusReport: {}, + sarifID: "code-scanning-sarif", + }, }, }, ); @@ -148,8 +180,10 @@ test( (tempDir) => path.join(tempDir, "test.json"), { "code-scanning": { - statusReport: {}, - sarifID: "code-scanning-sarif", + uploadResult: { + statusReport: {}, + sarifID: "code-scanning-sarif", + }, }, }, ); @@ -161,8 +195,11 @@ test( undefined, { "code-scanning": { - statusReport: {}, - sarifID: "code-scanning-sarif", + uploadResult: { + statusReport: {}, + sarifID: "code-scanning-sarif", + }, + expectedFiles: ["test.sarif"], }, }, ); @@ -174,8 +211,10 @@ test( (tempDir) => path.join(tempDir, "test.quality.sarif"), { "code-quality": { - statusReport: {}, - sarifID: "code-quality-sarif", + uploadResult: { + statusReport: {}, + sarifID: "code-quality-sarif", + }, }, }, ); @@ -187,12 +226,18 @@ test( undefined, { "code-scanning": { - statusReport: {}, - sarifID: "code-scanning-sarif", + uploadResult: { + statusReport: {}, + sarifID: "code-scanning-sarif", + }, + expectedFiles: ["test.sarif"], }, "code-quality": { - statusReport: {}, - sarifID: "code-quality-sarif", + uploadResult: { + statusReport: {}, + sarifID: "code-quality-sarif", + }, + expectedFiles: ["test.quality.sarif"], }, }, );