// @vitest-environment jsdom import { render, screen } from "@testing-library/react"; import { describe, expect, it, vi } from "vitest"; import { createRuntimeComposition } from "../../src/bootstrap/create-runtime-composition.ts"; import { RuntimeApplication } from "../../src/bootstrap/runtime-application.tsx"; const runtimeConfig = { APP_ENV: "local", API_BASE_URL: "http://localhost:8080", REQUEST_TIMEOUT_MS: 10_000, MAX_RETRY_ATTEMPTS: 2, TELEMETRY_ENABLED: false, AUTH_MODE: "demo", CONFIG_SCHEMA_VERSION: "1", API_CONTRACT_VERSION: "1", RELEASE_MANIFEST_URL: "/release-manifest.json", BUILD_ID: "local-build", RELEASE_ID: "local-release", }; const releaseManifest = { schemaVersion: 1, appVersion: "0.1.0", buildId: "local-build", commitSha: "local", configSchemaVersion: "1", apiContractVersion: "1", assetManifestHash: "test-hash", releaseId: "local-release", builtAt: "2026-07-26T00:00:00.000Z", routeChunks: { "route-home": "assets/home.js", "route-examples-ui": "assets/ui.js", "route-examples-states": "assets/states.js", "route-examples-auth": "assets/auth.js", "route-not-found": "assets/not-found.js", }, }; describe("production runtime application tree", () => { it("connects validated config and release through composition and ApplicationProvider", async () => { const fetcher = vi.fn(async (input) => { const url = typeof input === "string" ? input : input instanceof URL ? input.href : input.url; return Response.json( url.includes("release-manifest") ? releaseManifest : runtimeConfig, ); }); const composition = await createRuntimeComposition({ fetcher, host: {}, }); window.history.pushState({}, "", "/"); render(); expect( await screen.findByRole("heading", { name: "Clean Architecture Frontend", }), ).toBeVisible(); expect( await screen.findByText("빌드 local-build · 릴리스 local-release"), ).toBeVisible(); expect(fetcher).toHaveBeenCalledTimes(2); expect(composition).not.toHaveProperty("ports"); }); });