From f48a48914a60ca5a8396ed1a2c0b9e513d0b6991 Mon Sep 17 00:00:00 2001
From: Daniel Lockyer <hi@daniellockyer.com>
Date: Mon, 15 Aug 2022 12:48:48 +0200
Subject: [PATCH] Updated mailgun-client test fixtures

- some of the existing tests return `items` as an empty array
- the upcoming change to switch `mailgun-js` to `mailgun.js` means it's
  more strict about requiring `paging` too
- this commit adds a new empty-response fixture so we can standardize
  using that across tests
---
 ghost/mailgun-client/test/fixtures/empty.json |  9 ++++
 .../test/mailgun-client.test.js               | 48 ++++++++++---------
 2 files changed, 35 insertions(+), 22 deletions(-)
 create mode 100644 ghost/mailgun-client/test/fixtures/empty.json

diff --git a/ghost/mailgun-client/test/fixtures/empty.json b/ghost/mailgun-client/test/fixtures/empty.json
new file mode 100644
index 0000000000..1df5612d79
--- /dev/null
+++ b/ghost/mailgun-client/test/fixtures/empty.json
@@ -0,0 +1,9 @@
+{
+  "items": [],
+  "paging": {
+      "previous": "https://api.mailgun.net/v3/domain.com/events/empty-previous",
+      "first": "https://api.mailgun.net/v3/domain.com/events/empty-first",
+      "last": "https://api.mailgun.net/v3/domain.com/events/empty-last",
+      "next": "https://api.mailgun.net/v3/domain.com/events/empty-next"
+  }
+}
diff --git a/ghost/mailgun-client/test/mailgun-client.test.js b/ghost/mailgun-client/test/mailgun-client.test.js
index b22e0c5046..d599404515 100644
--- a/ghost/mailgun-client/test/mailgun-client.test.js
+++ b/ghost/mailgun-client/test/mailgun-client.test.js
@@ -58,13 +58,13 @@ describe('MailgunClient', function () {
         const settingsStub = sinon.stub(settings, 'get');
         settingsStub.withArgs('mailgun_api_key').returns('settingsApiKey');
         settingsStub.withArgs('mailgun_domain').returns('settingsdomain.com');
-        settingsStub.withArgs('mailgun_base_url').returns('https://example.com/v3');
+        settingsStub.withArgs('mailgun_base_url').returns('https://api.mailgun.net');
 
-        const eventsMock1 = nock('https://example.com')
+        const eventsMock1 = nock('https://api.mailgun.net')
             .get('/v3/settingsdomain.com/events')
             .query(MAILGUN_OPTIONS)
-            .reply(200, {'Content-Type': 'application/json'}, {
-                items: []
+            .replyWithFile(200, `${__dirname}/fixtures/empty.json`, {
+                'Content-Type': 'application/json'
             });
 
         const mailgunClient = new MailgunClient({config, settings});
@@ -72,13 +72,13 @@ describe('MailgunClient', function () {
 
         settingsStub.withArgs('mailgun_api_key').returns('settingsApiKey2');
         settingsStub.withArgs('mailgun_domain').returns('settingsdomain2.com');
-        settingsStub.withArgs('mailgun_base_url').returns('https://example2.com/v3');
+        settingsStub.withArgs('mailgun_base_url').returns('https://api.mailgun.net');
 
-        const eventsMock2 = nock('https://example2.com')
+        const eventsMock2 = nock('https://api.mailgun.net')
             .get('/v3/settingsdomain2.com/events')
             .query(MAILGUN_OPTIONS)
-            .reply(200, {'Content-Type': 'application/json'}, {
-                items: []
+            .replyWithFile(200, `${__dirname}/fixtures/empty.json`, {
+                'Content-Type': 'application/json'
             });
 
         await mailgunClient.fetchEvents(MAILGUN_OPTIONS, () => {});
@@ -93,27 +93,27 @@ describe('MailgunClient', function () {
             mailgun: {
                 apiKey: 'apiKey',
                 domain: 'configdomain.com',
-                baseUrl: 'https://configapi.com/v3'
+                baseUrl: 'https://api.mailgun.net'
             }
         });
 
         const settingsStub = sinon.stub(settings, 'get');
         settingsStub.withArgs('mailgun_api_key').returns('settingsApiKey');
         settingsStub.withArgs('mailgun_domain').returns('settingsdomain.com');
-        settingsStub.withArgs('mailgun_base_url').returns('https://settingsapi.com/v3');
+        settingsStub.withArgs('mailgun_base_url').returns('https://api.mailgun.net');
 
-        const configApiMock = nock('https://configapi.com')
+        const configApiMock = nock('https://api.mailgun.net')
             .get('/v3/configdomain.com/events')
             .query(MAILGUN_OPTIONS)
-            .reply(200, {'Content-Type': 'application/json'}, {
-                items: []
+            .replyWithFile(200, `${__dirname}/fixtures/empty.json`, {
+                'Content-Type': 'application/json'
             });
 
-        const settingsApiMock = nock('https://settingsapi.com')
+        const settingsApiMock = nock('https://api.mailgun.net')
             .get('/v3/settingsdomain.com/events')
             .query(MAILGUN_OPTIONS)
-            .reply(200, {'Content-Type': 'application/json'}, {
-                items: []
+            .replyWithFile(200, `${__dirname}/fixtures/empty.json`, {
+                'Content-Type': 'application/json'
             });
 
         const mailgunClient = new MailgunClient({config, settings});
@@ -161,6 +161,7 @@ describe('MailgunClient', function () {
 
             const secondPageMock = nock('https://api.mailgun.net')
                 .get('/v3/domain.com/events/all-1-next')
+                .query(MAILGUN_OPTIONS)
                 .replyWithFile(200, `${__dirname}/fixtures/all-2.json`, {
                     'Content-Type': 'application/json'
                 });
@@ -168,8 +169,9 @@ describe('MailgunClient', function () {
             // requests continue until an empty items set is returned
             nock('https://api.mailgun.net')
                 .get('/v3/domain.com/events/all-2-next')
-                .reply(200, {'Content-Type': 'application/json'}, {
-                    items: []
+                .query(MAILGUN_OPTIONS)
+                .replyWithFile(200, `${__dirname}/fixtures/empty.json`, {
+                    'Content-Type': 'application/json'
                 });
 
             const batchHandler = sinon.spy();
@@ -208,8 +210,8 @@ describe('MailgunClient', function () {
             // requests continue until an empty items set is returned
             nock('https://api.mailgun.net')
                 .get('/v3/domain.com/events/all-2-next')
-                .reply(200, {'Content-Type': 'application/json'}, {
-                    items: []
+                .replyWithFile(200, `${__dirname}/fixtures/empty.json`, {
+                    'Content-Type': 'application/json'
                 });
 
             const batchHandler = sinon.stub().returnsArg(0);
@@ -244,6 +246,7 @@ describe('MailgunClient', function () {
 
             const secondPageMock = nock('https://api.eu.mailgun.net')
                 .get('/v3/domain.com/events/all-1-next')
+                .query(MAILGUN_OPTIONS)
                 .replyWithFile(200, `${__dirname}/fixtures/all-2-eu.json`, {
                     'Content-Type': 'application/json'
                 });
@@ -251,8 +254,9 @@ describe('MailgunClient', function () {
             // requests continue until an empty items set is returned
             nock('https://api.eu.mailgun.net')
                 .get('/v3/domain.com/events/all-2-next')
-                .reply(200, {'Content-Type': 'application/json'}, {
-                    items: []
+                .query(MAILGUN_OPTIONS)
+                .replyWithFile(200, `${__dirname}/fixtures/empty.json`, {
+                    'Content-Type': 'application/json'
                 });
 
             const batchHandler = sinon.spy();