Files
Epicnabbo-Catalogus-Updated…/src/lib/admin-operations-contract.test.ts
T

44 lines
1.6 KiB
TypeScript

import { existsSync, readFileSync } from 'node:fs'
import { describe, expect, it } from 'vitest'
const ROUTES: Array<[string, string]> = [
['moderation', 'PERMS.MODERATION_VIEW'],
['moderation/actions', 'PERMS.MODERATION_EDIT'],
['moderation/cfh', 'PERMS.MODERATION_VIEW'],
['moderation/cfh/[id]', 'PERMS.MODERATION_VIEW'],
['moderation/team', 'PERMS.MODERATION_VIEW'],
['logs/audit', 'PERMS.LOGS_VIEW'],
['logs/chat', 'PERMS.LOGS_VIEW'],
['logs/commands', 'PERMS.LOGS_VIEW'],
['logs/trades', 'PERMS.LOGS_VIEW'],
['analytics', 'PERMS.ANALYTICS_VIEW'],
['analytics/activity', 'PERMS.ANALYTICS_VIEW'],
['analytics/economy', 'PERMS.ANALYTICS_VIEW'],
['devops', 'PERMS.DEVOPS_VIEW'],
['devops/errors', 'PERMS.DEVOPS_VIEW'],
['online', 'PERMS.USERS_VIEW'],
]
describe('admin operations route contract', () => {
it.each(ROUTES)('provides and guards /admin/%s', (route, permission) => {
const path = `src/app/admin/${route}/page.tsx`
expect(existsSync(path), path).toBe(true)
expect(readFileSync(path, 'utf8'), path).toContain(permission)
})
it.each([
['analytics/export', 'PERMS.ANALYTICS_EXPORT'],
['devops/health', 'PERMS.DEVOPS_VIEW'],
])('provides and guards /api/admin/%s', (route, permission) => {
const path = `src/app/api/admin/${route}/route.ts`
expect(existsSync(path), path).toBe(true)
expect(readFileSync(path, 'utf8'), path).toContain(permission)
})
it('guards moderation mutations separately from page navigation', () => {
const source = readFileSync('src/actions/moderation.ts', 'utf8')
expect(source).toContain('PERMS.MODERATION_EDIT')
expect(source).toContain('adminAction')
})
})