@pact-foundation/pact 10.1.3 → 10.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.
Files changed (57) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/README.md +20 -1
  3. package/package.json +5 -5
  4. package/src/dsl/matchers.spec.js +2 -3
  5. package/src/dsl/matchers.spec.js.map +1 -1
  6. package/src/dsl/verifier/proxy/messages.d.ts +7 -0
  7. package/src/dsl/verifier/proxy/messages.js +90 -0
  8. package/src/dsl/verifier/proxy/messages.js.map +1 -0
  9. package/src/dsl/verifier/proxy/proxy.d.ts +1 -1
  10. package/src/dsl/verifier/proxy/proxy.js +16 -3
  11. package/src/dsl/verifier/proxy/proxy.js.map +1 -1
  12. package/src/dsl/verifier/proxy/stateHandler/stateHandler.spec.js +1 -0
  13. package/src/dsl/verifier/proxy/stateHandler/stateHandler.spec.js.map +1 -1
  14. package/src/dsl/verifier/proxy/types.d.ts +3 -1
  15. package/src/dsl/verifier/types.d.ts +5 -1
  16. package/src/dsl/verifier/verifier.d.ts +1 -0
  17. package/src/dsl/verifier/verifier.js +20 -3
  18. package/src/dsl/verifier/verifier.js.map +1 -1
  19. package/src/messageProviderPact.js +3 -1
  20. package/src/messageProviderPact.js.map +1 -1
  21. package/src/messageProviderPact.spec.js +1 -1
  22. package/src/messageProviderPact.spec.js.map +1 -1
  23. package/src/v3/ffi.d.ts +5 -0
  24. package/src/v3/ffi.js +42 -0
  25. package/src/v3/ffi.js.map +1 -0
  26. package/src/v3/matchers.d.ts +1 -1
  27. package/src/v3/matchers.js +4 -1
  28. package/src/v3/matchers.js.map +1 -1
  29. package/src/v3/matchers.spec.js +14 -1
  30. package/src/v3/matchers.spec.js.map +1 -1
  31. package/src/v3/pact.js +9 -41
  32. package/src/v3/pact.js.map +1 -1
  33. package/src/v3/types.d.ts +2 -1
  34. package/src/v4/http/index.d.ts +85 -0
  35. package/src/v4/http/index.js +371 -0
  36. package/src/v4/http/index.js.map +1 -0
  37. package/src/v4/http/index.spec.d.ts +1 -0
  38. package/src/v4/http/index.spec.js +111 -0
  39. package/src/v4/http/index.spec.js.map +1 -0
  40. package/src/v4/http/types.d.ts +109 -0
  41. package/src/v4/http/types.js +3 -0
  42. package/src/v4/http/types.js.map +1 -0
  43. package/src/v4/index.d.ts +10 -0
  44. package/src/v4/index.js +26 -0
  45. package/src/v4/index.js.map +1 -0
  46. package/src/v4/message/index.d.ts +73 -0
  47. package/src/v4/message/index.js +286 -0
  48. package/src/v4/message/index.js.map +1 -0
  49. package/src/v4/message/index.spec.d.ts +1 -0
  50. package/src/v4/message/index.spec.js +214 -0
  51. package/src/v4/message/index.spec.js.map +1 -0
  52. package/src/v4/message/types.d.ts +57 -0
  53. package/src/v4/message/types.js +3 -0
  54. package/src/v4/message/types.js.map +1 -0
  55. package/src/v4/types.d.ts +6 -0
  56. package/src/v4/types.js +3 -0
  57. package/src/v4/types.js.map +1 -0
