+
+ `${val.toFixed(2)}%`}
+ />
+
+
+ );
+
+ const surface = screen.container.querySelector("svg.recharts-surface");
+ expect(surface).toBeTruthy();
+
+ if (!surface) return;
+ // Hover over the chart surface
+ await userEvent.hover(surface);
+ const tooltip = screen.getByTestId("reward-rate-tooltip");
+ await expect.element(tooltip).toBeVisible();
+ await expect.element(tooltip.getByText("6.85%")).toBeVisible();
+ await expect.element(tooltip.getByText("Jun 15, 2026")).toBeVisible();
+
+ const activeDot = screen.container.querySelector(
+ 'g[key*="reward-rate-active-dot"], circle[r="3.5"]'
+ );
+ expect(activeDot).toBeTruthy();
+ });
+});
diff --git a/packages/widget/tests/pages-dashboard/history-chart.dom.test.tsx b/packages/widget/tests/pages-dashboard/history-chart.dom.test.tsx
new file mode 100644
index 00000000..493f14e3
--- /dev/null
+++ b/packages/widget/tests/pages-dashboard/history-chart.dom.test.tsx
@@ -0,0 +1,149 @@
+import { type DateTime, Schema } from "effect";
+import { I18nextProvider } from "react-i18next";
+import { describe, expect, it, vi } from "vitest";
+import { UtcDateTimeFromString } from "../../src/domain/finance/scalars";
+import type { HistoryPoint } from "../../src/domain/portfolio/models";
+import {
+ ChartTooltip,
+ HistoryChart,
+} from "../../src/features/earn/ui/dashboard/earn-details/reward-rate-chart";
+import { createWidgetI18nInstance } from "../../src/services/translation/widget-translation";
+import { render } from "../utils/test-utils.dom.tsx";
+
+const i18nInstance = createWidgetI18nInstance();
+
+const parseDate = (iso: string): DateTime.Utc =>
+ Schema.decodeSync(UtcDateTimeFromString)(iso);
+
+const samplePoints: ReadonlyArray