diff --git a/tests/e2e/batch-preview.spec.ts b/tests/e2e/batch-preview.spec.ts index 265cfa1a..dc36344f 100644 --- a/tests/e2e/batch-preview.spec.ts +++ b/tests/e2e/batch-preview.spec.ts @@ -24,7 +24,7 @@ function _uploadMultipleFiles(page: import("@playwright/test").Page, filePaths: test.describe("Batch processing preview and download", () => { 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) 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 }) => { - await page.goto("/adjust-colors"); + await page.goto("/image/adjust-colors"); // Upload HEIC + PNG const heicPath = getTestHeicPath(); @@ -101,7 +101,7 @@ test.describe("Batch processing preview and download", () => { loggedInPage: page, }) => { await page.goto("/brightness-contrast"); - await page.waitForURL("/adjust-colors"); + await page.waitForURL("/image/adjust-colors"); await expect(page.getByText("Adjust Colors")).toBeVisible(); }); }); diff --git a/tests/e2e/gui-navigation.spec.ts b/tests/e2e/gui-navigation.spec.ts index bdb48f72..6ed5a8b2 100644 --- a/tests/e2e/gui-navigation.spec.ts +++ b/tests/e2e/gui-navigation.spec.ts @@ -899,19 +899,19 @@ test.describe("Routing Edge Cases", () => { }) => { 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 }) => { 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 }) => { 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 }) => { @@ -947,7 +947,7 @@ test.describe("Routing Edge Cases", () => { test("legacy /color-effects redirects to /adjust-colors", async ({ loggedInPage: page }) => { 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 }) => { @@ -1446,13 +1446,13 @@ test.describe("Routing - Additional Edge Cases", () => { loggedInPage: page, }) => { await page.goto("/brightness-contrast"); - await expect(page).toHaveURL("/adjust-colors"); + await expect(page).toHaveURL("/image/adjust-colors"); await page.goto("/fullscreen"); await expect(page).toHaveURL("/fullscreen"); await page.goBack(); - await expect(page).toHaveURL("/adjust-colors"); + await expect(page).toHaveURL("/image/adjust-colors"); }); }); diff --git a/tests/e2e/gui-performance.spec.ts b/tests/e2e/gui-performance.spec.ts index 858feafb..9bb42b6e 100644 --- a/tests/e2e/gui-performance.spec.ts +++ b/tests/e2e/gui-performance.spec.ts @@ -312,7 +312,7 @@ test.describe("Repeated Operations Performance", () => { "/convert", "/compress", "/sharpening", - "/adjust-colors", + "/image/adjust-colors", "/strip-metadata", "/bulk-rename", "/favicon", @@ -841,7 +841,7 @@ test.describe("Memory and Stability - Extended", () => { "/watermark", "/border", "/sharpening", - "/adjust-colors", + "/image/adjust-colors", ]; const errors: string[] = []; @@ -874,7 +874,7 @@ test.describe("Memory and Stability - Extended", () => { "/convert", "/compress", "/sharpening", - "/adjust-colors", + "/image/adjust-colors", "/strip-metadata", "/bulk-rename", "/favicon", @@ -920,7 +920,7 @@ test.describe("Memory Stability - Heap Measurement", () => { "/watermark", "/border", "/sharpening", - "/adjust-colors", + "/image/adjust-colors", ]; // Warm up and take baseline @@ -1046,7 +1046,7 @@ test.describe("Memory Stability - Heap Measurement", () => { "/convert", "/compress", "/sharpening", - "/adjust-colors", + "/image/adjust-colors", "/strip-metadata", "/bulk-rename", "/favicon", diff --git a/tests/e2e/gui-resilience.spec.ts b/tests/e2e/gui-resilience.spec.ts index edbbf085..e7fe3f67 100644 --- a/tests/e2e/gui-resilience.spec.ts +++ b/tests/e2e/gui-resilience.spec.ts @@ -646,7 +646,7 @@ test.describe("Memory and Stability", () => { "/convert", "/compress", "/sharpening", - "/adjust-colors", + "/image/adjust-colors", "/strip-metadata", "/bulk-rename", "/favicon", @@ -732,7 +732,7 @@ test.describe("Memory and Stability", () => { "/convert", "/compress", "/sharpening", - "/adjust-colors", + "/image/adjust-colors", "/strip-metadata", "/bulk-rename", "/favicon", diff --git a/tests/e2e/gui-tools-color.spec.ts b/tests/e2e/gui-tools-color.spec.ts index 5a285dc4..e668bfa0 100644 --- a/tests/e2e/gui-tools-color.spec.ts +++ b/tests/e2e/gui-tools-color.spec.ts @@ -11,7 +11,7 @@ test.describe("GUI Color & Adjustment Tools", () => { // ======================================================================== test.describe("Adjust Colors", () => { 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("Upload from computer")).toBeVisible(); }); @@ -19,7 +19,7 @@ test.describe("GUI Color & Adjustment Tools", () => { test("shows light/color/detail/effects sections after upload", async ({ loggedInPage: page, }) => { - await page.goto("/adjust-colors"); + await page.goto("/image/adjust-colors"); await uploadTestImage(page); 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 ({ loggedInPage: page, }) => { - await page.goto("/adjust-colors"); + await page.goto("/image/adjust-colors"); await uploadTestImage(page); 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 ({ loggedInPage: page, }) => { - await page.goto("/adjust-colors"); + await page.goto("/image/adjust-colors"); await uploadTestImage(page); 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 }) => { - await page.goto("/adjust-colors"); + await page.goto("/image/adjust-colors"); await uploadTestImage(page); 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 }) => { - await page.goto("/adjust-colors"); + await page.goto("/image/adjust-colors"); await uploadTestImage(page); // 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 ({ loggedInPage: page, }) => { - await page.goto("/adjust-colors"); + await page.goto("/image/adjust-colors"); await uploadTestImage(page); 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 }) => { - await page.goto("/adjust-colors"); + await page.goto("/image/adjust-colors"); await uploadTestImage(page); 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 }) => { - await page.goto("/adjust-colors"); + await page.goto("/image/adjust-colors"); await uploadTestImage(page); 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 }) => { - await page.goto("/adjust-colors"); + await page.goto("/image/adjust-colors"); await uploadTestImage(page); // 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 }) => { - await page.goto("/adjust-colors"); + await page.goto("/image/adjust-colors"); await uploadTestImage(page); // Make a change first @@ -130,7 +130,7 @@ test.describe("GUI Color & Adjustment Tools", () => { }); test("contrast slider is interactive", async ({ loggedInPage: page }) => { - await page.goto("/adjust-colors"); + await page.goto("/image/adjust-colors"); await uploadTestImage(page); 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 }) => { - await page.goto("/adjust-colors"); + await page.goto("/image/adjust-colors"); await uploadTestImage(page); 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 }) => { - await page.goto("/adjust-colors"); + await page.goto("/image/adjust-colors"); await uploadTestImage(page); 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 ({ loggedInPage: page, }) => { - await page.goto("/adjust-colors"); + await page.goto("/image/adjust-colors"); await uploadTestImage(page); 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 }) => { - await page.goto("/adjust-colors"); + await page.goto("/image/adjust-colors"); await uploadTestImage(page); 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 }) => { - await page.goto("/adjust-colors"); + await page.goto("/image/adjust-colors"); await uploadTestImage(page); await page.locator("#color-slider-brightness").fill("30"); await page.goto("/sharpening"); - await page.goto("/adjust-colors"); + await page.goto("/image/adjust-colors"); await expect(page.getByText("Upload from computer")).toBeVisible(); }); diff --git a/tests/e2e/tools-process.spec.ts b/tests/e2e/tools-process.spec.ts index 84dd9c7a..2eed9c4b 100644 --- a/tests/e2e/tools-process.spec.ts +++ b/tests/e2e/tools-process.spec.ts @@ -107,7 +107,7 @@ test.describe("Tool processing (core tools)", () => { }); test("adjust-colors processes image", async ({ loggedInPage: page }) => { - await page.goto("/adjust-colors"); + await page.goto("/image/adjust-colors"); await uploadTestImage(page); // Adjust brightness to non-zero so processing makes a change const brightnessSlider = page.locator("input[type='range']").first(); diff --git a/tests/unit/api/auth-routes.test.ts b/tests/unit/api/auth-routes.test.ts index 950edee8..05bfe828 100644 --- a/tests/unit/api/auth-routes.test.ts +++ b/tests/unit/api/auth-routes.test.ts @@ -348,7 +348,7 @@ describe("isPublicRoute", () => { }); 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/files")).toBe(false); }); diff --git a/tests/unit/api/docs-route.test.ts b/tests/unit/api/docs-route.test.ts index 099b53b6..ae3c625c 100644 --- a/tests/unit/api/docs-route.test.ts +++ b/tests/unit/api/docs-route.test.ts @@ -179,7 +179,7 @@ describe("docs route logic", () => { { name: "Auth", description: "Authentication" }, ], paths: { - "/api/v1/tools/resize": { + "/api/v1/tools/image/resize": { post: { tags: ["Tools"], summary: "Resize image" }, }, "/api/auth/login": { @@ -241,7 +241,7 @@ describe("docs route logic", () => { }, tags: [{ name: "Tools", description: "Processing tools" }], paths: { - "/api/v1/tools/resize": { + "/api/v1/tools/image/resize": { post: { tags: ["Tools"], summary: "Resize an image", @@ -293,7 +293,7 @@ describe("docs route logic", () => { it("marks auth-required endpoints", () => { 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", () => { diff --git a/tests/unit/api/ip-allowlist.test.ts b/tests/unit/api/ip-allowlist.test.ts index a2bf6ac7..3bc5a843 100644 --- a/tests/unit/api/ip-allowlist.test.ts +++ b/tests/unit/api/ip-allowlist.test.ts @@ -166,7 +166,7 @@ describe("IP allowlist", () => { }); 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/auth/login")).toBe(false); }); diff --git a/tests/unit/web/meme-store.test.ts b/tests/unit/web/meme-store.test.ts index 981af560..725aa276 100644 --- a/tests/unit/web/meme-store.test.ts +++ b/tests/unit/web/meme-store.test.ts @@ -350,7 +350,7 @@ describe("useMemeStore", () => { fetchMock.mockReturnValue(okJson(result)); await useMemeStore.getState().generateMeme(); expect(fetchMock).toHaveBeenCalledWith( - "/api/v1/tools/meme-generator", + "/api/v1/tools/image/meme-generator", expect.objectContaining({ method: "POST", body: expect.any(String), @@ -371,7 +371,7 @@ describe("useMemeStore", () => { fetchMock.mockReturnValue(okJson(result)); await useMemeStore.getState().generateMeme(); expect(fetchMock).toHaveBeenCalledWith( - "/api/v1/tools/meme-generator", + "/api/v1/tools/image/meme-generator", expect.objectContaining({ method: "POST", body: expect.any(FormData),