@tryghost/webhook-mock-receiver 0.1.2 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,22 +1,25 @@
1
1
  const {AssertionError} = require('assert');
2
- const util = require('util');
3
2
  const {URL} = require('url');
4
3
  const nock = require('nock');
5
- const setTimeoutPromise = util.promisify(setTimeout);
4
+ const pWaitFor = require('p-wait-for');
6
5
 
7
6
  class WebhookMockReceiver {
8
7
  constructor({snapshotManager}) {
9
- this.bodyResponse;
10
- this.receiver;
8
+ this.body;
9
+ this.headers;
10
+ this._receiver;
11
11
  this.snapshotManager = snapshotManager;
12
- this.recordBodyResponse = this.recordBodyResponse.bind(this);
12
+ this.recordRequest = this.recordRequest.bind(this);
13
13
  }
14
14
 
15
- recordBodyResponse(body) {
16
- this.bodyResponse = {body};
15
+ recordRequest(body, options) {
16
+ this.body = {body};
17
+ this.headers = {headers: options.headers};
18
+ }
17
19
 
18
- // let the nock continue with the response
19
- return true;
20
+ async receivedRequest() {
21
+ // @NOTE: figure out a better waiting mechanism here, don't allow it to hang forever
22
+ await pWaitFor(() => this._receiver.isDone());
20
23
  }
21
24
 
22
25
  /**
@@ -26,9 +29,14 @@ class WebhookMockReceiver {
26
29
  */
27
30
  mock(url) {
28
31
  const parsedURL = new URL(url);
32
+ const recordRequest = this.recordRequest;
29
33
 
30
- this.receiver = nock(parsedURL.origin)
31
- .post(parsedURL.pathname, this.recordBodyResponse)
34
+ this._receiver = nock(parsedURL.origin)
35
+ .post(parsedURL.pathname, function (body) {
36
+ recordRequest(body, this);
37
+ // let the nock continue with the response
38
+ return true;
39
+ })
32
40
  .reply(200, {status: 'OK'});
33
41
 
34
42
  return this;
@@ -36,16 +44,12 @@ class WebhookMockReceiver {
36
44
 
37
45
  reset() {
38
46
  nock.cleanAll();
39
- this.receiver = undefined;
40
- this.bodyResponse = undefined;
47
+ this._receiver = undefined;
48
+ this.body = undefined;
49
+ this.headers = undefined;
41
50
  }
42
51
 
43
- async matchBodySnapshot(properties = {}) {
44
- // @TODO: figure out a better waiting mechanism here, don't allow it to hang forever
45
- while (!this.receiver.isDone()) {
46
- await setTimeoutPromise(10);
47
- }
48
-
52
+ matchBodySnapshot(properties = {}) {
49
53
  const error = new AssertionError({});
50
54
  let assertion = {
51
55
  properties: properties,
@@ -54,7 +58,23 @@ class WebhookMockReceiver {
54
58
  error
55
59
  };
56
60
 
57
- this.snapshotManager.assertSnapshot(this.bodyResponse, assertion);
61
+ this.snapshotManager.assertSnapshot(this.body, assertion);
62
+
63
+ return this;
64
+ }
65
+
66
+ matchHeaderSnapshot(properties = {}) {
67
+ const error = new AssertionError({});
68
+ let assertion = {
69
+ properties: properties,
70
+ field: 'headers',
71
+ type: 'header',
72
+ error
73
+ };
74
+
75
+ this.snapshotManager.assertSnapshot(this.headers, assertion);
76
+
77
+ return this;
58
78
  }
59
79
  }
60
80
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tryghost/webhook-mock-receiver",
3
- "version": "0.1.2",
3
+ "version": "0.2.0",
4
4
  "repository": "https://github.com/TryGhost/framework/tree/main/packages/webhook-mock-receiver",
5
5
  "author": "Ghost Foundation",
6
6
  "license": "MIT",
@@ -24,7 +24,10 @@
24
24
  "c8": "7.12.0",
25
25
  "got": "9.6.0",
26
26
  "mocha": "10.0.0",
27
- "sinon": "14.0.0"
27
+ "sinon": "14.0.1"
28
28
  },
29
- "gitHead": "cc9195ea06015d9711ed1fa65267ff85c19edb05"
29
+ "dependencies": {
30
+ "p-wait-for": "3.1.0"
31
+ },
32
+ "gitHead": "f3dbb6472357449036db1a79f458d0fdfd53640b"
30
33
  }