better-chatbot / src /app /api /admin /validations.test.ts
Bot
Initial commit for HF Spaces
05c5ed5
Raw
History Blame Contribute Delete
5.14 kB
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);
}
});
});
});