mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
test(web): align unit + e2e expectations with section routes
This commit is contained in:
@@ -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();
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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");
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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();
|
||||
});
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
@@ -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", () => {
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
|
||||
@@ -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),
|
||||
|
||||
Reference in New Issue
Block a user