Files
boss/tests/master-agent-prompts-memory-routes.test.ts

132 lines
4.6 KiB
TypeScript

import test from "node:test";
import assert from "node:assert/strict";
import os from "node:os";
import path from "node:path";
import { mkdtemp, rm } from "node:fs/promises";
import { NextRequest } from "next/server";
let runtimeRoot = "";
let AUTH_SESSION_COOKIE = "";
let createAuthSession: (typeof import("../src/lib/boss-data"))["createAuthSession"];
let getMasterAgentPromptPolicyRoute: typeof import("../src/app/api/v1/master-agent/prompt-policy/route");
let getUserMasterPromptRoute: typeof import("../src/app/api/v1/master-agent/prompt/route");
let getUserMasterMemoriesRoute: typeof import("../src/app/api/v1/master-agent/memories/route");
let patchUserMasterMemoryRoute: typeof import("../src/app/api/v1/master-agent/memories/[memoryId]/route");
async function setup() {
if (runtimeRoot) return;
runtimeRoot = await mkdtemp(path.join(os.tmpdir(), "boss-master-agent-prompts-memory-routes-"));
process.env.BOSS_RUNTIME_ROOT = runtimeRoot;
process.env.BOSS_STATE_FILE = path.join(runtimeRoot, "boss-state.json");
const [data, auth, promptPolicyRoute, userPromptRoute, memoriesRoute, memoryRoute] = await Promise.all([
import("../src/lib/boss-data.ts"),
import("../src/lib/boss-auth.ts"),
import("../src/app/api/v1/master-agent/prompt-policy/route.ts"),
import("../src/app/api/v1/master-agent/prompt/route.ts"),
import("../src/app/api/v1/master-agent/memories/route.ts"),
import("../src/app/api/v1/master-agent/memories/[memoryId]/route.ts"),
]);
createAuthSession = data.createAuthSession;
AUTH_SESSION_COOKIE = auth.AUTH_SESSION_COOKIE;
getMasterAgentPromptPolicyRoute = promptPolicyRoute;
getUserMasterPromptRoute = userPromptRoute;
getUserMasterMemoriesRoute = memoriesRoute;
patchUserMasterMemoryRoute = memoryRoute;
}
async function createAuthedRequest(account = "17600003315", role: "member" | "admin" | "highest_admin" = "highest_admin") {
await setup();
const session = await createAuthSession({
account,
role,
displayName: "Boss 超级管理员",
loginMethod: "password",
});
return {
headers: {
"content-type": "application/json",
cookie: `${AUTH_SESSION_COOKIE}=${session.sessionToken}`,
},
};
}
test.after(async () => {
if (runtimeRoot) {
await rm(runtimeRoot, { recursive: true, force: true });
}
});
test("master-agent prompt and memory routes support admin prompt, user prompt, and memory CRUD", async () => {
await setup();
const adminRequest = await createAuthedRequest();
const promptGet = await getMasterAgentPromptPolicyRoute.GET(
new NextRequest("http://127.0.0.1:3000/api/v1/master-agent/prompt-policy", {
method: "GET",
headers: adminRequest.headers,
}),
);
assert.equal(promptGet.status, 200);
const promptPost = await getMasterAgentPromptPolicyRoute.POST(
new NextRequest("http://127.0.0.1:3000/api/v1/master-agent/prompt-policy", {
method: "POST",
headers: adminRequest.headers,
body: JSON.stringify({ globalPrompt: "管理员全局主提示词" }),
}),
);
assert.equal(promptPost.status, 200);
const userPromptPost = await getUserMasterPromptRoute.POST(
new NextRequest("http://127.0.0.1:3000/api/v1/master-agent/prompt", {
method: "POST",
headers: adminRequest.headers,
body: JSON.stringify({ content: "用户私有主提示词" }),
}),
);
assert.equal(userPromptPost.status, 200);
const memoriesPost = await getUserMasterMemoriesRoute.POST(
new NextRequest("http://127.0.0.1:3000/api/v1/master-agent/memories", {
method: "POST",
headers: adminRequest.headers,
body: JSON.stringify({
scope: "project",
projectId: "master-agent",
title: "项目进度",
content: "主 Agent 提示词与记忆链路完成。",
memoryType: "project_progress",
tags: ["主Agent", "记忆"],
}),
}),
);
assert.equal(memoriesPost.status, 200);
const memoriesPayload = (await memoriesPost.json()) as {
ok: boolean;
memory?: { memoryId: string };
};
assert.equal(memoriesPayload.ok, true);
assert.ok(memoriesPayload.memory?.memoryId);
const patchResponse = await patchUserMasterMemoryRoute.PATCH(
new NextRequest(
`http://127.0.0.1:3000/api/v1/master-agent/memories/${memoriesPayload.memory?.memoryId}`,
{
method: "PATCH",
headers: adminRequest.headers,
body: JSON.stringify({
content: "主 Agent 提示词与记忆链路已完成。",
tags: ["提示词", "记忆"],
}),
},
),
{ params: Promise.resolve({ memoryId: memoriesPayload.memory?.memoryId ?? "" }) },
);
assert.equal(patchResponse.status, 200);
});