From 5d2c77853f16440e0f94449b03f69a3f385ba5dc Mon Sep 17 00:00:00 2001 From: waleedcodes <110061477+waleedcodes@users.noreply.github.com> Date: Fri, 9 Oct 2026 21:25:32 +0500 Subject: [PATCH 1/3] test(engine): test engine verification execution and score bounds --- tests/proofCodeEngine.test.ts | 47 +++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 tests/proofCodeEngine.test.ts diff --git a/tests/proofCodeEngine.test.ts b/tests/proofCodeEngine.test.ts new file mode 100644 index 0000000..0c40c42 --- /dev/null +++ b/tests/proofCodeEngine.test.ts @@ -0,0 +1,47 @@ +import { describe, expect, it } from 'vitest'; +import { ProofCodeEngine } from '../src/engine/proofCodeEngine'; +import { ReportFormatter } from '../src/engine/reportFormatter'; +import { VerificationReport } from '../src/types'; + +describe('ProofCodeEngine & ReportFormatter', () => { + it('should run verification on current project without crashing', async () => { + const engine = new ProofCodeEngine(process.cwd()); + const report = await engine.verify(); + + expect(report).toBeDefined(); + expect(report.score.total).toBeGreaterThanOrEqual(0); + expect(report.score.total).toBeLessThanOrEqual(100); + expect(['READY_TO_SHIP', 'NEEDS_REVIEW', 'BLOCKED']).toContain(report.verdict); + expect(report.summary).toBeDefined(); + }); + + it('should format report to clean markdown', () => { + const sampleReport: VerificationReport = { + timestamp: new Date().toISOString(), + repoRoot: '/workspace', + branch: 'main', + score: { + total: 82, + deductions: [{ reason: '1 Medium Risk detected', amount: 7 }] + }, + verdict: 'NEEDS_REVIEW', + summary: { + filesChanged: 2, + linesAdded: 45, + linesDeleted: 12, + symbolsAffected: 5, + apiRoutesAffected: 1, + testsAdded: 1, + testsAffected: 2, + highRiskCount: 0, + mediumRiskCount: 1, + lowRiskCount: 0 + }, + impact: { + changedFiles: ['src/user.ts'], + changedSymbols: [ + { + symbolName: 'getUser', + kind: 'function', + filePath: 'src/user.ts', + callers: [ From 6719c64e592c466b75d2d8361f28b44fab652420 Mon Sep 17 00:00:00 2001 From: waleedcodes <110061477+waleedcodes@users.noreply.github.com> Date: Fri, 9 Oct 2026 21:25:32 +0500 Subject: [PATCH 2/3] test(engine): test Markdown report formatting and evidence paths --- tests/proofCodeEngine.test.ts | 55 +++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/tests/proofCodeEngine.test.ts b/tests/proofCodeEngine.test.ts index 0c40c42..10a4421 100644 --- a/tests/proofCodeEngine.test.ts +++ b/tests/proofCodeEngine.test.ts @@ -45,3 +45,58 @@ describe('ProofCodeEngine & ReportFormatter', () => { kind: 'function', filePath: 'src/user.ts', callers: [ + { + callerName: 'renderDashboard', + filePath: 'src/dashboard.ts', + line: 25, + hasTest: false + } + ], + isApiRoute: false + } + ], + affectedFiles: ['src/dashboard.ts'], + affectedCallers: [], + affectedRoutes: [], + totalCallersCount: 1, + untestedCallersCount: 1 + }, + risks: [ + { + id: 'RISK-1', + ruleId: 'PC-SEC-005', + category: 'security', + title: 'Unsafe User-Controlled URL', + severity: 'MEDIUM', + description: 'Parameter passed to fetch without validation', + file: 'src/proxy.ts', + line: 14, + snippet: 'fetch(req.body.url)', + evidenceTrace: [ + { + file: 'src/proxy.ts', + line: 14, + description: 'fetch called with req.body.url' + } + ], + recommendation: 'Validate url parameter' + } + ], + rules: [ + { + rule: { + id: 'RULE-1', + title: 'API Authentication', + description: 'Authenticate all routes', + severity: 'HIGH' + }, + status: 'PASS' + } + ], + checks: { + typescript: { name: 'TypeScript', status: 'PASS' }, + eslint: { name: 'ESLint', status: 'PASS' }, + unitTests: { name: 'Unit Tests', status: 'PASS' }, + build: { name: 'Build Check', status: 'PASS' } + } + }; From d48501e78bdbfbdb978e4230a19b0b932e923910 Mon Sep 17 00:00:00 2001 From: waleedcodes <110061477+waleedcodes@users.noreply.github.com> Date: Fri, 9 Oct 2026 21:25:32 +0500 Subject: [PATCH 3/3] test(engine): test What Could Break formatting and terminal/json outputs --- tests/proofCodeEngine.test.ts | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/tests/proofCodeEngine.test.ts b/tests/proofCodeEngine.test.ts index 10a4421..dade6d9 100644 --- a/tests/proofCodeEngine.test.ts +++ b/tests/proofCodeEngine.test.ts @@ -100,3 +100,38 @@ describe('ProofCodeEngine & ReportFormatter', () => { build: { name: 'Build Check', status: 'PASS' } } }; + + const md = ReportFormatter.toMarkdown(sampleReport); + expect(md).toContain('# 🛡️ ProofCode Verification Report'); + expect(md).toContain('82%'); + expect(md).toContain('NEEDS REVIEW'); + expect(md).toContain('Unsafe User-Controlled URL'); + expect(md).toContain('getUser'); + + const terminal = ReportFormatter.toTerminal(sampleReport); + expect(terminal).toContain('PROOFCODE CHANGE VERIFICATION'); + expect(terminal).toContain('82%'); + + const json = ReportFormatter.toJson(sampleReport); + expect(JSON.parse(json).score.total).toBe(82); + + sampleReport.breakageRisks = [ + { + id: 'BRK-1', + severity: 'HIGH', + area: 'Authentication & Session Flow', + trigger: 'Symbol auth was modified', + detail: '3 downstream callers depend on this behavior.', + affectedCallersOrRoutes: ['login (route.ts)', 'AdminPanel.tsx'] + } + ]; + + const mdWithBreakage = ReportFormatter.toMarkdown(sampleReport); + expect(mdWithBreakage).toContain('## 💥 What Could This Change Break?'); + expect(mdWithBreakage).toContain('Authentication & Session Flow'); + + const termWithBreakage = ReportFormatter.toTerminal(sampleReport); + expect(termWithBreakage).toContain('WHAT COULD THIS CHANGE BREAK?'); + expect(termWithBreakage).toContain('Authentication & Session Flow'); + }); +});