mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-23 02:41:50 +03:00
4ba254b339
refs: https://github.com/TryGhost/Ghost/issues/15537 - snapshot test created to add confidence to webhook stability and increase overall test coverage.
170 lines
5.0 KiB
JavaScript
170 lines
5.0 KiB
JavaScript
const {agentProvider, mockManager, fixtureManager, matchers} = require('../utils/e2e-framework');
|
|
const {anyGhostAgent, anyObjectId, anyISODateTime, anyUuid, anyContentVersion, anyNumber} = matchers;
|
|
|
|
const buildNewsletterSnapshot = (deleteMember = false) => {
|
|
const newsLetterSnapshot = {
|
|
id: anyObjectId,
|
|
uuid: anyUuid,
|
|
created_at: anyISODateTime,
|
|
updated_at: anyISODateTime
|
|
};
|
|
|
|
if (deleteMember) {
|
|
newsLetterSnapshot._pivot_member_id = anyObjectId;
|
|
newsLetterSnapshot._pivot_newsletter_id = anyObjectId;
|
|
}
|
|
|
|
return newsLetterSnapshot;
|
|
};
|
|
|
|
const buildMemberSnapshot = (deleteMember = false) => {
|
|
const memberSnapshot = {
|
|
id: anyObjectId,
|
|
uuid: anyUuid,
|
|
created_at: anyISODateTime,
|
|
updated_at: anyISODateTime,
|
|
newsletters: new Array(1).fill(buildNewsletterSnapshot(deleteMember))
|
|
};
|
|
|
|
return memberSnapshot;
|
|
};
|
|
|
|
describe('member.* events', function () {
|
|
let adminAPIAgent;
|
|
let webhookMockReceiver;
|
|
|
|
before(async function () {
|
|
adminAPIAgent = await agentProvider.getAdminAPIAgent();
|
|
await fixtureManager.init('integrations');
|
|
await adminAPIAgent.loginAsOwner();
|
|
});
|
|
|
|
beforeEach(function () {
|
|
webhookMockReceiver = mockManager.mockWebhookRequests();
|
|
});
|
|
|
|
afterEach(function () {
|
|
mockManager.restore();
|
|
});
|
|
|
|
it('member.added event is triggered', async function () {
|
|
const webhookURL = 'https://test-webhook-receiver.com/member-added/';
|
|
await webhookMockReceiver.mock(webhookURL);
|
|
await fixtureManager.insertWebhook({
|
|
event: 'member.added',
|
|
url: webhookURL
|
|
});
|
|
|
|
await adminAPIAgent
|
|
.post('members/')
|
|
.body({
|
|
members: [{
|
|
name: 'Test Member',
|
|
email: 'testemail@example.com',
|
|
note: 'test note'
|
|
}]
|
|
})
|
|
.expectStatus(201);
|
|
|
|
await webhookMockReceiver.receivedRequest();
|
|
|
|
webhookMockReceiver
|
|
.matchHeaderSnapshot({
|
|
'content-version': anyContentVersion,
|
|
'content-length': anyNumber,
|
|
'user-agent': anyGhostAgent
|
|
})
|
|
.matchBodySnapshot({
|
|
member: {
|
|
current: buildMemberSnapshot()
|
|
}
|
|
});
|
|
});
|
|
|
|
it('member.deleted event is triggered', async function () {
|
|
const webhookURL = 'https://test-webhook-receiver.com/member-deleted/';
|
|
await webhookMockReceiver.mock(webhookURL);
|
|
await fixtureManager.insertWebhook({
|
|
event: 'member.deleted',
|
|
url: webhookURL
|
|
});
|
|
|
|
const res = await adminAPIAgent
|
|
.post('members/')
|
|
.body({
|
|
members: [{
|
|
name: 'Test Member2',
|
|
email: 'testemail2@example.com',
|
|
note: 'test note2'
|
|
}]
|
|
})
|
|
.expectStatus(201);
|
|
|
|
const id = res.body.members[0].id;
|
|
|
|
await adminAPIAgent
|
|
.delete('members/' + id)
|
|
.expectStatus(204);
|
|
|
|
await webhookMockReceiver.receivedRequest();
|
|
|
|
webhookMockReceiver
|
|
.matchHeaderSnapshot({
|
|
'content-version': anyContentVersion,
|
|
'content-length': anyNumber,
|
|
'user-agent': anyGhostAgent
|
|
})
|
|
.matchBodySnapshot({
|
|
member: {
|
|
current: {},
|
|
previous: buildMemberSnapshot(true)
|
|
}
|
|
});
|
|
});
|
|
|
|
it('member.edited event is triggered', async function () {
|
|
const webhookURL = 'https://test-webhook-receiver.com/member-edited/';
|
|
await webhookMockReceiver.mock(webhookURL);
|
|
await fixtureManager.insertWebhook({
|
|
event: 'member.edited',
|
|
url: webhookURL
|
|
});
|
|
|
|
const res = await adminAPIAgent
|
|
.post('members/')
|
|
.body({
|
|
members: [{
|
|
name: 'Test Member3',
|
|
email: 'testemail3@example.com',
|
|
note: 'test note3'
|
|
}]
|
|
})
|
|
.expectStatus(201);
|
|
|
|
const id = res.body.members[0].id;
|
|
|
|
await adminAPIAgent
|
|
.put('members/' + id)
|
|
.body({
|
|
members: [{name: 'Ghost'}]
|
|
})
|
|
.expectStatus(200);
|
|
|
|
await webhookMockReceiver.receivedRequest();
|
|
|
|
webhookMockReceiver
|
|
.matchHeaderSnapshot({
|
|
'content-version': anyContentVersion,
|
|
'content-length': anyNumber,
|
|
'user-agent': anyGhostAgent
|
|
})
|
|
.matchBodySnapshot({
|
|
member: {
|
|
current: buildMemberSnapshot(),
|
|
previous: {
|
|
updated_at: anyISODateTime
|
|
}
|
|
}
|
|
});
|
|
});
|
|
}); |