UNPKG

express-rate-limit-ioredis-store

Version:

A redis store implementation to be used alongside ioredis for the express-rate-limit middleware

48 lines 2.02 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const chai_1 = __importDefault(require("chai")); const ioredis_1 = __importDefault(require("ioredis")); const mocha_1 = require("mocha"); const createServer_1 = __importDefault(require("../libs/createServer")); const server = (0, createServer_1.default)(); const usleep = (ms) => new Promise(resolve => setTimeout(resolve, ms)); describe('The store works alongside the express-rate-limit middleware', () => { (0, mocha_1.before)(done => { server.listen(3555, done); }); beforeEach(async () => { await new ioredis_1.default('localhost:6379').flushall(); }); it('Limits the requests for an ip after a limit', limitTest); it('Resets the ip counter after the window of time passed', resetTest); }); async function limitTest() { for (let i = 0; i < 10; i++) { const res = await chai_1.default.request(server).get('/'); res.body.message.should.be.equal('No problems so far'); } for (let i = 0; i < 2; i++) { const res = await chai_1.default.request(server).get('/'); res.body.error.should.be.equal('Too many requests'); } } async function resetTest() { const client = new ioredis_1.default('localhost:6379'); for (let i = 0; i < 10; i++) { const res = await chai_1.default.request(server).get('/'); res.body.message.should.be.equal('No problems so far'); } let res = await chai_1.default.request(server).get('/'); res.body.error.should.be.equal('Too many requests'); let keys = await client.keys('*'); keys.should.have.length(2); await usleep(3000); keys = await client.keys('*'); keys.should.have.length(0); res = await chai_1.default.request(server).get('/'); res.body.message.should.be.equal('No problems so far'); } //# sourceMappingURL=server.test.js.map