import { describe, expect, it } from "vitest"; import { mapOperationPayload, mapResourceDto, } from "../../src/adapters/http/resource-mapper.js"; import { toResourceViewModel } from "../../src/application/view-models/resource-view-model.js"; describe("DTO to model to view-model mapping", () => { it("contains raw DTO names at the HTTP boundary", () => { const model = mapResourceDto({ id: "resource-1", name: "Example", createdAt: "2026-07-25T00:00:00.000Z", backendOnly: "not propagated", }); expect(model).toEqual({ id: "resource-1", displayName: "Example", createdAt: "2026-07-25T00:00:00.000Z", }); expect(model).not.toHaveProperty("name"); expect(model).not.toHaveProperty("backendOnly"); }); it("maps operation payloads and rejects missing mappers", () => { expect( mapOperationPayload("LIST_SAMPLE_RESOURCES", [ { id: "resource-1", name: "Example" }, ]), ).toEqual([ { id: "resource-1", displayName: "Example", createdAt: null }, ]); expect(() => mapOperationPayload("UNKNOWN", {})).toThrow( "No boundary mapper registered", ); }); it("projects an application-owned render-ready shape", () => { const model = mapResourceDto({ id: "resource-1", name: "Example", createdAt: null, }); expect(toResourceViewModel(model)).toEqual({ resourceId: "resource-1", title: "Example", createdAtLabel: null, }); }); });