Files
horus-3d/tests/unit/chatInteractionWorkflow.test.ts
Luke The Dev 4fa4f13558 First Release of Claw3D (#11)
Co-authored-by: iamlukethedev <iamlukethedev@users.noreply.github.com>
2026-03-19 23:14:04 -05:00

179 lines
4.1 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
planDraftFlushIntent,
planDraftTimerIntent,
planNewSessionIntent,
planStopRunIntent,
} from "@/features/agents/operations/chatInteractionWorkflow";
describe("chatInteractionWorkflow", () => {
it("denies stop-run when gateway is disconnected", () => {
const intent = planStopRunIntent({
status: "disconnected",
agentId: "agent-1",
sessionKey: "session-1",
busyAgentId: null,
});
expect(intent).toEqual({
kind: "deny",
reason: "not-connected",
message: "Connect to gateway before stopping a run.",
});
});
it("denies stop-run when session key is missing", () => {
const intent = planStopRunIntent({
status: "connected",
agentId: "agent-1",
sessionKey: " ",
busyAgentId: null,
});
expect(intent).toEqual({
kind: "deny",
reason: "missing-session-key",
message: "Missing session key for agent.",
});
});
it("skips duplicate stop-run requests while same agent is busy", () => {
const intent = planStopRunIntent({
status: "connected",
agentId: "agent-1",
sessionKey: "session-1",
busyAgentId: "agent-1",
});
expect(intent).toEqual({
kind: "skip-busy",
});
});
it("allows stop-run with a connected gateway and normalized session key", () => {
const intent = planStopRunIntent({
status: "connected",
agentId: "agent-1",
sessionKey: " session-1 ",
busyAgentId: "agent-2",
});
expect(intent).toEqual({
kind: "allow",
sessionKey: "session-1",
});
});
it("denies new-session when the agent cannot be found", () => {
const intent = planNewSessionIntent({
hasAgent: false,
sessionKey: "session-1",
});
expect(intent).toEqual({
kind: "deny",
reason: "missing-agent",
message: "Failed to start new session: agent not found.",
});
});
it("denies new-session when session key is missing", () => {
const intent = planNewSessionIntent({
hasAgent: true,
sessionKey: "",
});
expect(intent).toEqual({
kind: "deny",
reason: "missing-session-key",
message: "Missing session key for agent.",
});
});
it("allows new-session when agent exists and session key is present", () => {
const intent = planNewSessionIntent({
hasAgent: true,
sessionKey: " session-1 ",
});
expect(intent).toEqual({
kind: "allow",
sessionKey: "session-1",
});
});
it("skips draft flush when agent id is missing", () => {
const intent = planDraftFlushIntent({
agentId: null,
hasPendingValue: true,
});
expect(intent).toEqual({
kind: "skip",
reason: "missing-agent-id",
});
});
it("skips draft flush when there is no pending draft value", () => {
const intent = planDraftFlushIntent({
agentId: "agent-1",
hasPendingValue: false,
});
expect(intent).toEqual({
kind: "skip",
reason: "missing-pending-value",
});
});
it("flushes draft when an agent id and pending value are present", () => {
const intent = planDraftFlushIntent({
agentId: "agent-1",
hasPendingValue: true,
});
expect(intent).toEqual({
kind: "flush",
agentId: "agent-1",
});
});
it("schedules draft timer with default debounce", () => {
const intent = planDraftTimerIntent({
agentId: "agent-1",
});
expect(intent).toEqual({
kind: "schedule",
agentId: "agent-1",
delayMs: 250,
});
});
it("allows overriding draft timer delay", () => {
const intent = planDraftTimerIntent({
agentId: "agent-1",
delayMs: 500,
});
expect(intent).toEqual({
kind: "schedule",
agentId: "agent-1",
delayMs: 500,
});
});
it("skips draft timer scheduling when agent id is missing", () => {
const intent = planDraftTimerIntent({
agentId: "",
delayMs: 250,
});
expect(intent).toEqual({
kind: "skip",
reason: "missing-agent-id",
});
});
});