mirror of
https://github.com/chenasraf/nextcloud-forum.git
synced 2026-05-18 01:28:58 +00:00
test: fix ui tests
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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(),
|
||||
|
||||
Reference in New Issue
Block a user