feat: add execution foundation contracts
This commit is contained in:
76
tests/execution-foundation-contracts.test.ts
Normal file
76
tests/execution-foundation-contracts.test.ts
Normal file
@@ -0,0 +1,76 @@
|
||||
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);
|
||||
});
|
||||
Reference in New Issue
Block a user