test(web): align unit + e2e expectations with section routes

This commit is contained in:
SnapOtter
2026-06-20 23:35:37 +08:00
parent 0689ae554f
commit 5dbbac6c43
10 changed files with 42 additions and 42 deletions
+3 -3
View File
@@ -24,7 +24,7 @@ function _uploadMultipleFiles(page: import("@playwright/test").Page, filePaths:
test.describe("Batch processing preview and download", () => { test.describe("Batch processing preview and download", () => {
test("batch adjust-colors shows image preview, not UUID text", async ({ loggedInPage: page }) => { test("batch adjust-colors shows image preview, not UUID text", async ({ loggedInPage: page }) => {
await page.goto("/adjust-colors"); await page.goto("/image/adjust-colors");
// Upload 2 images (PNG + JPG) // Upload 2 images (PNG + JPG)
const files = [getFixturePath("test-200x150.png"), getFixturePath("test-100x100.jpg")]; const files = [getFixturePath("test-200x150.png"), getFixturePath("test-100x100.jpg")];
@@ -66,7 +66,7 @@ test.describe("Batch processing preview and download", () => {
}); });
test("batch adjust-colors with HEIC shows preview", async ({ loggedInPage: page }) => { test("batch adjust-colors with HEIC shows preview", async ({ loggedInPage: page }) => {
await page.goto("/adjust-colors"); await page.goto("/image/adjust-colors");
// Upload HEIC + PNG // Upload HEIC + PNG
const heicPath = getTestHeicPath(); const heicPath = getTestHeicPath();
@@ -101,7 +101,7 @@ test.describe("Batch processing preview and download", () => {
loggedInPage: page, loggedInPage: page,
}) => { }) => {
await page.goto("/brightness-contrast"); await page.goto("/brightness-contrast");
await page.waitForURL("/adjust-colors"); await page.waitForURL("/image/adjust-colors");
await expect(page.getByText("Adjust Colors")).toBeVisible(); await expect(page.getByText("Adjust Colors")).toBeVisible();
}); });
}); });
+6 -6
View File
@@ -899,19 +899,19 @@ test.describe("Routing Edge Cases", () => {
}) => { }) => {
await page.goto("/brightness-contrast"); await page.goto("/brightness-contrast");
await expect(page).toHaveURL("/adjust-colors"); await expect(page).toHaveURL("/image/adjust-colors");
}); });
test("legacy /saturation redirects to /adjust-colors", async ({ loggedInPage: page }) => { test("legacy /saturation redirects to /adjust-colors", async ({ loggedInPage: page }) => {
await page.goto("/saturation"); await page.goto("/saturation");
await expect(page).toHaveURL("/adjust-colors"); await expect(page).toHaveURL("/image/adjust-colors");
}); });
test("legacy /color-channels redirects to /adjust-colors", async ({ loggedInPage: page }) => { test("legacy /color-channels redirects to /adjust-colors", async ({ loggedInPage: page }) => {
await page.goto("/color-channels"); await page.goto("/color-channels");
await expect(page).toHaveURL("/adjust-colors"); await expect(page).toHaveURL("/image/adjust-colors");
}); });
test("/privacy renders the privacy policy page", async ({ loggedInPage: page }) => { test("/privacy renders the privacy policy page", async ({ loggedInPage: page }) => {
@@ -947,7 +947,7 @@ test.describe("Routing Edge Cases", () => {
test("legacy /color-effects redirects to /adjust-colors", async ({ loggedInPage: page }) => { test("legacy /color-effects redirects to /adjust-colors", async ({ loggedInPage: page }) => {
await page.goto("/color-effects"); await page.goto("/color-effects");
await expect(page).toHaveURL("/adjust-colors"); await expect(page).toHaveURL("/image/adjust-colors");
}); });
test("/login when already logged in redirects to /", async ({ loggedInPage: page }) => { test("/login when already logged in redirects to /", async ({ loggedInPage: page }) => {
@@ -1446,13 +1446,13 @@ test.describe("Routing - Additional Edge Cases", () => {
loggedInPage: page, loggedInPage: page,
}) => { }) => {
await page.goto("/brightness-contrast"); await page.goto("/brightness-contrast");
await expect(page).toHaveURL("/adjust-colors"); await expect(page).toHaveURL("/image/adjust-colors");
await page.goto("/fullscreen"); await page.goto("/fullscreen");
await expect(page).toHaveURL("/fullscreen"); await expect(page).toHaveURL("/fullscreen");
await page.goBack(); await page.goBack();
await expect(page).toHaveURL("/adjust-colors"); await expect(page).toHaveURL("/image/adjust-colors");
}); });
}); });
+5 -5
View File
@@ -312,7 +312,7 @@ test.describe("Repeated Operations Performance", () => {
"/convert", "/convert",
"/compress", "/compress",
"/sharpening", "/sharpening",
"/adjust-colors", "/image/adjust-colors",
"/strip-metadata", "/strip-metadata",
"/bulk-rename", "/bulk-rename",
"/favicon", "/favicon",
@@ -841,7 +841,7 @@ test.describe("Memory and Stability - Extended", () => {
"/watermark", "/watermark",
"/border", "/border",
"/sharpening", "/sharpening",
"/adjust-colors", "/image/adjust-colors",
]; ];
const errors: string[] = []; const errors: string[] = [];
@@ -874,7 +874,7 @@ test.describe("Memory and Stability - Extended", () => {
"/convert", "/convert",
"/compress", "/compress",
"/sharpening", "/sharpening",
"/adjust-colors", "/image/adjust-colors",
"/strip-metadata", "/strip-metadata",
"/bulk-rename", "/bulk-rename",
"/favicon", "/favicon",
@@ -920,7 +920,7 @@ test.describe("Memory Stability - Heap Measurement", () => {
"/watermark", "/watermark",
"/border", "/border",
"/sharpening", "/sharpening",
"/adjust-colors", "/image/adjust-colors",
]; ];
// Warm up and take baseline // Warm up and take baseline
@@ -1046,7 +1046,7 @@ test.describe("Memory Stability - Heap Measurement", () => {
"/convert", "/convert",
"/compress", "/compress",
"/sharpening", "/sharpening",
"/adjust-colors", "/image/adjust-colors",
"/strip-metadata", "/strip-metadata",
"/bulk-rename", "/bulk-rename",
"/favicon", "/favicon",
+2 -2
View File
@@ -646,7 +646,7 @@ test.describe("Memory and Stability", () => {
"/convert", "/convert",
"/compress", "/compress",
"/sharpening", "/sharpening",
"/adjust-colors", "/image/adjust-colors",
"/strip-metadata", "/strip-metadata",
"/bulk-rename", "/bulk-rename",
"/favicon", "/favicon",
@@ -732,7 +732,7 @@ test.describe("Memory and Stability", () => {
"/convert", "/convert",
"/compress", "/compress",
"/sharpening", "/sharpening",
"/adjust-colors", "/image/adjust-colors",
"/strip-metadata", "/strip-metadata",
"/bulk-rename", "/bulk-rename",
"/favicon", "/favicon",
+18 -18
View File
@@ -11,7 +11,7 @@ test.describe("GUI Color & Adjustment Tools", () => {
// ======================================================================== // ========================================================================
test.describe("Adjust Colors", () => { test.describe("Adjust Colors", () => {
test("renders tool page with dropzone", async ({ loggedInPage: page }) => { test("renders tool page with dropzone", async ({ loggedInPage: page }) => {
await page.goto("/adjust-colors"); await page.goto("/image/adjust-colors");
await expect(page.getByText("Adjust Colors").first()).toBeVisible(); await expect(page.getByText("Adjust Colors").first()).toBeVisible();
await expect(page.getByText("Upload from computer")).toBeVisible(); await expect(page.getByText("Upload from computer")).toBeVisible();
}); });
@@ -19,7 +19,7 @@ test.describe("GUI Color & Adjustment Tools", () => {
test("shows light/color/detail/effects sections after upload", async ({ test("shows light/color/detail/effects sections after upload", async ({
loggedInPage: page, loggedInPage: page,
}) => { }) => {
await page.goto("/adjust-colors"); await page.goto("/image/adjust-colors");
await uploadTestImage(page); await uploadTestImage(page);
await expect(page.getByText("Light").first()).toBeVisible(); await expect(page.getByText("Light").first()).toBeVisible();
@@ -31,7 +31,7 @@ test.describe("GUI Color & Adjustment Tools", () => {
test("brightness/contrast/exposure sliders visible in Light section", async ({ test("brightness/contrast/exposure sliders visible in Light section", async ({
loggedInPage: page, loggedInPage: page,
}) => { }) => {
await page.goto("/adjust-colors"); await page.goto("/image/adjust-colors");
await uploadTestImage(page); await uploadTestImage(page);
await expect(page.locator("#color-slider-brightness")).toBeVisible(); await expect(page.locator("#color-slider-brightness")).toBeVisible();
@@ -42,7 +42,7 @@ test.describe("GUI Color & Adjustment Tools", () => {
test("saturation/temperature/tint/hue sliders visible in Color section", async ({ test("saturation/temperature/tint/hue sliders visible in Color section", async ({
loggedInPage: page, loggedInPage: page,
}) => { }) => {
await page.goto("/adjust-colors"); await page.goto("/image/adjust-colors");
await uploadTestImage(page); await uploadTestImage(page);
await expect(page.locator("#color-slider-saturation")).toBeVisible(); await expect(page.locator("#color-slider-saturation")).toBeVisible();
@@ -52,7 +52,7 @@ test.describe("GUI Color & Adjustment Tools", () => {
}); });
test("effect buttons (none, grayscale, sepia, invert)", async ({ loggedInPage: page }) => { test("effect buttons (none, grayscale, sepia, invert)", async ({ loggedInPage: page }) => {
await page.goto("/adjust-colors"); await page.goto("/image/adjust-colors");
await uploadTestImage(page); await uploadTestImage(page);
await expect(page.getByRole("button", { name: "none" })).toBeVisible(); await expect(page.getByRole("button", { name: "none" })).toBeVisible();
@@ -62,7 +62,7 @@ test.describe("GUI Color & Adjustment Tools", () => {
}); });
test("color channels expandable section", async ({ loggedInPage: page }) => { test("color channels expandable section", async ({ loggedInPage: page }) => {
await page.goto("/adjust-colors"); await page.goto("/image/adjust-colors");
await uploadTestImage(page); await uploadTestImage(page);
// Click Color Channels to expand // Click Color Channels to expand
@@ -75,7 +75,7 @@ test.describe("GUI Color & Adjustment Tools", () => {
test("submit disabled without changes, enabled after slider change", async ({ test("submit disabled without changes, enabled after slider change", async ({
loggedInPage: page, loggedInPage: page,
}) => { }) => {
await page.goto("/adjust-colors"); await page.goto("/image/adjust-colors");
await uploadTestImage(page); await uploadTestImage(page);
const submitBtn = page.getByTestId("adjust-colors-submit"); const submitBtn = page.getByTestId("adjust-colors-submit");
@@ -87,7 +87,7 @@ test.describe("GUI Color & Adjustment Tools", () => {
}); });
test("Reset All button appears after changes", async ({ loggedInPage: page }) => { test("Reset All button appears after changes", async ({ loggedInPage: page }) => {
await page.goto("/adjust-colors"); await page.goto("/image/adjust-colors");
await uploadTestImage(page); await uploadTestImage(page);
await page.locator("#color-slider-brightness").fill("20"); await page.locator("#color-slider-brightness").fill("20");
@@ -95,7 +95,7 @@ test.describe("GUI Color & Adjustment Tools", () => {
}); });
test("selecting grayscale effect enables submit", async ({ loggedInPage: page }) => { test("selecting grayscale effect enables submit", async ({ loggedInPage: page }) => {
await page.goto("/adjust-colors"); await page.goto("/image/adjust-colors");
await uploadTestImage(page); await uploadTestImage(page);
const submitBtn = page.getByTestId("adjust-colors-submit"); const submitBtn = page.getByTestId("adjust-colors-submit");
@@ -106,7 +106,7 @@ test.describe("GUI Color & Adjustment Tools", () => {
}); });
test("detail section shows clarity and texture sliders", async ({ loggedInPage: page }) => { test("detail section shows clarity and texture sliders", async ({ loggedInPage: page }) => {
await page.goto("/adjust-colors"); await page.goto("/image/adjust-colors");
await uploadTestImage(page); await uploadTestImage(page);
// Detail section should have sharpness/clarity controls // Detail section should have sharpness/clarity controls
@@ -114,7 +114,7 @@ test.describe("GUI Color & Adjustment Tools", () => {
}); });
test("Reset All reverts sliders to defaults", async ({ loggedInPage: page }) => { test("Reset All reverts sliders to defaults", async ({ loggedInPage: page }) => {
await page.goto("/adjust-colors"); await page.goto("/image/adjust-colors");
await uploadTestImage(page); await uploadTestImage(page);
// Make a change first // Make a change first
@@ -130,7 +130,7 @@ test.describe("GUI Color & Adjustment Tools", () => {
}); });
test("contrast slider is interactive", async ({ loggedInPage: page }) => { test("contrast slider is interactive", async ({ loggedInPage: page }) => {
await page.goto("/adjust-colors"); await page.goto("/image/adjust-colors");
await uploadTestImage(page); await uploadTestImage(page);
const slider = page.locator("#color-slider-contrast"); const slider = page.locator("#color-slider-contrast");
@@ -139,7 +139,7 @@ test.describe("GUI Color & Adjustment Tools", () => {
}); });
test("selecting sepia effect enables submit", async ({ loggedInPage: page }) => { test("selecting sepia effect enables submit", async ({ loggedInPage: page }) => {
await page.goto("/adjust-colors"); await page.goto("/image/adjust-colors");
await uploadTestImage(page); await uploadTestImage(page);
const submitBtn = page.getByTestId("adjust-colors-submit"); const submitBtn = page.getByTestId("adjust-colors-submit");
@@ -150,7 +150,7 @@ test.describe("GUI Color & Adjustment Tools", () => {
}); });
test("processes color adjustment and shows download", async ({ loggedInPage: page }) => { test("processes color adjustment and shows download", async ({ loggedInPage: page }) => {
await page.goto("/adjust-colors"); await page.goto("/image/adjust-colors");
await uploadTestImage(page); await uploadTestImage(page);
await page.locator("#color-slider-brightness").fill("20"); await page.locator("#color-slider-brightness").fill("20");
@@ -525,7 +525,7 @@ test.describe("GUI Color & Adjustment Tools", () => {
test("adjust-colors: undo after processing returns to sliders", async ({ test("adjust-colors: undo after processing returns to sliders", async ({
loggedInPage: page, loggedInPage: page,
}) => { }) => {
await page.goto("/adjust-colors"); await page.goto("/image/adjust-colors");
await uploadTestImage(page); await uploadTestImage(page);
await page.locator("#color-slider-brightness").fill("20"); await page.locator("#color-slider-brightness").fill("20");
@@ -596,7 +596,7 @@ test.describe("GUI Color & Adjustment Tools", () => {
}); });
test("adjust-colors: clear all returns to dropzone", async ({ loggedInPage: page }) => { test("adjust-colors: clear all returns to dropzone", async ({ loggedInPage: page }) => {
await page.goto("/adjust-colors"); await page.goto("/image/adjust-colors");
await uploadTestImage(page); await uploadTestImage(page);
await expect(page.locator("#color-slider-brightness")).toBeVisible(); await expect(page.locator("#color-slider-brightness")).toBeVisible();
@@ -607,13 +607,13 @@ test.describe("GUI Color & Adjustment Tools", () => {
}); });
test("adjust-colors: navigate away resets state", async ({ loggedInPage: page }) => { test("adjust-colors: navigate away resets state", async ({ loggedInPage: page }) => {
await page.goto("/adjust-colors"); await page.goto("/image/adjust-colors");
await uploadTestImage(page); await uploadTestImage(page);
await page.locator("#color-slider-brightness").fill("30"); await page.locator("#color-slider-brightness").fill("30");
await page.goto("/sharpening"); await page.goto("/sharpening");
await page.goto("/adjust-colors"); await page.goto("/image/adjust-colors");
await expect(page.getByText("Upload from computer")).toBeVisible(); await expect(page.getByText("Upload from computer")).toBeVisible();
}); });
+1 -1
View File
@@ -107,7 +107,7 @@ test.describe("Tool processing (core tools)", () => {
}); });
test("adjust-colors processes image", async ({ loggedInPage: page }) => { test("adjust-colors processes image", async ({ loggedInPage: page }) => {
await page.goto("/adjust-colors"); await page.goto("/image/adjust-colors");
await uploadTestImage(page); await uploadTestImage(page);
// Adjust brightness to non-zero so processing makes a change // Adjust brightness to non-zero so processing makes a change
const brightnessSlider = page.locator("input[type='range']").first(); const brightnessSlider = page.locator("input[type='range']").first();
+1 -1
View File
@@ -348,7 +348,7 @@ describe("isPublicRoute", () => {
}); });
it("treats tool endpoints as private", () => { it("treats tool endpoints as private", () => {
expect(isPublicRoute("/api/v1/tools/resize")).toBe(false); expect(isPublicRoute("/api/v1/tools/image/resize")).toBe(false);
expect(isPublicRoute("/api/v1/features")).toBe(false); expect(isPublicRoute("/api/v1/features")).toBe(false);
expect(isPublicRoute("/api/v1/files")).toBe(false); expect(isPublicRoute("/api/v1/files")).toBe(false);
}); });
+3 -3
View File
@@ -179,7 +179,7 @@ describe("docs route logic", () => {
{ name: "Auth", description: "Authentication" }, { name: "Auth", description: "Authentication" },
], ],
paths: { paths: {
"/api/v1/tools/resize": { "/api/v1/tools/image/resize": {
post: { tags: ["Tools"], summary: "Resize image" }, post: { tags: ["Tools"], summary: "Resize image" },
}, },
"/api/auth/login": { "/api/auth/login": {
@@ -241,7 +241,7 @@ describe("docs route logic", () => {
}, },
tags: [{ name: "Tools", description: "Processing tools" }], tags: [{ name: "Tools", description: "Processing tools" }],
paths: { paths: {
"/api/v1/tools/resize": { "/api/v1/tools/image/resize": {
post: { post: {
tags: ["Tools"], tags: ["Tools"],
summary: "Resize an image", summary: "Resize an image",
@@ -293,7 +293,7 @@ describe("docs route logic", () => {
it("marks auth-required endpoints", () => { it("marks auth-required endpoints", () => {
const result = generateLlmsFullTxt(fullSpec); const result = generateLlmsFullTxt(fullSpec);
expect(result).toContain("POST /api/v1/tools/resize (auth required)"); expect(result).toContain("POST /api/v1/tools/image/resize (auth required)");
}); });
it("marks public endpoints", () => { it("marks public endpoints", () => {
+1 -1
View File
@@ -166,7 +166,7 @@ describe("IP allowlist", () => {
}); });
it("does NOT exempt regular API paths", () => { it("does NOT exempt regular API paths", () => {
expect(isExemptPath("/api/v1/tools/crop")).toBe(false); expect(isExemptPath("/api/v1/tools/image/crop")).toBe(false);
expect(isExemptPath("/api/v1/settings")).toBe(false); expect(isExemptPath("/api/v1/settings")).toBe(false);
expect(isExemptPath("/api/auth/login")).toBe(false); expect(isExemptPath("/api/auth/login")).toBe(false);
}); });
+2 -2
View File
@@ -350,7 +350,7 @@ describe("useMemeStore", () => {
fetchMock.mockReturnValue(okJson(result)); fetchMock.mockReturnValue(okJson(result));
await useMemeStore.getState().generateMeme(); await useMemeStore.getState().generateMeme();
expect(fetchMock).toHaveBeenCalledWith( expect(fetchMock).toHaveBeenCalledWith(
"/api/v1/tools/meme-generator", "/api/v1/tools/image/meme-generator",
expect.objectContaining({ expect.objectContaining({
method: "POST", method: "POST",
body: expect.any(String), body: expect.any(String),
@@ -371,7 +371,7 @@ describe("useMemeStore", () => {
fetchMock.mockReturnValue(okJson(result)); fetchMock.mockReturnValue(okJson(result));
await useMemeStore.getState().generateMeme(); await useMemeStore.getState().generateMeme();
expect(fetchMock).toHaveBeenCalledWith( expect(fetchMock).toHaveBeenCalledWith(
"/api/v1/tools/meme-generator", "/api/v1/tools/image/meme-generator",
expect.objectContaining({ expect.objectContaining({
method: "POST", method: "POST",
body: expect.any(FormData), body: expect.any(FormData),