Ghost/ghost/core/test/e2e-api/admin/email-preview-rate-limiter.test.js

52 lines
1.6 KiB
JavaScript
Raw Normal View History

// Decided to have this test separately from the other email preview tests since the rate limiter would interfere with the other tests
const {agentProvider, fixtureManager, mockManager, configUtils} = require('../../utils/e2e-framework');
const sinon = require('sinon');
const DomainEvents = require('@tryghost/domain-events');
async function allSettled() {
await DomainEvents.allSettled();
}
describe('Rate limiter', function () {
let agent;
afterEach(function () {
mockManager.restore();
sinon.restore();
});
beforeEach(function () {
mockManager.mockMailgun();
});
before(async function () {
agent = await agentProvider.getAdminAPIAgent();
await fixtureManager.init('users', 'newsletters', 'posts');
await agent.loginAsOwner();
});
it('is rate limited against spammmer requests', async function () {
const testEmailSpamBlock = configUtils.config.get('spam').email_preview_block;
const requests = [];
for (let i = 0; i < testEmailSpamBlock.freeRetries + 1; i += 1) {
const req = await agent
.post(`email_previews/posts/${fixtureManager.get('posts', 0).id}/`)
.body({
emails: ['test@ghost.org']
});
requests.push(req);
}
await Promise.all(requests);
await agent
.post(`email_previews/posts/${fixtureManager.get('posts', 0).id}/`)
.body({
emails: ['test@ghost.org']
})
.expectStatus(429);
await allSettled();
});
});