import { createAnonymousSessionAdapter } from "../../src/adapters/auth/external-session-adapter.ts"; import { createApplication, type ApplicationOutputPorts, } from "../../src/application/create-application.ts"; import type { ApplicationFeatureInputs } from "../../src/application/ports/in/application-api.ts"; import { createProductFeaturesStub, createRuntimeCapabilitiesStub } from "./runtime-capabilities-stub.ts"; type TestApplicationOverrides = Partial & Readonly<{ featureInputs?: Readonly>; }>; export function createTestApplication( overrides: TestApplicationOverrides = {}, ) { return createApplication( { session: overrides.session ?? createAnonymousSessionAdapter(), preferences: overrides.preferences ?? { read: () => ({ ok: true as const, value: "system" }), write: () => ({ ok: true as const }), remove: () => ({ ok: true as const }), }, diagnostics: overrides.diagnostics ?? { record: () => {} }, telemetry: overrides.telemetry ?? { emit: () => {} }, releaseInfo: overrides.releaseInfo ?? { getCurrent: async () => ({ buildId: "test-build", releaseId: "test-release", configSchemaVersion: "1", apiContractVersion: "1", assetManifestHash: "test-hash", routeChunks: { "route-home": "assets/home.js", }, }), refresh: async () => ({ buildId: "test-build", releaseId: "test-release", configSchemaVersion: "1", apiContractVersion: "1", assetManifestHash: "test-hash", routeChunks: { "route-home": "assets/home.js", }, }), }, runtimeCapabilities: overrides.runtimeCapabilities ?? createRuntimeCapabilitiesStub(), productFeatures: overrides.productFeatures ?? createProductFeaturesStub(), navigation: overrides.navigation ?? { reload: () => {} }, }, overrides.featureInputs, ); }