ci(nightly): repair five job classes broken by the #649 QA hardening (#695)

Nightly has been red since 07-28; per-PR CI and main are green. Two investigations traced all five failing classes to #649: extended-matrix required AI bundles it never installs (removed), nightly SYSTEM_DEPS drifted from ci.yml (added libreoffice + a doc-binaries composite for pandoc/pdfcpu), the generated-case classifier only skipped ffmpeg (widened to pdfcpu/soffice/pandoc + excluded repo-audit specs from the lean docker image), a settings spec capped loginAttemptLimit and 429-cascaded the serial bucket (restore via API), and type-to-search refused keystrokes under a route announcer's programmatic focus (guard added). A nightly dispatch on the branch confirmed all five classes green.
This commit is contained in:
SnapOtter
2026-07-31 02:09:39 +08:00
committed by GitHub
parent 44b1aa9767
commit 1b41da7615
9 changed files with 167 additions and 17 deletions
+8 -5
View File
@@ -868,12 +868,15 @@ test.describe("GUI Settings - System Settings (extended)", () => {
await expect(page.getByText("Login Attempt Limit")).toBeVisible();
const persistedValue = await page.locator("input[type='number']").nth(1).inputValue();
expect(persistedValue).toBe(testValue);
// Restore original value
await page.locator("input[type='number']").nth(1).fill(originalValue);
await page.getByRole("button", { name: /save settings/i }).click();
await expect(page.getByText("Settings saved.")).toBeVisible({ timeout: 5_000 });
// Restore through the API to the e2e webServer's real limit before
// asserting. "Restoring" the input's displayed original writes the
// client-side "5" fallback into the DB when no row existed, which overrides
// LOGIN_ATTEMPT_LIMIT=100000 and 429s every later fresh admin login,
// cascading through the whole serial bucket.
const restore = await putSettings(page, { loginAttemptLimit: "100000" });
expect(restore.ok).toBeTruthy();
expect(persistedValue).toBe(testValue);
});
test("changed Max File Age persists after dialog re-open", async ({ loggedInPage: page }) => {