@pact-foundation/pact 16.3.0 → 16.4.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.
- package/CHANGELOG.md +16 -3
- package/CONTRIBUTING.md +2 -2
- package/README.md +6 -2
- package/package.json +25 -28
- package/src/common/graphQL/configurationError.js +2 -22
- package/src/common/graphQL/configurationError.js.map +1 -1
- package/src/common/graphQL/graphQL.d.ts +2 -2
- package/src/common/graphQL/graphQL.js +11 -14
- package/src/common/graphQL/graphQL.js.map +1 -1
- package/src/common/graphQL/graphQLQueryError.js +2 -22
- package/src/common/graphQL/graphQLQueryError.js.map +1 -1
- package/src/common/logger.js +9 -9
- package/src/common/logger.js.map +1 -1
- package/src/common/matchingRules.d.ts +1 -1
- package/src/common/matchingRules.js +21 -21
- package/src/common/matchingRules.js.map +1 -1
- package/src/common/net.js +36 -42
- package/src/common/net.js.map +1 -1
- package/src/common/net.spec.js +41 -53
- package/src/common/net.spec.js.map +1 -1
- package/src/common/request.js +33 -82
- package/src/common/request.js.map +1 -1
- package/src/common/request.spec.js +26 -26
- package/src/common/request.spec.js.map +1 -1
- package/src/common/spec.js +3 -4
- package/src/common/spec.js.map +1 -1
- package/src/dsl/apolloGraphql.js +7 -25
- package/src/dsl/apolloGraphql.js.map +1 -1
- package/src/dsl/apolloGraphql.spec.js +21 -18
- package/src/dsl/apolloGraphql.spec.js.map +1 -1
- package/src/dsl/graphql.d.ts +2 -2
- package/src/dsl/graphql.js +29 -48
- package/src/dsl/graphql.js.map +1 -1
- package/src/dsl/graphql.spec.js +81 -66
- package/src/dsl/graphql.spec.js.map +1 -1
- package/src/dsl/interaction.d.ts +2 -2
- package/src/dsl/interaction.js +41 -48
- package/src/dsl/interaction.js.map +1 -1
- package/src/dsl/interaction.spec.js +77 -70
- package/src/dsl/interaction.spec.js.map +1 -1
- package/src/dsl/matchers.d.ts +1 -1
- package/src/dsl/matchers.js +19 -31
- package/src/dsl/matchers.js.map +1 -1
- package/src/dsl/matchers.spec.js +199 -208
- package/src/dsl/matchers.spec.js.map +1 -1
- package/src/dsl/message.d.ts +3 -3
- package/src/dsl/options.d.ts +3 -3
- package/src/dsl/verifier/proxy/hooks.d.ts +2 -2
- package/src/dsl/verifier/proxy/hooks.js +42 -112
- package/src/dsl/verifier/proxy/hooks.js.map +1 -1
- package/src/dsl/verifier/proxy/hooks.spec.js +84 -199
- package/src/dsl/verifier/proxy/hooks.spec.js.map +1 -1
- package/src/dsl/verifier/proxy/messages.d.ts +2 -2
- package/src/dsl/verifier/proxy/messages.js +88 -106
- package/src/dsl/verifier/proxy/messages.js.map +1 -1
- package/src/dsl/verifier/proxy/parseBody.d.ts +1 -1
- package/src/dsl/verifier/proxy/parseBody.js +2 -2
- package/src/dsl/verifier/proxy/parseBody.js.map +1 -1
- package/src/dsl/verifier/proxy/parseBody.spec.js +31 -76
- package/src/dsl/verifier/proxy/parseBody.spec.js.map +1 -1
- package/src/dsl/verifier/proxy/proxy.d.ts +2 -2
- package/src/dsl/verifier/proxy/proxy.js +22 -26
- package/src/dsl/verifier/proxy/proxy.js.map +1 -1
- package/src/dsl/verifier/proxy/proxy.spec.js +14 -14
- package/src/dsl/verifier/proxy/proxy.spec.js.map +1 -1
- package/src/dsl/verifier/proxy/proxyRequest.d.ts +3 -3
- package/src/dsl/verifier/proxy/proxyRequest.js +7 -7
- package/src/dsl/verifier/proxy/proxyRequest.js.map +1 -1
- package/src/dsl/verifier/proxy/proxyRequest.spec.js +49 -64
- package/src/dsl/verifier/proxy/proxyRequest.spec.js.map +1 -1
- package/src/dsl/verifier/proxy/stateHandler/setupStates.d.ts +3 -3
- package/src/dsl/verifier/proxy/stateHandler/setupStates.js +14 -18
- package/src/dsl/verifier/proxy/stateHandler/setupStates.js.map +1 -1
- package/src/dsl/verifier/proxy/stateHandler/setupStates.spec.js +76 -159
- package/src/dsl/verifier/proxy/stateHandler/setupStates.spec.js.map +1 -1
- package/src/dsl/verifier/proxy/stateHandler/stateHandler.d.ts +2 -2
- package/src/dsl/verifier/proxy/stateHandler/stateHandler.js +23 -72
- package/src/dsl/verifier/proxy/stateHandler/stateHandler.js.map +1 -1
- package/src/dsl/verifier/proxy/stateHandler/stateHandler.spec.js +37 -85
- package/src/dsl/verifier/proxy/stateHandler/stateHandler.spec.js.map +1 -1
- package/src/dsl/verifier/proxy/tracer.d.ts +1 -1
- package/src/dsl/verifier/proxy/tracer.js +42 -35
- package/src/dsl/verifier/proxy/tracer.js.map +1 -1
- package/src/dsl/verifier/proxy/types.d.ts +5 -5
- package/src/dsl/verifier/types.d.ts +3 -3
- package/src/dsl/verifier/verifier.d.ts +1 -1
- package/src/dsl/verifier/verifier.js +49 -56
- package/src/dsl/verifier/verifier.js.map +1 -1
- package/src/dsl/verifier/verifier.spec.js +76 -93
- package/src/dsl/verifier/verifier.spec.js.map +1 -1
- package/src/errors/configurationError.js +2 -22
- package/src/errors/configurationError.js.map +1 -1
- package/src/errors/graphQLQueryError.js +2 -22
- package/src/errors/graphQLQueryError.js.map +1 -1
- package/src/errors/matcherError.js +2 -22
- package/src/errors/matcherError.js.map +1 -1
- package/src/errors/verificationError.js +2 -22
- package/src/errors/verificationError.js.map +1 -1
- package/src/httpPact/ffi.d.ts +2 -2
- package/src/httpPact/ffi.js +28 -29
- package/src/httpPact/ffi.js.map +1 -1
- package/src/httpPact/ffi.spec.js +30 -31
- package/src/httpPact/ffi.spec.js.map +1 -1
- package/src/httpPact/index.d.ts +3 -3
- package/src/httpPact/index.js +92 -149
- package/src/httpPact/index.js.map +1 -1
- package/src/httpPact/index.spec.js +75 -125
- package/src/httpPact/index.spec.js.map +1 -1
- package/src/httpPact/tracing.js +20 -28
- package/src/httpPact/tracing.js.map +1 -1
- package/src/index.js +1 -1
- package/src/index.js.map +1 -1
- package/src/messageConsumerPact.d.ts +3 -3
- package/src/messageConsumerPact.js +50 -51
- package/src/messageConsumerPact.js.map +1 -1
- package/src/messageConsumerPact.spec.js +50 -49
- package/src/messageConsumerPact.spec.js.map +1 -1
- package/src/messageProviderPact.d.ts +3 -3
- package/src/messageProviderPact.js +68 -85
- package/src/messageProviderPact.js.map +1 -1
- package/src/messageProviderPact.spec.js +75 -66
- package/src/messageProviderPact.spec.js.map +1 -1
- package/src/pact.integration.spec.js +250 -268
- package/src/pact.integration.spec.js.map +1 -1
- package/src/v3/display.d.ts +1 -1
- package/src/v3/display.js +44 -58
- package/src/v3/display.js.map +1 -1
- package/src/v3/ffi.d.ts +2 -2
- package/src/v3/ffi.js +18 -16
- package/src/v3/ffi.js.map +1 -1
- package/src/v3/ffi.spec.d.ts +1 -0
- package/src/v3/ffi.spec.js +50 -0
- package/src/v3/ffi.spec.js.map +1 -0
- package/src/v3/graphql/graphQL.d.ts +4 -4
- package/src/v3/graphql/graphQL.js +50 -75
- package/src/v3/graphql/graphQL.js.map +1 -1
- package/src/v3/matchers.d.ts +2 -2
- package/src/v3/matchers.js +112 -147
- package/src/v3/matchers.js.map +1 -1
- package/src/v3/matchers.spec.js +168 -187
- package/src/v3/matchers.spec.js.map +1 -1
- package/src/v3/pact.d.ts +2 -2
- package/src/v3/pact.js +103 -151
- package/src/v3/pact.js.map +1 -1
- package/src/v3/types.d.ts +1 -1
- package/src/v3/xml/xmlBuilder.d.ts +1 -3
- package/src/v3/xml/xmlBuilder.js +7 -9
- package/src/v3/xml/xmlBuilder.js.map +1 -1
- package/src/v3/xml/xmlElement.d.ts +2 -2
- package/src/v3/xml/xmlElement.js +24 -41
- package/src/v3/xml/xmlElement.js.map +1 -1
- package/src/v3/xml/xmlElement.spec.js +23 -25
- package/src/v3/xml/xmlElement.spec.js.map +1 -1
- package/src/v3/xml/xmlNode.js +2 -5
- package/src/v3/xml/xmlNode.js.map +1 -1
- package/src/v3/xml/xmlText.d.ts +1 -1
- package/src/v3/xml/xmlText.js +9 -25
- package/src/v3/xml/xmlText.js.map +1 -1
- package/src/v4/graphql/graphQLInteractionWithRequest.d.ts +4 -4
- package/src/v4/graphql/graphQLInteractionWithRequest.js +21 -17
- package/src/v4/graphql/graphQLInteractionWithRequest.js.map +1 -1
- package/src/v4/graphql/graphQLRequestBuilder.d.ts +3 -3
- package/src/v4/graphql/graphQLRequestBuilder.js +18 -20
- package/src/v4/graphql/graphQLRequestBuilder.js.map +1 -1
- package/src/v4/graphql/index.d.ts +6 -6
- package/src/v4/graphql/index.js +21 -17
- package/src/v4/graphql/index.js.map +1 -1
- package/src/v4/graphql/types.d.ts +5 -5
- package/src/v4/http/index.d.ts +2 -2
- package/src/v4/http/index.js +48 -93
- package/src/v4/http/index.js.map +1 -1
- package/src/v4/http/interactionWithCompleteRequest.d.ts +4 -7
- package/src/v4/http/interactionWithCompleteRequest.js +6 -10
- package/src/v4/http/interactionWithCompleteRequest.js.map +1 -1
- package/src/v4/http/interactionWithPlugin.d.ts +3 -3
- package/src/v4/http/interactionWithPlugin.js +14 -11
- package/src/v4/http/interactionWithPlugin.js.map +1 -1
- package/src/v4/http/interactionWithPluginRequest.d.ts +2 -2
- package/src/v4/http/interactionWithPluginRequest.js +11 -8
- package/src/v4/http/interactionWithPluginRequest.js.map +1 -1
- package/src/v4/http/interactionWithPluginResponse.d.ts +2 -2
- package/src/v4/http/interactionWithPluginResponse.js +10 -48
- package/src/v4/http/interactionWithPluginResponse.js.map +1 -1
- package/src/v4/http/interactionWithRequest.d.ts +2 -2
- package/src/v4/http/interactionWithRequest.js +11 -8
- package/src/v4/http/interactionWithRequest.js.map +1 -1
- package/src/v4/http/interactionWithResponse.d.ts +2 -2
- package/src/v4/http/interactionWithResponse.js +10 -48
- package/src/v4/http/interactionWithResponse.js.map +1 -1
- package/src/v4/http/requestBuilder.d.ts +3 -3
- package/src/v4/http/requestBuilder.js +32 -34
- package/src/v4/http/requestBuilder.js.map +1 -1
- package/src/v4/http/requestWithPluginBuilder.d.ts +2 -2
- package/src/v4/http/requestWithPluginBuilder.js +26 -46
- package/src/v4/http/requestWithPluginBuilder.js.map +1 -1
- package/src/v4/http/responseBuilder.d.ts +3 -3
- package/src/v4/http/responseBuilder.js +24 -25
- package/src/v4/http/responseBuilder.js.map +1 -1
- package/src/v4/http/responseWithPluginBuilder.d.ts +1 -1
- package/src/v4/http/responseWithPluginBuilder.js +5 -25
- package/src/v4/http/responseWithPluginBuilder.js.map +1 -1
- package/src/v4/http/types.d.ts +3 -2
- package/src/v4/http/unconfiguredInteraction.d.ts +6 -5
- package/src/v4/http/unconfiguredInteraction.js +31 -26
- package/src/v4/http/unconfiguredInteraction.js.map +1 -1
- package/src/v4/index.d.ts +4 -4
- package/src/v4/index.js +31 -35
- package/src/v4/index.js.map +1 -1
- package/src/v4/message/asynchronousMessage.d.ts +7 -6
- package/src/v4/message/asynchronousMessage.js +157 -190
- package/src/v4/message/asynchronousMessage.js.map +1 -1
- package/src/v4/message/index.d.ts +7 -6
- package/src/v4/message/index.js +188 -217
- package/src/v4/message/index.js.map +1 -1
- package/src/v4/message/types.d.ts +5 -3
- package/src/v4/types.d.ts +3 -3
|
@@ -1,213 +1,98 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
-
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
-
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
-
function step(op) {
|
|
16
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
-
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
-
switch (op[0]) {
|
|
21
|
-
case 0: case 1: t = op; break;
|
|
22
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
-
default:
|
|
26
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
-
if (t[2]) _.ops.pop();
|
|
31
|
-
_.trys.pop(); continue;
|
|
32
|
-
}
|
|
33
|
-
op = body.call(thisArg, _);
|
|
34
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
-
}
|
|
37
|
-
};
|
|
38
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
3
|
+
const chai_1 = require("chai");
|
|
4
|
+
const sinon_1 = require("sinon");
|
|
5
|
+
const hooks_1 = require("./hooks");
|
|
42
6
|
// This mimics the proxy setup (src/dsl/verifier/proxy/proxy.ts), whereby the
|
|
43
7
|
// state handling middleware is run regardless of whether a hook is registered
|
|
44
8
|
// or not.
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
9
|
+
const doRequest = async (action, hooksState, hookHandler) => {
|
|
10
|
+
const hooksStateHandler = (0, hooks_1.registerHookStateTracking)(hooksState);
|
|
11
|
+
const hookRequestHandler = hookHandler || ((_req, _res, next) => next());
|
|
12
|
+
// biome-ignore lint/suspicious/noExplicitAny: partial mock object — only body is needed to exercise the hook logic
|
|
13
|
+
const request = {
|
|
14
|
+
body: {
|
|
15
|
+
action,
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
return new Promise((resolve) => {
|
|
19
|
+
// biome-ignore lint/suspicious/noExplicitAny: null passed as res/next mocks; only body is exercised
|
|
20
|
+
hooksStateHandler(request, null, () => {
|
|
21
|
+
// biome-ignore lint/suspicious/noExplicitAny: null passed as res mock; only body is exercised
|
|
22
|
+
hookRequestHandler(request, null, resolve);
|
|
23
|
+
});
|
|
60
24
|
});
|
|
61
|
-
}
|
|
62
|
-
describe('Verifier',
|
|
63
|
-
describe('#registerBeforeHook',
|
|
64
|
-
describe('when the state setup routine is called multiple times before the next teardown',
|
|
65
|
-
it('it executes the beforeEach hook only once',
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
_a.sent();
|
|
76
|
-
return [4 /*yield*/, doRequest('setup', hooksState, hookHandler)];
|
|
77
|
-
case 2:
|
|
78
|
-
_a.sent();
|
|
79
|
-
return [4 /*yield*/, doRequest('teardown', hooksState)];
|
|
80
|
-
case 3:
|
|
81
|
-
_a.sent();
|
|
82
|
-
return [4 /*yield*/, doRequest('teardown', hooksState)];
|
|
83
|
-
case 4:
|
|
84
|
-
_a.sent();
|
|
85
|
-
(0, chai_1.expect)(hook).to.be.calledOnce;
|
|
86
|
-
return [2 /*return*/];
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
}); });
|
|
25
|
+
};
|
|
26
|
+
describe('Verifier', () => {
|
|
27
|
+
describe('#registerBeforeHook', () => {
|
|
28
|
+
describe('when the state setup routine is called multiple times before the next teardown', () => {
|
|
29
|
+
it('it executes the beforeEach hook only once', async () => {
|
|
30
|
+
const hooksState = { setupCounter: 0 };
|
|
31
|
+
const hook = (0, sinon_1.stub)().resolves();
|
|
32
|
+
const hookHandler = (0, hooks_1.registerBeforeHook)(hook, hooksState);
|
|
33
|
+
await doRequest('setup', hooksState, hookHandler);
|
|
34
|
+
await doRequest('setup', hooksState, hookHandler);
|
|
35
|
+
await doRequest('teardown', hooksState);
|
|
36
|
+
await doRequest('teardown', hooksState);
|
|
37
|
+
(0, chai_1.expect)(hook).to.be.calledOnce;
|
|
38
|
+
});
|
|
90
39
|
});
|
|
91
40
|
});
|
|
92
|
-
describe('#registerAfterHook',
|
|
93
|
-
describe('when the state teardown routine is called multiple times before the next setup',
|
|
94
|
-
it('it executes the afterEach hook only once',
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
_a.sent();
|
|
105
|
-
return [4 /*yield*/, doRequest('setup', hooksState)];
|
|
106
|
-
case 2:
|
|
107
|
-
_a.sent();
|
|
108
|
-
return [4 /*yield*/, doRequest('teardown', hooksState, hookHandler)];
|
|
109
|
-
case 3:
|
|
110
|
-
_a.sent();
|
|
111
|
-
return [4 /*yield*/, doRequest('teardown', hooksState, hookHandler)];
|
|
112
|
-
case 4:
|
|
113
|
-
_a.sent();
|
|
114
|
-
(0, chai_1.expect)(hook).to.be.calledOnce;
|
|
115
|
-
return [2 /*return*/];
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
}); });
|
|
41
|
+
describe('#registerAfterHook', () => {
|
|
42
|
+
describe('when the state teardown routine is called multiple times before the next setup', () => {
|
|
43
|
+
it('it executes the afterEach hook only once', async () => {
|
|
44
|
+
const hooksState = { setupCounter: 0 };
|
|
45
|
+
const hook = (0, sinon_1.stub)().resolves();
|
|
46
|
+
const hookHandler = (0, hooks_1.registerAfterHook)(hook, hooksState);
|
|
47
|
+
await doRequest('setup', hooksState);
|
|
48
|
+
await doRequest('setup', hooksState);
|
|
49
|
+
await doRequest('teardown', hooksState, hookHandler);
|
|
50
|
+
await doRequest('teardown', hooksState, hookHandler);
|
|
51
|
+
(0, chai_1.expect)(hook).to.be.calledOnce;
|
|
52
|
+
});
|
|
119
53
|
});
|
|
120
54
|
});
|
|
121
|
-
describe('#registerBeforeHook and #registerAfterHook',
|
|
122
|
-
describe('when the state teardown routine is called multiple times before the next setup',
|
|
123
|
-
it('it executes the beforeEach and afterEach hooks only once',
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
return [4 /*yield*/, doRequest('setup', hooksState, beforeHookHandler)];
|
|
137
|
-
case 2:
|
|
138
|
-
_a.sent();
|
|
139
|
-
return [4 /*yield*/, doRequest('teardown', hooksState, afterHookHandler)];
|
|
140
|
-
case 3:
|
|
141
|
-
_a.sent();
|
|
142
|
-
return [4 /*yield*/, doRequest('teardown', hooksState, afterHookHandler)];
|
|
143
|
-
case 4:
|
|
144
|
-
_a.sent();
|
|
145
|
-
(0, chai_1.expect)(beforeHook).to.be.calledOnce;
|
|
146
|
-
(0, chai_1.expect)(afterHook).to.be.calledOnce;
|
|
147
|
-
return [2 /*return*/];
|
|
148
|
-
}
|
|
149
|
-
});
|
|
150
|
-
}); });
|
|
55
|
+
describe('#registerBeforeHook and #registerAfterHook', () => {
|
|
56
|
+
describe('when the state teardown routine is called multiple times before the next setup', () => {
|
|
57
|
+
it('it executes the beforeEach and afterEach hooks only once', async () => {
|
|
58
|
+
const hooksState = { setupCounter: 0 };
|
|
59
|
+
const beforeHook = (0, sinon_1.stub)().resolves();
|
|
60
|
+
const afterHook = (0, sinon_1.stub)().resolves();
|
|
61
|
+
const beforeHookHandler = (0, hooks_1.registerBeforeHook)(beforeHook, hooksState);
|
|
62
|
+
const afterHookHandler = (0, hooks_1.registerAfterHook)(afterHook, hooksState);
|
|
63
|
+
await doRequest('setup', hooksState, beforeHookHandler);
|
|
64
|
+
await doRequest('setup', hooksState, beforeHookHandler);
|
|
65
|
+
await doRequest('teardown', hooksState, afterHookHandler);
|
|
66
|
+
await doRequest('teardown', hooksState, afterHookHandler);
|
|
67
|
+
(0, chai_1.expect)(beforeHook).to.be.calledOnce;
|
|
68
|
+
(0, chai_1.expect)(afterHook).to.be.calledOnce;
|
|
69
|
+
});
|
|
151
70
|
});
|
|
152
|
-
describe('when multiple interactions are executed',
|
|
153
|
-
it('it executes the beforeEach and afterEach hooks once for each interaction',
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
// Interaction 2 (one "given" state)
|
|
178
|
-
return [4 /*yield*/, doRequest('setup', hooksState, beforeHookHandler)];
|
|
179
|
-
case 5:
|
|
180
|
-
// Interaction 2 (one "given" state)
|
|
181
|
-
_a.sent();
|
|
182
|
-
return [4 /*yield*/, doRequest('teardown', hooksState, afterHookHandler)];
|
|
183
|
-
case 6:
|
|
184
|
-
_a.sent();
|
|
185
|
-
// Interaction 3 (three "given" states)
|
|
186
|
-
return [4 /*yield*/, doRequest('setup', hooksState, beforeHookHandler)];
|
|
187
|
-
case 7:
|
|
188
|
-
// Interaction 3 (three "given" states)
|
|
189
|
-
_a.sent();
|
|
190
|
-
return [4 /*yield*/, doRequest('setup', hooksState, beforeHookHandler)];
|
|
191
|
-
case 8:
|
|
192
|
-
_a.sent();
|
|
193
|
-
return [4 /*yield*/, doRequest('setup', hooksState, beforeHookHandler)];
|
|
194
|
-
case 9:
|
|
195
|
-
_a.sent();
|
|
196
|
-
return [4 /*yield*/, doRequest('teardown', hooksState, afterHookHandler)];
|
|
197
|
-
case 10:
|
|
198
|
-
_a.sent();
|
|
199
|
-
return [4 /*yield*/, doRequest('teardown', hooksState, afterHookHandler)];
|
|
200
|
-
case 11:
|
|
201
|
-
_a.sent();
|
|
202
|
-
return [4 /*yield*/, doRequest('teardown', hooksState, afterHookHandler)];
|
|
203
|
-
case 12:
|
|
204
|
-
_a.sent();
|
|
205
|
-
(0, chai_1.expect)(beforeHook).to.be.calledThrice;
|
|
206
|
-
(0, chai_1.expect)(afterHook).to.be.calledThrice;
|
|
207
|
-
return [2 /*return*/];
|
|
208
|
-
}
|
|
209
|
-
});
|
|
210
|
-
}); });
|
|
71
|
+
describe('when multiple interactions are executed', () => {
|
|
72
|
+
it('it executes the beforeEach and afterEach hooks once for each interaction', async () => {
|
|
73
|
+
const hooksState = { setupCounter: 0 };
|
|
74
|
+
const beforeHook = (0, sinon_1.stub)().resolves();
|
|
75
|
+
const afterHook = (0, sinon_1.stub)().resolves();
|
|
76
|
+
const beforeHookHandler = (0, hooks_1.registerBeforeHook)(beforeHook, hooksState);
|
|
77
|
+
const afterHookHandler = (0, hooks_1.registerAfterHook)(afterHook, hooksState);
|
|
78
|
+
// Interaction 1 (two "given" states)
|
|
79
|
+
await doRequest('setup', hooksState, beforeHookHandler);
|
|
80
|
+
await doRequest('setup', hooksState, beforeHookHandler);
|
|
81
|
+
await doRequest('teardown', hooksState, afterHookHandler);
|
|
82
|
+
await doRequest('teardown', hooksState, afterHookHandler);
|
|
83
|
+
// Interaction 2 (one "given" state)
|
|
84
|
+
await doRequest('setup', hooksState, beforeHookHandler);
|
|
85
|
+
await doRequest('teardown', hooksState, afterHookHandler);
|
|
86
|
+
// Interaction 3 (three "given" states)
|
|
87
|
+
await doRequest('setup', hooksState, beforeHookHandler);
|
|
88
|
+
await doRequest('setup', hooksState, beforeHookHandler);
|
|
89
|
+
await doRequest('setup', hooksState, beforeHookHandler);
|
|
90
|
+
await doRequest('teardown', hooksState, afterHookHandler);
|
|
91
|
+
await doRequest('teardown', hooksState, afterHookHandler);
|
|
92
|
+
await doRequest('teardown', hooksState, afterHookHandler);
|
|
93
|
+
(0, chai_1.expect)(beforeHook).to.be.calledThrice;
|
|
94
|
+
(0, chai_1.expect)(afterHook).to.be.calledThrice;
|
|
95
|
+
});
|
|
211
96
|
});
|
|
212
97
|
});
|
|
213
98
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.spec.js","sourceRoot":"","sources":["../../../../../src/dsl/verifier/proxy/hooks.spec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hooks.spec.js","sourceRoot":"","sources":["../../../../../src/dsl/verifier/proxy/hooks.spec.ts"],"names":[],"mappings":";;AAAA,+BAA8B;AAC9B,iCAA6B;AAG7B,mCAKiB;AAEjB,6EAA6E;AAC7E,8EAA8E;AAC9E,UAAU;AACV,MAAM,SAAS,GAAG,KAAK,EACrB,MAAc,EACd,UAAsB,EACtB,WAA4B,EAC5B,EAAE;IACF,MAAM,iBAAiB,GAAG,IAAA,iCAAyB,EAAC,UAAU,CAAC,CAAC;IAChE,MAAM,kBAAkB,GAAG,WAAW,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;IAEzE,mHAAmH;IACnH,MAAM,OAAO,GAAQ;QACnB,IAAI,EAAE;YACJ,MAAM;SACP;KACF,CAAC;IAEF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,oGAAoG;QACpG,iBAAiB,CAAC,OAAO,EAAE,IAAW,EAAE,GAAG,EAAE;YAC3C,8FAA8F;YAC9F,kBAAkB,CAAC,OAAO,EAAE,IAAW,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,QAAQ,CAAC,gFAAgF,EAAE,GAAG,EAAE;YAC9F,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;gBACzD,MAAM,UAAU,GAAe,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;gBACnD,MAAM,IAAI,GAAG,IAAA,YAAI,GAAE,CAAC,QAAQ,EAAE,CAAC;gBAC/B,MAAM,WAAW,GAAG,IAAA,0BAAkB,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAEzD,MAAM,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;gBAClD,MAAM,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;gBAClD,MAAM,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;gBACxC,MAAM,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;gBAExC,IAAA,aAAM,EAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC;YAChC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAClC,QAAQ,CAAC,gFAAgF,EAAE,GAAG,EAAE;YAC9F,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;gBACxD,MAAM,UAAU,GAAe,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;gBACnD,MAAM,IAAI,GAAG,IAAA,YAAI,GAAE,CAAC,QAAQ,EAAE,CAAC;gBAC/B,MAAM,WAAW,GAAG,IAAA,yBAAiB,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC;gBAExD,MAAM,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;gBACrC,MAAM,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;gBACrC,MAAM,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;gBACrD,MAAM,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;gBAErD,IAAA,aAAM,EAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC;YAChC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,4CAA4C,EAAE,GAAG,EAAE;QAC1D,QAAQ,CAAC,gFAAgF,EAAE,GAAG,EAAE;YAC9F,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;gBACxE,MAAM,UAAU,GAAe,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;gBACnD,MAAM,UAAU,GAAG,IAAA,YAAI,GAAE,CAAC,QAAQ,EAAE,CAAC;gBACrC,MAAM,SAAS,GAAG,IAAA,YAAI,GAAE,CAAC,QAAQ,EAAE,CAAC;gBACpC,MAAM,iBAAiB,GAAG,IAAA,0BAAkB,EAAC,UAAU,EAAE,UAAU,CAAC,CAAC;gBACrE,MAAM,gBAAgB,GAAG,IAAA,yBAAiB,EAAC,SAAS,EAAE,UAAU,CAAC,CAAC;gBAElE,MAAM,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;gBACxD,MAAM,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;gBACxD,MAAM,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;gBAC1D,MAAM,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;gBAE1D,IAAA,aAAM,EAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC;gBACpC,IAAA,aAAM,EAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC;YACrC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACvD,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;gBACxF,MAAM,UAAU,GAAe,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;gBACnD,MAAM,UAAU,GAAG,IAAA,YAAI,GAAE,CAAC,QAAQ,EAAE,CAAC;gBACrC,MAAM,SAAS,GAAG,IAAA,YAAI,GAAE,CAAC,QAAQ,EAAE,CAAC;gBACpC,MAAM,iBAAiB,GAAG,IAAA,0BAAkB,EAAC,UAAU,EAAE,UAAU,CAAC,CAAC;gBACrE,MAAM,gBAAgB,GAAG,IAAA,yBAAiB,EAAC,SAAS,EAAE,UAAU,CAAC,CAAC;gBAElE,qCAAqC;gBACrC,MAAM,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;gBACxD,MAAM,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;gBACxD,MAAM,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;gBAC1D,MAAM,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;gBAE1D,oCAAoC;gBACpC,MAAM,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;gBACxD,MAAM,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;gBAE1D,uCAAuC;gBACvC,MAAM,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;gBACxD,MAAM,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;gBACxD,MAAM,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;gBACxD,MAAM,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;gBAC1D,MAAM,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;gBAC1D,MAAM,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;gBAE1D,IAAA,aAAM,EAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC;gBACtC,IAAA,aAAM,EAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC;YACvC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import express from 'express';
|
|
2
|
-
import { MessageDescriptor, MessageProvider } from '../../message';
|
|
3
|
-
import { ProxyOptions } from './types';
|
|
2
|
+
import type { MessageDescriptor, MessageProvider } from '../../message';
|
|
3
|
+
import type { ProxyOptions } from './types';
|
|
4
4
|
export declare const findMessageHandler: (message: MessageDescriptor, config: ProxyOptions) => Promise<MessageProvider>;
|
|
5
5
|
export declare const providerWithMetadata: (provider: MessageProvider, metadata: Record<string, string>) => MessageProvider;
|
|
6
6
|
export declare const createProxyMessageHandler: (config: ProxyOptions) => ((req: express.Request, res: express.Response) => void);
|
|
@@ -1,133 +1,115 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __assign = (this && this.__assign) || function () {
|
|
3
|
-
__assign = Object.assign || function(t) {
|
|
4
|
-
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
-
s = arguments[i];
|
|
6
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
-
t[p] = s[p];
|
|
8
|
-
}
|
|
9
|
-
return t;
|
|
10
|
-
};
|
|
11
|
-
return __assign.apply(this, arguments);
|
|
12
|
-
};
|
|
13
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
4
|
};
|
|
16
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
6
|
exports.setupMessageProxyApplication = exports.createProxyMessageHandler = exports.providerWithMetadata = exports.findMessageHandler = void 0;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
7
|
+
const express_1 = __importDefault(require("express"));
|
|
8
|
+
const body_parser_1 = __importDefault(require("body-parser"));
|
|
9
|
+
const js_base64_1 = require("js-base64");
|
|
10
|
+
const logger_1 = __importDefault(require("../../../common/logger"));
|
|
22
11
|
// Find a provider message handler, and invoke it
|
|
23
|
-
|
|
24
|
-
|
|
12
|
+
const findMessageHandler = (message, config) => {
|
|
13
|
+
const handler = config.messageProviders
|
|
25
14
|
? config.messageProviders[message.description]
|
|
26
15
|
: undefined;
|
|
27
16
|
if (!handler) {
|
|
28
|
-
logger_1.default.error(
|
|
29
|
-
return Promise.reject(new Error(
|
|
17
|
+
logger_1.default.error(`no handler found for message ${message.description}`);
|
|
18
|
+
return Promise.reject(new Error(`No handler found for message "${message.description}".
|
|
19
|
+
Check your "handlers" configuration`));
|
|
30
20
|
}
|
|
31
21
|
return Promise.resolve(handler);
|
|
32
22
|
};
|
|
33
23
|
exports.findMessageHandler = findMessageHandler;
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
45
|
-
: { __pactMessageMetadata: metadata, message: message };
|
|
46
|
-
});
|
|
47
|
-
};
|
|
48
|
-
};
|
|
24
|
+
const hasMetadata = (o) => Boolean(o.__pactMessageMetadata);
|
|
25
|
+
const providerWithMetadata = (provider, metadata) => (descriptor) => Promise.resolve(provider(descriptor)).then((message) => hasMetadata(message)
|
|
26
|
+
? {
|
|
27
|
+
__pactMessageMetadata: {
|
|
28
|
+
...message.__pactMessageMetadata,
|
|
29
|
+
...metadata,
|
|
30
|
+
},
|
|
31
|
+
message,
|
|
32
|
+
}
|
|
33
|
+
: { __pactMessageMetadata: metadata, message });
|
|
49
34
|
exports.providerWithMetadata = providerWithMetadata;
|
|
50
35
|
// Get the API handler for the verification CLI process to invoke on POST /*
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
if (
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
else {
|
|
95
|
-
message.content = (_h = (_g = req.body.request) === null || _g === void 0 ? void 0 : _g.contents) === null || _h === void 0 ? void 0 : _h.content;
|
|
96
|
-
}
|
|
36
|
+
const createProxyMessageHandler = (config) => (req, res) => {
|
|
37
|
+
// req.body = {
|
|
38
|
+
// description: 'a MATT message',
|
|
39
|
+
// providerStates: [ { name: 'a Matt message is sent' } ],
|
|
40
|
+
// request: {
|
|
41
|
+
// contents: {
|
|
42
|
+
// content: 'aGVsbG90Y3A=',
|
|
43
|
+
// contentType: 'application/matt',
|
|
44
|
+
// encoded: 'base64'
|
|
45
|
+
// },
|
|
46
|
+
// matchingRules: {
|
|
47
|
+
// body: {
|
|
48
|
+
// '$': {
|
|
49
|
+
// combine: 'AND',
|
|
50
|
+
// matchers: [ { match: 'contentType', value: 'application/matt' } ]
|
|
51
|
+
// }
|
|
52
|
+
// }
|
|
53
|
+
// },
|
|
54
|
+
// metadata: { contentType: 'application/matt' }
|
|
55
|
+
// }
|
|
56
|
+
// }
|
|
57
|
+
// {
|
|
58
|
+
// description: 'a MATT message',
|
|
59
|
+
// providerStates: [ { name: 'a Matt message is sent with JSON content' } ],
|
|
60
|
+
// request: {
|
|
61
|
+
// contents: {
|
|
62
|
+
// content: { message: 'hellotcp' },
|
|
63
|
+
// contentType: 'application/json',
|
|
64
|
+
// encoded: false
|
|
65
|
+
// },
|
|
66
|
+
// metadata: { contentType: 'application/json' }
|
|
67
|
+
// }
|
|
68
|
+
// }
|
|
69
|
+
const message = req.body;
|
|
70
|
+
message.metadata = req.body.request?.metadata;
|
|
71
|
+
// Add the request body, if one exists for synchronous messages
|
|
72
|
+
if (req.body.request?.contents) {
|
|
73
|
+
const encodedMessage = req.body.request?.contents?.encoded || false;
|
|
74
|
+
if (encodedMessage) {
|
|
75
|
+
message.content = Buffer.from(req.body.request?.contents?.content, 'base64');
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
message.content = req.body.request?.contents?.content;
|
|
97
79
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
80
|
+
}
|
|
81
|
+
// Invoke the handler, and return the JSON response body
|
|
82
|
+
// wrapped in a Message
|
|
83
|
+
(0, exports.findMessageHandler)(message, config)
|
|
84
|
+
.then((handler) => handler(message))
|
|
85
|
+
.then((messageFromHandler) => {
|
|
86
|
+
if (hasMetadata(messageFromHandler)) {
|
|
87
|
+
const metadata = (0, js_base64_1.encode)(JSON.stringify(messageFromHandler.__pactMessageMetadata));
|
|
88
|
+
res.header('Pact-Message-Metadata', metadata);
|
|
89
|
+
res.header('PACT_MESSAGE_METADATA', metadata);
|
|
90
|
+
// Ensure return content-type is set here
|
|
91
|
+
// TODO: this needs thinking through
|
|
92
|
+
if (messageFromHandler.__pactMessageMetadata['content-type'] ||
|
|
93
|
+
messageFromHandler.__pactMessageMetadata['Content-Type'] ||
|
|
94
|
+
messageFromHandler.__pactMessageMetadata.contentType) {
|
|
95
|
+
res.type(messageFromHandler.__pactMessageMetadata['content-type'] ||
|
|
110
96
|
messageFromHandler.__pactMessageMetadata['Content-Type'] ||
|
|
111
|
-
messageFromHandler.__pactMessageMetadata.contentType)
|
|
112
|
-
|
|
113
|
-
messageFromHandler.__pactMessageMetadata['Content-Type'] ||
|
|
114
|
-
messageFromHandler.__pactMessageMetadata.contentType);
|
|
115
|
-
return res.send(messageFromHandler.message);
|
|
116
|
-
}
|
|
117
|
-
return res.json(messageFromHandler.message);
|
|
97
|
+
messageFromHandler.__pactMessageMetadata.contentType);
|
|
98
|
+
return res.send(messageFromHandler.message);
|
|
118
99
|
}
|
|
119
|
-
return res.json(messageFromHandler);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
}
|
|
100
|
+
return res.json(messageFromHandler.message);
|
|
101
|
+
}
|
|
102
|
+
return res.json(messageFromHandler);
|
|
103
|
+
})
|
|
104
|
+
.catch((e) => res.status(500).send(e));
|
|
123
105
|
};
|
|
124
106
|
exports.createProxyMessageHandler = createProxyMessageHandler;
|
|
125
107
|
// Get the Express app that will run on the HTTP Proxy
|
|
126
|
-
|
|
127
|
-
|
|
108
|
+
const setupMessageProxyApplication = (config) => {
|
|
109
|
+
const app = (0, express_1.default)();
|
|
128
110
|
app.use(body_parser_1.default.json());
|
|
129
111
|
app.use(body_parser_1.default.urlencoded({ extended: true }));
|
|
130
|
-
app.use(
|
|
112
|
+
app.use((_, res, next) => {
|
|
131
113
|
// TODO: this seems to override the metadata for content-type
|
|
132
114
|
res.header('Content-Type', 'application/json; charset=utf-8');
|
|
133
115
|
next();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../../src/dsl/verifier/proxy/messages.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../../src/dsl/verifier/proxy/messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.parseBody = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
const parseBody = (req) => {
|
|
5
|
+
let bodyData = Buffer.alloc(0);
|
|
6
6
|
if (!req.body || !Object.keys(req.body).length) {
|
|
7
7
|
return bodyData;
|
|
8
8
|
}
|