mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
test: testing overhaul -- CI e2e gates, parallel suites, generated matrices, mutation testing (#215)
Closes the "e2e never runs in CI" hole. Adds per-PR e2e smoke gate, nightly full-suite workflows, parallel vitest forks (per-fork DBs), Playwright parallel/serial/visual projects against production builds, metadata-generated test suites (drift guards, hostile inputs, format matrix, pairwise settings, property-based fuzz), Stryker mutation testing, Schemathesis API fuzz, coverage ratchet, and fixes for three session-poisoning bugs that caused 200+ serial-bucket failures. Bug fix included: favicon/split/bulk-rename could hang clients forever when ZIP streaming failed after reply.hijack().
This commit is contained in:
@@ -717,7 +717,9 @@ test.describe("GUI Expanded Tool Coverage", () => {
|
||||
test("none background tab hides background controls", async ({ loggedInPage: page }) => {
|
||||
await page.goto("/beautify");
|
||||
|
||||
await page.getByRole("button", { name: "None" }).click();
|
||||
// Multiple sections (background, shadow, frame) each have a "None"
|
||||
// option; the background tabs are the first group.
|
||||
await page.getByRole("button", { name: "None" }).first().click();
|
||||
});
|
||||
|
||||
test("iPhone frame option is selectable", async ({ loggedInPage: page }) => {
|
||||
@@ -863,7 +865,7 @@ test.describe("GUI Expanded Tool Coverage", () => {
|
||||
|
||||
await page.getByRole("button", { name: "Percentage" }).click();
|
||||
// Percentage input should be visible
|
||||
await expect(page.locator("#gif-percentage")).toBeVisible();
|
||||
await expect(page.locator("#gif-pct")).toBeVisible();
|
||||
});
|
||||
|
||||
test("resize pixel mode width input accepts values", async ({ loggedInPage: page }) => {
|
||||
@@ -1191,10 +1193,12 @@ test.describe("GUI Expanded Tool Coverage", () => {
|
||||
// FAVICON (expanded -- settings and processing)
|
||||
// ========================================================================
|
||||
test.describe("Favicon Expanded", () => {
|
||||
test("shows mstile sizes in generated list", async ({ loggedInPage: page }) => {
|
||||
test("shows generated icon sizes in list", async ({ loggedInPage: page }) => {
|
||||
await page.goto("/favicon");
|
||||
|
||||
await expect(page.getByText("mstile-150x150.png")).toBeVisible();
|
||||
// Current generated set (mstile was dropped from FAVICON_SIZES)
|
||||
await expect(page.getByText("android-chrome-512x512.png")).toBeVisible();
|
||||
await expect(page.getByText("apple-touch-icon.png")).toBeVisible();
|
||||
});
|
||||
|
||||
test("undo after favicon generation returns to settings", async ({ loggedInPage: page }) => {
|
||||
@@ -1375,6 +1379,15 @@ test.describe("GUI Expanded Tool Coverage", () => {
|
||||
test.describe("Navigate Away Resets (expanded tools)", () => {
|
||||
test("ai-canvas-expand: navigate away resets state", async ({ loggedInPage: page }) => {
|
||||
await page.goto("/ai-canvas-expand");
|
||||
|
||||
// On servers without the AI bundle the page shows an install prompt
|
||||
// instead of a dropzone; there is no state to reset.
|
||||
const uploadVisible = await page
|
||||
.getByText("Upload from computer")
|
||||
.isVisible({ timeout: 3000 })
|
||||
.catch(() => false);
|
||||
test.skip(!uploadVisible, "AI canvas-expand bundle not installed");
|
||||
|
||||
await uploadTestImage(page);
|
||||
|
||||
await page.locator("#cac-top").fill("20");
|
||||
|
||||
Reference in New Issue
Block a user