Spaces:
Sleeping
Sleeping
| import { describe, it, expect } from "vitest"; | |
| import { UpdateUserRoleSchema } from "./validations"; | |
| import { USER_ROLES } from "app-types/roles"; | |
| describe("Admin Validations", () => { | |
| describe("UpdateUserRoleSchema", () => { | |
| it("should validate correct user role update data", () => { | |
| const validData = { | |
| userId: "123e4567-e89b-12d3-a456-426614174000", | |
| role: USER_ROLES.ADMIN, | |
| }; | |
| const result = UpdateUserRoleSchema.safeParse(validData); | |
| expect(result.success).toBe(true); | |
| if (result.success) { | |
| expect(result.data).toEqual(validData); | |
| } | |
| }); | |
| it("should validate with optional role field", () => { | |
| const validData = { | |
| userId: "123e4567-e89b-12d3-a456-426614174000", | |
| }; | |
| const result = UpdateUserRoleSchema.safeParse(validData); | |
| expect(result.success).toBe(true); | |
| if (result.success) { | |
| expect(result.data.role).toBeUndefined(); | |
| expect(result.data.userId).toBe("123e4567-e89b-12d3-a456-426614174000"); | |
| } | |
| }); | |
| it("should accept all valid user roles", () => { | |
| const roles = [USER_ROLES.USER, USER_ROLES.EDITOR, USER_ROLES.ADMIN]; | |
| for (const role of roles) { | |
| const validData = { | |
| userId: "123e4567-e89b-12d3-a456-426614174000", | |
| role, | |
| }; | |
| const result = UpdateUserRoleSchema.safeParse(validData); | |
| expect(result.success).toBe(true); | |
| if (result.success) { | |
| expect(result.data.role).toBe(role); | |
| } | |
| } | |
| }); | |
| it("should reject invalid UUID format", () => { | |
| const invalidData = { | |
| userId: "not-a-uuid", | |
| role: USER_ROLES.USER, | |
| }; | |
| const result = UpdateUserRoleSchema.safeParse(invalidData); | |
| expect(result.success).toBe(false); | |
| if (!result.success) { | |
| expect(result.error.issues[0].message).toBe("Invalid user ID"); | |
| } | |
| }); | |
| it("should reject invalid role values", () => { | |
| const invalidData = { | |
| userId: "123e4567-e89b-12d3-a456-426614174000", | |
| role: "INVALID_ROLE", | |
| }; | |
| const result = UpdateUserRoleSchema.safeParse(invalidData); | |
| expect(result.success).toBe(false); | |
| if (!result.success) { | |
| expect(result.error.issues.length).toBeGreaterThan(0); | |
| } | |
| }); | |
| it("should reject empty userId", () => { | |
| const invalidData = { | |
| userId: "", | |
| role: USER_ROLES.USER, | |
| }; | |
| const result = UpdateUserRoleSchema.safeParse(invalidData); | |
| expect(result.success).toBe(false); | |
| if (!result.success) { | |
| expect(result.error.issues[0].message).toBe("Invalid user ID"); | |
| } | |
| }); | |
| it("should reject missing userId", () => { | |
| const invalidData = { | |
| role: USER_ROLES.USER, | |
| }; | |
| const result = UpdateUserRoleSchema.safeParse(invalidData); | |
| expect(result.success).toBe(false); | |
| }); | |
| it("should handle various UUID formats", () => { | |
| const validUUIDs = [ | |
| "123e4567-e89b-12d3-a456-426614174000", // lowercase | |
| "123E4567-E89B-12D3-A456-426614174000", // uppercase | |
| "550e8400-e29b-41d4-a716-446655440000", // different UUID | |
| ]; | |
| for (const uuid of validUUIDs) { | |
| const validData = { | |
| userId: uuid, | |
| role: USER_ROLES.USER, | |
| }; | |
| const result = UpdateUserRoleSchema.safeParse(validData); | |
| expect(result.success).toBe(true); | |
| if (result.success) { | |
| expect(result.data.userId).toBe(uuid); | |
| } | |
| } | |
| }); | |
| it("should reject malformed UUIDs", () => { | |
| const invalidUUIDs = [ | |
| "123e4567-e89b-12d3-a456", // too short | |
| "123e4567-e89b-12d3-a456-426614174000-extra", // too long | |
| "123g4567-e89b-12d3-a456-426614174000", // invalid character 'g' | |
| "123e4567e89b12d3a456426614174000", // missing dashes | |
| "123e4567-e89b-12d3-a456-42661417400", // missing last character | |
| ]; | |
| for (const uuid of invalidUUIDs) { | |
| const invalidData = { | |
| userId: uuid, | |
| role: USER_ROLES.USER, | |
| }; | |
| const result = UpdateUserRoleSchema.safeParse(invalidData); | |
| expect(result.success).toBe(false); | |
| } | |
| }); | |
| it("should work with role enum values exactly", () => { | |
| // Test that the enum values match exactly what's expected | |
| expect(USER_ROLES.USER).toBe("user"); | |
| expect(USER_ROLES.EDITOR).toBe("editor"); | |
| expect(USER_ROLES.ADMIN).toBe("admin"); | |
| const testData = { | |
| userId: "123e4567-e89b-12d3-a456-426614174000", | |
| role: "user" as const, | |
| }; | |
| const result = UpdateUserRoleSchema.safeParse(testData); | |
| expect(result.success).toBe(true); | |
| }); | |
| it("should validate against actual role string values", () => { | |
| const roleStrings = ["user", "editor", "admin"]; | |
| for (const roleString of roleStrings) { | |
| const validData = { | |
| userId: "123e4567-e89b-12d3-a456-426614174000", | |
| role: roleString, | |
| }; | |
| const result = UpdateUserRoleSchema.safeParse(validData); | |
| expect(result.success).toBe(true); | |
| } | |
| }); | |
| }); | |
| }); | |