bf254b9c6a
refs https://github.com/TryGhost/Toolbox/issues/363 - this commit pulls all code involving the Mailgun client SDK into one new package called `mailgun-client` - this means we should be able to replace `mailgun-js` (deprecated) with `mailgun.js` (the new, official one) without editing code all over the place - this also lays some groundwork for better testing of smaller components
98 lines
3.1 KiB
JavaScript
98 lines
3.1 KiB
JavaScript
require('should');
|
|
const {agentProvider, fixtureManager, mockManager} = require('../../utils/e2e-framework');
|
|
const moment = require('moment');
|
|
const ObjectId = require('bson-objectid');
|
|
const models = require('../../../core/server/models');
|
|
const sinon = require('sinon');
|
|
|
|
let agent;
|
|
|
|
async function createPublishedPostEmail() {
|
|
const post = {
|
|
title: 'A random test post',
|
|
status: 'draft',
|
|
feature_image_alt: 'Testing sending',
|
|
feature_image_caption: 'Testing <b>feature image caption</b>',
|
|
created_at: moment().subtract(2, 'days').toISOString(),
|
|
updated_at: moment().subtract(2, 'days').toISOString(),
|
|
created_by: ObjectId().toHexString(),
|
|
updated_by: ObjectId().toHexString()
|
|
};
|
|
|
|
const res = await agent.post('posts/')
|
|
.body({posts: [post]})
|
|
.expectStatus(201);
|
|
|
|
const id = res.body.posts[0].id;
|
|
|
|
const updatedPost = {
|
|
status: 'published',
|
|
updated_at: res.body.posts[0].updated_at
|
|
};
|
|
|
|
const newsletterSlug = fixtureManager.get('newsletters', 0).slug;
|
|
await agent.put(`posts/${id}/?newsletter=${newsletterSlug}`)
|
|
.body({posts: [updatedPost]})
|
|
.expectStatus(200);
|
|
|
|
const emailModel = await models.Email.findOne({
|
|
post_id: id
|
|
});
|
|
should.exist(emailModel);
|
|
|
|
return emailModel;
|
|
}
|
|
|
|
describe('MEGA', function () {
|
|
let _sendEmailJob;
|
|
let _mailgunClient;
|
|
|
|
describe('sendEmailJob', function () {
|
|
before(async function () {
|
|
agent = await agentProvider.getAdminAPIAgent();
|
|
await fixtureManager.init('newsletters', 'members:newsletters');
|
|
await agent.loginAsOwner();
|
|
_sendEmailJob = require('../../../core/server/services/mega/mega')._sendEmailJob;
|
|
_mailgunClient = require('../../../core/server/services/bulk-email')._mailgunClient;
|
|
});
|
|
|
|
afterEach(function () {
|
|
mockManager.restore();
|
|
});
|
|
|
|
it('Can send a scheduled post email', async function () {
|
|
sinon.stub(_mailgunClient, 'getInstance').returns({});
|
|
sinon.stub(_mailgunClient, 'send').callsFake(async () => {
|
|
return {
|
|
id: 'stubbed-email-id'
|
|
};
|
|
});
|
|
|
|
// Prepare a post and email model
|
|
const emailModel = await createPublishedPostEmail();
|
|
|
|
// Launch email job
|
|
await _sendEmailJob({emailModel, options: {}});
|
|
|
|
await emailModel.refresh();
|
|
emailModel.get('status').should.eql('submitted');
|
|
});
|
|
|
|
it('Can handle a failed post email', async function () {
|
|
sinon.stub(_mailgunClient, 'getInstance').returns({});
|
|
sinon.stub(_mailgunClient, 'send').callsFake(async () => {
|
|
throw new Error('Failed to send');
|
|
});
|
|
|
|
// Prepare a post and email model
|
|
const emailModel = await createPublishedPostEmail();
|
|
|
|
// Launch email job
|
|
await _sendEmailJob({emailModel, options: {}});
|
|
|
|
await emailModel.refresh();
|
|
emailModel.get('status').should.eql('failed');
|
|
});
|
|
});
|
|
});
|