"""Explicit test composition for the API adapter.""" from collections.abc import Mapping, MutableMapping from fastapi import FastAPI from free_claude_code.api.app import create_app from free_claude_code.api.ports import ApiServices from free_claude_code.application.connected_accounts import ConnectedAccountPort from free_claude_code.config.settings import Settings from free_claude_code.providers.base import BaseProvider from free_claude_code.providers.runtime import ProviderRuntime from free_claude_code.runtime.application import ApplicationRuntime, RestartCallback from free_claude_code.runtime.provider_manager import ProviderRuntimeManager def create_test_app( settings: Settings | None = None, *, providers: MutableMapping[str, BaseProvider] | None = None, restart_callback: RestartCallback | None = None, connected_accounts: Mapping[str, ConnectedAccountPort] | None = None, ) -> FastAPI: """Build an API app with explicit in-memory runtime services.""" settings = settings or Settings() connected_accounts = dict(connected_accounts or {}) def connected_provider_ids() -> tuple[str, ...]: return tuple( provider_id for provider_id, account in connected_accounts.items() if account.is_connected() ) if providers is None: manager = ProviderRuntimeManager( settings, connected_provider_ids=connected_provider_ids, ) else: manager = ProviderRuntimeManager( settings, runtime_factory=lambda snapshot: ProviderRuntime( snapshot, dict(providers), ), connected_provider_ids=connected_provider_ids, ) runtime = ApplicationRuntime( manager, transcriber=None, restart_callback=restart_callback, connected_accounts=connected_accounts, ) return create_app( ApiServices( requests=manager, admin=runtime, tasks=runtime, ) ) def runtime_for_app(app: FastAPI) -> ApplicationRuntime: """Return the runtime supplied by :func:`create_test_app`.""" runtime = app.state.services.admin if not isinstance(runtime, ApplicationRuntime): raise TypeError("Test app does not use ApplicationRuntime") return runtime def provider_manager_for_app(app: FastAPI) -> ProviderRuntimeManager: """Return the provider manager supplied by :func:`create_test_app`.""" manager = app.state.services.requests if not isinstance(manager, ProviderRuntimeManager): raise TypeError("Test app does not use ProviderRuntimeManager") return manager