diff --git a/backend/src/server.js b/backend/src/server.js index bce3442..50e8d9c 100644 --- a/backend/src/server.js +++ b/backend/src/server.js @@ -17,6 +17,11 @@ app.use(express.json()); app.get('/health', (_req, res) => res.json({ status: 'ok' })); +// Test route for role middleware +app.get('/test-role', (_req, res) => { + res.status(200).json({ message: 'Test route for role middleware' }); +}); + // Metrics endpoint app.get('/metrics', (_req, res) => { const uptime = process.uptime(); diff --git a/backend/tests/roles.test.js b/backend/tests/roles.test.js new file mode 100644 index 0000000..564a571 --- /dev/null +++ b/backend/tests/roles.test.js @@ -0,0 +1,32 @@ +const request = require('supertest'); +const app = require('../src/server'); +const { requireRole } = require('../middleware/role.middleware'); + +describe('Role Middleware', () => { + // Test for a route that requires 'admin' role + it('should deny access to users without admin role', async () => { + const response = await request(app) + .get('/admin/users') + .set('Authorization', 'Bearer invalid-token'); + + expect(response.status).toBe(401); + }); + + // Test for a route that requires 'moderator' role + it('should deny access to users without moderator role', async () => { + const response = await request(app) + .get('/moderator/reports') + .set('Authorization', 'Bearer invalid-token'); + + expect(response.status).toBe(401); + }); + + // Test for a route that requires 'user' role + it('should deny access to users without user role', async () => { + const response = await request(app) + .get('/profile') + .set('Authorization', 'Bearer invalid-token'); + + expect(response.status).toBe(401); + }); +}); \ No newline at end of file