v0.2.0: Git-native architecture (#1)
This commit was merged in pull request #1.
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
import * as fs from "node:fs";
|
||||
import * as path from "node:path";
|
||||
import * as os from "node:os";
|
||||
import { VerificationPipeline } from "../verification/index.js";
|
||||
|
||||
describe("VerificationPipeline", () => {
|
||||
let tempDir: string;
|
||||
|
||||
beforeEach(() => {
|
||||
tempDir = fs.mkdtempSync(path.join(os.tmpdir(), "ci-pipeline-test-"));
|
||||
const phaseDir = path.join(tempDir, ".planning", "phases", "phase-1");
|
||||
fs.mkdirSync(phaseDir, { recursive: true });
|
||||
fs.writeFileSync(path.join(phaseDir, "PLAN.md"), "# Plan\n\n- [ ] Task 1\n- [ ] Task 2\n");
|
||||
const ciDir = path.join(tempDir, ".ci");
|
||||
fs.mkdirSync(ciDir, { recursive: true });
|
||||
fs.writeFileSync(path.join(ciDir, "config.json"), JSON.stringify({ autonomy: { level: "full" } }));
|
||||
fs.writeFileSync(path.join(ciDir, "specification.md"), "# Test\n## Objective\nBuild it\n\n## Requirements\n- Feature A\n");
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
fs.rmSync(tempDir, { recursive: true, force: true });
|
||||
});
|
||||
|
||||
it("runs all 4 verification layers", async () => {
|
||||
const pipeline = new VerificationPipeline(tempDir);
|
||||
const result = await pipeline.run(1);
|
||||
|
||||
expect(result.structural).toBeDefined();
|
||||
expect(result.behavioral).toBeDefined();
|
||||
expect(result.security).toBeDefined();
|
||||
expect(result.quality).toBeDefined();
|
||||
expect(result.total_checks).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
it("structural layer has correct metadata", async () => {
|
||||
const pipeline = new VerificationPipeline(tempDir);
|
||||
const result = await pipeline.run(1);
|
||||
|
||||
expect(result.structural.layer).toBe(1);
|
||||
expect(result.structural.name).toBe("Structural");
|
||||
expect(result.structural.checks.length).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
it("behavioral layer has correct metadata", async () => {
|
||||
const pipeline = new VerificationPipeline(tempDir);
|
||||
const result = await pipeline.run(1);
|
||||
|
||||
expect(result.behavioral.layer).toBe(2);
|
||||
expect(result.behavioral.name).toBe("Behavioral");
|
||||
});
|
||||
|
||||
it("security layer has correct metadata", async () => {
|
||||
const pipeline = new VerificationPipeline(tempDir);
|
||||
const result = await pipeline.run(1);
|
||||
|
||||
expect(result.security.layer).toBe(3);
|
||||
expect(result.security.name).toBe("Security");
|
||||
});
|
||||
|
||||
it("quality layer has correct metadata", async () => {
|
||||
const pipeline = new VerificationPipeline(tempDir);
|
||||
const result = await pipeline.run(1);
|
||||
|
||||
expect(result.quality.layer).toBe(4);
|
||||
expect(result.quality.name).toBe("Code Quality");
|
||||
});
|
||||
|
||||
it("counts total checks correctly", async () => {
|
||||
const pipeline = new VerificationPipeline(tempDir);
|
||||
const result = await pipeline.run(1);
|
||||
|
||||
expect(result.total_checks).toBe(
|
||||
result.structural.checks.length +
|
||||
result.behavioral.checks.length +
|
||||
result.security.checks.length +
|
||||
result.quality.checks.length
|
||||
);
|
||||
});
|
||||
|
||||
it("passes when basic structure is present", async () => {
|
||||
const pipeline = new VerificationPipeline(tempDir);
|
||||
const result = await pipeline.run(1);
|
||||
|
||||
expect(result.structural.passed).toBe(true);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user