mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2026-07-24 04:44:55 +00:00
Per Playwright's own docs, routeFromHAR's notFound: 'fallback' sends unmatched requests straight to the network -- it does not chain to other, earlier-registered page.route() handlers via route.fallback() the way I'd assumed. Since Playwright checks routes in reverse-registration order, a handler registered in beforeEach (i.e. before the test body's routeFromHAR call) is checked AFTER routeFromHAR, whose catch-all pattern intercepts everything first and sends any miss straight to the (nonexistent, in e2e) network -- my stub never got a chance to run. Confirmed by a second CI failure with the same "Failed to fetch" symptom even after the CORS-header fix. Moved the mockFilterSelectionData(page) call to immediately after each test's own routeFromHAR(...) call instead, so it's registered later and checked first for that specific URL, with routeFromHAR's broader pattern still handling everything else as before. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
41 lines
1.8 KiB
TypeScript
41 lines
1.8 KiB
TypeScript
import { expect, test } from '@playwright/test'
|
|
import path from 'node:path'
|
|
import { mockFilterSelectionData } from '../mock-filter-selection-data'
|
|
|
|
const REQUESTS_HAR = path.join(__dirname, 'requests/api-settings.har')
|
|
|
|
test('should activate / deactivate save button when settings change', async ({
|
|
page,
|
|
}) => {
|
|
await page.routeFromHAR(REQUESTS_HAR, { notFound: 'fallback' })
|
|
await mockFilterSelectionData(page)
|
|
await page.goto('/settings')
|
|
await expect(page.getByRole('button', { name: 'Save' })).toBeDisabled()
|
|
await page.getByLabel('Use system setting').click()
|
|
await page.getByRole('button', { name: 'Save' }).scrollIntoViewIfNeeded()
|
|
await expect(page.getByRole('button', { name: 'Save' })).toBeEnabled()
|
|
})
|
|
|
|
test('should warn on unsaved changes', async ({ page }) => {
|
|
await page.routeFromHAR(REQUESTS_HAR, { notFound: 'fallback' })
|
|
await mockFilterSelectionData(page)
|
|
await page.goto('/settings')
|
|
await page.getByLabel('Use system setting').click()
|
|
await page.getByRole('link', { name: 'Dashboard' }).click()
|
|
await expect(page.getByRole('dialog')).toHaveText(/unsaved changes/)
|
|
await page.getByRole('button', { name: 'Cancel' }).click()
|
|
await page.getByLabel('Use system setting').click()
|
|
await page.getByRole('link', { name: 'Dashboard' }).click()
|
|
await expect(page.getByRole('dialog')).toHaveCount(0)
|
|
})
|
|
|
|
test('should apply appearance changes when set', async ({ page }) => {
|
|
await page.routeFromHAR(REQUESTS_HAR, { notFound: 'fallback' })
|
|
await mockFilterSelectionData(page)
|
|
await page.goto('/settings')
|
|
await expect(page.locator('html')).toHaveAttribute('data-bs-theme', /auto/)
|
|
await page.getByLabel('Use system setting').click()
|
|
await page.getByLabel('Enable dark mode').click()
|
|
await expect(page.locator('html')).toHaveAttribute('data-bs-theme', /dark/)
|
|
})
|