Files
agentic-dev/packages/core-eslint/rules/_manifest-ast.test.js

54 lines
1.9 KiB
JavaScript

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();
});
});