diff --git a/apps/web/src/__tests__/components/VaultPanel.test.tsx b/apps/web/src/__tests__/components/VaultPanel.test.tsx
index 4785f26b..0e184212 100644
--- a/apps/web/src/__tests__/components/VaultPanel.test.tsx
+++ b/apps/web/src/__tests__/components/VaultPanel.test.tsx
@@ -99,10 +99,10 @@ describe("VaultPanel — position load error", () => {
const amountInput = screen.getByPlaceholderText("0.00");
fireEvent.change(amountInput, { target: { value: "10" } });
- const depositButton = screen
- .getByText("vaultPanel.deposit")
- .closest("button");
- expect(depositButton?.disabled).toBe(false);
+ const depositButton = screen.getByTestId(
+ "vault-deposit-submit"
+ ) as HTMLButtonElement;
+ expect(depositButton.disabled).toBe(false);
});
it("does not show the error message once positions load successfully", () => {
@@ -131,6 +131,19 @@ describe("VaultPanel — disconnected", () => {
});
});
+describe("VaultPanel — tab switcher", () => {
+ it("translates the tab labels instead of rendering raw tab ids", () => {
+ render();
+
+ expect(screen.getByTestId("vault-tab-deposit").textContent).toBe(
+ "vaultPanel.deposit"
+ );
+ expect(screen.getByTestId("vault-tab-withdraw").textContent).toBe(
+ "vaultPanel.withdraw"
+ );
+ });
+});
+
describe("VaultPanel — deposit", () => {
it("calls deposit with the entered amount and clears the field on success", async () => {
render();
@@ -138,7 +151,7 @@ describe("VaultPanel — deposit", () => {
fireEvent.change(screen.getByPlaceholderText("0.00"), {
target: { value: "25" },
});
- fireEvent.click(screen.getByText("vaultPanel.deposit"));
+ fireEvent.click(screen.getByTestId("vault-deposit-submit"));
await waitFor(() => {
expect(deposit).toHaveBeenCalledWith("25", "meridian-usdc", "USDC");
@@ -154,14 +167,11 @@ describe("VaultPanel — withdraw", () => {
mockPositions({ isError: false, data: [POSITION] });
render();
- // The tab switcher renders a raw capitalized label ("Withdraw"), distinct
- // from the action button below it, which renders the translated
- // "vaultPanel.withdraw" key.
- fireEvent.click(screen.getByText("Withdraw"));
+ fireEvent.click(screen.getByTestId("vault-tab-withdraw"));
fireEvent.change(screen.getByPlaceholderText("0.00"), {
target: { value: "10" },
});
- fireEvent.click(screen.getByText("vaultPanel.withdraw"));
+ fireEvent.click(screen.getByTestId("vault-withdraw-submit"));
await waitFor(() => {
expect(withdraw).toHaveBeenCalledWith("10", "meridian-usdc", "USDC");
@@ -172,7 +182,7 @@ describe("VaultPanel — withdraw", () => {
mockPositions({ isError: false, data: [] });
render();
- fireEvent.click(screen.getByText("Withdraw"));
+ fireEvent.click(screen.getByTestId("vault-tab-withdraw"));
expect(screen.getByText("vaultPanel.position")).toBeDefined();
});
});
diff --git a/apps/web/src/components/dashboard/VaultPanel.tsx b/apps/web/src/components/dashboard/VaultPanel.tsx
index 8c80c6ba..f2173866 100644
--- a/apps/web/src/components/dashboard/VaultPanel.tsx
+++ b/apps/web/src/components/dashboard/VaultPanel.tsx
@@ -195,18 +195,18 @@ export function VaultPanel() {
{/* Tab switcher */}
{connected && (
- {(["deposit", "withdraw"] as Tab[]).map((t) => (
+ {(["deposit", "withdraw"] as Tab[]).map((tabId) => (
))}