test: fix ui tests

This commit is contained in:
2026-03-25 17:10:00 +02:00
parent ac324ee187
commit ca59c79fda
2 changed files with 99 additions and 60 deletions

View File

@@ -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)

View File

@@ -20,8 +20,10 @@ export function createMockRole(overrides: Partial<Role> = {}): Role {
colorLight: null,
colorDark: null,
canAccessAdminTools: false,
canManageUsers: false,
canEditRoles: false,
canEditCategories: false,
canEditBbcodes: false,
isSystemRole: false,
roleType: 'custom',
createdAt: Date.now(),