Skip to content

Commit d6075c1

Browse files
committed
fix(test): clean dependency report cli errors
1 parent a67f809 commit d6075c1

6 files changed

Lines changed: 76 additions & 3 deletions

scripts/dependency-changes-report.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ if (process.argv[1] && path.resolve(process.argv[1]) === path.resolve(import.met
345345
process.exitCode = exitCode;
346346
},
347347
/** @param {unknown} error */ (error) => {
348-
process.stderr.write(`${error.stack ?? error.message ?? String(error)}\n`);
348+
process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
349349
process.exitCode = 1;
350350
},
351351
);

scripts/dependency-vulnerability-gate.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ if (process.argv[1] && path.resolve(process.argv[1]) === path.resolve(import.met
303303
process.exitCode = exitCode;
304304
},
305305
/** @param {unknown} error */ (error) => {
306-
process.stderr.write(`${error.stack ?? error.message ?? String(error)}\n`);
306+
process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
307307
process.exitCode = 1;
308308
},
309309
);

scripts/transitive-manifest-risk-report.mjs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -656,7 +656,7 @@ if (process.argv[1] && path.resolve(process.argv[1]) === path.resolve(import.met
656656
process.exitCode = exitCode;
657657
},
658658
/** @param {unknown} error */ (error) => {
659-
process.stderr.write(`${error.stack ?? error.message ?? String(error)}\n`);
659+
process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
660660
process.exitCode = 1;
661661
},
662662
);

test/scripts/dependency-changes-report.test.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
// Dependency Changes Report tests cover dependency changes report script behavior.
2+
import { spawnSync } from "node:child_process";
3+
import path from "node:path";
24
import { describe, expect, it } from "vitest";
35
import {
46
createDependencyChangesReport,
@@ -7,6 +9,18 @@ import {
79
parseArgs,
810
} from "../../scripts/dependency-changes-report.mjs";
911

12+
function runCli(...args: string[]) {
13+
return spawnSync(process.execPath, ["scripts/dependency-changes-report.mjs", ...args], {
14+
cwd: path.resolve("."),
15+
encoding: "utf8",
16+
});
17+
}
18+
19+
function expectNoNodeStack(stderr: string) {
20+
expect(stderr).not.toContain("Node.js");
21+
expect(stderr).not.toContain("\n at ");
22+
}
23+
1024
describe("dependency-changes-report", () => {
1125
it("reports added, removed, and changed packages", () => {
1226
const report = createDependencyChangesReport({
@@ -72,4 +86,20 @@ describe("dependency-changes-report", () => {
7286
expect(() => parseArgs([flag, "--json"])).toThrow(`${flag} requires a value`);
7387
}
7488
});
89+
90+
it("reports CLI argument errors without a Node stack trace", () => {
91+
const missingBase = runCli();
92+
expect(missingBase.status).toBe(1);
93+
expect(missingBase.stdout).toBe("");
94+
expect(missingBase.stderr.trim()).toBe(
95+
"Expected --base-ref <git-ref> or --base-lockfile <path>.",
96+
);
97+
expectNoNodeStack(missingBase.stderr);
98+
99+
const unknownArg = runCli("--wat");
100+
expect(unknownArg.status).toBe(1);
101+
expect(unknownArg.stdout).toBe("");
102+
expect(unknownArg.stderr.trim()).toBe("Unsupported argument: --wat");
103+
expectNoNodeStack(unknownArg.stderr);
104+
});
75105
});

test/scripts/dependency-vulnerability-gate.test.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// Dependency Vulnerability Gate tests cover dependency vulnerability gate script behavior.
2+
import { spawnSync } from "node:child_process";
23
import { mkdtemp, rm, writeFile } from "node:fs/promises";
34
import { tmpdir } from "node:os";
45
import path from "node:path";
@@ -9,6 +10,18 @@ import {
910
runDependencyVulnerabilityGate,
1011
} from "../../scripts/dependency-vulnerability-gate.mjs";
1112

13+
function runCli(...args: string[]) {
14+
return spawnSync(process.execPath, ["scripts/dependency-vulnerability-gate.mjs", ...args], {
15+
cwd: path.resolve("."),
16+
encoding: "utf8",
17+
});
18+
}
19+
20+
function expectNoNodeStack(stderr: string) {
21+
expect(stderr).not.toContain("Node.js");
22+
expect(stderr).not.toContain("\n at ");
23+
}
24+
1225
function advisory({
1326
id,
1427
severity,
@@ -53,6 +66,14 @@ snapshots:
5366
}
5467

5568
describe("dependency-vulnerability-gate", () => {
69+
it("reports CLI argument errors without a Node stack trace", () => {
70+
const unknownArg = runCli("--wat");
71+
expect(unknownArg.status).toBe(1);
72+
expect(unknownArg.stdout).toBe("");
73+
expect(unknownArg.stderr.trim()).toBe("Unsupported argument: --wat");
74+
expectNoNodeStack(unknownArg.stderr);
75+
});
76+
5677
it("blocks critical advisories anywhere and high advisories in the production graph", () => {
5778
const result = classifyVulnerabilityFindings({
5879
allAdvisories: {

test/scripts/transitive-manifest-risk-report.test.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
// Transitive Manifest Risk Report tests cover transitive manifest risk report script behavior.
2+
import { spawnSync } from "node:child_process";
3+
import path from "node:path";
24
import { describe, expect, it } from "vitest";
35
import {
46
createTransitiveManifestRiskReport,
@@ -7,7 +9,27 @@ import {
79
renderTransitiveManifestRiskMarkdownReport,
810
} from "../../scripts/transitive-manifest-risk-report.mjs";
911

12+
function runCli(...args: string[]) {
13+
return spawnSync(process.execPath, ["scripts/transitive-manifest-risk-report.mjs", ...args], {
14+
cwd: path.resolve("."),
15+
encoding: "utf8",
16+
});
17+
}
18+
19+
function expectNoNodeStack(stderr: string) {
20+
expect(stderr).not.toContain("Node.js");
21+
expect(stderr).not.toContain("\n at ");
22+
}
23+
1024
describe("transitive-manifest-risk-report", () => {
25+
it("reports CLI argument errors without a Node stack trace", () => {
26+
const unknownArg = runCli("--wat");
27+
expect(unknownArg.status).toBe(1);
28+
expect(unknownArg.stdout).toBe("");
29+
expect(unknownArg.stderr.trim()).toBe("Unsupported argument: --wat");
30+
expectNoNodeStack(unknownArg.stderr);
31+
});
32+
1133
it("reports floating transitive specs, lifecycle scripts, exotic sources, and recently published versions", async () => {
1234
const report = await createTransitiveManifestRiskReport({
1335
packageVersions: [

0 commit comments

Comments
 (0)