Skip to content

Commit

Permalink
Added e2e test for page.tag.detached event
Browse files Browse the repository at this point in the history
refs: TryGhost#15537

This adds an e2e test and test snapshot for the page.tag.detached webhook
so we can prevent regressions and bugs in the future
  • Loading branch information
Dark-Knight11 authored and ErisDS committed Oct 30, 2022
1 parent 5b563a9 commit d57cc8d
Show file tree
Hide file tree
Showing 2 changed files with 277 additions and 2 deletions.
196 changes: 196 additions & 0 deletions ghost/core/test/e2e-webhooks/__snapshots__/pages.test.js.snap
Original file line number Diff line number Diff line change
Expand Up @@ -783,6 +783,202 @@ Object {
}
`;
exports[`page.* events page.tag.detached event is triggered 1: [headers] 1`] = `
Object {
"accept-encoding": "gzip, deflate",
"content-length": Any<Number>,
"content-type": "application/json",
"content-version": StringMatching /v\\\\d\\+\\\\\\.\\\\d\\+/,
"user-agent": StringMatching /Ghost\\\\/\\\\d\\+\\\\\\.\\\\d\\+\\\\\\.\\\\d\\+\\\\s\\\\\\(https:\\\\/\\\\/github\\.com\\\\/TryGhost\\\\/Ghost\\\\\\)/,
}
`;
exports[`page.* events page.tag.detached event is triggered 2: [body] 1`] = `
Object {
"page": Object {
"current": Object {
"authors": Array [
Object {
"accessibility": null,
"bio": "bio",
"comment_notifications": true,
"cover_image": null,
"created_at": StringMatching /\\\\d\\{4\\}-\\\\d\\{2\\}-\\\\d\\{2\\}T\\\\d\\{2\\}:\\\\d\\{2\\}:\\\\d\\{2\\}\\\\\\.000Z/,
"email": "[email protected]",
"facebook": null,
"free_member_signup_notification": true,
"id": "1",
"last_seen": StringMatching /\\\\d\\{4\\}-\\\\d\\{2\\}-\\\\d\\{2\\}T\\\\d\\{2\\}:\\\\d\\{2\\}:\\\\d\\{2\\}\\\\\\.000Z/,
"location": "location",
"meta_description": null,
"meta_title": null,
"name": "Joe Bloggs",
"paid_subscription_canceled_notification": false,
"paid_subscription_started_notification": true,
"profile_image": "https://example.com/super_photo.jpg",
"roles": Array [
Object {
"created_at": StringMatching /\\\\d\\{4\\}-\\\\d\\{2\\}-\\\\d\\{2\\}T\\\\d\\{2\\}:\\\\d\\{2\\}:\\\\d\\{2\\}\\\\\\.000Z/,
"description": "Blog Owner",
"id": StringMatching /\\[a-f0-9\\]\\{24\\}/,
"name": "Owner",
"updated_at": StringMatching /\\\\d\\{4\\}-\\\\d\\{2\\}-\\\\d\\{2\\}T\\\\d\\{2\\}:\\\\d\\{2\\}:\\\\d\\{2\\}\\\\\\.000Z/,
},
],
"slug": "joe-bloggs",
"status": "active",
"tour": null,
"twitter": null,
"updated_at": StringMatching /\\\\d\\{4\\}-\\\\d\\{2\\}-\\\\d\\{2\\}T\\\\d\\{2\\}:\\\\d\\{2\\}:\\\\d\\{2\\}\\\\\\.000Z/,
"url": StringMatching /http:\\\\/\\\\/127\\.0\\.0\\.1:2369\\\\/\\[A-Za-z0-9_-\\]\\+\\\\//,
"website": null,
},
],
"canonical_url": null,
"codeinjection_foot": null,
"codeinjection_head": null,
"comment_id": StringMatching /\\[a-f0-9\\]\\{24\\}/,
"count": Object {
"negative_feedback": 0,
"paid_conversions": 0,
"positive_feedback": 0,
"signups": 0,
},
"created_at": StringMatching /\\\\d\\{4\\}-\\\\d\\{2\\}-\\\\d\\{2\\}T\\\\d\\{2\\}:\\\\d\\{2\\}:\\\\d\\{2\\}\\\\\\.000Z/,
"custom_excerpt": null,
"custom_template": null,
"excerpt": null,
"feature_image": null,
"feature_image_alt": null,
"feature_image_caption": null,
"featured": false,
"frontmatter": null,
"html": null,
"id": StringMatching /\\[a-f0-9\\]\\{24\\}/,
"meta_description": null,
"meta_title": null,
"mobiledoc": "{\\"version\\":\\"0.3.1\\",\\"ghostVersion\\":\\"4.0\\",\\"markups\\":[],\\"atoms\\":[],\\"cards\\":[],\\"sections\\":[[1,\\"p\\",[[0,[],0,\\"\\"]]]]}",
"og_description": null,
"og_image": null,
"og_title": null,
"primary_author": Object {
"accessibility": null,
"bio": "bio",
"comment_notifications": true,
"cover_image": null,
"created_at": StringMatching /\\\\d\\{4\\}-\\\\d\\{2\\}-\\\\d\\{2\\}T\\\\d\\{2\\}:\\\\d\\{2\\}:\\\\d\\{2\\}\\\\\\.000Z/,
"email": "[email protected]",
"facebook": null,
"free_member_signup_notification": true,
"id": "1",
"last_seen": StringMatching /\\\\d\\{4\\}-\\\\d\\{2\\}-\\\\d\\{2\\}T\\\\d\\{2\\}:\\\\d\\{2\\}:\\\\d\\{2\\}\\\\\\.000Z/,
"location": "location",
"meta_description": null,
"meta_title": null,
"name": "Joe Bloggs",
"paid_subscription_canceled_notification": false,
"paid_subscription_started_notification": true,
"profile_image": "https://example.com/super_photo.jpg",
"roles": Array [
Object {
"created_at": StringMatching /\\\\d\\{4\\}-\\\\d\\{2\\}-\\\\d\\{2\\}T\\\\d\\{2\\}:\\\\d\\{2\\}:\\\\d\\{2\\}\\\\\\.000Z/,
"description": "Blog Owner",
"id": StringMatching /\\[a-f0-9\\]\\{24\\}/,
"name": "Owner",
"updated_at": StringMatching /\\\\d\\{4\\}-\\\\d\\{2\\}-\\\\d\\{2\\}T\\\\d\\{2\\}:\\\\d\\{2\\}:\\\\d\\{2\\}\\\\\\.000Z/,
},
],
"slug": "joe-bloggs",
"status": "active",
"tour": null,
"twitter": null,
"updated_at": StringMatching /\\\\d\\{4\\}-\\\\d\\{2\\}-\\\\d\\{2\\}T\\\\d\\{2\\}:\\\\d\\{2\\}:\\\\d\\{2\\}\\\\\\.000Z/,
"url": StringMatching /http:\\\\/\\\\/127\\.0\\.0\\.1:2369\\\\/\\[A-Za-z0-9_-\\]\\+\\\\//,
"website": null,
},
"primary_tag": null,
"published_at": null,
"slug": "test-page-tag-detached-webhook",
"status": "draft",
"tags": Array [],
"tiers": Array [
Object {
"active": true,
"created_at": StringMatching /\\\\d\\{4\\}-\\\\d\\{2\\}-\\\\d\\{2\\}T\\\\d\\{2\\}:\\\\d\\{2\\}:\\\\d\\{2\\}\\\\\\.000Z/,
"currency": "usd",
"description": null,
"id": StringMatching /\\[a-f0-9\\]\\{24\\}/,
"monthly_price": 500,
"monthly_price_id": null,
"name": "Default Product",
"slug": "default-product",
"trial_days": 0,
"type": "paid",
"updated_at": StringMatching /\\\\d\\{4\\}-\\\\d\\{2\\}-\\\\d\\{2\\}T\\\\d\\{2\\}:\\\\d\\{2\\}:\\\\d\\{2\\}\\\\\\.000Z/,
"visibility": "public",
"welcome_page_url": null,
"yearly_price": 5000,
"yearly_price_id": null,
},
Object {
"active": true,
"created_at": StringMatching /\\\\d\\{4\\}-\\\\d\\{2\\}-\\\\d\\{2\\}T\\\\d\\{2\\}:\\\\d\\{2\\}:\\\\d\\{2\\}\\\\\\.000Z/,
"currency": null,
"description": null,
"id": StringMatching /\\[a-f0-9\\]\\{24\\}/,
"monthly_price": null,
"monthly_price_id": null,
"name": "Free",
"slug": "free",
"trial_days": 0,
"type": "free",
"updated_at": StringMatching /\\\\d\\{4\\}-\\\\d\\{2\\}-\\\\d\\{2\\}T\\\\d\\{2\\}:\\\\d\\{2\\}:\\\\d\\{2\\}\\\\\\.000Z/,
"visibility": "public",
"welcome_page_url": null,
"yearly_price": null,
"yearly_price_id": null,
},
],
"title": "test page.tag.detached webhook",
"twitter_description": null,
"twitter_image": null,
"twitter_title": null,
"updated_at": StringMatching /\\\\d\\{4\\}-\\\\d\\{2\\}-\\\\d\\{2\\}T\\\\d\\{2\\}:\\\\d\\{2\\}:\\\\d\\{2\\}\\\\\\.000Z/,
"url": StringMatching /http:\\\\/\\\\/127\\.0\\.0\\.1:2369\\\\/\\[A-Za-z0-9_-\\]\\+\\\\//,
"uuid": StringMatching /\\[a-f0-9\\]\\{8\\}-\\[a-f0-9\\]\\{4\\}-\\[a-f0-9\\]\\{4\\}-\\[a-f0-9\\]\\{4\\}-\\[a-f0-9\\]\\{12\\}/,
"visibility": "public",
},
"previous": Object {
"tags": Array [
Object {
"accent_color": null,
"canonical_url": null,
"codeinjection_foot": null,
"codeinjection_head": null,
"created_at": StringMatching /\\\\d\\{4\\}-\\\\d\\{2\\}-\\\\d\\{2\\}T\\\\d\\{2\\}:\\\\d\\{2\\}:\\\\d\\{2\\}\\\\\\.000Z/,
"description": null,
"feature_image": null,
"id": StringMatching /\\[a-f0-9\\]\\{24\\}/,
"meta_description": null,
"meta_title": null,
"name": "Testing TAGS",
"og_description": null,
"og_image": null,
"og_title": null,
"slug": "testing-tags",
"twitter_description": null,
"twitter_image": null,
"twitter_title": null,
"updated_at": StringMatching /\\\\d\\{4\\}-\\\\d\\{2\\}-\\\\d\\{2\\}T\\\\d\\{2\\}:\\\\d\\{2\\}:\\\\d\\{2\\}\\\\\\.000Z/,
"url": "http://127.0.0.1:2369/404/",
"visibility": "public",
},
],
},
},
}
`;
exports[`page.* events page.unpublished event is triggered 1: [headers] 1`] = `
Object {
"accept-encoding": "gzip, deflate",
Expand Down
83 changes: 81 additions & 2 deletions ghost/core/test/e2e-webhooks/pages.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ const {
anyISODateTime,
anyObjectId,
anyContentVersion,
anyNumber
anyNumber,
anyString
} = matchers;

const tierSnapshot = {
Expand All @@ -21,6 +22,7 @@ const tierSnapshot = {
updated_at: anyISODateTime
};

const tagSnapshot = tierSnapshot;
const roleSnapshot = tierSnapshot;

const buildAuthorSnapshot = (roles = false) => {
Expand All @@ -41,6 +43,7 @@ const buildAuthorSnapshot = (roles = false) => {
const buildPageSnapshotWithTiers = ({
published,
tiersCount,
tags = false,
roles = false
}) => {
return {
Expand All @@ -53,7 +56,9 @@ const buildPageSnapshotWithTiers = ({
url: anyLocalURL,
tiers: new Array(tiersCount).fill(tierSnapshot),
primary_author: buildAuthorSnapshot(roles),
authors: new Array(1).fill(buildAuthorSnapshot(roles))
authors: new Array(1).fill(buildAuthorSnapshot(roles)),
primary_tag: tags ? tagSnapshot : null,
tags: tags ? new Array(1).fill(tagSnapshot) : []
};
};

Expand All @@ -64,6 +69,18 @@ const buildPreviousPageSnapshotWithTiers = (tiersCount) => {
};
};

const buildPreviousPageSnapshotWithTiersAndTags = ({tiersCount, tags}) => {
const prevSnap = {
tags: tags ? new Array(1).fill(tagSnapshot) : []
};

if (tiersCount > 0) {
prevSnap.tiers = new Array(tiersCount).fill(tierSnapshot);
}

return prevSnap;
};

describe('page.* events', function () {
let adminAPIAgent;
let webhookMockReceiver;
Expand Down Expand Up @@ -327,4 +344,66 @@ describe('page.* events', function () {
}
});
});

it('page.tag.detached event is triggered', async function () {
const webhookURL = 'https://test-webhook-receiver.com/page-tag-detached/';
await webhookMockReceiver.mock(webhookURL);
await fixtureManager.insertWebhook({
event: 'page.tag.detached',
url: webhookURL
});

const res = await adminAPIAgent
.post('pages/')
.body({
pages: [
{
title: 'test page.tag.detached webhook',
status: 'draft'
}
]
})
.expectStatus(201);
const id = res.body.pages[0].id;
const updatedPage = res.body.pages[0];
updatedPage.tags = ['Testing TAGS'];
await adminAPIAgent
.put('pages/' + id)
.body({
pages: [updatedPage]
})
.expectStatus(200);

updatedPage.tags = [];

await adminAPIAgent
.put('pages/' + id)
.body({
pages: [updatedPage]
})
.expectStatus(200);

await webhookMockReceiver.receivedRequest();

webhookMockReceiver
.matchHeaderSnapshot({
'content-version': anyContentVersion,
'content-length': anyNumber,
'user-agent': anyGhostAgent
})
.matchBodySnapshot({
page: {
current: buildPageSnapshotWithTiers({
published: false,
tiersCount: 2,
roles: true,
tags: false
}),
previous: buildPreviousPageSnapshotWithTiersAndTags({
tiersCount: 0,
tags: true
})
}
});
});
});

0 comments on commit d57cc8d

Please sign in to comment.