From ca59c79fda2fd1580953318561b361d4619f8682 Mon Sep 17 00:00:00 2001 From: Chen Asraf Date: Wed, 25 Mar 2026 17:10:00 +0200 Subject: [PATCH] test: fix ui tests --- src/composables/__tests__/useUserRole.test.ts | 157 +++++++++++------- src/test-mocks.ts | 2 + 2 files changed, 99 insertions(+), 60 deletions(-) diff --git a/src/composables/__tests__/useUserRole.test.ts b/src/composables/__tests__/useUserRole.test.ts index 7278118..416e63a 100644 --- a/src/composables/__tests__/useUserRole.test.ts +++ b/src/composables/__tests__/useUserRole.test.ts @@ -1,95 +1,81 @@ -import { describe, it, expect, vi, beforeEach } from 'vitest' +import { describe, it, expect, beforeEach } from 'vitest' import { createMockRole } from '@/test-mocks' - -// Mock the ocs axios client -const mockGet = vi.fn() -vi.mock('@/axios', () => ({ - ocs: { get: (...args: unknown[]) => mockGet(...args) }, -})) - -// Import after mocks are set up import { useUserRole } from '../useUserRole' describe('useUserRole', () => { beforeEach(() => { - vi.clearAllMocks() const { clear } = useUserRole() clear() }) describe('isAdmin', () => { - it('should be true when user has admin role type', async () => { + it('should be true when user has admin role type', () => { const adminRole = createMockRole({ roleType: 'admin', canAccessAdminTools: true, canEditRoles: true, canEditCategories: true, }) - mockGet.mockResolvedValue({ data: [adminRole] }) - const { isAdmin, fetchUserRoles } = useUserRole() - await fetchUserRoles('user1') + const { isAdmin, setRoles } = useUserRole() + setRoles('user1', [adminRole]) expect(isAdmin.value).toBe(true) }) - it('should be false for custom role even with admin permissions', async () => { + it('should be false for custom role even with admin permissions', () => { const customRole = createMockRole({ roleType: 'custom', canAccessAdminTools: true, canEditRoles: true, canEditCategories: true, }) - mockGet.mockResolvedValue({ data: [customRole] }) - const { isAdmin, fetchUserRoles } = useUserRole() - await fetchUserRoles('user1') + const { isAdmin, setRoles } = useUserRole() + setRoles('user1', [customRole]) expect(isAdmin.value).toBe(false) }) }) describe('canAccessAdmin', () => { - it('should be true for admin role type', async () => { + it('should be true for admin role type', () => { const adminRole = createMockRole({ roleType: 'admin', canAccessAdminTools: true, }) - mockGet.mockResolvedValue({ data: [adminRole] }) - const { canAccessAdmin, fetchUserRoles } = useUserRole() - await fetchUserRoles('user1') + const { canAccessAdmin, setRoles } = useUserRole() + setRoles('user1', [adminRole]) expect(canAccessAdmin.value).toBe(true) }) - it('should be true for custom role with canAccessAdminTools', async () => { + it('should be true for custom role with canAccessAdminTools', () => { const customRole = createMockRole({ roleType: 'custom', canAccessAdminTools: true, }) - mockGet.mockResolvedValue({ data: [customRole] }) - const { canAccessAdmin, fetchUserRoles } = useUserRole() - await fetchUserRoles('user1') + const { canAccessAdmin, setRoles } = useUserRole() + setRoles('user1', [customRole]) expect(canAccessAdmin.value).toBe(true) }) - it('should be false when no role has canAccessAdminTools', async () => { + it('should be false when no role has any management permission', () => { const defaultRole = createMockRole({ roleType: 'default', canAccessAdminTools: false, }) - mockGet.mockResolvedValue({ data: [defaultRole] }) - const { canAccessAdmin, fetchUserRoles } = useUserRole() - await fetchUserRoles('user1') + const { canAccessAdmin, setRoles } = useUserRole() + setRoles('user1', [defaultRole]) expect(canAccessAdmin.value).toBe(false) }) - it('should be true when any role has canAccessAdminTools', async () => { + it('should be true when any role has canAccessAdminTools', () => { const defaultRole = createMockRole({ roleType: 'default', canAccessAdminTools: false, @@ -99,86 +85,137 @@ describe('useUserRole', () => { roleType: 'custom', canAccessAdminTools: true, }) - mockGet.mockResolvedValue({ data: [defaultRole, customRole] }) - const { canAccessAdmin, fetchUserRoles } = useUserRole() - await fetchUserRoles('user1') + const { canAccessAdmin, setRoles } = useUserRole() + setRoles('user1', [defaultRole, customRole]) + + expect(canAccessAdmin.value).toBe(true) + }) + + it('should be true when role has only canManageUsers', () => { + const role = createMockRole({ canManageUsers: true }) + + const { canAccessAdmin, setRoles } = useUserRole() + setRoles('user1', [role]) + + expect(canAccessAdmin.value).toBe(true) + }) + + it('should be true when role has only canEditBbcodes', () => { + const role = createMockRole({ canEditBbcodes: true }) + + const { canAccessAdmin, setRoles } = useUserRole() + setRoles('user1', [role]) expect(canAccessAdmin.value).toBe(true) }) }) describe('canEditRoles', () => { - it('should be true for custom role with canEditRoles', async () => { + it('should be true for custom role with canEditRoles', () => { const customRole = createMockRole({ roleType: 'custom', canEditRoles: true, }) - mockGet.mockResolvedValue({ data: [customRole] }) - const { canEditRoles, fetchUserRoles } = useUserRole() - await fetchUserRoles('user1') + const { canEditRoles, setRoles } = useUserRole() + setRoles('user1', [customRole]) expect(canEditRoles.value).toBe(true) }) - it('should be false when no role has canEditRoles', async () => { + it('should be false when no role has canEditRoles', () => { const customRole = createMockRole({ roleType: 'custom', canAccessAdminTools: true, canEditRoles: false, }) - mockGet.mockResolvedValue({ data: [customRole] }) - const { canEditRoles, fetchUserRoles } = useUserRole() - await fetchUserRoles('user1') + const { canEditRoles, setRoles } = useUserRole() + setRoles('user1', [customRole]) expect(canEditRoles.value).toBe(false) }) }) describe('canEditCategories', () => { - it('should be true for custom role with canEditCategories', async () => { + it('should be true for custom role with canEditCategories', () => { const customRole = createMockRole({ roleType: 'custom', canEditCategories: true, }) - mockGet.mockResolvedValue({ data: [customRole] }) - const { canEditCategories, fetchUserRoles } = useUserRole() - await fetchUserRoles('user1') + const { canEditCategories, setRoles } = useUserRole() + setRoles('user1', [customRole]) expect(canEditCategories.value).toBe(true) }) - it('should be false when no role has canEditCategories', async () => { + it('should be false when no role has canEditCategories', () => { const customRole = createMockRole({ roleType: 'custom', canAccessAdminTools: true, canEditCategories: false, }) - mockGet.mockResolvedValue({ data: [customRole] }) - const { canEditCategories, fetchUserRoles } = useUserRole() - await fetchUserRoles('user1') + const { canEditCategories, setRoles } = useUserRole() + setRoles('user1', [customRole]) expect(canEditCategories.value).toBe(false) }) }) + describe('canManageUsers', () => { + it('should be true when role has canManageUsers', () => { + const role = createMockRole({ canManageUsers: true }) + + const { canManageUsers, setRoles } = useUserRole() + setRoles('user1', [role]) + + expect(canManageUsers.value).toBe(true) + }) + + it('should be false when no role has canManageUsers', () => { + const role = createMockRole({ canManageUsers: false }) + + const { canManageUsers, setRoles } = useUserRole() + setRoles('user1', [role]) + + expect(canManageUsers.value).toBe(false) + }) + }) + + describe('canEditBbcodes', () => { + it('should be true when role has canEditBbcodes', () => { + const role = createMockRole({ canEditBbcodes: true }) + + const { canEditBbcodes, setRoles } = useUserRole() + setRoles('user1', [role]) + + expect(canEditBbcodes.value).toBe(true) + }) + + it('should be false when no role has canEditBbcodes', () => { + const role = createMockRole({ canEditBbcodes: false }) + + const { canEditBbcodes, setRoles } = useUserRole() + setRoles('user1', [role]) + + expect(canEditBbcodes.value).toBe(false) + }) + }) + describe('partial admin permissions', () => { - it('should allow admin access with only canAccessAdminTools and canEditCategories', async () => { + it('should allow admin access with only canAccessAdminTools and canEditCategories', () => { const customRole = createMockRole({ roleType: 'custom', canAccessAdminTools: true, canEditRoles: false, canEditCategories: true, }) - mockGet.mockResolvedValue({ data: [customRole] }) - const { canAccessAdmin, canEditRoles, canEditCategories, isAdmin, fetchUserRoles } = - useUserRole() - await fetchUserRoles('user1') + const { canAccessAdmin, canEditRoles, canEditCategories, isAdmin, setRoles } = useUserRole() + setRoles('user1', [customRole]) expect(isAdmin.value).toBe(false) expect(canAccessAdmin.value).toBe(true) @@ -186,18 +223,18 @@ describe('useUserRole', () => { expect(canEditCategories.value).toBe(true) }) - it('should allow admin access with all permissions on custom role', async () => { + it('should allow admin access with all permissions on custom role', () => { const customRole = createMockRole({ roleType: 'custom', canAccessAdminTools: true, + canManageUsers: true, canEditRoles: true, canEditCategories: true, + canEditBbcodes: true, }) - mockGet.mockResolvedValue({ data: [customRole] }) - const { canAccessAdmin, canEditRoles, canEditCategories, isAdmin, fetchUserRoles } = - useUserRole() - await fetchUserRoles('user1') + const { canAccessAdmin, canEditRoles, canEditCategories, isAdmin, setRoles } = useUserRole() + setRoles('user1', [customRole]) expect(isAdmin.value).toBe(false) expect(canAccessAdmin.value).toBe(true) diff --git a/src/test-mocks.ts b/src/test-mocks.ts index b910c9a..1a4ca81 100644 --- a/src/test-mocks.ts +++ b/src/test-mocks.ts @@ -20,8 +20,10 @@ export function createMockRole(overrides: Partial = {}): Role { colorLight: null, colorDark: null, canAccessAdminTools: false, + canManageUsers: false, canEditRoles: false, canEditCategories: false, + canEditBbcodes: false, isSystemRole: false, roleType: 'custom', createdAt: Date.now(),