36 lines
1.8 KiB
TypeScript
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%");
|
|
}
|
|
});
|
|
});
|