import { describe, expect, it } from "vitest"; import { computePlannerHistoryState } from "./plannerHistory"; import type { PlannerDecisionItem } from "./types"; function makeDecision( overrides: Partial = {}, ): PlannerDecisionItem { return { step_index: 0, attempt: 0, system_prompt: "system", user_prompt: "user", tool_name: "tap", arguments: { target: "button" }, created_at: "2026-07-14T00:00:00+00:00", ...overrides, }; } describe("computePlannerHistoryState", () => { it("returns populated when decisions exist (cloud transport)", () => { const decisions = [ makeDecision({ step_index: 0, tool_name: "tap" }), makeDecision({ step_index: 1, tool_name: "swipe" }), ]; const state = computePlannerHistoryState(decisions, "cloud"); expect(state).toEqual({ kind: "populated", decisions }); }); it("returns populated when decisions exist even if transport is direct", () => { const decisions = [makeDecision()]; const state = computePlannerHistoryState(decisions, "direct"); expect(state).toEqual({ kind: "populated", decisions }); }); it("returns empty_cloud_transport when no decisions but host is cloud-transport", () => { const state = computePlannerHistoryState([], "cloud"); expect(state).toEqual({ kind: "empty_cloud_transport" }); }); it("returns direct_transport_hidden when no decisions and host is direct-transport", () => { const state = computePlannerHistoryState([], "direct"); expect(state).toEqual({ kind: "direct_transport_hidden" }); }); it("returns unknown_host_transport when host transport is null", () => { const state = computePlannerHistoryState([], null); expect(state).toEqual({ kind: "unknown_host_transport" }); }); });