Skip to content
File

Blob: tests/shared/reserved-slugs.test.ts

typescript38 lines
1import { describe, expect, it } from "vitest";
2 
3import { CreateWorkspaceRequest, UpdateWorkspaceRequest } from "@/shared/types";
4 
5const RESERVED = ["s", "login", "invite", "profile", "shared-with-me", "api", "uploads", "ws", "parties"];
6 
7describe("CreateWorkspaceRequest reserved slugs", () => {
8 for (const slug of RESERVED) {
9 it(`rejects "${slug}" as reserved`, () => {
10 const result = CreateWorkspaceRequest.safeParse({ name: "Test", slug });
11 expect(result.success).toBe(false);
12 if (result.success) return;
13 const slugIssue = result.error.issues.find((issue) => issue.path[0] === "slug");
14 expect(slugIssue?.message).toBe("This slug is reserved");
15 });
16 }
17 
18 it("accepts a non-reserved slug like 'my-workspace'", () => {
19 const result = CreateWorkspaceRequest.safeParse({ name: "Test", slug: "my-workspace" });
20 expect(result.success).toBe(true);
21 });
22});
23 
24describe("UpdateWorkspaceRequest reserved slugs", () => {
25 it("rejects renaming to 'parties'", () => {
26 const result = UpdateWorkspaceRequest.safeParse({ slug: "parties" });
27 expect(result.success).toBe(false);
28 if (result.success) return;
29 const slugIssue = result.error.issues.find((issue) => issue.path[0] === "slug");
30 expect(slugIssue?.message).toBe("This slug is reserved");
31 });
32 
33 it("accepts renaming to a non-reserved slug", () => {
34 const result = UpdateWorkspaceRequest.safeParse({ slug: "engineering" });
35 expect(result.success).toBe(true);
36 });
37});