48 lines
1.9 KiB
TypeScript
48 lines
1.9 KiB
TypeScript
|
|
import { describe, it, expect } from 'vitest'
|
||
|
|
import { ADMIN_ONLY_PATH_PREFIXES, isAdminOnlyPath } from '../permissions'
|
||
|
|
|
||
|
|
describe('ADMIN_ONLY_PATH_PREFIXES', () => {
|
||
|
|
it('contains all 7 admin-only paths', () => {
|
||
|
|
expect(ADMIN_ONLY_PATH_PREFIXES).toHaveLength(7)
|
||
|
|
expect(ADMIN_ONLY_PATH_PREFIXES).toContain('/users')
|
||
|
|
expect(ADMIN_ONLY_PATH_PREFIXES).toContain('/roles')
|
||
|
|
expect(ADMIN_ONLY_PATH_PREFIXES).toContain('/route-groups')
|
||
|
|
expect(ADMIN_ONLY_PATH_PREFIXES).toContain('/mq-status')
|
||
|
|
expect(ADMIN_ONLY_PATH_PREFIXES).toContain('/failed-messages')
|
||
|
|
expect(ADMIN_ONLY_PATH_PREFIXES).toContain('/logs/requests')
|
||
|
|
expect(ADMIN_ONLY_PATH_PREFIXES).toContain('/logs/operations')
|
||
|
|
})
|
||
|
|
})
|
||
|
|
|
||
|
|
describe('isAdminOnlyPath', () => {
|
||
|
|
it('matches exact admin-only paths', () => {
|
||
|
|
for (const path of ADMIN_ONLY_PATH_PREFIXES) {
|
||
|
|
expect(isAdminOnlyPath(path)).toBe(true)
|
||
|
|
}
|
||
|
|
})
|
||
|
|
|
||
|
|
it('matches sub-paths via prefix matching', () => {
|
||
|
|
expect(isAdminOnlyPath('/users/123')).toBe(true)
|
||
|
|
expect(isAdminOnlyPath('/users/123/edit')).toBe(true)
|
||
|
|
expect(isAdminOnlyPath('/roles/5')).toBe(true)
|
||
|
|
expect(isAdminOnlyPath('/logs/requests/detail')).toBe(true)
|
||
|
|
expect(isAdminOnlyPath('/logs/operations/42')).toBe(true)
|
||
|
|
expect(isAdminOnlyPath('/failed-messages/retry')).toBe(true)
|
||
|
|
})
|
||
|
|
|
||
|
|
it('does not match non-admin paths', () => {
|
||
|
|
expect(isAdminOnlyPath('/')).toBe(false)
|
||
|
|
expect(isAdminOnlyPath('/login')).toBe(false)
|
||
|
|
expect(isAdminOnlyPath('/products')).toBe(false)
|
||
|
|
expect(isAdminOnlyPath('/orders')).toBe(false)
|
||
|
|
expect(isAdminOnlyPath('/dashboard')).toBe(false)
|
||
|
|
})
|
||
|
|
|
||
|
|
it('does not match prefix-similar but distinct paths', () => {
|
||
|
|
expect(isAdminOnlyPath('/users-export')).toBe(false)
|
||
|
|
expect(isAdminOnlyPath('/roles-backup')).toBe(false)
|
||
|
|
expect(isAdminOnlyPath('/route-groups-old')).toBe(false)
|
||
|
|
expect(isAdminOnlyPath('/mq-status-history')).toBe(false)
|
||
|
|
})
|
||
|
|
})
|