feat: strengthen backup and mobile workflows
ci / gitleaks (push) Successful in 1m19s
ci / docker (push) Successful in 5m48s

This commit is contained in:
2026-09-16 21:12:52 +08:00
parent 6f38190c92
commit 6c234d7d82
64 changed files with 5059 additions and 635 deletions
+29
View File
@@ -0,0 +1,29 @@
import { expect, test as base } from '@playwright/test'
export const expectedErrors = new WeakMap<object, Set<string>>()
export function allowExpectedError(page: object, fragment: string) {
expectedErrors.get(page)?.add(fragment)
}
export const test = base.extend({
page: async ({ page }, use) => {
const failures: string[] = []
const allowed = new Set<string>()
expectedErrors.set(page, allowed)
const record = (message: string) => {
if (![...allowed].some(pattern => message.includes(pattern))) failures.push(message)
}
page.on('pageerror', error => record(`pageerror: ${error.message}`))
page.on('console', message => { if (message.type() === 'error') record(`console.error: ${message.text()}`) })
page.on('requestfailed', request => record(`requestfailed: ${request.method()} ${request.url()} ${request.failure()?.errorText ?? ''}`))
page.on('response', response => {
const url = new URL(response.url())
const baseURL = new URL(page.url() || 'http://127.0.0.1:5173')
if (url.origin === baseURL.origin && response.status() >= 400) record(`http ${response.status()}: ${response.request().method()} ${url.pathname}`)
})
await use(page)
expect(failures, 'unexpected browser/runtime errors').toEqual([])
},
})
export { expect }