Files
buzz-sheet/components/public/comparison-context.test.tsx
T
2026-10-07 17:03:15 +07:00

36 lines
1.8 KiB
TypeScript

import { renderToStaticMarkup } from "react-dom/server";
import { describe, expect, it } from "vitest";
import { ComparisonContext, ComparisonValue } from "./comparison-context";
describe("public comparison explanations", () => {
it("keeps each damage metric's 100% rows separate", () => {
const rows = [
{ weapon: { name: "Team reference" }, refinement: "5", overallPercent: "100", personalPercent: "110" },
{ weapon: { name: "Personal reference" }, refinement: "1", overallPercent: "105", personalPercent: "100" },
];
const team = renderToStaticMarkup(<ComparisonContext rows={rows} metric="overallPercent" />);
const personal = renderToStaticMarkup(<ComparisonContext rows={rows} metric="personalPercent" />);
expect(team).toContain("Team reference R5");
expect(team).not.toContain("Personal reference");
expect(personal).toContain("Personal reference R1");
expect(personal).not.toContain("Team reference");
});
it("does not invent a reference when no row is 100%", () => {
const html = renderToStaticMarkup(<ComparisonContext rows={[
{ weapon: { name: "Only choice" }, refinement: "1", overallPercent: "109", personalPercent: null },
]} metric="overallPercent" />);
expect(html).toContain("ดูหมายเหตุ");
expect(html).not.toContain("Only choice");
});
it("renders a loss relative to the baseline but never treats an unavailable value as a loss", () => {
expect(renderToStaticMarkup(<ComparisonValue value="98.5" />)).toContain("-1.5%");
for (const value of [null, "0", "invalid"]) {
const html = renderToStaticMarkup(<ComparisonValue value={value} />);
expect(html).toContain("ไม่มีข้อมูลเปรียบเทียบ");
expect(html).not.toContain("-100%");
}
});
});