| import { test, expect, type Page } from '@playwright/test' |
|
|
| |
| |
| |
|
|
| async function loginDemo(page: Page): Promise<void> { |
| await page.goto('/#/enroll') |
| await page.getByRole('button', { name: /Load demo identity|تحميل هوية/ }).click() |
| await expect(page.getByText(/Signed in as|مُسجّل الدخول/)).toBeVisible() |
| } |
|
|
| test('mock payment succeeds via customer action', async ({ page }) => { |
| await loginDemo(page) |
| await page.goto('/#/pay') |
| await page.getByRole('button', { name: 'Pay' }).click() |
| await expect(page.getByText('Awaiting your bank')).toBeVisible() |
| await page.getByRole('button', { name: 'Simulate settlement (mock)' }).click() |
| await expect(page.getByText('Succeeded')).toBeVisible({ timeout: 15_000 }) |
| }) |
|
|
| test('duplicate submission is prevented (form replaced by receipt)', async ({ page }) => { |
| await loginDemo(page) |
| await page.goto('/#/pay') |
| const pay = page.getByRole('button', { name: 'Pay' }) |
| await pay.click() |
| await expect(page.getByText('Awaiting your bank')).toBeVisible() |
| await expect(pay).toHaveCount(0) |
| }) |
|
|
| test('Arabic RTL flow', async ({ page }) => { |
| await page.goto('/#/pay') |
| await page.getByRole('button', { name: 'العربية' }).click() |
| await expect(page.locator('html')).toHaveAttribute('dir', 'rtl') |
| await expect(page.getByText('الدفع — بدون بطاقة')).toBeVisible() |
| }) |
|
|
| test('English flow shows normalized status labels', async ({ page }) => { |
| await loginDemo(page) |
| await page.goto('/#/pay') |
| await page.getByRole('button', { name: 'Pay' }).click() |
| await expect(page.getByText('Awaiting your bank')).toBeVisible() |
| }) |
|
|