const test = require('node:test'); const assert = require('node:assert/strict'); const fs = require('node:fs'); const path = require('node:path'); const os = require('node:os'); const { parseArgs: parseExtractArgs, cleanupInvalidFile } = require('../lib/extract-sboms.js'); const { parseArgs: parseScanArgs } = require('../lib/scan-sboms.js'); test('extract-sboms parseArgs parses command line arguments and defaults', () => { const argv = [ 'node', 'extract-sboms.js', '--head-image', 'my-repo/head:1.0', '--target-image', 'my-repo/target:1.0', '--architectures', 'amd64,arm64', '--use-inbuild-sbom', 'true', ]; const args = parseExtractArgs(argv); assert.equal(args.headImage, 'my-repo/head:1.0'); assert.equal(args.targetImage, 'my-repo/target:1.0'); assert.equal(args.architectures, 'amd64,arm64'); assert.equal(args.useInbuildSbom, 'true'); }); test('extract-sboms cleanupInvalidFile removes empty files and files containing null', () => { const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'sbom-clean-')); const emptyFile = path.join(tmpDir, 'empty.json'); const nullFile = path.join(tmpDir, 'null.json'); const validFile = path.join(tmpDir, 'valid.json'); fs.writeFileSync(emptyFile, ''); fs.writeFileSync(nullFile, 'null\n'); fs.writeFileSync(validFile, '{"spdxVersion": "SPDX-2.3"}'); cleanupInvalidFile(emptyFile); cleanupInvalidFile(nullFile); cleanupInvalidFile(validFile); assert.equal(fs.existsSync(emptyFile), false); assert.equal(fs.existsSync(nullFile), false); assert.equal(fs.existsSync(validFile), true); fs.rmSync(tmpDir, { recursive: true, force: true }); }); test('scan-sboms parseArgs parses scan arguments and defaults', () => { const argv = [ 'node', 'scan-sboms.js', '--head-image', 'my-head:latest', '--target-image', 'my-target:latest', '--target-branch', 'feature', '--output-delta', 'custom-delta.md', '--output-summary', 'custom-summary.md', ]; const args = parseScanArgs(argv); assert.equal(args.headImage, 'my-head:latest'); assert.equal(args.targetImage, 'my-target:latest'); assert.equal(args.targetBranch, 'feature'); assert.equal(args.outputDelta, 'custom-delta.md'); assert.equal(args.outputSummary, 'custom-summary.md'); assert.equal(args.useInbuildSbom, 'false'); });