File size: 3,649 Bytes
fa14516
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/**
 * Tests for route configuration utilities
 */

import {
    isPublicRoute,
    isMaintainerRoute,
    isContributorRoute,
    requiresAuth,
    getRequiredRole,
} from '@/lib/routeConfig';

describe('Route Configuration', () => {
    describe('isPublicRoute', () => {
        it('should return true for public routes', () => {
            expect(isPublicRoute('/api/auth/github')).toBe(true);
            expect(isPublicRoute('/api/auth/github/callback')).toBe(true);
            expect(isPublicRoute('/api/health')).toBe(true);
        });

        it('should return false for protected routes', () => {
            expect(isPublicRoute('/api/auth/me')).toBe(false);
            expect(isPublicRoute('/api/maintainer/dashboard')).toBe(false);
            expect(isPublicRoute('/api/contributor/issues')).toBe(false);
        });
    });

    describe('isMaintainerRoute', () => {
        it('should return true for maintainer routes', () => {
            expect(isMaintainerRoute('/api/maintainer')).toBe(true);
            expect(isMaintainerRoute('/api/maintainer/dashboard')).toBe(true);
            expect(isMaintainerRoute('/api/repositories')).toBe(true);
            expect(isMaintainerRoute('/api/sync')).toBe(true);
        });

        it('should return false for non-maintainer routes', () => {
            expect(isMaintainerRoute('/api/contributor')).toBe(false);
            expect(isMaintainerRoute('/api/auth/me')).toBe(false);
        });
    });

    describe('isContributorRoute', () => {
        it('should return true for contributor routes', () => {
            expect(isContributorRoute('/api/contributor')).toBe(true);
            expect(isContributorRoute('/api/contributor/issues')).toBe(true);
        });

        it('should return false for non-contributor routes', () => {
            expect(isContributorRoute('/api/maintainer')).toBe(false);
            expect(isContributorRoute('/api/auth/me')).toBe(false);
        });
    });

    describe('requiresAuth', () => {
        it('should return false for public routes', () => {
            expect(requiresAuth('/api/auth/github')).toBe(false);
            expect(requiresAuth('/api/health')).toBe(false);
        });

        it('should return true for protected API routes', () => {
            expect(requiresAuth('/api/auth/me')).toBe(true);
            expect(requiresAuth('/api/maintainer/dashboard')).toBe(true);
            expect(requiresAuth('/api/contributor/issues')).toBe(true);
            expect(requiresAuth('/api/chat')).toBe(true);
        });

        it('should return false for non-API routes', () => {
            expect(requiresAuth('/')).toBe(false);
            expect(requiresAuth('/dashboard')).toBe(false);
        });
    });

    describe('getRequiredRole', () => {
        it('should return MAINTAINER for maintainer routes', () => {
            expect(getRequiredRole('/api/maintainer')).toBe('MAINTAINER');
            expect(getRequiredRole('/api/maintainer/dashboard')).toBe('MAINTAINER');
            expect(getRequiredRole('/api/repositories')).toBe('MAINTAINER');
        });

        it('should return CONTRIBUTOR for contributor routes', () => {
            expect(getRequiredRole('/api/contributor')).toBe('CONTRIBUTOR');
            expect(getRequiredRole('/api/contributor/issues')).toBe('CONTRIBUTOR');
        });

        it('should return null for routes accessible by any authenticated user', () => {
            expect(getRequiredRole('/api/auth/me')).toBeNull();
            expect(getRequiredRole('/api/chat')).toBeNull();
            expect(getRequiredRole('/api/profile')).toBeNull();
        });
    });
});