Skip to content

Commit 4c60b18

Browse files
committed
Add some tests for findAndUpload and uploadSarif
1 parent d7509a4 commit 4c60b18

File tree

1 file changed

+199
-0
lines changed

1 file changed

+199
-0
lines changed

src/upload-sarif.test.ts

Lines changed: 199 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,199 @@
1+
import * as fs from "fs";
2+
import * as path from "path";
3+
4+
import test, { ExecutionContext } from "ava";
5+
import * as sinon from "sinon";
6+
7+
import {
8+
AnalysisConfig,
9+
AnalysisKind,
10+
CodeQuality,
11+
CodeScanning,
12+
} from "./analyses";
13+
import { getRunnerLogger } from "./logging";
14+
import { createFeatures, setupTests } from "./testing-utils";
15+
import { UploadResult } from "./upload-lib";
16+
import * as uploadLib from "./upload-lib";
17+
import { findAndUpload, uploadSarif, UploadSarifResults } from "./upload-sarif";
18+
import * as util from "./util";
19+
20+
setupTests(test);
21+
22+
const findAndUploadMacro = test.macro({
23+
exec: async (
24+
t: ExecutionContext<unknown>,
25+
sarifFiles: string[],
26+
analysis: AnalysisConfig,
27+
sarifPath: (tempDir: string) => string = (tempDir) => tempDir,
28+
expectedResult: UploadResult | undefined,
29+
) => {
30+
await util.withTmpDir(async (tempDir) => {
31+
sinon.stub(uploadLib, "uploadSpecifiedFiles").resolves(expectedResult);
32+
const logger = getRunnerLogger(true);
33+
const features = createFeatures([]);
34+
35+
for (const sarifFile of sarifFiles) {
36+
fs.writeFileSync(path.join(tempDir, sarifFile), "");
37+
}
38+
39+
const stats = fs.statSync(sarifPath(tempDir));
40+
const actual = await findAndUpload(
41+
logger,
42+
features,
43+
sarifPath(tempDir),
44+
stats,
45+
"",
46+
analysis,
47+
);
48+
49+
t.deepEqual(actual, expectedResult);
50+
});
51+
},
52+
title: (providedTitle = "") => `findAndUpload - ${providedTitle}`,
53+
});
54+
55+
test(
56+
"no matching files",
57+
findAndUploadMacro,
58+
["test.json"],
59+
CodeScanning,
60+
undefined,
61+
undefined,
62+
);
63+
64+
test(
65+
"matching files for Code Scanning with directory path",
66+
findAndUploadMacro,
67+
["test.sarif"],
68+
CodeScanning,
69+
undefined,
70+
{
71+
statusReport: {},
72+
sarifID: "some-id",
73+
},
74+
);
75+
76+
test(
77+
"matching files for Code Scanning with file path",
78+
findAndUploadMacro,
79+
["test.sarif"],
80+
CodeScanning,
81+
(tempDir) => path.join(tempDir, "test.sarif"),
82+
{
83+
statusReport: {},
84+
sarifID: "some-id",
85+
},
86+
);
87+
88+
const uploadSarifMacro = test.macro({
89+
exec: async (
90+
t: ExecutionContext<unknown>,
91+
sarifFiles: string[],
92+
sarifPath: (tempDir: string) => string = (tempDir) => tempDir,
93+
expectedResult: UploadSarifResults,
94+
) => {
95+
await util.withTmpDir(async (tempDir) => {
96+
const logger = getRunnerLogger(true);
97+
const testPath = sarifPath(tempDir);
98+
const features = createFeatures([]);
99+
const uploadSpecifiedFiles = sinon.stub(
100+
uploadLib,
101+
"uploadSpecifiedFiles",
102+
);
103+
104+
for (const analysisKind of Object.keys(expectedResult)) {
105+
uploadSpecifiedFiles
106+
.withArgs(
107+
sinon.match.any,
108+
sinon.match.any,
109+
sinon.match.any,
110+
features,
111+
logger,
112+
analysisKind === AnalysisKind.CodeScanning
113+
? CodeScanning
114+
: CodeQuality,
115+
)
116+
.resolves(expectedResult[analysisKind as AnalysisKind]);
117+
}
118+
119+
for (const sarifFile of sarifFiles) {
120+
fs.writeFileSync(path.join(tempDir, sarifFile), "");
121+
}
122+
123+
const stats = fs.statSync(testPath);
124+
const actual = await uploadSarif(logger, features, testPath, stats, "");
125+
126+
t.deepEqual(actual, expectedResult);
127+
});
128+
},
129+
title: (providedTitle = "") => `uploadSarif - ${providedTitle}`,
130+
});
131+
132+
test(
133+
"SARIF file",
134+
uploadSarifMacro,
135+
["test.sarif"],
136+
(tempDir) => path.join(tempDir, "test.sarif"),
137+
{
138+
"code-scanning": {
139+
statusReport: {},
140+
sarifID: "code-scanning-sarif",
141+
},
142+
},
143+
);
144+
145+
test(
146+
"JSON file",
147+
uploadSarifMacro,
148+
["test.json"],
149+
(tempDir) => path.join(tempDir, "test.json"),
150+
{
151+
"code-scanning": {
152+
statusReport: {},
153+
sarifID: "code-scanning-sarif",
154+
},
155+
},
156+
);
157+
158+
test(
159+
"Code Scanning files",
160+
uploadSarifMacro,
161+
["test.json", "test.sarif"],
162+
undefined,
163+
{
164+
"code-scanning": {
165+
statusReport: {},
166+
sarifID: "code-scanning-sarif",
167+
},
168+
},
169+
);
170+
171+
test(
172+
"Code Quality file",
173+
uploadSarifMacro,
174+
["test.quality.sarif"],
175+
(tempDir) => path.join(tempDir, "test.quality.sarif"),
176+
{
177+
"code-quality": {
178+
statusReport: {},
179+
sarifID: "code-quality-sarif",
180+
},
181+
},
182+
);
183+
184+
test(
185+
"Mixed files",
186+
uploadSarifMacro,
187+
["test.sarif", "test.quality.sarif"],
188+
undefined,
189+
{
190+
"code-scanning": {
191+
statusReport: {},
192+
sarifID: "code-scanning-sarif",
193+
},
194+
"code-quality": {
195+
statusReport: {},
196+
sarifID: "code-quality-sarif",
197+
},
198+
},
199+
);

0 commit comments

Comments
 (0)