Files
saltbo__agent-kanban/tests/unit/application/task-workflow-actor.test.ts
realmroot[bot] 96fdd70d2c feat(api)!: redesign task resource operations (#265)
* feat(api)!: redesign task resource operations

Publish the complete resource-oriented OpenAPI contract, enforce scope-based authorization at the HTTP boundary, and replace lifecycle command routes with Task PATCH and nested Claim/Event resources.

Add server-side Task CAS, migration coverage, updated Agent Skills, and browser/API regression tests.

BREAKING CHANGE: remove the legacy task lifecycle endpoints and move bounded waits to /tasks/{taskId}/events.

* refactor(tasks)!: make claims create-only

Remove Task Claim retrieval and deletion routes, the release scope, live deletion logic, and release workflow guidance.

Keep historical release records readable for migration and audit compatibility.

BREAKING CHANGE: remove GET and DELETE /tasks/{taskId}/claims/{claimId} and the task:release scope.

* test(ci): align actor and projection contracts

Cover machine and service Task Action writes and update Agent detail fixtures to the canonical assignedTo query and paged lowerCamelCase response.

* fix(api): preserve merge patch fields and consume browser pagination

* test(ui): include terminal pagination in agent task fixture

---------

Co-authored-by: jarvis <jarvis@agents.realmroot.dev>
2026-09-05 02:40:42 +00:00

21 lines
921 B
TypeScript

import { describe, expect, it } from "vitest";
import { taskWorkflowActor } from "../../../server/http/tasks/workflowSupport";
describe("taskWorkflowActor", () => {
it.each([
["human", undefined, "human-subject", "human", "human-subject"],
["agent", "agent-actor", "controller-subject", "agent", "agent-actor"],
["machine", "machine-actor", "machine-subject", "machine", "machine-subject"],
["service", "service-actor", "service-subject", "service", "service-subject"],
] as const)("preserves a %s principal as the workflow audit actor", (type, actorId, subjectId, actorType, expectedId) => {
const values = { principal: { type, actorId, subjectId } };
const context = {
get(key: keyof typeof values) {
return values[key];
},
} as Parameters<typeof taskWorkflowActor>[0];
expect(taskWorkflowActor(context)).toEqual({ type: actorType, id: expectedId });
});
});