44 lines
1.5 KiB
TypeScript
44 lines
1.5 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import { hasPermission, canViewPets, type Role, type Permission } from '$lib/roles';
|
|
|
|
describe('roles', () => {
|
|
it('sysadmin has all permissions', () => {
|
|
const perms: Permission[] = [
|
|
'dashboard', 'pets', 'pets_view', 'applications', 'sponsors',
|
|
'donations', 'expenses', 'vets', 'medical', 'events', 'content',
|
|
'volunteers', 'users', 'shop', 'import', 'system'
|
|
];
|
|
for (const perm of perms) {
|
|
expect(hasPermission('sysadmin', perm)).toBe(true);
|
|
}
|
|
});
|
|
|
|
it('director has all except system', () => {
|
|
expect(hasPermission('director', 'pets')).toBe(true);
|
|
expect(hasPermission('director', 'system')).toBe(false);
|
|
});
|
|
|
|
it('foster has only dashboard', () => {
|
|
expect(hasPermission('foster', 'dashboard')).toBe(true);
|
|
expect(hasPermission('foster', 'pets')).toBe(false);
|
|
expect(hasPermission('foster', 'users')).toBe(false);
|
|
});
|
|
|
|
it('viewer has only dashboard', () => {
|
|
expect(hasPermission('viewer', 'dashboard')).toBe(true);
|
|
expect(hasPermission('viewer', 'pets')).toBe(false);
|
|
});
|
|
|
|
it('applications_manager can view pets but not edit', () => {
|
|
expect(hasPermission('applications_manager', 'applications')).toBe(true);
|
|
expect(hasPermission('applications_manager', 'pets_view')).toBe(true);
|
|
expect(hasPermission('applications_manager', 'pets')).toBe(false);
|
|
});
|
|
|
|
it('canViewPets returns true for roles with pets or pets_view', () => {
|
|
expect(canViewPets('sysadmin')).toBe(true);
|
|
expect(canViewPets('applications_manager')).toBe(true);
|
|
expect(canViewPets('viewer')).toBe(false);
|
|
});
|
|
});
|