diff --git a/packages/server/app/components/TimeSeriesChart.tsx b/packages/server/app/components/TimeSeriesChart.tsx
index bc2e2b9d..5b016480 100644
--- a/packages/server/app/components/TimeSeriesChart.tsx
+++ b/packages/server/app/components/TimeSeriesChart.tsx
@@ -162,7 +162,7 @@ export default function TimeSeriesChart({
diff --git a/packages/server/app/components/__tests__/TimeSeriesChart.test.tsx b/packages/server/app/components/__tests__/TimeSeriesChart.test.tsx
new file mode 100644
index 00000000..d6d153b0
--- /dev/null
+++ b/packages/server/app/components/__tests__/TimeSeriesChart.test.tsx
@@ -0,0 +1,59 @@
+// @vitest-environment jsdom
+import { render, screen, cleanup } from "@testing-library/react";
+import { afterEach, describe, expect, test, vi } from "vitest";
+import "vitest-dom/extend-expect";
+
+import TimeSeriesChart from "../TimeSeriesChart";
+
+vi.mock("recharts", () => ({
+ ResponsiveContainer: ({ children }: { children: React.ReactNode }) => (
+
{children}
+ ),
+ ComposedChart: ({ children }: { children: React.ReactNode }) => (
+ {children}
+ ),
+ CartesianGrid: () => null,
+ XAxis: () => null,
+ YAxis: ({
+ yAxisId,
+ domain,
+ }: {
+ yAxisId: string;
+ domain: [number, number];
+ }) => (
+
+ ),
+ Tooltip: () => null,
+ Area: () => null,
+ Line: () => null,
+}));
+
+describe("TimeSeriesChart", () => {
+ afterEach(() => {
+ cleanup();
+ });
+
+ test("scales bounce rate against a fixed 0–100% domain", () => {
+ render(
+ ,
+ );
+
+ expect(screen.getByTestId("y-axis-bounceRate")).toHaveAttribute(
+ "data-domain",
+ "[0,100]",
+ );
+ });
+});