From d89db5093773e6eef707262748c0bcf69b880afb Mon Sep 17 00:00:00 2001 From: counterweight Date: Tue, 23 Dec 2025 14:51:28 +0100 Subject: [PATCH] Add E2E tests for payment method selector and threshold enforcement --- frontend/e2e/exchange.spec.ts | 42 +++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/frontend/e2e/exchange.spec.ts b/frontend/e2e/exchange.spec.ts index e9ef278..34cb2f5 100644 --- a/frontend/e2e/exchange.spec.ts +++ b/frontend/e2e/exchange.spec.ts @@ -68,6 +68,14 @@ test.describe("Exchange Page - Regular User Access", () => { await expect(page.getByRole("button", { name: "Sell BTC" })).toBeVisible(); }); + test("exchange page shows payment method selector", async ({ page }) => { + await page.goto("/exchange"); + + await expect(page.getByText("Payment Method")).toBeVisible(); + await expect(page.getByRole("button", { name: /Onchain/ })).toBeVisible(); + await expect(page.getByRole("button", { name: /Lightning/ })).toBeVisible(); + }); + test("exchange page shows amount slider", async ({ page }) => { await page.goto("/exchange"); @@ -194,6 +202,40 @@ test.describe("Exchange Page - With Availability", () => { await expect(page.getByText("EUR:")).toBeVisible(); await expect(page.getByText("BTC:")).toBeVisible(); await expect(page.getByText("Rate:")).toBeVisible(); + await expect(page.getByText("Payment:")).toBeVisible(); + }); + + test("payment method selector works", async ({ page }) => { + await page.goto("/exchange"); + + // Default should be Onchain + const onchainButton = page.getByRole("button", { name: /Onchain/ }); + const lightningButton = page.getByRole("button", { name: /Lightning/ }); + await expect(onchainButton).toHaveCSS("border-color", "rgb(167, 139, 250)"); + + // Click Lightning + await lightningButton.click(); + await expect(lightningButton).toHaveCSS("border-color", "rgb(167, 139, 250)"); + await expect(onchainButton).not.toHaveCSS("border-color", "rgb(167, 139, 250)"); + + // Click back to Onchain + await onchainButton.click(); + await expect(onchainButton).toHaveCSS("border-color", "rgb(167, 139, 250)"); + }); + + test("lightning disabled above threshold", async ({ page }) => { + await page.goto("/exchange"); + + // Set amount above threshold (€1000 = 100000 cents) + const amountInput = page.locator('input[type="text"]').filter({ hasText: "" }); + await amountInput.fill("1100"); + + // Lightning button should be disabled + const lightningButton = page.getByRole("button", { name: /Lightning/ }); + await expect(lightningButton).toBeDisabled(); + + // Should show threshold message + await expect(page.getByText(/Lightning payments are only available/)).toBeVisible(); }); });