88 lines
2.8 KiB
TypeScript
88 lines
2.8 KiB
TypeScript
import { env } from "@code/env/convex";
|
|
import { convexTest } from "convex-test";
|
|
import { anyApi } from "convex/server";
|
|
import { describe, expect, test } from "vitest";
|
|
|
|
import schema from "./schema";
|
|
|
|
declare global {
|
|
interface ImportMeta {
|
|
readonly glob: (pattern: string) => Record<string, () => Promise<unknown>>;
|
|
}
|
|
}
|
|
|
|
const modules = import.meta.glob("./**/*.ts");
|
|
const api = anyApi;
|
|
|
|
describe("signalRouting", () => {
|
|
test("creates one normalized Signal from admitted conversation evidence", async () => {
|
|
const t = convexTest({ modules, schema });
|
|
const organization = await t.run(async (ctx) => {
|
|
const organizationId = await ctx.db.insert("organizations", {
|
|
createdAt: 1,
|
|
createdBy: "user",
|
|
kind: "personal",
|
|
name: "Personal",
|
|
});
|
|
const projectId = await ctx.db.insert("projects", {
|
|
createdAt: 1,
|
|
name: "Zopu",
|
|
normalizedSourceUrl: "https://example.com/zopu",
|
|
organizationId,
|
|
repositoryPath: "puter/zopu",
|
|
sourceHost: "example.com",
|
|
sourceUrl: "https://example.com/zopu",
|
|
updatedAt: 1,
|
|
});
|
|
const conversationId = await ctx.db.insert("conversations", {
|
|
createdAt: 1,
|
|
organizationId,
|
|
});
|
|
const turnId = await ctx.db.insert("conversationTurns", {
|
|
clientRequestId: "request-1",
|
|
conversationId,
|
|
createdAt: 1,
|
|
status: "running",
|
|
});
|
|
const messageId = await ctx.db.insert("conversationMessages", {
|
|
content: "Fix the deploy",
|
|
conversationId,
|
|
createdAt: 1,
|
|
ordinal: 0,
|
|
role: "user",
|
|
turnId,
|
|
});
|
|
return { messageId, organizationId, projectId };
|
|
});
|
|
|
|
const result = await t.mutation(api.signalRouting.createSignal, {
|
|
messageIds: [String(organization.messageId)],
|
|
organizationId: organization.organizationId,
|
|
problemStatement: {
|
|
constraints: ["Keep production stable"],
|
|
desiredOutcome: "Deploy succeeds",
|
|
summary: "The deploy is failing",
|
|
title: "Fix deploy",
|
|
},
|
|
processedByAgentInstanceId: String(organization.organizationId),
|
|
projectId: organization.projectId,
|
|
token: env.FLUE_DB_TOKEN,
|
|
});
|
|
|
|
const stored = await t.run(async (ctx) => ({
|
|
constraints: await ctx.db.query("signalConstraints").collect(),
|
|
signal: await ctx.db.get(result.signalId),
|
|
sources: await ctx.db.query("signalSources").collect(),
|
|
}));
|
|
expect(stored.signal).toMatchObject({
|
|
desiredOutcome: "Deploy succeeds",
|
|
summary: "The deploy is failing",
|
|
title: "Fix deploy",
|
|
});
|
|
expect(stored.constraints.map((row) => row.value)).toEqual([
|
|
"Keep production stable",
|
|
]);
|
|
expect(stored.sources[0]?.rawTextSnapshot).toBe("Fix the deploy");
|
|
});
|
|
});
|