test: massive test coverage expansion (+1,437 tests, 22 new files)

Expand test coverage across all layers via 14 parallel agents:

Unit tests (3,378 total, +534):
- First-ever AI sidecar tests (157 tests covering bridge lifecycle, all 12 tool modules)
- API route infrastructure (auth, pipeline, batch, settings, teams, roles, audit, api-keys, files, docs)
- Lib coverage improvements (audit 7%->95%, worker-pool 33%->100%)
- Web store/lib gap fills (features-store, tool-registry)

Integration tests (4,403 total, +903):
- Expanded 19 tool test files with parameter variations, format edge cases, boundary values
- Cross-format matrix: 290 tests covering 14 tools x 17 formats
- Adversarial/edge cases: 63 tests for extreme inputs, concurrent requests, corrupted files

E2E-Docker (125 new tests):
- Expanded 8 spec files + 1 new file covering all 49 tools
- Added HEIC/format handling, auth failures, download verification

GUI E2E (expanded 28 spec files):
- Navigation, responsive layout, keyboard shortcuts
- All 51 tool UIs with settings, processing, display modes
- Batch/pipeline workflows, settings/RBAC, visual regression
- Resilience, accessibility (ARIA, contrast, focus), performance budgets
This commit is contained in:
SnapOtter
2026-05-09 09:02:29 +08:00
parent 4f0fbade6d
commit 649ad5db9e
138 changed files with 22105 additions and 327 deletions
+56
View File
@@ -83,4 +83,60 @@ test.describe("Cross-tool file carrying", () => {
// the processed state is reset (no stale download links).
await expect(page.getByRole("link", { name: /download/i })).not.toBeVisible();
});
test("upload on resize, click sidebar Tools link, navigate to convert, no stale state", async ({
loggedInPage: page,
}) => {
// Go to resize and upload a file
await page.goto("/resize");
await uploadTestImage(page);
// Confirm the file is loaded on resize
await expect(page.getByText(/test-image/i).first()).toBeVisible();
// Click the "Tools" sidebar link to go back to home
const sidebar = page.locator("aside");
await sidebar.getByText("Tools").click();
await page.waitForURL("/");
// Now navigate to a different tool via URL (simulating a fresh tool visit)
await page.goto("/convert");
await page.waitForLoadState("networkidle");
// No stale download links should be present from the previous tool
await expect(page.getByRole("link", { name: /download/i })).not.toBeVisible();
});
test("file carry works only via Quick Actions, not via sidebar navigation", async ({
loggedInPage: page,
}) => {
// Upload a file on the home page
await uploadTestImage(page);
// Quick Actions should be visible after upload
await expect(page.getByText("Quick Actions").first()).toBeVisible();
// Click the Resize quick action to carry the file
await page
.getByRole("button", { name: /resize/i })
.first()
.click();
await expect(page).toHaveURL("/resize");
// File should be carried from home via Quick Action
await expect(page.getByText("Upload from computer")).not.toBeVisible({ timeout: 3_000 });
await expect(page.getByText(/test-image/i).first()).toBeVisible();
// Now navigate away via sidebar to the home page
const sidebar = page.locator("aside");
await sidebar.getByText("Tools").click();
await page.waitForURL("/");
// Navigate to compress directly (not via Quick Action)
await page.goto("/compress");
await page.waitForLoadState("networkidle");
// No processed state should leak between tool pages
await expect(page.getByRole("link", { name: /download/i })).not.toBeVisible();
});
});