@@ -0,0 +1,371 @@
1
+ "use strict";
2
+ var __extends = (this && this.__extends) || (function () {
3
+ var extendStatics = function (d, b) {
4
+ extendStatics = Object.setPrototypeOf ||
5
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
+ return extendStatics(d, b);
8
+ };
9
+ return function (d, b) {
10
+ if (typeof b !== "function" && b !== null)
11
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
+ extendStatics(d, b);
13
+ function __() { this.constructor = d; }
14
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
+ };
16
+ })();
17
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
18
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
19
+ return new (P || (P = Promise))(function (resolve, reject) {
20
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
21
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
22
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
23
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
24
+ });
25
+ };
26
+ var __generator = (this && this.__generator) || function (thisArg, body) {
27
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
28
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
29
+ function verb(n) { return function (v) { return step([n, v]); }; }
30
+ function step(op) {
31
+ if (f) throw new TypeError("Generator is already executing.");
32
+ while (_) try {
33
+ 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;
34
+ if (y = 0, t) op = [op[0] & 2, t.value];
35
+ switch (op[0]) {
36
+ case 0: case 1: t = op; break;
37
+ case 4: _.label++; return { value: op[1], done: false };
38
+ case 5: _.label++; y = op[1]; op = [0]; continue;
39
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
40
+ default:
41
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
42
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
43
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
44
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
45
+ if (t[2]) _.ops.pop();
46
+ _.trys.pop(); continue;
47
+ }
48
+ op = body.call(thisArg, _);
49
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
50
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
51
+ }
52
+ };
53
+ var __importDefault = (this && this.__importDefault) || function (mod) {
54
+ return (mod && mod.__esModule) ? mod : { "default": mod };
55
+ };
56
+ Object.defineProperty(exports, "__esModule", { value: true });
57
+ exports.InteractionWithPluginResponse = exports.ResponseWithPluginBuilder = exports.RequestWithPluginBuilder = exports.InteractionWithPluginRequest = exports.InteractionWithPlugin = exports.InteractionWithResponse = exports.ResponseBuilder = exports.RequestBuilder = exports.InteractionwithRequest = exports.InteractionWithCompleteRequest = exports.UnconfiguredInteraction = void 0;
58
+ var ramda_1 = require("ramda");
59
+ var matchers_1 = require("../../v3/matchers");
60
+ var fs = require("fs");
61
+ var display_1 = require("../../v3/display");
62
+ var logger_1 = __importDefault(require("../../common/logger"));
63
+ var UnconfiguredInteraction = /** @class */ (function () {
64
+ // tslint:disable:no-empty-function
65
+ function UnconfiguredInteraction(pact, interaction, opts) {
66
+ this.pact = pact;
67
+ this.interaction = interaction;
68
+ this.opts = opts;
69
+ }
70
+ UnconfiguredInteraction.prototype.uponReceiving = function (description) {
71
+ this.interaction.uponReceiving(description);
72
+ return this;
73
+ };
74
+ UnconfiguredInteraction.prototype.given = function (state, parameters) {
75
+ var _this = this;
76
+ if (parameters) {
77
+ (0, ramda_1.forEachObjIndexed)(function (v, k) {
78
+ _this.interaction.givenWithParam(state, "".concat(k), JSON.stringify(v));
79
+ }, parameters);
80
+ }
81
+ else {
82
+ this.interaction.given(state);
83
+ }
84
+ return this;
85
+ };
86
+ UnconfiguredInteraction.prototype.withCompleteRequest = function (request) {
87
+ return new InteractionWithCompleteRequest(this.pact, this.interaction, this.opts);
88
+ };
89
+ UnconfiguredInteraction.prototype.withRequest = function (method, path, builder) {
90
+ this.interaction.withRequest(method, (0, matchers_1.matcherValueOrString)(path));
91
+ if (builder) {
92
+ builder(new RequestBuilder(this.interaction));
93
+ }
94
+ return new InteractionwithRequest(this.pact, this.interaction, this.opts);
95
+ };
96
+ UnconfiguredInteraction.prototype.usingPlugin = function (config) {
97
+ this.pact.addPlugin(config.plugin, config.version);
98
+ return new InteractionWithPlugin(this.pact, this.interaction, this.opts);
99
+ };
100
+ return UnconfiguredInteraction;
101
+ }());
102
+ exports.UnconfiguredInteraction = UnconfiguredInteraction;
103
+ var InteractionWithCompleteRequest = /** @class */ (function () {
104
+ // tslint:disable:no-empty-function
105
+ function InteractionWithCompleteRequest(pact, interaction, opts) {
106
+ this.pact = pact;
107
+ this.interaction = interaction;
108
+ this.opts = opts;
109
+ throw Error('V4InteractionWithCompleteRequest is unimplemented');
110
+ }
111
+ InteractionWithCompleteRequest.prototype.withCompleteResponse = function (response) {
112
+ return new InteractionWithResponse(this.pact, this.interaction, this.opts);
113
+ };
114
+ return InteractionWithCompleteRequest;
115
+ }());
116
+ exports.InteractionWithCompleteRequest = InteractionWithCompleteRequest;
117
+ var InteractionwithRequest = /** @class */ (function () {
118
+ // tslint:disable:no-empty-function
119
+ function InteractionwithRequest(pact, interaction, opts) {
120
+ this.pact = pact;
121
+ this.interaction = interaction;
122
+ this.opts = opts;
123
+ }
124
+ InteractionwithRequest.prototype.willRespondWith = function (status, builder) {
125
+ return new InteractionWithResponse(this.pact, this.interaction, this.opts);
126
+ };
127
+ return InteractionwithRequest;
128
+ }());
129
+ exports.InteractionwithRequest = InteractionwithRequest;
130
+ var RequestBuilder = /** @class */ (function () {
131
+ // tslint:disable:no-empty-function
132
+ function RequestBuilder(interaction) {
133
+ this.interaction = interaction;
134
+ }
135
+ RequestBuilder.prototype.query = function (query) {
136
+ var _this = this;
137
+ (0, ramda_1.forEachObjIndexed)(function (v, k) {
138
+ if (Array.isArray(v)) {
139
+ v.forEach(function (vv, i) {
140
+ _this.interaction.withQuery(k, i, (0, matchers_1.matcherValueOrString)(vv));
141
+ });
142
+ }
143
+ else {
144
+ _this.interaction.withQuery(k, 0, (0, matchers_1.matcherValueOrString)(v));
145
+ }
146
+ }, query);
147
+ return this;
148
+ };
149
+ RequestBuilder.prototype.headers = function (headers) {
150
+ var _this = this;
151
+ (0, ramda_1.forEachObjIndexed)(function (v, k) {
152
+ _this.interaction.withRequestHeader("".concat(k), 0, (0, matchers_1.matcherValueOrString)(v));
153
+ }, headers);
154
+ return this;
155
+ };
156
+ RequestBuilder.prototype.jsonBody = function (body) {
157
+ this.interaction.withRequestBody((0, matchers_1.matcherValueOrString)(body), 'application/json');
158
+ return this;
159
+ };
160
+ RequestBuilder.prototype.binaryFile = function (contentType, file) {
161
+ var body = readBinaryData(file);
162
+ this.interaction.withRequestBinaryBody(body, contentType);
163
+ return this;
164
+ };
165
+ RequestBuilder.prototype.multipartBody = function (contentType, file, mimePartName) {
166
+ this.interaction.withRequestMultipartBody(contentType, file, mimePartName);
167
+ return this;
168
+ };
169
+ RequestBuilder.prototype.body = function (contentType, body) {
170
+ this.interaction.withRequestBinaryBody(body, contentType);
171
+ return this;
172
+ };
173
+ return RequestBuilder;
174
+ }());
175
+ exports.RequestBuilder = RequestBuilder;
176
+ var ResponseBuilder = /** @class */ (function () {
177
+ // tslint:disable:no-empty-function
178
+ function ResponseBuilder(interaction) {
179
+ this.interaction = interaction;
180
+ }
181
+ ResponseBuilder.prototype.headers = function (headers) {
182
+ var _this = this;
183
+ (0, ramda_1.forEachObjIndexed)(function (v, k) {
184
+ _this.interaction.withResponseHeader("".concat(k), 0, (0, matchers_1.matcherValueOrString)(v));
185
+ }, headers);
186
+ return this;
187
+ };
188
+ ResponseBuilder.prototype.jsonBody = function (body) {
189
+ this.interaction.withResponseBody((0, matchers_1.matcherValueOrString)(body), 'application/json');
190
+ return this;
191
+ };
192
+ ResponseBuilder.prototype.binaryFile = function (contentType, file) {
193
+ var body = readBinaryData(file);
194
+ this.interaction.withResponseBinaryBody(body, contentType);
195
+ return this;
196
+ };
197
+ ResponseBuilder.prototype.multipartBody = function (contentType, file, mimePartName) {
198
+ this.interaction.withResponseMultipartBody(contentType, file, mimePartName);
199
+ return this;
200
+ };
201
+ ResponseBuilder.prototype.body = function (contentType, body) {
202
+ this.interaction.withResponseBinaryBody(body, contentType);
203
+ return this;
204
+ };
205
+ return ResponseBuilder;
206
+ }());
207
+ exports.ResponseBuilder = ResponseBuilder;
208
+ var InteractionWithResponse = /** @class */ (function () {
209
+ // tslint:disable:no-empty-function
210
+ function InteractionWithResponse(pact, interaction, opts) {
211
+ this.pact = pact;
212
+ this.interaction = interaction;
213
+ this.opts = opts;
214
+ }
215
+ InteractionWithResponse.prototype.executeTest = function (testFn) {
216
+ return __awaiter(this, void 0, void 0, function () {
217
+ return __generator(this, function (_a) {
218
+ return [2 /*return*/, executeTest(this.pact, this.opts, testFn)];
219
+ });
220
+ });
221
+ };
222
+ return InteractionWithResponse;
223
+ }());
224
+ exports.InteractionWithResponse = InteractionWithResponse;
225
+ var InteractionWithPlugin = /** @class */ (function () {
226
+ // tslint:disable:no-empty-function
227
+ function InteractionWithPlugin(pact, interaction, opts) {
228
+ this.pact = pact;
229
+ this.interaction = interaction;
230
+ this.opts = opts;
231
+ }
232
+ // Multiple plugins are allowed
233
+ InteractionWithPlugin.prototype.usingPlugin = function (config) {
234
+ this.pact.addPlugin(config.plugin, config.version);
235
+ return this;
236
+ };
237
+ InteractionWithPlugin.prototype.withRequest = function (method, path, builder) {
238
+ this.interaction.withRequest(method, (0, matchers_1.matcherValueOrString)(path));
239
+ if (typeof builder === 'function') {
240
+ builder(new RequestWithPluginBuilder(this.interaction));
241
+ }
242
+ return new InteractionWithPluginRequest(this.pact, this.interaction, this.opts);
243
+ };
244
+ return InteractionWithPlugin;
245
+ }());
246
+ exports.InteractionWithPlugin = InteractionWithPlugin;
247
+ var InteractionWithPluginRequest = /** @class */ (function () {
248
+ // tslint:disable:no-empty-function
249
+ function InteractionWithPluginRequest(pact, interaction, opts) {
250
+ this.pact = pact;
251
+ this.interaction = interaction;
252
+ this.opts = opts;
253
+ }
254
+ InteractionWithPluginRequest.prototype.willRespondWith = function (status, builder) {
255
+ if (typeof builder === 'function') {
256
+ builder(new ResponseWithPluginBuilder(this.interaction));
257
+ }
258
+ return new InteractionWithPluginResponse(this.pact, this.interaction, this.opts);
259
+ };
260
+ return InteractionWithPluginRequest;
261
+ }());
262
+ exports.InteractionWithPluginRequest = InteractionWithPluginRequest;
263
+ var RequestWithPluginBuilder = /** @class */ (function (_super) {
264
+ __extends(RequestWithPluginBuilder, _super);
265
+ function RequestWithPluginBuilder() {
266
+ return _super !== null && _super.apply(this, arguments) || this;
267
+ }
268
+ RequestWithPluginBuilder.prototype.pluginContents = function (contentType, contents) {
269
+ this.interaction.withPluginRequestInteractionContents(contentType, contents);
270
+ return this;
271
+ };
272
+ return RequestWithPluginBuilder;
273
+ }(RequestBuilder));
274
+ exports.RequestWithPluginBuilder = RequestWithPluginBuilder;
275
+ var ResponseWithPluginBuilder = /** @class */ (function (_super) {
276
+ __extends(ResponseWithPluginBuilder, _super);
277
+ function ResponseWithPluginBuilder() {
278
+ return _super !== null && _super.apply(this, arguments) || this;
279
+ }
280
+ ResponseWithPluginBuilder.prototype.pluginContents = function (contentType, contents) {
281
+ this.interaction.withPluginResponseInteractionContents(contentType, contents);
282
+ return this;
283
+ };
284
+ return ResponseWithPluginBuilder;
285
+ }(ResponseBuilder));
286
+ exports.ResponseWithPluginBuilder = ResponseWithPluginBuilder;
287
+ var InteractionWithPluginResponse = /** @class */ (function () {
288
+ // tslint:disable:no-empty-function
289
+ function InteractionWithPluginResponse(pact, interaction, opts) {
290
+ this.pact = pact;
291
+ this.interaction = interaction;
292
+ this.opts = opts;
293
+ }
294
+ InteractionWithPluginResponse.prototype.executeTest = function (testFn) {
295
+ return __awaiter(this, void 0, void 0, function () {
296
+ return __generator(this, function (_a) {
297
+ return [2 /*return*/, executeTest(this.pact, this.opts, testFn)];
298
+ });
299
+ });
300
+ };
301
+ return InteractionWithPluginResponse;
302
+ }());
303
+ exports.InteractionWithPluginResponse = InteractionWithPluginResponse;
304
+ var readBinaryData = function (file) {
305
+ try {
306
+ var body = fs.readFileSync(file);
307
+ return body;
308
+ }
309
+ catch (e) {
310
+ throw new Error("unable to read file for binary payload : ".concat(e.message));
311
+ }
312
+ };
313
+ var cleanup = function (success, pact, opts, server) {
314
+ if (success) {
315
+ pact.writePactFile(opts.dir || './pacts');
316
+ }
317
+ pact.cleanupMockServer(server.port);
318
+ pact.cleanupPlugins();
319
+ };
320
+ var executeTest = function (pact, opts, testFn) { return __awaiter(void 0, void 0, void 0, function () {
321
+ var scheme, host, port, server, val, error, e_1, matchingResults, errors, success, errorMessage;
322
+ return __generator(this, function (_a) {
323
+ switch (_a.label) {
324
+ case 0:
325
+ scheme = opts.tls ? 'https' : 'http';
326
+ host = opts.host || '127.0.0.1';
327
+ port = pact.createMockServer(host, opts.port || 0, false);
328
+ server = { port: port, url: "".concat(scheme, "://").concat(host, ":").concat(port), id: 'unknown' };
329
+ _a.label = 1;
330
+ case 1:
331
+ _a.trys.push([1, 3, , 4]);
332
+ return [4 /*yield*/, testFn(server)];
333
+ case 2:
334
+ val = _a.sent();
335
+ return [3 /*break*/, 4];
336
+ case 3:
337
+ e_1 = _a.sent();
338
+ error = e_1;
339
+ return [3 /*break*/, 4];
340
+ case 4:
341
+ matchingResults = pact.mockServerMismatches(port);
342
+ errors = (0, display_1.filterMissingFeatureFlag)(matchingResults);
343
+ success = pact.mockServerMatchedSuccessfully(port);
344
+ // Scenario: Pact validation failed
345
+ if (!success && errors.length > 0) {
346
+ errorMessage = 'Test failed for the following reasons:';
347
+ errorMessage += "\n\n ".concat((0, display_1.generateMockServerError)(matchingResults, '\t'));
348
+ cleanup(false, pact, opts, server);
349
+ // If the tests throws an error, we need to rethrow the error, but print out
350
+ // any additional mock server errors to help the user understand what happened
351
+ // (The proximate cause here is often the HTTP 500 from the mock server,
352
+ // where the HTTP client then throws)
353
+ if (error) {
354
+ logger_1.default.error(errorMessage);
355
+ throw error;
356
+ }
357
+ // Test didn't throw, so we need to ensure the test fails
358
+ return [2 /*return*/, Promise.reject(new Error(errorMessage))];
359
+ }
360
+ // Scenario: test threw an error, but Pact validation was OK (error in client or test)
361
+ if (error) {
362
+ cleanup(false, pact, opts, server);
363
+ throw error;
364
+ }
365
+ // Scenario: Pact validation passed, test didn't throw - return the callback value
366
+ cleanup(true, pact, opts, server);
367
+ return [2 /*return*/, val];
368
+ }
369
+ });
370
+ }); };
371
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/v4/http/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,111 @@
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;
13
+ return g = { next: verb(0), "throw": verb(1), "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 (_) 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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
39
+ return (mod && mod.__esModule) ? mod : { "default": mod };
40
+ };
41
+ Object.defineProperty(exports, "__esModule", { value: true });
42
+ /* tslint:disable:no-unused-expression no-empty */
43
+ var chai_1 = __importDefault(require("chai"));
44
+ var axios_1 = __importDefault(require("axios"));
45
+ var chai_as_promised_1 = __importDefault(require("chai-as-promised"));
46
+ var sinon_chai_1 = __importDefault(require("sinon-chai"));
47
+ var v3_1 = require("../../v3");
48
+ var index_1 = require("../index");
49
+ chai_1.default.use(sinon_chai_1.default);
50
+ chai_1.default.use(chai_as_promised_1.default);
51
+ var expect = chai_1.default.expect;
52
+ describe.skip('PactV4', function () {
53
+ var pact = new index_1.PactV4({
54
+ consumer: 'myconsumer',
55
+ provider: 'myprovider',
56
+ spec: v3_1.SpecificationVersion.SPECIFICATION_VERSION_V4,
57
+ logLevel: 'debug',
58
+ });
59
+ describe('HTTP test', function () {
60
+ it('returns a valid MATT message over HTTP', function () { return __awaiter(void 0, void 0, void 0, function () {
61
+ var mattRequest, mattResponse;
62
+ return __generator(this, function (_a) {
63
+ switch (_a.label) {
64
+ case 0:
65
+ mattRequest = "{\"request\": {\"body\": \"hello\"}}";
66
+ mattResponse = "{\"response\":{\"body\":\"world\"}}";
67
+ return [4 /*yield*/, pact
68
+ .addInteraction()
69
+ .given('the Matt protocol exists')
70
+ .uponReceiving('an HTTP request to /matt')
71
+ .usingPlugin({
72
+ plugin: 'matt',
73
+ version: '0.0.2',
74
+ })
75
+ .withRequest('POST', '/matt', function (builder) {
76
+ builder.pluginContents('application/matt', mattRequest);
77
+ })
78
+ .willRespondWith(200, function (builder) {
79
+ builder.pluginContents('application/matt', mattResponse);
80
+ })
81
+ .executeTest(function (mockserver) {
82
+ return axios_1.default
83
+ .request({
84
+ baseURL: mockserver.url,
85
+ headers: {
86
+ 'content-type': 'application/matt',
87
+ Accept: 'application/matt',
88
+ },
89
+ data: generateMattMessage('hello'),
90
+ method: 'POST',
91
+ url: '/matt',
92
+ })
93
+ .then(function (res) {
94
+ expect(parseMattMessage(res.data)).to.eq('world');
95
+ });
96
+ })];
97
+ case 1:
98
+ _a.sent();
99
+ return [2 /*return*/];
100
+ }
101
+ });
102
+ }); });
103
+ });
104
+ });
105
+ var parseMattMessage = function (raw) {
106
+ return raw.replace(/(MATT)+/g, '').trim();
107
+ };
108
+ var generateMattMessage = function (raw) {
109
+ return "MATT".concat(raw, "MATT");
110
+ };
111
+ //# sourceMappingURL=index.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.spec.js","sourceRoot":"","sources":["../../../../src/v4/http/index.spec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kDAAkD;AAClD,8CAAwB;AACxB,gDAA0B;AAC1B,sEAA8C;AAC9C,0DAAmC;AACnC,+BAAgD;AAChD,kCAAkC;AAElC,cAAI,CAAC,GAAG,CAAC,oBAAS,CAAC,CAAC;AACpB,cAAI,CAAC,GAAG,CAAC,0BAAc,CAAC,CAAC;AAEjB,IAAA,MAAM,GAAK,cAAI,OAAT,CAAU;AAExB,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE;IACtB,IAAM,IAAI,GAAG,IAAI,cAAM,CAAC;QACtB,QAAQ,EAAE,YAAY;QACtB,QAAQ,EAAE,YAAY;QACtB,IAAI,EAAE,yBAAoB,CAAC,wBAAwB;QACnD,QAAQ,EAAE,OAAO;KAClB,CAAC,CAAC;IAEH,QAAQ,CAAC,WAAW,EAAE;QACpB,EAAE,CAAC,wCAAwC,EAAE;;;;;wBACrC,WAAW,GAAG,sCAAgC,CAAC;wBAC/C,YAAY,GAAG,qCAA+B,CAAC;wBAErD,qBAAM,IAAI;iCACP,cAAc,EAAE;iCAChB,KAAK,CAAC,0BAA0B,CAAC;iCACjC,aAAa,CAAC,0BAA0B,CAAC;iCACzC,WAAW,CAAC;gCACX,MAAM,EAAE,MAAM;gCACd,OAAO,EAAE,OAAO;6BACjB,CAAC;iCACD,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,UAAC,OAAO;gCACpC,OAAO,CAAC,cAAc,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;4BAC1D,CAAC,CAAC;iCACD,eAAe,CAAC,GAAG,EAAE,UAAC,OAAO;gCAC5B,OAAO,CAAC,cAAc,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;4BAC3D,CAAC,CAAC;iCACD,WAAW,CAAC,UAAC,UAAU;gCACtB,OAAO,eAAK;qCACT,OAAO,CAAC;oCACP,OAAO,EAAE,UAAU,CAAC,GAAG;oCACvB,OAAO,EAAE;wCACP,cAAc,EAAE,kBAAkB;wCAClC,MAAM,EAAE,kBAAkB;qCAC3B;oCACD,IAAI,EAAE,mBAAmB,CAAC,OAAO,CAAC;oCAClC,MAAM,EAAE,MAAM;oCACd,GAAG,EAAE,OAAO;iCACb,CAAC;qCACD,IAAI,CAAC,UAAC,GAAG;oCACR,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;gCACpD,CAAC,CAAC,CAAC;4BACP,CAAC,CAAC,EAAA;;wBA7BJ,SA6BI,CAAC;;;;aACN,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAM,gBAAgB,GAAG,UAAC,GAAW;IACnC,OAAO,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC5C,CAAC,CAAC;AACF,IAAM,mBAAmB,GAAG,UAAC,GAAW;IACtC,OAAO,cAAO,GAAG,SAAM,CAAC;AAC1B,CAAC,CAAC"}
@@ -0,0 +1,109 @@
1
+ /// <reference types="node" />
2
+ import { JsonMap } from '../../common/jsonTypes';
3
+ import { Path, SpecificationVersion, TemplateHeaders, TemplateQuery, V3MockServer, V3ProviderState, V3Request, V3Response } from 'v3';
4
+ import { AnyTemplate } from '../../v3/matchers';
5
+ export declare type V4ProviderState = V3ProviderState;
6
+ export declare type V4MockServer = V3MockServer;
7
+ export declare type V4Request = V3Request;
8
+ export declare type V4Response = V3Response;
9
+ export interface PactV4Options {
10
+ /**
11
+ * Directory to write the pact file to
12
+ */
13
+ dir?: string;
14
+ /**
15
+ * Consumer name
16
+ */
17
+ consumer: string;
18
+ /**
19
+ * Provider name
20
+ */
21
+ provider: string;
22
+ /**
23
+ * Port to run the mock server on. Defaults to a random port
24
+ */
25
+ port?: number;
26
+ /**
27
+ * Specification version to use. Defaults to V4
28
+ */
29
+ spec?: SpecificationVersion;
30
+ /**
31
+ * Specification version to use
32
+ */
33
+ logLevel?: 'trace' | 'debug' | 'info' | 'warn' | 'error';
34
+ /**
35
+ * Flag to identify if HTTP or HTTPs over TLS should be used (default false, HTTP)
36
+ */
37
+ tls?: boolean;
38
+ /**
39
+ * The host to run the mock service, defaults to 127.0.0.1
40
+ */
41
+ host?: string;
42
+ }
43
+ export interface V4UnconfiguredInteraction {
44
+ given(state: string, parameters?: JsonMap): V4UnconfiguredInteraction;
45
+ uponReceiving(description: string): V4UnconfiguredInteraction;
46
+ withCompleteRequest(request: V4Request): V4InteractionWithCompleteRequest;
47
+ withRequest(method: string, path: Path, builder?: V4RequestBuilderFunc): V4InteractionwithRequest;
48
+ usingPlugin(config: PluginConfig): V4InteractionWithPlugin;
49
+ }
50
+ export interface V4InteractionWithCompleteRequest {
51
+ withCompleteResponse(response: V4Response): V4InteractionWithResponse;
52
+ }
53
+ export interface V4InteractionwithRequest {
54
+ willRespondWith(status: number, builder?: V4ResponseBuilderFunc): V4InteractionWithResponse;
55
+ }
56
+ export declare type V4RequestBuilderFunc = (builder: V4RequestBuilder) => void;
57
+ export interface V4RequestBuilder {
58
+ query(query: TemplateQuery): V4RequestBuilder;
59
+ headers(headers: TemplateHeaders): V4RequestBuilder;
60
+ jsonBody(body: AnyTemplate): V4RequestBuilder;
61
+ binaryFile(contentType: string, file: string): V4RequestBuilder;
62
+ multipartBody(contentType: string, filename: string, mimePartName: string): V4RequestBuilder;
63
+ body(contentType: string, body: Buffer): V4RequestBuilder;
64
+ }
65
+ export interface V4ResponseBuilder {
66
+ headers(headers: TemplateHeaders): V4ResponseBuilder;
67
+ jsonBody(body: AnyTemplate): V4ResponseBuilder;
68
+ binaryFile(contentType: string, file: string): V4ResponseBuilder;
69
+ multipartBody(contentType: string, filename: string, mimePartName: string): V4ResponseBuilder;
70
+ body(contentType: string, body: Buffer): V4ResponseBuilder;
71
+ }
72
+ export declare type V4ResponseBuilderFunc = (builder: V4ResponseBuilder) => void;
73
+ export interface V4InteractionWithResponse {
74
+ executeTest<T>(testFn: (mockServer: V4MockServer) => Promise<T>): Promise<T | undefined>;
75
+ }
76
+ export declare type V4PluginRequestBuilderFunc = (builder: V4RequestWithPluginBuilder) => void;
77
+ export declare type V4PluginResponseBuilderFunc = (builder: V4ResponseWithPluginBuilder) => void;
78
+ export interface PluginConfig {
79
+ plugin: string;
80
+ version: string;
81
+ }
82
+ export interface V4InteractionWithPlugin {
83
+ usingPlugin(config: PluginConfig): V4InteractionWithPlugin;
84
+ withRequest(method: string, path: Path, builder?: V4PluginRequestBuilderFunc): V4InteractionWithPluginRequest;
85
+ }
86
+ export interface V4InteractionWithPluginRequest {
87
+ willRespondWith(status: number, builder?: V4PluginResponseBuilderFunc): V4InteractionWithPluginResponse;
88
+ }
89
+ export interface V4RequestWithPluginBuilder {
90
+ query(query: TemplateQuery): V4RequestWithPluginBuilder;
91
+ headers(headers: TemplateHeaders): V4RequestWithPluginBuilder;
92
+ jsonBody(body: AnyTemplate): V4RequestWithPluginBuilder;
93
+ binaryFile(contentType: string, file: string): V4RequestWithPluginBuilder;
94
+ multipartBody(contentType: string, filename: string, mimePartName: string): V4RequestWithPluginBuilder;
95
+ body(contentType: string, body: Buffer): V4RequestWithPluginBuilder;
96
+ pluginContents(contentType: string, contents: string): V4RequestWithPluginBuilder;
97
+ }
98
+ export interface V4ResponseWithPluginBuilder {
99
+ headers(headers: TemplateHeaders): V4ResponseBuilder;
100
+ jsonBody(body: AnyTemplate): V4ResponseBuilder;
101
+ binaryFile(contentType: string, file: string): V4ResponseBuilder;
102
+ multipartBody(contentType: string, filename: string, mimePartName: string): V4ResponseBuilder;
103
+ body(contentType: string, body: Buffer): V4ResponseBuilder;
104
+ pluginContents(contentType: string, contents: string): V4ResponseBuilder;
105
+ }
106
+ export interface V4InteractionWithPluginResponse {
107
+ executeTest<T>(testFn: (mockServer: V4MockServer) => Promise<T>): Promise<T | undefined>;
108
+ }
109
+ export declare type TestFunction<T> = (mockServer: V4MockServer) => Promise<T>;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/v4/http/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import { PactV4Options, V4UnconfiguredInteraction } from './http/types';
2
+ import { V4ConsumerPact } from './types';
3
+ import { V4UnconfiguredSynchronousMessage } from './message/types';
4
+ export declare class PactV4 implements V4ConsumerPact {
5
+ private opts;
6
+ private pact;
7
+ constructor(opts: PactV4Options);
8
+ addInteraction(): V4UnconfiguredInteraction;
9
+ addSynchronousInteraction(description: string): V4UnconfiguredSynchronousMessage;
10
+ }
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PactV4 = void 0;
4
+ var pact_core_1 = require("@pact-foundation/pact-core");
5
+ var http_1 = require("./http");
6
+ var package_json_1 = require("../../package.json");
7
+ var message_1 = require("./message");
8
+ if (!process.env.ENABLE_FEATURE_V4) {
9
+ throw Error("The v4 package is currently in beta and requires the 'ENABLE_FEATURE_V4' environment variable to be set");
10
+ }
11
+ var PactV4 = /** @class */ (function () {
12
+ function PactV4(opts) {
13
+ this.opts = opts;
14
+ this.pact = (0, pact_core_1.makeConsumerPact)(opts.consumer, opts.provider, opts.spec, opts.logLevel);
15
+ this.pact.addMetadata('pact-js', 'version', package_json_1.version);
16
+ }
17
+ PactV4.prototype.addInteraction = function () {
18
+ return new http_1.UnconfiguredInteraction(this.pact, this.pact.newInteraction(''), this.opts);
19
+ };
20
+ PactV4.prototype.addSynchronousInteraction = function (description) {
21
+ return new message_1.UnconfiguredSynchronousMessage(this.pact, this.pact.newSynchronousMessage(description), this.opts);
22
+ };
23
+ return PactV4;
24
+ }());
25
+ exports.PactV4 = PactV4;
26
+ //# sourceMappingURL=index.js.map