import { describe, expect, it } from "vitest"; import { envelopeData, envelopeError } from "../../../src/features/tech-log/contracts/tech-log-studio-contract-contribution.ts"; describe("studio 봉투 언랩", () => { it("성공 봉투에서 data를 꺼낸다", () => { const result = envelopeData("getStudioSessionOutput").safeParse({ success: true, data: { authenticated: true, displayName: "d", roles: [], csrfToken: "t", csrfHeaderName: "X-CSRF-TOKEN" }, meta: { requestId: "r", traceId: "t", correlationId: null, page: null }, }); expect(result.success).toBe(true); if (result.success) expect(result.data).toMatchObject({ displayName: "d" }); }); it("봉투가 아닌 본문을 거절한다", () => { const result = envelopeData("getStudioSessionOutput").safeParse({ displayName: "d" }); expect(result.success).toBe(false); }); it("오류 봉투를 ProblemDetails 형태로 옮긴다", () => { const result = envelopeError().safeParse({ success: false, error: { code: "VERSION_CONFLICT", category: "CONFLICT", message: "conflict", retryable: false, details: null }, meta: { requestId: "r", traceId: "tr", correlationId: null, page: null }, }); expect(result.success).toBe(true); if (result.success) { expect(result.data.code).toBe("VERSION_CONFLICT"); expect(result.data.status).toBe(0); expect(result.data.title).toBe("VERSION_CONFLICT"); } }); it("계약 밖 코드를 거절한다", () => { const result = envelopeError().safeParse({ success: false, error: { code: "NOT_A_STUDIO_CODE", category: "INTERNAL", message: "x", retryable: false, details: null }, meta: { requestId: "r", traceId: "tr", correlationId: null, page: null }, }); expect(result.success).toBe(false); }); });