Files
boss/tests/execution-foundation-contracts.test.ts
2026-04-02 21:37:10 +08:00

77 lines
2.8 KiB
TypeScript

import assert from "node:assert/strict";
import test from "node:test";
import type { ExecutionImmediateResult } from "@/lib/execution/types";
import {
createExecutionRequest,
isImmediateExecutionResult,
isQueuedExecutionResult,
} from "@/lib/execution/types";
test("ExecutionRequest 工厂会生成稳定默认字段", () => {
const request = createExecutionRequest({
kind: "master_agent_reply",
projectId: "master-agent",
requestMessageId: "msg-1",
body: "你好",
});
assert.equal(request.kind, "master_agent_reply");
assert.equal(request.projectId, "master-agent");
assert.equal(request.requestMessageId, "msg-1");
assert.equal(request.body, "你好");
assert.equal(request.targetProjectId, undefined);
assert.equal(request.targetThreadId, undefined);
assert.equal(Object.prototype.hasOwnProperty.call(request, "requestedByAccount"), true);
assert.equal(Object.prototype.hasOwnProperty.call(request, "requestedByLabel"), true);
assert.equal(Object.prototype.hasOwnProperty.call(request, "taskId"), true);
assert.equal(Object.prototype.hasOwnProperty.call(request, "targetProjectId"), true);
assert.equal(Object.prototype.hasOwnProperty.call(request, "targetThreadId"), true);
assert.equal(Object.prototype.hasOwnProperty.call(request, "modelOverride"), true);
assert.equal(Object.prototype.hasOwnProperty.call(request, "reasoningEffortOverride"), true);
});
test("ExecutionResult 类型守卫能区分 queued 与 immediate", () => {
const queued = {
status: "queued",
taskId: "task-1",
backendId: "master-codex-node",
};
const running = {
status: "running",
taskId: "task-2",
backendId: "master-codex-node",
sessionId: "session-1",
};
const completed: ExecutionImmediateResult = {
status: "completed",
backendId: "openai-api",
output: "done",
};
const failed: ExecutionImmediateResult = {
status: "failed",
backendId: "openai-api",
error: "boom",
};
const invalidCompleted = {
status: "completed",
backendId: "openai-api",
};
const invalidFailed = {
status: "failed",
backendId: "openai-api",
};
assert.equal(isQueuedExecutionResult(queued), true);
assert.equal(isQueuedExecutionResult(running), true);
assert.equal(isImmediateExecutionResult(queued), false);
assert.equal(isImmediateExecutionResult(running), false);
assert.equal(isQueuedExecutionResult(completed), false);
assert.equal(isImmediateExecutionResult(completed), true);
assert.equal(isQueuedExecutionResult(failed), false);
assert.equal(isImmediateExecutionResult(failed), true);
assert.equal(isImmediateExecutionResult(invalidCompleted), false);
assert.equal(isImmediateExecutionResult(invalidFailed), false);
assert.equal(isQueuedExecutionResult(null), false);
assert.equal(isImmediateExecutionResult(undefined), false);
});