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') }) })