54 lines · 1.8 KB · TypeScript
RawDownload
import type { ProviderKind } from "@t3tools/contracts";import { it, assert, vi } from "@effect/vitest";import { assertFailure } from "@effect/vitest/utils"; import { Effect, Layer, Stream } from "effect"; import { CodexAdapter, CodexAdapterShape } from "../Services/CodexAdapter.ts";import { ProviderAdapterRegistry } from "../Services/ProviderAdapterRegistry.ts";import { ProviderAdapterRegistryLive } from "./ProviderAdapterRegistry.ts";import { ProviderUnsupportedError } from "../Errors.ts";import * as NodeServices from "@effect/platform-node/NodeServices"; const fakeCodexAdapter: CodexAdapterShape = {  provider: "codex",  startSession: vi.fn(),  sendTurn: vi.fn(),  interruptTurn: vi.fn(),  respondToRequest: vi.fn(),  stopSession: vi.fn(),  listSessions: vi.fn(),  hasSession: vi.fn(),  readThread: vi.fn(),  rollbackThread: vi.fn(),  stopAll: vi.fn(),  streamEvents: Stream.empty,}; const layer = it.layer(  Layer.mergeAll(    Layer.provide(ProviderAdapterRegistryLive, Layer.succeed(CodexAdapter, fakeCodexAdapter)),    NodeServices.layer,  ),); layer("ProviderAdapterRegistryLive", (it) => {  it.effect("resolves a registered provider adapter", () =>    Effect.gen(function* () {      const registry = yield* ProviderAdapterRegistry;      const adapter = yield* registry.getByProvider("codex");      assert.equal(adapter, fakeCodexAdapter);       const providers = yield* registry.listProviders();      assert.deepEqual(providers, ["codex"]);    }),  );   it.effect("fails with ProviderUnsupportedError for unknown providers", () =>    Effect.gen(function* () {      const registry = yield* ProviderAdapterRegistry;      const adapter = yield* registry.getByProvider("unknown" as ProviderKind).pipe(Effect.result);      assertFailure(adapter, new ProviderUnsupportedError({ provider: "unknown" }));    }),  );});