@pact-foundation/pact 16.3.1 → 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 +7 -0
- package/CONTRIBUTING.md +2 -2
- package/package.json +16 -24
- 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 +243 -313
- 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.js +15 -15
- package/src/v3/ffi.js.map +1 -1
- package/src/v3/ffi.spec.js +8 -8
- package/src/v3/ffi.spec.js.map +1 -1
- 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,15 +1,4 @@
|
|
|
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 __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
14
3
|
if (k2 === undefined) k2 = k;
|
|
15
4
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -43,56 +32,20 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
43
32
|
return result;
|
|
44
33
|
};
|
|
45
34
|
})();
|
|
46
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
47
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
48
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
49
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
50
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
51
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
52
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
53
|
-
});
|
|
54
|
-
};
|
|
55
|
-
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
56
|
-
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);
|
|
57
|
-
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
58
|
-
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
59
|
-
function step(op) {
|
|
60
|
-
if (f) throw new TypeError("Generator is already executing.");
|
|
61
|
-
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
62
|
-
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;
|
|
63
|
-
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
64
|
-
switch (op[0]) {
|
|
65
|
-
case 0: case 1: t = op; break;
|
|
66
|
-
case 4: _.label++; return { value: op[1], done: false };
|
|
67
|
-
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
68
|
-
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
69
|
-
default:
|
|
70
|
-
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
71
|
-
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
72
|
-
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
73
|
-
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
74
|
-
if (t[2]) _.ops.pop();
|
|
75
|
-
_.trys.pop(); continue;
|
|
76
|
-
}
|
|
77
|
-
op = body.call(thisArg, _);
|
|
78
|
-
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
79
|
-
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
80
|
-
}
|
|
81
|
-
};
|
|
82
35
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
83
36
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
84
37
|
};
|
|
85
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
39
|
+
const chai = __importStar(require("chai"));
|
|
40
|
+
const chai_as_promised_1 = __importDefault(require("chai-as-promised"));
|
|
41
|
+
const sinon_1 = __importDefault(require("sinon"));
|
|
42
|
+
const sinon_chai_1 = __importDefault(require("sinon-chai"));
|
|
43
|
+
const _1 = require(".");
|
|
91
44
|
chai.use(sinon_chai_1.default);
|
|
92
45
|
chai.use(chai_as_promised_1.default);
|
|
93
|
-
|
|
94
|
-
describe('Pact',
|
|
95
|
-
|
|
46
|
+
const { expect } = chai;
|
|
47
|
+
describe('Pact', () => {
|
|
48
|
+
const fullOpts = {
|
|
96
49
|
consumer: 'A',
|
|
97
50
|
provider: 'B',
|
|
98
51
|
port: 1234,
|
|
@@ -103,28 +56,28 @@ describe('Pact', function () {
|
|
|
103
56
|
cors: false,
|
|
104
57
|
pactfileWriteMode: 'merge',
|
|
105
58
|
};
|
|
106
|
-
afterEach(
|
|
59
|
+
afterEach(() => {
|
|
107
60
|
sinon_1.default.restore();
|
|
108
61
|
});
|
|
109
|
-
describe('#constructor',
|
|
110
|
-
it('throws Error when consumer not provided',
|
|
111
|
-
expect(
|
|
62
|
+
describe('#constructor', () => {
|
|
63
|
+
it('throws Error when consumer not provided', () => {
|
|
64
|
+
expect(() => {
|
|
112
65
|
new _1.Pact({ consumer: '', provider: 'provider' });
|
|
113
66
|
}).to.throw(Error, 'You must specify a Consumer for this pact.');
|
|
114
67
|
});
|
|
115
|
-
it('throws Error when provider not provided',
|
|
116
|
-
expect(
|
|
68
|
+
it('throws Error when provider not provided', () => {
|
|
69
|
+
expect(() => {
|
|
117
70
|
new _1.Pact({ consumer: 'someconsumer', provider: '' });
|
|
118
71
|
}).to.throw(Error, 'You must specify a Provider for this pact.');
|
|
119
72
|
});
|
|
120
73
|
});
|
|
121
|
-
describe('#createOptionsWithDefault',
|
|
122
|
-
|
|
74
|
+
describe('#createOptionsWithDefault', () => {
|
|
75
|
+
const constructorOpts = {
|
|
123
76
|
consumer: 'A',
|
|
124
77
|
provider: 'B',
|
|
125
78
|
};
|
|
126
|
-
it('merges options with sensible defaults',
|
|
127
|
-
|
|
79
|
+
it('merges options with sensible defaults', () => {
|
|
80
|
+
const opts = _1.Pact.createOptionsWithDefaults(constructorOpts);
|
|
128
81
|
expect(opts.consumer).to.eq('A');
|
|
129
82
|
expect(opts.provider).to.eq('B');
|
|
130
83
|
expect(opts.cors).to.eq(false);
|
|
@@ -139,33 +92,25 @@ describe('Pact', function () {
|
|
|
139
92
|
expect(opts.sslkey).to.eq(undefined);
|
|
140
93
|
});
|
|
141
94
|
});
|
|
142
|
-
describe('#setup',
|
|
143
|
-
describe('when server is properly configured',
|
|
144
|
-
it('updates the mock service configuration',
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
pactfile_write_mode: 'merge',
|
|
157
|
-
consumer: {
|
|
158
|
-
name: 'A',
|
|
159
|
-
},
|
|
160
|
-
provider: { name: 'B' },
|
|
161
|
-
},
|
|
162
|
-
});
|
|
163
|
-
return [2 /*return*/];
|
|
164
|
-
}
|
|
95
|
+
describe('#setup', () => {
|
|
96
|
+
describe('when server is properly configured', () => {
|
|
97
|
+
it('updates the mock service configuration', async () => {
|
|
98
|
+
const p = new _1.Pact(fullOpts);
|
|
99
|
+
await p.setup();
|
|
100
|
+
expect(p.mockService).to.deep.equal({
|
|
101
|
+
baseUrl: 'http://127.0.0.1:1234',
|
|
102
|
+
pactDetails: {
|
|
103
|
+
pactfile_write_mode: 'merge',
|
|
104
|
+
consumer: {
|
|
105
|
+
name: 'A',
|
|
106
|
+
},
|
|
107
|
+
provider: { name: 'B' },
|
|
108
|
+
},
|
|
165
109
|
});
|
|
166
|
-
});
|
|
167
|
-
it('returns the current configuration',
|
|
168
|
-
|
|
110
|
+
});
|
|
111
|
+
it('returns the current configuration', () => {
|
|
112
|
+
// biome-ignore lint/suspicious/noExplicitAny: accessing internal setup() method not in public type
|
|
113
|
+
const p = new _1.Pact(fullOpts);
|
|
169
114
|
return expect(p.setup()).to.eventually.include({
|
|
170
115
|
consumer: 'A',
|
|
171
116
|
provider: 'B',
|
|
@@ -179,56 +124,61 @@ describe('Pact', function () {
|
|
|
179
124
|
});
|
|
180
125
|
});
|
|
181
126
|
});
|
|
182
|
-
describe('when a port is given',
|
|
183
|
-
it('checks if the port is available',
|
|
184
|
-
|
|
127
|
+
describe('when a port is given', () => {
|
|
128
|
+
it('checks if the port is available', () => {
|
|
129
|
+
// biome-ignore lint/suspicious/noExplicitAny: accessing internal setup() method not in public type
|
|
130
|
+
const p = new _1.Pact(fullOpts);
|
|
185
131
|
return expect(p.setup())
|
|
186
132
|
.to.eventually.have.property('port')
|
|
187
133
|
.eq(fullOpts.port);
|
|
188
134
|
});
|
|
189
135
|
});
|
|
190
|
-
describe('when no port is given',
|
|
191
|
-
it('finds a free port',
|
|
192
|
-
|
|
193
|
-
|
|
136
|
+
describe('when no port is given', () => {
|
|
137
|
+
it('finds a free port', () => {
|
|
138
|
+
const opts = {
|
|
139
|
+
...fullOpts,
|
|
140
|
+
port: undefined,
|
|
141
|
+
};
|
|
142
|
+
// biome-ignore lint/suspicious/noExplicitAny: accessing internal setup() method not in public type
|
|
143
|
+
const p = new _1.Pact(opts);
|
|
194
144
|
return expect(p.setup()).to.eventually.have.property('port').not
|
|
195
145
|
.undefined;
|
|
196
146
|
});
|
|
197
147
|
});
|
|
198
148
|
});
|
|
199
|
-
describe('#addInteraction',
|
|
149
|
+
describe('#addInteraction', () => {
|
|
200
150
|
// This is more of an integration test, as the function has taken on a lot more
|
|
201
151
|
// responsibility previously covered by other functions during the upgrade to
|
|
202
152
|
// the rust core, to ensure the API remains backwards compatible
|
|
203
|
-
it('sets the correct request and response details on the FFI and starts the mock server',
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
createMockServer
|
|
153
|
+
it('sets the correct request and response details on the FFI and starts the mock server', () => {
|
|
154
|
+
const p = new _1.Pact(fullOpts);
|
|
155
|
+
const uponReceiving = sinon_1.default.stub().returns(true);
|
|
156
|
+
const given = sinon_1.default.stub().returns(true);
|
|
157
|
+
const withRequest = sinon_1.default.stub().returns(true);
|
|
158
|
+
const withRequestBody = sinon_1.default.stub().returns(true);
|
|
159
|
+
const withRequestHeader = sinon_1.default.stub().returns(true);
|
|
160
|
+
const withQuery = sinon_1.default.stub().returns(true);
|
|
161
|
+
const withResponseBody = sinon_1.default.stub().returns(true);
|
|
162
|
+
const withResponseHeader = sinon_1.default.stub().returns(true);
|
|
163
|
+
const withStatus = sinon_1.default.stub().returns(true);
|
|
164
|
+
const createMockServer = sinon_1.default.stub().returns(1234);
|
|
165
|
+
const pactMock = {
|
|
166
|
+
createMockServer,
|
|
217
167
|
}; // TODO replace with proper mock
|
|
218
|
-
|
|
219
|
-
uponReceiving
|
|
220
|
-
given
|
|
221
|
-
withRequest
|
|
222
|
-
withRequestBody
|
|
223
|
-
withRequestHeader
|
|
224
|
-
withQuery
|
|
225
|
-
withResponseBody
|
|
226
|
-
withResponseHeader
|
|
227
|
-
withStatus
|
|
168
|
+
const interactionMock = {
|
|
169
|
+
uponReceiving,
|
|
170
|
+
given,
|
|
171
|
+
withRequest,
|
|
172
|
+
withRequestBody,
|
|
173
|
+
withRequestHeader,
|
|
174
|
+
withQuery,
|
|
175
|
+
withResponseBody,
|
|
176
|
+
withResponseHeader,
|
|
177
|
+
withStatus,
|
|
228
178
|
}; // TODO replace with proper mock
|
|
229
|
-
// @ts-
|
|
179
|
+
// @ts-expect-error TODO refactor the class to remove the need for this
|
|
230
180
|
p.pact = pactMock;
|
|
231
|
-
// @ts-
|
|
181
|
+
// @ts-expect-error: TODO refactor the class to remove the need for this
|
|
232
182
|
p.interaction = interactionMock;
|
|
233
183
|
p.mockService = {};
|
|
234
184
|
p.addInteraction({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.spec.js","sourceRoot":"","sources":["../../../src/httpPact/index.spec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.spec.js","sourceRoot":"","sources":["../../../src/httpPact/index.spec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAC7B,wEAA8C;AAC9C,kDAA0B;AAC1B,4DAAmC;AAMnC,wBAAyB;AAGzB,IAAI,CAAC,GAAG,CAAC,oBAAS,CAAC,CAAC;AACpB,IAAI,CAAC,GAAG,CAAC,0BAAc,CAAC,CAAC;AAEzB,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;AAExB,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;IACpB,MAAM,QAAQ,GAAG;QACf,QAAQ,EAAE,GAAG;QACb,QAAQ,EAAE,GAAG;QACb,IAAI,EAAE,IAAI;QACV,IAAI,EAAE,WAAW;QACjB,GAAG,EAAE,KAAK;QACV,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,CAAC;QACP,IAAI,EAAE,KAAK;QACX,iBAAiB,EAAE,OAAO;KACF,CAAC;IAE3B,SAAS,CAAC,GAAG,EAAE;QACb,eAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,CAAC,GAAG,EAAE;gBACV,IAAI,OAAI,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,4CAA4C,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,CAAC,GAAG,EAAE;gBACV,IAAI,OAAI,CAAC,EAAE,QAAQ,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,4CAA4C,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACzC,MAAM,eAAe,GAAkB;YACrC,QAAQ,EAAE,GAAG;YACb,QAAQ,EAAE,GAAG;SACd,CAAC;QAEF,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,IAAI,GAAG,OAAI,CAAC,yBAAyB,CAAC,eAAe,CAAC,CAAC;YAC7D,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;YAC9C,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAClD,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;gBACtD,MAAM,CAAC,GAAS,IAAI,OAAI,CAAC,QAAQ,CAAC,CAAC;gBAEnC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;gBAChB,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;oBAClC,OAAO,EAAE,uBAAuB;oBAChC,WAAW,EAAE;wBACX,mBAAmB,EAAE,OAAO;wBAC5B,QAAQ,EAAE;4BACR,IAAI,EAAE,GAAG;yBACV;wBACD,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;qBACxB;iBACF,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;gBAC3C,mGAAmG;gBACnG,MAAM,CAAC,GAAQ,IAAI,OAAI,CAAC,QAAQ,CAAC,CAAC;gBAElC,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;oBAC7C,QAAQ,EAAE,GAAG;oBACb,QAAQ,EAAE,GAAG;oBACb,IAAI,EAAE,IAAI;oBACV,IAAI,EAAE,WAAW;oBACjB,GAAG,EAAE,KAAK;oBACV,QAAQ,EAAE,MAAM;oBAChB,IAAI,EAAE,CAAC;oBACP,IAAI,EAAE,KAAK;oBACX,iBAAiB,EAAE,OAAO;iBAC3B,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;YACpC,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;gBACzC,mGAAmG;gBACnG,MAAM,CAAC,GAAQ,IAAI,OAAI,CAAC,QAAQ,CAAC,CAAC;gBAElC,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;qBACrB,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;qBACnC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;YACrC,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;gBAC3B,MAAM,IAAI,GAAG;oBACX,GAAG,QAAQ;oBACX,IAAI,EAAE,SAAS;iBAChB,CAAC;gBACF,mGAAmG;gBACnG,MAAM,CAAC,GAAQ,IAAI,OAAI,CAAC,IAAI,CAAC,CAAC;gBAE9B,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG;qBAC7D,SAAS,CAAC;YACf,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,+EAA+E;QAC/E,6EAA6E;QAC7E,gEAAgE;QAChE,EAAE,CAAC,qFAAqF,EAAE,GAAG,EAAE;YAC7F,MAAM,CAAC,GAAS,IAAI,OAAI,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,aAAa,GAAG,eAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,eAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACzC,MAAM,WAAW,GAAG,eAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,eAAe,GAAG,eAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACnD,MAAM,iBAAiB,GAAG,eAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACrD,MAAM,SAAS,GAAG,eAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,gBAAgB,GAAG,eAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACpD,MAAM,kBAAkB,GAAG,eAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACtD,MAAM,UAAU,GAAG,eAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,gBAAgB,GAAG,eAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACpD,MAAM,QAAQ,GAAiB;gBAC7B,gBAAgB;aACU,CAAC,CAAC,gCAAgC;YAC9D,MAAM,eAAe,GAAwB;gBAC3C,aAAa;gBACb,KAAK;gBACL,WAAW;gBACX,eAAe;gBACf,iBAAiB;gBACjB,SAAS;gBACT,gBAAgB;gBAChB,kBAAkB;gBAClB,UAAU;aACuB,CAAC,CAAC,gCAAgC;YACrE,uEAAuE;YACvE,CAAC,CAAC,IAAI,GAAG,QAAQ,CAAC;YAClB,wEAAwE;YACxE,CAAC,CAAC,WAAW,GAAG,eAAe,CAAC;YAChC,CAAC,CAAC,WAAW,GAAG,EAAiB,CAAC;YAElC,CAAC,CAAC,cAAc,CAAC;gBACf,KAAK,EAAE,YAAY;gBACnB,aAAa,EAAE,kBAAkB;gBACjC,WAAW,EAAE;oBACX,MAAM,EAAE,KAAK;oBACb,IAAI,EAAE,GAAG;oBACT,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE;oBACpB,OAAO,EAAE;wBACP,cAAc,EAAE,kBAAkB;wBAClC,GAAG,EAAE,KAAK;qBACX;oBACD,KAAK,EAAE;wBACL,KAAK,EAAE,QAAQ;wBACf,GAAG,EAAE,KAAK;qBACX;iBACF;gBACD,eAAe,EAAE;oBACf,MAAM,EAAE,GAAG;oBACX,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE;oBACpB,OAAO,EAAE;wBACP,cAAc,EAAE,sBAAsB;wBACtC,GAAG,EAAE,KAAK;qBACX;iBACF;aACF,CAAC,CAAC;YAEH,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC5C,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACpC,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC1C,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACzC,MAAM,CAAC,iBAAiB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACjD,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC9C,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC/C,MAAM,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAElD,2BAA2B;YAC3B,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/src/httpPact/tracing.js
CHANGED
|
@@ -1,55 +1,47 @@
|
|
|
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.traceHttpInteractions = void 0;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
7
|
+
const node_http_1 = __importDefault(require("node:http"));
|
|
8
|
+
const logger_1 = __importDefault(require("../common/logger"));
|
|
9
|
+
const traceHttpInteractions = () => {
|
|
10
|
+
const originalRequest = node_http_1.default.request;
|
|
11
|
+
node_http_1.default.request = (options, cb) => {
|
|
23
12
|
if (typeof options === 'string' || options instanceof URL) {
|
|
24
13
|
throw new Error('invoking traced requests with a string or a URL first argument is not supported');
|
|
25
14
|
}
|
|
26
15
|
if (typeof cb !== 'function') {
|
|
27
16
|
throw new Error('invoking traced requests with a non-function second argument is not supported');
|
|
28
17
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
logger_1.default.trace(
|
|
18
|
+
const requestBodyChunks = [];
|
|
19
|
+
const responseBodyChunks = [];
|
|
20
|
+
const hijackedCallback = (res) => {
|
|
21
|
+
logger_1.default.trace(`outgoing request: ${JSON.stringify({
|
|
22
|
+
...options,
|
|
23
|
+
body: Buffer.concat(requestBodyChunks).toString('utf8'),
|
|
24
|
+
})}`);
|
|
33
25
|
if (cb) {
|
|
34
26
|
cb(res);
|
|
35
27
|
}
|
|
36
28
|
};
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
clientRequest.end =
|
|
29
|
+
const clientRequest = originalRequest(options, hijackedCallback);
|
|
30
|
+
const oldWrite = clientRequest.end.bind(clientRequest);
|
|
31
|
+
clientRequest.end = (chunk) => {
|
|
40
32
|
requestBodyChunks.push(Buffer.from(chunk));
|
|
41
33
|
return oldWrite(chunk);
|
|
42
34
|
};
|
|
43
|
-
clientRequest.on('response',
|
|
44
|
-
incoming.on('readable',
|
|
35
|
+
clientRequest.on('response', (incoming) => {
|
|
36
|
+
incoming.on('readable', () => {
|
|
45
37
|
responseBodyChunks.push(Buffer.from(incoming.read()));
|
|
46
38
|
});
|
|
47
|
-
incoming.on('end',
|
|
48
|
-
logger_1.default.trace(
|
|
39
|
+
incoming.on('end', () => {
|
|
40
|
+
logger_1.default.trace(`response: ${JSON.stringify({
|
|
49
41
|
body: Buffer.concat(responseBodyChunks).toString('utf8'),
|
|
50
42
|
headers: incoming.headers,
|
|
51
43
|
statusCode: incoming.statusCode,
|
|
52
|
-
}))
|
|
44
|
+
})}`);
|
|
53
45
|
});
|
|
54
46
|
});
|
|
55
47
|
return clientRequest;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracing.js","sourceRoot":"","sources":["../../../src/httpPact/tracing.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tracing.js","sourceRoot":"","sources":["../../../src/httpPact/tracing.ts"],"names":[],"mappings":";;;;;;AAAA,0DAImB;AAEnB,8DAAsC;AAE/B,MAAM,qBAAqB,GAAG,GAAS,EAAE;IAC9C,MAAM,eAAe,GAAG,mBAAI,CAAC,OAAO,CAAC;IACrC,mBAAI,CAAC,OAAO,GAAG,CACb,OAAsC,EACtC,EAAiE,EAClD,EAAE;QACjB,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,YAAY,GAAG,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CACb,iFAAiF,CAClF,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,EAAE,KAAK,UAAU,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;QACJ,CAAC;QACD,MAAM,iBAAiB,GAAa,EAAE,CAAC;QACvC,MAAM,kBAAkB,GAAa,EAAE,CAAC;QACxC,MAAM,gBAAgB,GAAG,CAAC,GAAoB,EAAE,EAAE;YAChD,gBAAM,CAAC,KAAK,CACV,qBAAqB,IAAI,CAAC,SAAS,CAAC;gBAClC,GAAG,OAAO;gBACV,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;aACxD,CAAC,EAAE,CACL,CAAC;YACF,IAAI,EAAE,EAAE,CAAC;gBACP,EAAE,CAAC,GAAG,CAAC,CAAC;YACV,CAAC;QACH,CAAC,CAAC;QACF,MAAM,aAAa,GAAkB,eAAe,CAClD,OAAO,EACP,gBAAgB,CACjB,CAAC;QACF,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACvD,aAAa,CAAC,GAAG,GAAG,CAAC,KAAgD,EAAE,EAAE;YACvE,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3C,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC,CAAC;QAEF,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,QAAyB,EAAE,EAAE;YACzD,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE;gBAC3B,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACtB,gBAAM,CAAC,KAAK,CACV,aAAa,IAAI,CAAC,SAAS,CAAC;oBAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACxD,OAAO,EAAE,QAAQ,CAAC,OAAO;oBACzB,UAAU,EAAE,QAAQ,CAAC,UAAU;iBAChC,CAAC,EAAE,CACL,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,OAAO,aAAa,CAAC;IACvB,CAAC,CAAC;AACJ,CAAC,CAAC;AAvDW,QAAA,qBAAqB,yBAuDhC"}
|
package/src/index.js
CHANGED
|
@@ -53,7 +53,7 @@ exports.providerWithMetadata = exports.MessageProviderPact = exports.PactV2 = ex
|
|
|
53
53
|
* @memberof Pact
|
|
54
54
|
* @static
|
|
55
55
|
*/
|
|
56
|
-
|
|
56
|
+
const MatchersStar = __importStar(require("./dsl/matchers"));
|
|
57
57
|
exports.MatchersV2 = MatchersStar;
|
|
58
58
|
/**
|
|
59
59
|
* Exposes {@link Matchers}
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH;;;;GAIG;AAEH;;;;;;GAMG;AACH,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH;;;;GAIG;AAEH;;;;;;GAMG;AACH,6DAA+C;AAElC,QAAA,UAAU,GAAG,YAAY,CAAC;AAEvC;;;;;;GAMG;AACH,2BAA8C;AAArC,8FAAA,UAAU,OAAY;AAI/B,uCAA4C;AAAnC,kGAAA,IAAI,OAAU;AAEvB;;;;GAIG;AACH,wDAAsC;AAEtC;;;;GAIG;AACH,6DAG+B;AAF7B,0HAAA,mBAAmB,OAAA;AACnB,2HAAA,oBAAoB,OAAA;AAGtB;;;;GAIG;AACH,gDAA8B;AAE9B;;;;GAIG;AACH,0DAAwC;AAGxC;;;;GAIG;AACH,gDAA8B;AAC9B;;;;GAIG;AACH,sDAAoC;AAEpC;;;;GAIG;AACH,oDAAkC;AAElC;;;;GAIG;AACH,oDAAkC;AAElC,uCAAqB;AAErB;;;;GAIG;AACH,uCAAqB;AAErB;;;;GAIG;AACH,gDAA8B"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module Message
|
|
3
3
|
*/
|
|
4
|
-
import { AnyJson } from './common/jsonTypes';
|
|
5
|
-
import { Metadata, Message, MessageConsumer, ProviderState } from './dsl/message';
|
|
6
|
-
import { MessageConsumerOptions } from './dsl/options';
|
|
4
|
+
import type { AnyJson } from './common/jsonTypes';
|
|
5
|
+
import type { Metadata, Message, MessageConsumer, ProviderState } from './dsl/message';
|
|
6
|
+
import type { MessageConsumerOptions } from './dsl/options';
|
|
7
7
|
/**
|
|
8
8
|
* A Message Consumer is analogous to a Provider in the HTTP Interaction model.
|
|
9
9
|
* It is the receiver of an interaction, and needs to be able to handle whatever
|
|
@@ -42,15 +42,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
42
42
|
exports.MessageConsumerPact = void 0;
|
|
43
43
|
exports.synchronousBodyHandler = synchronousBodyHandler;
|
|
44
44
|
exports.asynchronousBodyHandler = asynchronousBodyHandler;
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
45
|
+
const lodash_1 = require("lodash");
|
|
46
|
+
const pact_core_1 = __importStar(require("@pact-foundation/pact-core"));
|
|
47
|
+
const ramda_1 = require("ramda");
|
|
48
|
+
const logger_1 = __importStar(require("./common/logger"));
|
|
49
|
+
const configurationError_1 = __importDefault(require("./errors/configurationError"));
|
|
50
|
+
const package_json_1 = require("../package.json");
|
|
51
|
+
const spec_1 = require("./common/spec");
|
|
52
|
+
const v3_1 = require("./v3");
|
|
53
|
+
const DEFAULT_PACT_DIR = './pacts';
|
|
54
54
|
var ContentType;
|
|
55
55
|
(function (ContentType) {
|
|
56
56
|
ContentType[ContentType["JSON"] = 0] = "JSON";
|
|
@@ -62,10 +62,13 @@ var ContentType;
|
|
|
62
62
|
* It is the receiver of an interaction, and needs to be able to handle whatever
|
|
63
63
|
* request was provided.
|
|
64
64
|
*/
|
|
65
|
-
|
|
66
|
-
|
|
65
|
+
class MessageConsumerPact {
|
|
66
|
+
config;
|
|
67
|
+
state = {};
|
|
68
|
+
pact;
|
|
69
|
+
message;
|
|
70
|
+
constructor(config) {
|
|
67
71
|
this.config = config;
|
|
68
|
-
this.state = {};
|
|
69
72
|
this.pact = (0, pact_core_1.makeConsumerAsyncMessagePact)(config.consumer, config.provider, (0, spec_1.numberToSpec)(config.spec, v3_1.SpecificationVersion.SPECIFICATION_VERSION_V3), config.logLevel);
|
|
70
73
|
this.pact.addMetadata('pact-js', 'version', package_json_1.version);
|
|
71
74
|
this.message = this.pact.newMessage('');
|
|
@@ -80,7 +83,7 @@ var MessageConsumerPact = /** @class */ (function () {
|
|
|
80
83
|
* @param {string} state - The state of the provider.
|
|
81
84
|
* @returns {Message} MessageConsumer
|
|
82
85
|
*/
|
|
83
|
-
|
|
86
|
+
given(state) {
|
|
84
87
|
if (typeof state === 'string') {
|
|
85
88
|
this.message.given(state);
|
|
86
89
|
}
|
|
@@ -88,20 +91,20 @@ var MessageConsumerPact = /** @class */ (function () {
|
|
|
88
91
|
this.message.givenWithParams(state.name, JSON.stringify(state.params));
|
|
89
92
|
}
|
|
90
93
|
return this;
|
|
91
|
-
}
|
|
94
|
+
}
|
|
92
95
|
/**
|
|
93
96
|
* A free style description of the Message.
|
|
94
97
|
*
|
|
95
98
|
* @param {string} description - A description of the Message to be received
|
|
96
99
|
* @returns {Message} MessageConsumer
|
|
97
100
|
*/
|
|
98
|
-
|
|
101
|
+
expectsToReceive(description) {
|
|
99
102
|
if ((0, lodash_1.isEmpty)(description)) {
|
|
100
103
|
throw new configurationError_1.default('You must provide a description for the Message.');
|
|
101
104
|
}
|
|
102
105
|
this.message.expectsToReceive(description);
|
|
103
106
|
return this;
|
|
104
|
-
}
|
|
107
|
+
}
|
|
105
108
|
/**
|
|
106
109
|
* The JSON object to be received by the message consumer.
|
|
107
110
|
*
|
|
@@ -111,14 +114,14 @@ var MessageConsumerPact = /** @class */ (function () {
|
|
|
111
114
|
* @param {string} content - A description of the Message to be received
|
|
112
115
|
* @returns {Message} MessageConsumer
|
|
113
116
|
*/
|
|
114
|
-
|
|
117
|
+
withContent(content) {
|
|
115
118
|
if ((0, lodash_1.isEmpty)(content)) {
|
|
116
119
|
throw new configurationError_1.default('You must provide a valid JSON document or primitive for the Message.');
|
|
117
120
|
}
|
|
118
121
|
this.message.withContents(JSON.stringify(content), 'application/json');
|
|
119
122
|
this.state.contentType = ContentType.JSON;
|
|
120
123
|
return this;
|
|
121
|
-
}
|
|
124
|
+
}
|
|
122
125
|
/**
|
|
123
126
|
* The text content to be received by the message consumer.
|
|
124
127
|
*
|
|
@@ -127,11 +130,11 @@ var MessageConsumerPact = /** @class */ (function () {
|
|
|
127
130
|
* @param {string} content - A description of the Message to be received
|
|
128
131
|
* @returns {Message} MessageConsumer
|
|
129
132
|
*/
|
|
130
|
-
|
|
133
|
+
withTextContent(content, contentType) {
|
|
131
134
|
this.message.withContents(content, contentType);
|
|
132
135
|
this.state.contentType = ContentType.STRING;
|
|
133
136
|
return this;
|
|
134
|
-
}
|
|
137
|
+
}
|
|
135
138
|
/**
|
|
136
139
|
* The binary content to be received by the message consumer.
|
|
137
140
|
*
|
|
@@ -141,76 +144,72 @@ var MessageConsumerPact = /** @class */ (function () {
|
|
|
141
144
|
* @param {String} contenttype - The mime type of the content to expect
|
|
142
145
|
* @returns {Message} MessageConsumer
|
|
143
146
|
*/
|
|
144
|
-
|
|
147
|
+
withBinaryContent(content, contentType) {
|
|
145
148
|
this.message.withBinaryContents(content, contentType);
|
|
146
149
|
this.state.contentType = ContentType.BINARY;
|
|
147
150
|
return this;
|
|
148
|
-
}
|
|
151
|
+
}
|
|
149
152
|
/**
|
|
150
153
|
* Message metadata.
|
|
151
154
|
*
|
|
152
155
|
* @param {string} metadata -
|
|
153
156
|
* @returns {Message} MessageConsumer
|
|
154
157
|
*/
|
|
155
|
-
|
|
156
|
-
var _this = this;
|
|
158
|
+
withMetadata(metadata) {
|
|
157
159
|
if ((0, lodash_1.isEmpty)(metadata)) {
|
|
158
160
|
throw new configurationError_1.default('You must provide valid metadata for the Message, or none at all');
|
|
159
161
|
}
|
|
160
|
-
(0, ramda_1.forEachObjIndexed)(
|
|
161
|
-
|
|
162
|
+
(0, ramda_1.forEachObjIndexed)((v, k) => {
|
|
163
|
+
this.message.withMetadata(`${k}`, JSON.stringify(v));
|
|
162
164
|
}, metadata);
|
|
163
165
|
return this;
|
|
164
|
-
}
|
|
166
|
+
}
|
|
165
167
|
/**
|
|
166
168
|
* Creates a new Pact _message_ interaction to build a testable interaction.
|
|
167
169
|
*
|
|
168
170
|
* @param handler A message handler, that must be able to consume the given Message
|
|
169
171
|
* @returns {Promise}
|
|
170
172
|
*/
|
|
171
|
-
|
|
172
|
-
var _this = this;
|
|
173
|
+
verify(handler) {
|
|
173
174
|
logger_1.default.info('Verifying message');
|
|
174
175
|
return handler(this.reifiedContent())
|
|
175
|
-
.then(
|
|
176
|
-
|
|
177
|
-
_this.pact.writePactFile((_a = _this.config.dir) !== null && _a !== void 0 ? _a : DEFAULT_PACT_DIR, _this.config.pactfileWriteMode !== 'overwrite');
|
|
176
|
+
.then(() => {
|
|
177
|
+
this.pact.writePactFile(this.config.dir ?? DEFAULT_PACT_DIR, this.config.pactfileWriteMode !== 'overwrite');
|
|
178
178
|
})
|
|
179
|
-
.finally(
|
|
180
|
-
|
|
181
|
-
|
|
179
|
+
.finally(() => {
|
|
180
|
+
this.message = this.pact.newMessage('');
|
|
181
|
+
this.state = {};
|
|
182
182
|
});
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
logger_1.default.debug(
|
|
187
|
-
|
|
183
|
+
}
|
|
184
|
+
reifiedContent() {
|
|
185
|
+
const raw = this.message.reifyMessage();
|
|
186
|
+
logger_1.default.debug(`reified message raw: raw`);
|
|
187
|
+
const reified = JSON.parse(raw);
|
|
188
188
|
if (this.state.contentType === ContentType.BINARY) {
|
|
189
189
|
reified.contents = Buffer.from(reified.contents, 'base64');
|
|
190
190
|
}
|
|
191
|
-
logger_1.default.debug(
|
|
191
|
+
logger_1.default.debug(`rehydrated message body into correct type: ${reified.contents}`);
|
|
192
192
|
return reified;
|
|
193
|
-
}
|
|
193
|
+
}
|
|
194
194
|
/**
|
|
195
195
|
* Returns the Message object created.
|
|
196
196
|
*
|
|
197
197
|
* @returns {Message}
|
|
198
198
|
*/
|
|
199
|
-
|
|
199
|
+
json() {
|
|
200
200
|
return this.state;
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
}());
|
|
201
|
+
}
|
|
202
|
+
}
|
|
204
203
|
exports.MessageConsumerPact = MessageConsumerPact;
|
|
205
204
|
// TODO: create more basic adapters for API handlers
|
|
206
205
|
// bodyHandler takes a synchronous function and returns
|
|
207
206
|
// a wrapped function that accepts a Message and returns a Promise
|
|
208
207
|
function synchronousBodyHandler(handler) {
|
|
209
|
-
return
|
|
210
|
-
|
|
211
|
-
return new Promise(
|
|
208
|
+
return (m) => {
|
|
209
|
+
const body = m.contents;
|
|
210
|
+
return new Promise((resolve, reject) => {
|
|
212
211
|
try {
|
|
213
|
-
|
|
212
|
+
const res = handler(body);
|
|
214
213
|
resolve(res);
|
|
215
214
|
}
|
|
216
215
|
catch (e) {
|
|
@@ -223,6 +222,6 @@ function synchronousBodyHandler(handler) {
|
|
|
223
222
|
// a wrapped function that accepts a Message and returns a Promise
|
|
224
223
|
// TODO: move this into its own package and re-export?
|
|
225
224
|
function asynchronousBodyHandler(handler) {
|
|
226
|
-
return
|
|
225
|
+
return (m) => handler(m.contents);
|
|
227
226
|
}
|
|
228
227
|
//# sourceMappingURL=messageConsumerPact.js.map
|