81 lines
2.8 KiB
TypeScript
81 lines
2.8 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import {
|
|
AGENT_DEFINITIONS,
|
|
getAgentDefinition,
|
|
} from "@/lib/agent-definitions";
|
|
|
|
describe("agent definitions", () => {
|
|
it("registers exactly one runtime definition for now", () => {
|
|
expect(AGENT_DEFINITIONS.map((definition) => definition.id)).toEqual([
|
|
"campaign-distributor",
|
|
]);
|
|
});
|
|
|
|
it("returns campaign distributor with runtime metadata and blueprint contract", () => {
|
|
const definition = getAgentDefinition("campaign-distributor");
|
|
|
|
expect(definition?.metadata.name).toBe("Campaign Distributor");
|
|
expect(definition?.metadata.color).toBe("yellow");
|
|
expect(definition?.docs.markdownPath).toBe(
|
|
"components/agents/campaign-distributor.md",
|
|
);
|
|
expect(definition?.acceptedSourceNodeTypes).toContain("text");
|
|
expect(definition?.briefFieldOrder).toEqual([
|
|
"briefing",
|
|
"audience",
|
|
"tone",
|
|
"targetChannels",
|
|
"hardConstraints",
|
|
]);
|
|
expect(definition?.channelCatalog).toContain("Instagram Feed");
|
|
expect(definition?.operatorParameters).toEqual(
|
|
expect.arrayContaining([
|
|
expect.objectContaining({ key: "targetChannels", type: "multi-select" }),
|
|
expect.objectContaining({ key: "variantsPerChannel", type: "select" }),
|
|
expect.objectContaining({ key: "toneOverride", type: "select" }),
|
|
]),
|
|
);
|
|
expect(definition?.analysisRules.length).toBeGreaterThan(0);
|
|
expect(definition?.executionRules.length).toBeGreaterThan(0);
|
|
expect(definition?.defaultOutputBlueprints).toEqual(
|
|
expect.arrayContaining([
|
|
expect.objectContaining({
|
|
artifactType: "social-caption-pack",
|
|
requiredSections: expect.arrayContaining(["Hook", "Caption"]),
|
|
requiredMetadataKeys: expect.arrayContaining([
|
|
"objective",
|
|
"targetAudience",
|
|
]),
|
|
qualityChecks: expect.arrayContaining([
|
|
"matches_channel_constraints",
|
|
]),
|
|
}),
|
|
]),
|
|
);
|
|
});
|
|
|
|
it("keeps shared runtime fields accessible without template-specific branching", () => {
|
|
const definition = getAgentDefinition("campaign-distributor");
|
|
if (!definition) {
|
|
throw new Error("Missing definition");
|
|
}
|
|
|
|
const commonProjection = {
|
|
id: definition.id,
|
|
markdownPath: definition.docs.markdownPath,
|
|
sourceTypeCount: definition.acceptedSourceNodeTypes.length,
|
|
blueprintCount: definition.defaultOutputBlueprints.length,
|
|
};
|
|
|
|
expect(commonProjection).toEqual({
|
|
id: "campaign-distributor",
|
|
markdownPath: "components/agents/campaign-distributor.md",
|
|
sourceTypeCount: definition.acceptedSourceNodeTypes.length,
|
|
blueprintCount: definition.defaultOutputBlueprints.length,
|
|
});
|
|
expect(commonProjection.sourceTypeCount).toBeGreaterThan(0);
|
|
expect(commonProjection.blueprintCount).toBeGreaterThan(0);
|
|
});
|
|
});
|