52 lines
1.5 KiB
TypeScript
52 lines
1.5 KiB
TypeScript
import { createElement } from "react";
|
|
import { cleanup, render, screen } from "@testing-library/react";
|
|
import { afterEach, describe, expect, it } from "vitest";
|
|
import { MissionCard } from "@/components/frontend/intelligence/MissionCard";
|
|
|
|
const mission = {
|
|
id: 1,
|
|
name: "Operation Nightfall",
|
|
codeName: "OP:NIGHTFALL",
|
|
summary: "Secure the extraction corridor.",
|
|
operationType: "main" as const,
|
|
classification: {
|
|
missionType: "PvE" as const,
|
|
startDateTime: "2026-08-20T19:30:00.000Z",
|
|
estimatedDuration: 90,
|
|
map: 2,
|
|
campaign: 3,
|
|
},
|
|
ownershipAndStatus: {
|
|
status: "Scheduled" as const,
|
|
},
|
|
missionRoles: {
|
|
maxPlayers: 12,
|
|
},
|
|
coverImage: {
|
|
id: 8,
|
|
updatedAt: "2026-08-20T00:00:00.000Z",
|
|
createdAt: "2026-08-20T00:00:00.000Z",
|
|
url: "/media/nightfall.webp",
|
|
},
|
|
};
|
|
|
|
describe("MissionCard", () => {
|
|
afterEach(() => {
|
|
cleanup();
|
|
});
|
|
|
|
it("uses the cover image by default and keeps full metadata visible", () => {
|
|
render(createElement(MissionCard, { mission, showFullDetails: true }));
|
|
|
|
const image = document.querySelector("img");
|
|
expect(image?.getAttribute("src")).toBe("/media/nightfall.webp");
|
|
expect(screen.getByText("1h 30m")).toBeTruthy();
|
|
expect(screen.getByText("12 slots")).toBeTruthy();
|
|
});
|
|
|
|
it("suppresses the cover image when the default variant is requested", () => {
|
|
render(createElement(MissionCard, { mission, variant: "default" }));
|
|
|
|
expect(document.querySelector("img")).toBeNull();
|
|
});
|
|
});
|