4fa4f13558
Co-authored-by: iamlukethedev <iamlukethedev@users.noreply.github.com>
149 lines
3.9 KiB
TypeScript
149 lines
3.9 KiB
TypeScript
import { describe, expect, it } from "vitest";
|
|
|
|
import {
|
|
RUNTIME_SYNC_FOCUSED_HISTORY_INTERVAL_MS,
|
|
RUNTIME_SYNC_RECONCILE_INTERVAL_MS,
|
|
resolveRuntimeSyncBootstrapHistoryAgentIds,
|
|
resolveRuntimeSyncFocusedHistoryPollingIntent,
|
|
resolveRuntimeSyncGapRecoveryIntent,
|
|
resolveRuntimeSyncLoadMoreHistoryLimit,
|
|
resolveRuntimeSyncReconcilePollingIntent,
|
|
shouldRuntimeSyncContinueFocusedHistoryPolling,
|
|
} from "@/features/agents/operations/runtimeSyncControlWorkflow";
|
|
|
|
describe("runtimeSyncControlWorkflow", () => {
|
|
it("plans reconcile polling only when connected", () => {
|
|
expect(
|
|
resolveRuntimeSyncReconcilePollingIntent({
|
|
status: "disconnected",
|
|
})
|
|
).toEqual({
|
|
kind: "stop",
|
|
reason: "not-connected",
|
|
});
|
|
|
|
expect(
|
|
resolveRuntimeSyncReconcilePollingIntent({
|
|
status: "connected",
|
|
})
|
|
).toEqual({
|
|
kind: "start",
|
|
intervalMs: RUNTIME_SYNC_RECONCILE_INTERVAL_MS,
|
|
runImmediately: true,
|
|
});
|
|
});
|
|
|
|
it("plans history bootstrap for connected unloaded sessions", () => {
|
|
expect(
|
|
resolveRuntimeSyncBootstrapHistoryAgentIds({
|
|
status: "connected",
|
|
agents: [
|
|
{ agentId: "agent-1", sessionCreated: true, historyLoadedAt: null },
|
|
{ agentId: "agent-2", sessionCreated: true, historyLoadedAt: 1234 },
|
|
{ agentId: "agent-3", sessionCreated: false, historyLoadedAt: null },
|
|
],
|
|
})
|
|
).toEqual(["agent-1"]);
|
|
|
|
expect(
|
|
resolveRuntimeSyncBootstrapHistoryAgentIds({
|
|
status: "connecting",
|
|
agents: [{ agentId: "agent-1", sessionCreated: true, historyLoadedAt: null }],
|
|
})
|
|
).toEqual([]);
|
|
});
|
|
|
|
it("plans focused history polling with explicit stop reasons", () => {
|
|
expect(
|
|
resolveRuntimeSyncFocusedHistoryPollingIntent({
|
|
status: "connected",
|
|
focusedAgentId: "agent-1",
|
|
focusedAgentRunning: true,
|
|
})
|
|
).toEqual({
|
|
kind: "start",
|
|
agentId: "agent-1",
|
|
intervalMs: RUNTIME_SYNC_FOCUSED_HISTORY_INTERVAL_MS,
|
|
runImmediately: true,
|
|
});
|
|
|
|
expect(
|
|
resolveRuntimeSyncFocusedHistoryPollingIntent({
|
|
status: "connected",
|
|
focusedAgentId: null,
|
|
focusedAgentRunning: true,
|
|
})
|
|
).toEqual({
|
|
kind: "stop",
|
|
reason: "missing-focused-agent",
|
|
});
|
|
|
|
expect(
|
|
resolveRuntimeSyncFocusedHistoryPollingIntent({
|
|
status: "connected",
|
|
focusedAgentId: "agent-1",
|
|
focusedAgentRunning: false,
|
|
})
|
|
).toEqual({
|
|
kind: "stop",
|
|
reason: "focused-not-running",
|
|
});
|
|
});
|
|
|
|
it("checks focused polling continuation against latest running state", () => {
|
|
expect(
|
|
shouldRuntimeSyncContinueFocusedHistoryPolling({
|
|
agentId: "agent-1",
|
|
agents: [{ agentId: "agent-1", status: "running" }],
|
|
})
|
|
).toBe(true);
|
|
|
|
expect(
|
|
shouldRuntimeSyncContinueFocusedHistoryPolling({
|
|
agentId: "agent-1",
|
|
agents: [{ agentId: "agent-1", status: "idle" }],
|
|
})
|
|
).toBe(false);
|
|
|
|
expect(
|
|
shouldRuntimeSyncContinueFocusedHistoryPolling({
|
|
agentId: "agent-1",
|
|
agents: [],
|
|
})
|
|
).toBe(false);
|
|
});
|
|
|
|
it("resolves load-more limits with floor and max bounds", () => {
|
|
expect(
|
|
resolveRuntimeSyncLoadMoreHistoryLimit({
|
|
currentLimit: 200,
|
|
defaultLimit: 200,
|
|
maxLimit: 5000,
|
|
})
|
|
).toBe(400);
|
|
|
|
expect(
|
|
resolveRuntimeSyncLoadMoreHistoryLimit({
|
|
currentLimit: 3000,
|
|
defaultLimit: 200,
|
|
maxLimit: 5000,
|
|
})
|
|
).toBe(5000);
|
|
|
|
expect(
|
|
resolveRuntimeSyncLoadMoreHistoryLimit({
|
|
currentLimit: null,
|
|
defaultLimit: 200,
|
|
maxLimit: 5000,
|
|
})
|
|
).toBe(400);
|
|
});
|
|
|
|
it("always plans summary refresh plus reconcile for gap recovery", () => {
|
|
expect(resolveRuntimeSyncGapRecoveryIntent()).toEqual({
|
|
refreshSummarySnapshot: true,
|
|
reconcileRunningAgents: true,
|
|
});
|
|
});
|
|
});
|