feat: select the TechLog Studio adapter from runtime configuration

Adds TECH_LOG_STUDIO_SOURCE (MOCK | HTTP, default MOCK) to the V2 runtime
config schema so a build can switch createTechLogFeatureInstalledInput
between the mock and HTTP Studio gateways without a rebuild. V1 documents
predate the key and always normalize to MOCK. The HTTP gateway is
constructed with only { operations } per Task 4's actual signature -
no CSRF provider is wired here; that lands with attachCredentials at a
later composition-root task.

Updates every existing Studio test call site to the new required
createTechLogFeatureInstalledInput(context) signature via a shared
tests/helpers/studio-install-context.ts MOCK fixture, so the whole
existing Studio suite keeps exercising the mock adapter unchanged.
This commit is contained in:
DongHyeonka
2026-08-18 01:57:15 +09:00
parent 7424ed4594
commit 3b641906b8
31 changed files with 169 additions and 47 deletions
@@ -7,6 +7,7 @@ import { MemoryRouter } from "react-router-dom";
import { afterEach, describe, expect, it, vi } from "vitest";
import { createTechLogFeatureInstalledInput } from "../../../src/features/tech-log/adapters/create-tech-log-feature-input.ts";
import { MOCK_STUDIO_INSTALL_CONTEXT } from "../../helpers/studio-install-context.ts";
import { FIXTURE_IDS } from "../../../src/features/tech-log/adapters/mock/fixtures.ts";
import type { StudioGateway } from "../../../src/features/tech-log/application/ports/studio-gateway.ts";
import { DocumentEditorScreen } from "../../../src/features/tech-log/presentation/studio/components/document-editor-screen.tsx";
@@ -16,7 +17,7 @@ afterEach(() => vi.restoreAllMocks());
function renderEditor(
documentId: string,
gateway: StudioGateway = createTechLogFeatureInstalledInput().input.createStudioGateway(),
gateway: StudioGateway = createTechLogFeatureInstalledInput(MOCK_STUDIO_INSTALL_CONTEXT).input.createStudioGateway(),
) {
return render(
<MemoryRouter initialEntries={[`/studio/documents/${documentId}/edit`]}>
@@ -37,7 +38,7 @@ function labelsIn(container: HTMLElement, selector: string): string[] {
describe("TechLog Studio document editor", () => {
it("loads the Case controls in source order, owns dirty state, and renders an instant local preview", async () => {
const user = userEvent.setup();
const base = createTechLogFeatureInstalledInput().input.createStudioGateway();
const base = createTechLogFeatureInstalledInput(MOCK_STUDIO_INSTALL_CONTEXT).input.createStudioGateway();
const calls = { save: 0, validate: 0, preview: 0, publish: 0 };
const gateway = {
...base,
@@ -237,7 +238,7 @@ describe("TechLog Studio document editor", () => {
);
unknown.unmount();
const base = createTechLogFeatureInstalledInput().input.createStudioGateway();
const base = createTechLogFeatureInstalledInput(MOCK_STUDIO_INSTALL_CONTEXT).input.createStudioGateway();
const getDocument = vi
.fn<StudioGateway["getDocument"]>()
.mockRejectedValueOnce(new Error("offline"))