import { describe, expect, it } from "vitest"; import { createAssistantProviderExecutionPolicy } from "../src/services/assistantProviderExecutionPolicy"; describe("assistantProviderExecutionPolicy", () => { const policy = createAssistantProviderExecutionPolicy(); it("normalizes provider values into explicit execution modes", () => { expect(policy.normalizeProvider("openai")).toBe("openai"); expect(policy.normalizeProvider("local")).toBe("local"); expect(policy.normalizeProvider("other")).toBeNull(); }); it("detects llm runtime unavailability from auth and api-key failures", () => { expect(policy.detectLlmRuntimeUnavailable("error:OpenAI API key is missing")).toBe(true); expect(policy.detectLlmRuntimeUnavailable("authentication failed")).toBe(true); expect(policy.detectLlmRuntimeUnavailable("normalize_failed")).toBe(false); }); it("builds explicit mock execution contract for living-mode deep fallback", () => { const state = policy.resolveProviderExecutionState({ llmProvider: "openai", useMock: true, baseUrl: "http://localhost:1234/v1" }); expect(state.provider_mode).toBe("mock"); expect(state.normalized_provider).toBe("openai"); expect(state.use_mock).toBe(true); expect(state.base_url_configured).toBe(true); expect(state.living_mode_forced_deep).toBe(true); expect(state.living_mode_forced_reason).toBe("mock_mode_keeps_deep_pipeline"); }); });