80 lines
3.0 KiB
TypeScript
80 lines
3.0 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.executionPrompt, undefined);
|
|
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, "executionPrompt"), true);
|
|
assert.equal(Object.prototype.hasOwnProperty.call(request, "requestedBackendId"), 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);
|
|
});
|