50 lines
1.5 KiB
React
50 lines
1.5 KiB
React
// @vitest-environment jsdom
|
|
|
|
import { render, screen } from "@testing-library/react";
|
|
import { describe, expect, it } from "vitest";
|
|
|
|
import { SampleResourcePage } from "../../src/sample/contract-fixture/sample-resource-page.jsx";
|
|
|
|
describe("removable sample feature page", () => {
|
|
it("renders the API-to-view-model result through AsyncSurface", async () => {
|
|
const facade = {
|
|
listResources: async () => ({
|
|
ok: true,
|
|
value: [
|
|
{
|
|
resourceId: "resource-1",
|
|
title: "Example",
|
|
createdAtLabel: null,
|
|
},
|
|
],
|
|
}),
|
|
createResource: async () => ({ ok: true, value: {} }),
|
|
};
|
|
render(<SampleResourcePage facade={facade} />);
|
|
|
|
expect(screen.getByLabelText("불러오는 중")).toBeVisible();
|
|
expect(await screen.findByText("Example")).toBeVisible();
|
|
});
|
|
|
|
it("renders normalized terminal errors without raw DTO fields", async () => {
|
|
const facade = {
|
|
listResources: async () => ({
|
|
ok: false,
|
|
error: {
|
|
kind: "SERVER_FAILURE",
|
|
code: "SERVER_FAILURE",
|
|
retryable: true,
|
|
operationId: "LIST_SAMPLE_RESOURCES",
|
|
attemptCount: 1,
|
|
userMessageKey: "error.server_failure",
|
|
action: "retry",
|
|
},
|
|
}),
|
|
createResource: async () => ({ ok: true, value: {} }),
|
|
};
|
|
render(<SampleResourcePage facade={facade} />);
|
|
|
|
expect(await screen.findByRole("alert")).toHaveTextContent("error.server_failure");
|
|
});
|
|
});
|