import { describe, expect, it } from "vitest"; import { ConfigSchema, type AppConfig } from "@openhandoff/shared"; import { createProviderRegistry } from "../src/providers/index.js"; function makeConfig(): AppConfig { return ConfigSchema.parse({ auto_submit: true, notify: ["terminal"], workspace: { default: "default" }, backend: { host: "127.0.0.1", port: 7741, dbPath: "~/.local/share/openhandoff/handoff.db", opencode_poll_interval: 2, github_poll_interval: 30, backup_interval_secs: 3600, backup_retention_days: 7, }, providers: { local: {}, daytona: { image: "ubuntu:24.04" }, }, }); } describe("provider registry", () => { it("defaults to local when daytona is not configured", () => { const registry = createProviderRegistry(makeConfig()); expect(registry.defaultProviderId()).toBe("local"); }); it("prefers daytona when an api key is configured", () => { const registry = createProviderRegistry( ConfigSchema.parse({ ...makeConfig(), providers: { ...makeConfig().providers, daytona: { ...makeConfig().providers.daytona, apiKey: "test-token", }, }, }), ); expect(registry.defaultProviderId()).toBe("daytona"); }); it("returns the built-in provider", () => { const registry = createProviderRegistry(makeConfig()); expect(registry.get("daytona").id()).toBe("daytona"); }); });