65 lines
1.8 KiB
TypeScript
65 lines
1.8 KiB
TypeScript
import { MantineProvider } from "@mantine/core";
|
||
import { fireEvent, render, screen } from "@testing-library/react";
|
||
import { assert, describe, expect, it } from "vitest";
|
||
|
||
import { EntryCard } from "./EntryCard";
|
||
|
||
describe("EntryCard", () => {
|
||
it("does not leak a numeric zero from an absent action", () => {
|
||
render(
|
||
<MantineProvider>
|
||
<EntryCard
|
||
actions={0}
|
||
initial="У"
|
||
metadata="Описание"
|
||
title="Пример"
|
||
tone="neutral"
|
||
value="—"
|
||
valueLabel="Неизвестно"
|
||
/>
|
||
</MantineProvider>,
|
||
);
|
||
expect(screen.queryByText("0")).not.toBeInTheDocument();
|
||
});
|
||
it("keeps a failed image fallback until a new source is supplied", () => {
|
||
const props = {
|
||
imageSrc: "data:image/png;base64,invalid",
|
||
initial: "У",
|
||
metadata: "Описание",
|
||
title: "Пример",
|
||
tone: "neutral" as const,
|
||
value: "—",
|
||
valueLabel: "Неизвестно",
|
||
};
|
||
|
||
const { rerender } = render(
|
||
<MantineProvider>
|
||
<EntryCard {...props} />
|
||
</MantineProvider>,
|
||
);
|
||
|
||
// Decorative image has no accessible name; trigger its actual failure event.
|
||
const image = screen.queryByAltText("");
|
||
assert(image);
|
||
fireEvent.error(image);
|
||
rerender(
|
||
<MantineProvider>
|
||
<EntryCard {...props} title="Обновлённый пример" />
|
||
</MantineProvider>,
|
||
);
|
||
expect(screen.queryByAltText("")).not.toBeInTheDocument();
|
||
expect(screen.getByText("У")).toBeInTheDocument();
|
||
expect(screen.getByText("Обновлённый пример")).toBeInTheDocument();
|
||
rerender(
|
||
<MantineProvider>
|
||
<EntryCard {...props} imageSrc="/replacement-logo.png" />
|
||
</MantineProvider>,
|
||
);
|
||
expect(screen.queryByAltText("")).toHaveAttribute(
|
||
"src",
|
||
"/replacement-logo.png",
|
||
);
|
||
expect(screen.queryByText("У")).not.toBeInTheDocument();
|
||
});
|
||
});
|