53 lines
1.5 KiB
JavaScript
53 lines
1.5 KiB
JavaScript
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,
|
|
});
|
|
});
|
|
});
|