Memoize Fluent chart token resolution

This commit is contained in:
2026-04-20 19:47:10 +02:00
parent 20412dd94b
commit 27369b43d6
9 changed files with 140 additions and 18 deletions

View File

@@ -2,6 +2,7 @@ import { describe, it, expect, vi } from "vitest";
import { render, screen } from "@testing-library/react";
import { FluentProvider, webLightTheme } from "@fluentui/react-components";
import { TopCountriesPieChart } from "../TopCountriesPieChart";
import * as chartTheme from "../../utils/chartTheme";
vi.mock("recharts", () => ({
ResponsiveContainer: ({ children }: { children: React.ReactNode }) => (
@@ -38,4 +39,24 @@ describe("TopCountriesPieChart", () => {
);
expect(screen.getByTestId("pie-chart")).toBeInTheDocument();
});
it("memoizes palette token resolution across rerenders", () => {
const spy = vi.spyOn(chartTheme, "resolveFluentToken");
const props = {
countries: { DE: 30, US: 20, CN: 10 },
countryNames: { DE: "Germany", US: "United States", CN: "China" },
};
const { rerender } = wrap(<TopCountriesPieChart {...props} />);
expect(spy).toHaveBeenCalledTimes(5);
rerender(
<FluentProvider theme={webLightTheme}>
<TopCountriesPieChart {...props} />
</FluentProvider>,
);
expect(spy).toHaveBeenCalledTimes(5);
spy.mockRestore();
});
});