The new 'shows QR code for desktop scanning' E2E test used plate JKL012, which is the same plate seeded as a processing order in the dev migrations (V7__seed_processing_order.sql) and used by the admin dashboard/fulfillment tests as PROCESSING_PLATE. Because the E2E chromium (parallel) tests run before the chromium-serial tests, the QR test created a second order with plate JKL012. When the serial admin tests then searched for rows matching JKL012, Playwright's strict mode found 2 matching rows and threw a strict mode violation. This caused 4 test failures + 2 skipped tests: - admin-dashboard: click row shows tracking section - admin-dashboard: click row again collapses it - admin-dashboard: expanded row shows tracking input and save button - admin-fulfillment: can register shipment for processing order - admin-fulfillment: can mark sent order as delivered (skipped) - admin-fulfillment: can mark delivered order as failed then back to sent (skipped) Changed the plate to QRA222 — not used in any seed data or other E2E test.
79 lines
3.1 KiB
TypeScript
79 lines
3.1 KiB
TypeScript
import { test, expect } from '@playwright/test'
|
|
|
|
test.describe('Payment redirect', () => {
|
|
test.beforeEach(async ({ page }) => {
|
|
await page.goto('/logga-in')
|
|
await page.getByLabel('E-postadress').fill('test@bilhej.se')
|
|
await page.getByLabel('Lösenord').fill('test1234')
|
|
await page.getByRole('button', { name: 'Logga in' }).click()
|
|
await page.waitForURL('/')
|
|
})
|
|
|
|
test('can navigate to payment page from compose', async ({ page }) => {
|
|
await page.goto('/compose?plate=ABC123')
|
|
await page.getByLabel('Ditt meddelande').fill('Hej fin bil!')
|
|
await page.getByRole('button', { name: 'Fortsätt till betalning' }).click()
|
|
|
|
await expect(page).toHaveURL(/\/betalning\//)
|
|
await expect(page.getByRole('heading', { name: 'Betalning' })).toBeVisible()
|
|
await expect(page.getByText('49 kr')).toBeVisible()
|
|
await expect(page.getByText('ABC123')).toBeVisible()
|
|
})
|
|
|
|
test('payment button marks order as paid and redirects to orders', async ({
|
|
page,
|
|
}) => {
|
|
await page.goto('/compose?plate=DEF456')
|
|
await page.getByLabel('Ditt meddelande').fill('Vill köpa din bil.')
|
|
await page.getByRole('button', { name: 'Fortsätt till betalning' }).click()
|
|
|
|
await page.waitForURL(/\/betalning\//)
|
|
await page.getByRole('button', { name: 'Jag har betalat' }).click()
|
|
await page.getByRole('button', { name: 'Ja, jag har betalat' }).click()
|
|
|
|
await expect(page).toHaveURL('/orders')
|
|
await expect(page.getByText('DEF456').first()).toBeVisible()
|
|
})
|
|
|
|
test('payment page requires authentication', async ({ page }) => {
|
|
await page.evaluate(() => localStorage.clear())
|
|
await page.goto('/betalning/some-id')
|
|
|
|
await expect(page).toHaveURL(/\/logga-in/)
|
|
})
|
|
|
|
test('shows Swish payment instructions', async ({ page }) => {
|
|
await page.goto('/compose?plate=GHI789')
|
|
await page.getByLabel('Ditt meddelande').fill('Hej!')
|
|
await page.getByRole('button', { name: 'Fortsätt till betalning' }).click()
|
|
|
|
await page.waitForURL(/\/betalning\//)
|
|
await expect(page.getByText('Swisha till')).toBeVisible()
|
|
await expect(
|
|
page.getByRole('button', { name: 'Jag har betalat' }),
|
|
).toBeVisible()
|
|
})
|
|
|
|
test('shows QR code for desktop scanning', async ({ page }) => {
|
|
await page.goto('/compose?plate=QRA222')
|
|
await page.getByLabel('Ditt meddelande').fill('Fin bil!')
|
|
await page.getByRole('button', { name: 'Fortsätt till betalning' }).click()
|
|
|
|
await page.waitForURL(/\/betalning\//)
|
|
await expect(page.getByRole('img', { name: 'Swish QR-kod' })).toBeVisible()
|
|
await expect(page.getByText('Skanna QR-koden')).toBeVisible()
|
|
})
|
|
|
|
test('shows Swish payment link with pre-filled data', async ({ page }) => {
|
|
await page.goto('/compose?plate=MNO345')
|
|
await page.getByLabel('Ditt meddelande').fill('Hej där!')
|
|
await page.getByRole('button', { name: 'Fortsätt till betalning' }).click()
|
|
|
|
await page.waitForURL(/\/betalning\//)
|
|
const swishLink = page.getByRole('link', { name: 'Betala med Swish' })
|
|
await expect(swishLink).toBeVisible()
|
|
const href = await swishLink.getAttribute('href')
|
|
expect(href).toContain('app.swish.nu')
|
|
expect(href).toContain('amt=49.00')
|
|
})
|
|
})
|