4fa4f13558
Co-authored-by: iamlukethedev <iamlukethedev@users.noreply.github.com>
179 lines
4.1 KiB
TypeScript
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",
|
|
});
|
|
});
|
|
});
|