import { describe, it, expect } from "vitest"; import path from "node:path"; import os from "node:os"; import fs from "node:fs"; import { parseManifestUseCases } from "./_manifest-ast.js"; function writeManifest(content) { const dir = fs.mkdtempSync(path.join(os.tmpdir(), "manifest-ast-")); const fp = path.join(dir, "feature.manifest.ts"); fs.writeFileSync(fp, content); return fp; } describe("parseManifestUseCases", () => { it("returns an empty object for a manifest with no useCases", () => { const fp = writeManifest(`export const xManifest = defineFeature({ name: "x", requiredCores: [], useCases: {}, realtimeChannels: [], jobs: [], } as const);`); expect(parseManifestUseCases(fp)).toEqual({}); }); it("extracts per-use-case publishes/audits/consumes arrays", () => { const fp = writeManifest(`export const authManifest = defineFeature({ name: "auth", requiredCores: [], useCases: { signIn: { mutates: false, audits: [], publishes: [], consumes: [] }, signUp: { mutates: true, audits: ["user.created"], publishes: ["auth.signed-up"], consumes: [] }, signOut: { mutates: true, audits: ["session.ended"], publishes: [], consumes: [] }, }, realtimeChannels: [], jobs: [], } as const);`); expect(parseManifestUseCases(fp)).toEqual({ signIn: { mutates: false, audits: [], publishes: [], consumes: [] }, signUp: { mutates: true, audits: ["user.created"], publishes: ["auth.signed-up"], consumes: [] }, signOut: { mutates: true, audits: ["session.ended"], publishes: [], consumes: [] }, }); }); it("returns null when file does not exist", () => { expect(parseManifestUseCases("/nonexistent/manifest.ts")).toBeNull(); }); it("returns null when the file has no defineFeature call", () => { const fp = writeManifest(`export const x = 1;`); expect(parseManifestUseCases(fp)).toBeNull(); }); });