File
Blob: tests/worker/routes/pages-cover.workers.test.ts
| 1 | import { beforeEach, describe, expect, it } from "vitest"; |
| 2 | |
| 3 | import { GRADIENT_PRESETS } from "@/shared/page-cover"; |
| 4 | import { resetD1Tables } from "@tests/worker/helpers/db"; |
| 5 | import { apiRequest } from "@tests/worker/helpers/request"; |
| 6 | import { seedPage, seedUser, seedWorkspace } from "@tests/worker/helpers/seeds"; |
| 7 | |
| 8 | describe("PATCH /workspaces/:wid/pages/:id cover_url", () => { |
| 9 | beforeEach(async () => { |
| 10 | await resetD1Tables(); |
| 11 | }); |
| 12 | |
| 13 | it("accepts null, upload cover URLs, and shared gradient presets", async () => { |
| 14 | const owner = await seedUser(); |
| 15 | const ws = await seedWorkspace({ owner_id: owner.id }); |
| 16 | const page = await seedPage({ workspace_id: ws.id, created_by: owner.id }); |
| 17 | |
| 18 | for (const cover_url of [GRADIENT_PRESETS[0], "/uploads/upload_cover", null]) { |
| 19 | const res = await apiRequest(`/api/v1/workspaces/${ws.id}/pages/${page.id}`, { |
| 20 | method: "PATCH", |
| 21 | body: { cover_url }, |
| 22 | userId: owner.id, |
| 23 | }); |
| 24 | expect(res.status).toBe(200); |
| 25 | await expect(res.json()).resolves.toMatchObject({ page: { cover_url } }); |
| 26 | } |
| 27 | }); |
| 28 | |
| 29 | it("rejects arbitrary gradients and malformed upload paths", async () => { |
| 30 | const owner = await seedUser(); |
| 31 | const ws = await seedWorkspace({ owner_id: owner.id }); |
| 32 | const page = await seedPage({ workspace_id: ws.id, created_by: owner.id }); |
| 33 | |
| 34 | for (const cover_url of [ |
| 35 | "linear-gradient(90deg, #000000 0%, #ffffff 100%)", |
| 36 | "radial-gradient(#000000 0%, #ffffff 100%)", |
| 37 | "/uploads/upload_cover/extra", |
| 38 | "https://example.com/cover.png", |
| 39 | ]) { |
| 40 | const res = await apiRequest(`/api/v1/workspaces/${ws.id}/pages/${page.id}`, { |
| 41 | method: "PATCH", |
| 42 | body: { cover_url }, |
| 43 | userId: owner.id, |
| 44 | }); |
| 45 | expect(res.status).toBe(400); |
| 46 | } |
| 47 | }); |
| 48 | }); |