import { describe, it, afterEach } from 'node:test'; import assert from 'node:assert/strict'; import fs from 'node:fs'; import os from 'node:os'; import path from 'node:path'; import { saveFindings } from './comments.js'; import { FINDINGS_PATH } from './config.js'; describe('saveFindings', () => { const tempDirs = []; const makeTempDir = prefix => { const dir = fs.mkdtempSync(path.join(os.tmpdir(), prefix)); tempDirs.push(dir); return dir; }; it('writes findings to workspace and mirror dirs when provided', () => { const workspace = makeTempDir('findings-ws-'); const mirrorDir = makeTempDir('findings-mirror-'); const findings = [{ level: 'warning', role: 'Leo', location: 'file.js:1', suggestion: 'test' }]; saveFindings(workspace, findings, mirrorDir); const workspaceText = fs.readFileSync(path.join(workspace, FINDINGS_PATH), 'utf8'); const mirrorText = fs.readFileSync(path.join(mirrorDir, FINDINGS_PATH), 'utf8'); assert.equal(workspaceText, JSON.stringify(findings, null, 2) + '\n'); assert.equal(mirrorText, JSON.stringify(findings, null, 2) + '\n'); }); it('writes only to workspace when mirrorDir is omitted', () => { const workspace = makeTempDir('findings-ws-'); const findings = [{ level: 'info', role: 'Maya', location: 'file.js:2', suggestion: 'note' }]; saveFindings(workspace, findings); const workspaceText = fs.readFileSync(path.join(workspace, FINDINGS_PATH), 'utf8'); assert.equal(workspaceText, JSON.stringify(findings, null, 2) + '\n'); }); it('does not duplicate writes when mirrorDir matches workspace', () => { const workspace = makeTempDir('findings-same-'); const findings = []; const writeCalls = []; const originalWriteFileSync = fs.writeFileSync; fs.writeFileSync = (...args) => { writeCalls.push(args[0]); return originalWriteFileSync(...args); }; try { saveFindings(workspace, findings, workspace); } finally { fs.writeFileSync = originalWriteFileSync; } assert.equal(writeCalls.length, 1); assert.equal(writeCalls[0], path.join(workspace, FINDINGS_PATH)); }); it('writes an empty JSON array when findings is empty', () => { const workspace = makeTempDir('findings-empty-'); saveFindings(workspace, []); const workspaceText = fs.readFileSync(path.join(workspace, FINDINGS_PATH), 'utf8'); assert.equal(workspaceText, '[]\n'); }); afterEach(() => { while (tempDirs.length > 0) { fs.rmSync(tempDirs.pop(), { recursive: true, force: true }); } }); });