helpyourneighbour/backend/src/__tests__/rateLimit.test.js

65 lines
1.6 KiB
JavaScript
Raw Normal View History

import { rateLimit, authRateLimit } from '../middleware/rateLimit.js';
import express from 'express';
import request from 'supertest';
describe('Rate Limit Middleware', () => {
let app;
beforeEach(() => {
app = express();
app.use(express.json());
});
it('should allow requests within limit', (done) => {
const middleware = rateLimit({ max: 2, windowMs: 1000 });
app.get('/test', middleware, (req, res) => {
res.status(200).json({ message: 'OK' });
});
request(app)
.get('/test')
.expect(200)
.end(done);
});
it('should block requests exceeding limit', (done) => {
const middleware = rateLimit({ max: 1, windowMs: 1000 });
app.get('/test', middleware, (req, res) => {
res.status(200).json({ message: 'OK' });
});
// Erster Request sollte erfolgreich sein
request(app)
.get('/test')
.expect(200)
.end(() => {
// Zweiter Request sollte blockiert werden
request(app)
.get('/test')
.expect(429)
.end(done);
});
});
it('should apply auth rate limiting correctly', (done) => {
const middleware = authRateLimit({ max: 1, windowMs: 1000 });
app.get('/auth-test', middleware, (req, res) => {
res.status(200).json({ message: 'OK' });
});
// Erster Request sollte erfolgreich sein
request(app)
.get('/auth-test')
.expect(200)
.end(() => {
// Zweiter Request sollte blockiert werden
request(app)
.get('/auth-test')
.expect(429)
.end(done);
});
});
});