@pact-foundation/pact 7.3.0 → 8.0.2
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 +44 -0
- package/CONTRIBUTING.md +22 -9
- package/LICENSE +1 -2
- package/README.md +253 -157
- package/common/logger.js +10 -5
- package/common/logger.js.map +1 -1
- package/common/metadata.js.map +1 -1
- package/common/net.js +3 -2
- package/common/net.js.map +1 -1
- package/common/net.spec.d.ts +1 -0
- package/common/net.spec.js +47 -0
- package/common/net.spec.js.map +1 -0
- package/common/request.js +1 -2
- package/common/request.js.map +1 -1
- package/common/request.spec.d.ts +1 -0
- package/common/request.spec.js +71 -0
- package/common/request.spec.js.map +1 -0
- package/common/utils.js +1 -2
- package/common/utils.js.map +1 -1
- package/dsl/apolloGraphql.d.ts +1 -1
- package/dsl/apolloGraphql.js +6 -3
- package/dsl/apolloGraphql.js.map +1 -1
- package/dsl/apolloGraphql.spec.d.ts +1 -0
- package/dsl/apolloGraphql.spec.js +47 -0
- package/dsl/apolloGraphql.spec.js.map +1 -0
- package/dsl/graphql.js +19 -9
- package/dsl/graphql.js.map +1 -1
- package/dsl/graphql.spec.d.ts +1 -0
- package/dsl/graphql.spec.js +141 -0
- package/dsl/graphql.spec.js.map +1 -0
- package/dsl/interaction.js +9 -7
- package/dsl/interaction.js.map +1 -1
- package/dsl/interaction.spec.d.ts +1 -0
- package/dsl/interaction.spec.js +172 -0
- package/dsl/interaction.spec.js.map +1 -0
- package/dsl/matchers.d.ts +25 -25
- package/dsl/matchers.js +57 -55
- package/dsl/matchers.js.map +1 -1
- package/dsl/matchers.spec.d.ts +1 -0
- package/dsl/matchers.spec.js +537 -0
- package/dsl/matchers.spec.js.map +1 -0
- package/dsl/message.d.ts +29 -3
- package/dsl/mockService.d.ts +6 -0
- package/dsl/mockService.js +10 -4
- package/dsl/mockService.js.map +1 -1
- package/dsl/mockService.spec.d.ts +1 -0
- package/dsl/mockService.spec.js +126 -0
- package/dsl/mockService.spec.js.map +1 -0
- package/dsl/verifier.d.ts +48 -2
- package/dsl/verifier.js +142 -3
- package/dsl/verifier.js.map +1 -1
- package/dsl/verifier.spec.d.ts +1 -0
- package/dsl/verifier.spec.js +299 -0
- package/dsl/verifier.spec.js.map +1 -0
- package/errors/configurationError.d.ts +2 -0
- package/errors/configurationError.js +24 -0
- package/errors/configurationError.js.map +1 -0
- package/errors/graphQLQueryError.d.ts +2 -0
- package/errors/graphQLQueryError.js +24 -0
- package/errors/graphQLQueryError.js.map +1 -0
- package/errors/matcherError.d.ts +2 -0
- package/errors/matcherError.js +24 -0
- package/errors/matcherError.js.map +1 -0
- package/errors/verificationError.d.ts +2 -0
- package/errors/verificationError.js +24 -0
- package/errors/verificationError.js.map +1 -0
- package/httpPact.d.ts +69 -0
- package/httpPact.js +206 -0
- package/httpPact.js.map +1 -0
- package/httpPact.spec.d.ts +1 -0
- package/httpPact.spec.js +337 -0
- package/httpPact.spec.js.map +1 -0
- package/messageConsumerPact.d.ts +3 -3
- package/messageConsumerPact.js +5 -4
- package/messageConsumerPact.js.map +1 -1
- package/messageConsumerPact.spec.d.ts +1 -0
- package/messageConsumerPact.spec.js +161 -0
- package/messageConsumerPact.spec.js.map +1 -0
- package/messageProviderPact.d.ts +0 -1
- package/messageProviderPact.js +11 -11
- package/messageProviderPact.js.map +1 -1
- package/messageProviderPact.spec.d.ts +1 -0
- package/messageProviderPact.spec.js +146 -0
- package/messageProviderPact.spec.js.map +1 -0
- package/package.json +24 -26
- package/pact-web.d.ts +2 -2
- package/pact-web.js +20 -10
- package/pact-web.js.map +1 -1
- package/pact-web.spec.d.ts +1 -0
- package/pact-web.spec.js +205 -0
- package/pact-web.spec.js.map +1 -0
- package/pact.d.ts +28 -65
- package/pact.integration.spec.d.ts +0 -0
- package/pact.integration.spec.js +292 -0
- package/pact.integration.spec.js.map +1 -0
- package/pact.js +21 -189
- package/pact.js.map +1 -1
package/dsl/mockService.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mockService.js","sourceRoot":"","sources":["../../src/dsl/mockService.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"mockService.js","sourceRoot":"","sources":["../../src/dsl/mockService.ts"],"names":[],"mappings":";;AAAA;;;;;GAKG;AACH,6CAAuD;AA0BvD;IAKE;;;;;;;OAOG;IACH;IACE,yEAAyE;IACjE,QAAiB,EACjB,QAAiB;IACzB,QAAQ;IACA,IAAW,EACX,IAAkB,EAClB,GAAW,EACX,iBAAkD;QAHlD,qBAAA,EAAA,WAAW;QACX,qBAAA,EAAA,kBAAkB;QAClB,oBAAA,EAAA,WAAW;QACX,kCAAA,EAAA,+BAAkD;QANlD,aAAQ,GAAR,QAAQ,CAAS;QACjB,aAAQ,GAAR,QAAQ,CAAS;QAEjB,SAAI,GAAJ,IAAI,CAAO;QACX,SAAI,GAAJ,IAAI,CAAc;QAClB,QAAG,GAAH,GAAG,CAAQ;QACX,sBAAiB,GAAjB,iBAAiB,CAAiC;QAE1D,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,EAAE,CAAA;QAC5B,IAAI,CAAC,OAAO,GAAG,CAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,YAAM,IAAI,CAAC,IAAI,SAAI,IAAI,CAAC,IAAM,CAAA;QAC3E,IAAI,CAAC,WAAW,GAAG;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS;YAC7D,mBAAmB,EAAE,IAAI,CAAC,iBAAiB;YAC3C,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS;SAC9D,CAAA;IACH,CAAC;IAED;;;;OAIG;IACI,oCAAc,GAArB,UAAsB,WAAwB;QAC5C,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CACtB,oBAAU,CAAC,IAAI,EACZ,IAAI,CAAC,OAAO,kBAAe,EAC9B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CACnC,CAAA;IACH,CAAC;IAED;;;OAGG;IACI,wCAAkB,GAAzB;QACE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,oBAAU,CAAC,MAAM,EAAK,IAAI,CAAC,OAAO,kBAAe,CAAC,CAAA;IAC7E,CAAC;IAED;;;OAGG;IACI,4BAAM,GAAb;QACE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CACtB,oBAAU,CAAC,GAAG,EACX,IAAI,CAAC,OAAO,+BAA4B,CAC5C,CAAA;IACH,CAAC;IAED;;;OAGG;IACI,+BAAS,GAAhB;QACE,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CACtB,oBAAU,CAAC,IAAI,EACZ,IAAI,CAAC,OAAO,UAAO,EACtB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CACjC,CAAA;IACH,CAAC;IACH,kBAAC;AAAD,CAAC,AA3ED,IA2EC;AA3EY,kCAAW"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/* tslint:disable:no-unused-expression */
|
|
4
|
+
var chai = require("chai");
|
|
5
|
+
var chaiAsPromised = require("chai-as-promised");
|
|
6
|
+
var nock = require("nock");
|
|
7
|
+
var request_1 = require("../common/request");
|
|
8
|
+
var interaction_1 = require("./interaction");
|
|
9
|
+
var mockService_1 = require("./mockService");
|
|
10
|
+
chai.use(chaiAsPromised);
|
|
11
|
+
var expect = chai.expect;
|
|
12
|
+
describe("MockService", function () {
|
|
13
|
+
after(function () {
|
|
14
|
+
nock.restore();
|
|
15
|
+
});
|
|
16
|
+
describe("#constructor", function () {
|
|
17
|
+
it("creates a MockService when all mandatory parameters are provided", function () {
|
|
18
|
+
var mock = new mockService_1.MockService("consumer", "provider", 1234);
|
|
19
|
+
expect(mock.baseUrl).to.eql("http://127.0.0.1:1234");
|
|
20
|
+
});
|
|
21
|
+
it("creates a MockService when all mandatory parameters are provided", function () {
|
|
22
|
+
var mock = new mockService_1.MockService("consumer", "provider", 4443, "127.0.0.2", true);
|
|
23
|
+
expect(mock.baseUrl).to.eql("https://127.0.0.2:4443");
|
|
24
|
+
});
|
|
25
|
+
it("creates a MockService when port is not provided", function () {
|
|
26
|
+
var mock = new mockService_1.MockService("consumer", "provider");
|
|
27
|
+
expect(mock).to.not.be.undefined;
|
|
28
|
+
expect(mock.baseUrl).to.eql("http://127.0.0.1:1234");
|
|
29
|
+
});
|
|
30
|
+
it("does not create a MockService when consumer is not provided", function () {
|
|
31
|
+
expect(function () {
|
|
32
|
+
new mockService_1.MockService("", "provider");
|
|
33
|
+
}).not.to.throw(Error);
|
|
34
|
+
});
|
|
35
|
+
it("does not create a MockService when provider is not provided", function () {
|
|
36
|
+
expect(function () {
|
|
37
|
+
new mockService_1.MockService("consumer", "");
|
|
38
|
+
}).not.to.throw(Error);
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
describe("#addInteraction", function () {
|
|
42
|
+
var mock = new mockService_1.MockService("consumer", "provider", 1234);
|
|
43
|
+
var interaction = new interaction_1.Interaction();
|
|
44
|
+
interaction
|
|
45
|
+
.uponReceiving("duh")
|
|
46
|
+
.withRequest({ method: request_1.HTTPMethod.GET, path: "/search" })
|
|
47
|
+
.willRespondWith({ status: 200 });
|
|
48
|
+
it("when Interaction added successfully", function () {
|
|
49
|
+
nock(mock.baseUrl)
|
|
50
|
+
.post(/interactions$/)
|
|
51
|
+
.reply(200);
|
|
52
|
+
return expect(mock.addInteraction(interaction)).to.eventually;
|
|
53
|
+
});
|
|
54
|
+
it("when Interaction fails to be added", function () {
|
|
55
|
+
nock(mock.baseUrl)
|
|
56
|
+
.post(/interactions$/)
|
|
57
|
+
.reply(500);
|
|
58
|
+
return expect(mock.addInteraction(interaction)).to.eventually.be.rejected;
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
describe("#removeInteractions", function () {
|
|
62
|
+
var mock = new mockService_1.MockService("consumer", "provider", 1234);
|
|
63
|
+
it("when interactions are removed successfully", function () {
|
|
64
|
+
nock(mock.baseUrl)
|
|
65
|
+
.delete(/interactions$/)
|
|
66
|
+
.reply(200);
|
|
67
|
+
return expect(mock.removeInteractions()).to.eventually.be.fulfilled;
|
|
68
|
+
});
|
|
69
|
+
it("when interactions fail to be removed", function () {
|
|
70
|
+
nock(mock.baseUrl)
|
|
71
|
+
.delete(/interactions$/)
|
|
72
|
+
.reply(500);
|
|
73
|
+
return expect(mock.removeInteractions()).to.eventually.be.rejected;
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
describe("#verify", function () {
|
|
77
|
+
var mock = new mockService_1.MockService("consumer", "provider", 1234);
|
|
78
|
+
it("when verification is successful", function () {
|
|
79
|
+
nock(mock.baseUrl)
|
|
80
|
+
.get(/interactions\/verification$/)
|
|
81
|
+
.reply(200);
|
|
82
|
+
return expect(mock.verify()).to.eventually.be.fulfilled;
|
|
83
|
+
});
|
|
84
|
+
it("when verification fails", function () {
|
|
85
|
+
nock(mock.baseUrl)
|
|
86
|
+
.get(/interactions\/verification$/)
|
|
87
|
+
.reply(500);
|
|
88
|
+
return expect(mock.verify()).to.eventually.be.rejected;
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
describe("#writePact", function () {
|
|
92
|
+
describe("when consumer and provider details provided", function () {
|
|
93
|
+
var mock = new mockService_1.MockService("aconsumer", "aprovider", 1234);
|
|
94
|
+
describe("and writing is successful", function () {
|
|
95
|
+
it("writes the consumer and provider details into the pact", function () {
|
|
96
|
+
nock(mock.baseUrl)
|
|
97
|
+
.post(/pact$/, {
|
|
98
|
+
consumer: { name: "aconsumer" },
|
|
99
|
+
pactfile_write_mode: "overwrite",
|
|
100
|
+
provider: { name: "aprovider" },
|
|
101
|
+
})
|
|
102
|
+
.reply(200);
|
|
103
|
+
return expect(mock.writePact()).to.eventually.be.fulfilled;
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
describe("and writing fails", function () {
|
|
107
|
+
it("returns a rejected promise", function () {
|
|
108
|
+
nock(mock.baseUrl)
|
|
109
|
+
.post(/pact$/, {})
|
|
110
|
+
.reply(500);
|
|
111
|
+
return expect(mock.writePact()).to.eventually.be.rejected;
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
describe("when consumer and provider details are not provided", function () {
|
|
116
|
+
var mock = new mockService_1.MockService(undefined, undefined, 1234);
|
|
117
|
+
it("does not write the consumer and provider details into the pact", function () {
|
|
118
|
+
nock(mock.baseUrl)
|
|
119
|
+
.post(/pact$/)
|
|
120
|
+
.reply(200);
|
|
121
|
+
return expect(mock.writePact()).to.eventually.be.fulfilled;
|
|
122
|
+
});
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
//# sourceMappingURL=mockService.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mockService.spec.js","sourceRoot":"","sources":["../../src/dsl/mockService.spec.ts"],"names":[],"mappings":";;AAAA,yCAAyC;AACzC,2BAA4B;AAC5B,iDAAkD;AAClD,2BAA4B;AAC5B,6CAA8C;AAC9C,6CAA2C;AAC3C,6CAA2C;AAE3C,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;AACxB,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;AAE1B,QAAQ,CAAC,aAAa,EAAE;IACtB,KAAK,CAAC;QACJ,IAAI,CAAC,OAAO,EAAE,CAAA;IAChB,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,cAAc,EAAE;QACvB,EAAE,CAAC,kEAAkE,EAAE;YACrE,IAAM,IAAI,GAAG,IAAI,yBAAW,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;YAC1D,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;QACtD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,kEAAkE,EAAE;YACrE,IAAM,IAAI,GAAG,IAAI,yBAAW,CAC1B,UAAU,EACV,UAAU,EACV,IAAI,EACJ,WAAW,EACX,IAAI,CACL,CAAA;YACD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAA;QACvD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,iDAAiD,EAAE;YACpD,IAAM,IAAI,GAAG,IAAI,yBAAW,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;YACpD,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAA;YAChC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAA;QACtD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,6DAA6D,EAAE;YAChE,MAAM,CAAC;gBACL,IAAI,yBAAW,CAAC,EAAE,EAAE,UAAU,CAAC,CAAA;YACjC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACxB,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,6DAA6D,EAAE;YAChE,MAAM,CAAC;gBACL,IAAI,yBAAW,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;YACjC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;QACxB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,iBAAiB,EAAE;QAC1B,IAAM,IAAI,GAAG,IAAI,yBAAW,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;QAE1D,IAAM,WAAW,GAAG,IAAI,yBAAW,EAAE,CAAA;QACrC,WAAW;aACR,aAAa,CAAC,KAAK,CAAC;aACpB,WAAW,CAAC,EAAE,MAAM,EAAE,oBAAU,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;aACxD,eAAe,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAA;QAEnC,EAAE,CAAC,qCAAqC,EAAE;YACxC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,eAAe,CAAC;iBACrB,KAAK,CAAC,GAAG,CAAC,CAAA;YAEb,OAAO,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAA;QAC/D,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,oCAAoC,EAAE;YACvC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,eAAe,CAAC;iBACrB,KAAK,CAAC,GAAG,CAAC,CAAA;YACb,OAAO,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAA;QAC3E,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,qBAAqB,EAAE;QAC9B,IAAM,IAAI,GAAG,IAAI,yBAAW,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;QAE1D,EAAE,CAAC,4CAA4C,EAAE;YAC/C,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;iBACf,MAAM,CAAC,eAAe,CAAC;iBACvB,KAAK,CAAC,GAAG,CAAC,CAAA;YAEb,OAAO,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAA;QACrE,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,sCAAsC,EAAE;YACzC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;iBACf,MAAM,CAAC,eAAe,CAAC;iBACvB,KAAK,CAAC,GAAG,CAAC,CAAA;YAEb,OAAO,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAA;QACpE,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,SAAS,EAAE;QAClB,IAAM,IAAI,GAAG,IAAI,yBAAW,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,CAAC,CAAA;QAE1D,EAAE,CAAC,iCAAiC,EAAE;YACpC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;iBACf,GAAG,CAAC,6BAA6B,CAAC;iBAClC,KAAK,CAAC,GAAG,CAAC,CAAA;YAEb,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAA;QACzD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,yBAAyB,EAAE;YAC5B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;iBACf,GAAG,CAAC,6BAA6B,CAAC;iBAClC,KAAK,CAAC,GAAG,CAAC,CAAA;YAEb,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAA;QACxD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,YAAY,EAAE;QACrB,QAAQ,CAAC,6CAA6C,EAAE;YACtD,IAAM,IAAI,GAAG,IAAI,yBAAW,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,CAAA;YAE5D,QAAQ,CAAC,2BAA2B,EAAE;gBACpC,EAAE,CAAC,wDAAwD,EAAE;oBAC3D,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;yBACf,IAAI,CAAC,OAAO,EAAE;wBACb,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;wBAC/B,mBAAmB,EAAE,WAAW;wBAChC,QAAQ,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE;qBAChC,CAAC;yBACD,KAAK,CAAC,GAAG,CAAC,CAAA;oBAEb,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAA;gBAC5D,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;YAEF,QAAQ,CAAC,mBAAmB,EAAE;gBAC5B,EAAE,CAAC,4BAA4B,EAAE;oBAC/B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;yBACf,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;yBACjB,KAAK,CAAC,GAAG,CAAC,CAAA;oBAEb,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAA;gBAC3D,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,qDAAqD,EAAE;YAC9D,IAAM,IAAI,GAAG,IAAI,yBAAW,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CAAA;YACxD,EAAE,CAAC,gEAAgE,EAAE;gBACnE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;qBACf,IAAI,CAAC,OAAO,CAAC;qBACb,KAAK,CAAC,GAAG,CAAC,CAAA;gBAEb,OAAO,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,CAAA;YAC5D,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
package/dsl/verifier.d.ts
CHANGED
|
@@ -1,4 +1,50 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as express from "express";
|
|
2
|
+
import { LogLevel } from "./options";
|
|
3
|
+
export interface ProviderState {
|
|
4
|
+
states?: [string];
|
|
5
|
+
}
|
|
6
|
+
export interface StateHandler {
|
|
7
|
+
[name: string]: () => Promise<any>;
|
|
8
|
+
}
|
|
9
|
+
export interface VerifierOptions {
|
|
10
|
+
logLevel?: LogLevel;
|
|
11
|
+
requestFilter?: express.RequestHandler;
|
|
12
|
+
stateHandlers?: StateHandler;
|
|
13
|
+
providerBaseUrl: string;
|
|
14
|
+
provider?: string;
|
|
15
|
+
pactUrls?: string[];
|
|
16
|
+
pactBrokerBaseUrl?: string;
|
|
17
|
+
providerStatesSetupUrl?: string;
|
|
18
|
+
pactBrokerUsername?: string;
|
|
19
|
+
pactBrokerPassword?: string;
|
|
20
|
+
consumerVersionTag?: string;
|
|
21
|
+
customProviderHeaders?: string[];
|
|
22
|
+
publishVerificationResult?: boolean;
|
|
23
|
+
providerVersion?: string;
|
|
24
|
+
pactBrokerUrl?: string;
|
|
25
|
+
tags?: string[];
|
|
26
|
+
timeout?: number;
|
|
27
|
+
monkeypatch?: string;
|
|
28
|
+
format?: "json" | "RspecJunitFormatter";
|
|
29
|
+
out?: string;
|
|
30
|
+
}
|
|
2
31
|
export declare class Verifier {
|
|
3
|
-
|
|
32
|
+
private address;
|
|
33
|
+
private stateSetupPath;
|
|
34
|
+
private config;
|
|
35
|
+
private deprecatedFields;
|
|
36
|
+
constructor(config?: VerifierOptions);
|
|
37
|
+
/**
|
|
38
|
+
* Verify a HTTP Provider
|
|
39
|
+
*
|
|
40
|
+
* @param config
|
|
41
|
+
*/
|
|
42
|
+
verifyProvider(config?: VerifierOptions): Promise<any>;
|
|
43
|
+
private runProviderVerification;
|
|
44
|
+
private waitForServerReady;
|
|
45
|
+
private startProxy;
|
|
46
|
+
private createProxy;
|
|
47
|
+
private createProxyStateHandler;
|
|
48
|
+
private setupStates;
|
|
49
|
+
private setConfig;
|
|
4
50
|
}
|
package/dsl/verifier.js
CHANGED
|
@@ -1,4 +1,15 @@
|
|
|
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
|
+
};
|
|
2
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
14
|
/**
|
|
4
15
|
* Provider Verifier service
|
|
@@ -6,11 +17,139 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
17
|
*/
|
|
7
18
|
var pact_node_1 = require("@pact-foundation/pact-node");
|
|
8
19
|
var utils_1 = require("../common/utils");
|
|
20
|
+
var pact_node_2 = require("@pact-foundation/pact-node");
|
|
21
|
+
var lodash_1 = require("lodash");
|
|
22
|
+
var express = require("express");
|
|
23
|
+
var http = require("http");
|
|
24
|
+
var logger_1 = require("../common/logger");
|
|
25
|
+
var configurationError_1 = require("../errors/configurationError");
|
|
26
|
+
var HttpProxy = require("http-proxy");
|
|
27
|
+
var bodyParser = require("body-parser");
|
|
9
28
|
var Verifier = /** @class */ (function () {
|
|
10
|
-
function Verifier() {
|
|
29
|
+
function Verifier(config) {
|
|
30
|
+
this.address = "http://localhost";
|
|
31
|
+
this.stateSetupPath = "/_pactSetup";
|
|
32
|
+
this.deprecatedFields = ["providerStatesSetupUrl"];
|
|
33
|
+
if (config) {
|
|
34
|
+
this.setConfig(config);
|
|
35
|
+
}
|
|
11
36
|
}
|
|
12
|
-
|
|
13
|
-
|
|
37
|
+
/**
|
|
38
|
+
* Verify a HTTP Provider
|
|
39
|
+
*
|
|
40
|
+
* @param config
|
|
41
|
+
*/
|
|
42
|
+
Verifier.prototype.verifyProvider = function (config) {
|
|
43
|
+
logger_1.default.info("Verifying provider");
|
|
44
|
+
// Backwards compatibility
|
|
45
|
+
if (config) {
|
|
46
|
+
logger_1.default.warn("Passing options to verifyProvider() wil be deprecated in future versions, please provide to Verifier constructor instead");
|
|
47
|
+
this.setConfig(config);
|
|
48
|
+
}
|
|
49
|
+
if (lodash_1.isEmpty(this.config)) {
|
|
50
|
+
return Promise.reject(new configurationError_1.default("No configuration provided to verifier"));
|
|
51
|
+
}
|
|
52
|
+
// Start the verification CLI proxy server
|
|
53
|
+
var app = this.createProxy();
|
|
54
|
+
var server = this.startProxy(app);
|
|
55
|
+
// Run the verification once the proxy server is available
|
|
56
|
+
return this.waitForServerReady(server)
|
|
57
|
+
.then(this.runProviderVerification())
|
|
58
|
+
.then(function (result) {
|
|
59
|
+
server.close();
|
|
60
|
+
return result;
|
|
61
|
+
})
|
|
62
|
+
.catch(function (e) {
|
|
63
|
+
server.close();
|
|
64
|
+
throw e;
|
|
65
|
+
});
|
|
66
|
+
};
|
|
67
|
+
// Run the Verification CLI process
|
|
68
|
+
Verifier.prototype.runProviderVerification = function () {
|
|
69
|
+
var _this = this;
|
|
70
|
+
return function (server) {
|
|
71
|
+
var opts = __assign({}, lodash_1.omit(_this.config, "handlers"), { providerBaseUrl: _this.address + ":" + server.address().port }, {
|
|
72
|
+
providerStatesSetupUrl: _this.address + ":" + server.address().port + _this.stateSetupPath,
|
|
73
|
+
});
|
|
74
|
+
return utils_1.qToPromise(pact_node_1.default.verifyPacts(opts));
|
|
75
|
+
};
|
|
76
|
+
};
|
|
77
|
+
// Listens for the server start event
|
|
78
|
+
// Converts event Emitter to a Promise
|
|
79
|
+
Verifier.prototype.waitForServerReady = function (server) {
|
|
80
|
+
return new Promise(function (resolve, reject) {
|
|
81
|
+
server.on("listening", function () { return resolve(server); });
|
|
82
|
+
server.on("error", function () {
|
|
83
|
+
return reject(new Error("Unable to start verification proxy server"));
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
// Get the Proxy we'll pass to the CLI for verification
|
|
88
|
+
Verifier.prototype.startProxy = function (app) {
|
|
89
|
+
return http.createServer(app).listen();
|
|
90
|
+
};
|
|
91
|
+
// Get the Express app that will run on the HTTP Proxy
|
|
92
|
+
Verifier.prototype.createProxy = function () {
|
|
93
|
+
var _this = this;
|
|
94
|
+
var app = express();
|
|
95
|
+
var proxy = new HttpProxy();
|
|
96
|
+
app.use(this.stateSetupPath, bodyParser.json());
|
|
97
|
+
app.use(this.stateSetupPath, bodyParser.urlencoded({ extended: true }));
|
|
98
|
+
// Allow for request filtering
|
|
99
|
+
if (this.config.requestFilter !== undefined) {
|
|
100
|
+
app.use(this.config.requestFilter);
|
|
101
|
+
}
|
|
102
|
+
// Setup provider state handler
|
|
103
|
+
app.post(this.stateSetupPath, this.createProxyStateHandler());
|
|
104
|
+
// Proxy server will respond to Verifier process
|
|
105
|
+
app.all("/*", function (req, res) {
|
|
106
|
+
logger_1.default.debug("Proxing", req.path);
|
|
107
|
+
proxy.web(req, res, {
|
|
108
|
+
target: _this.config.providerBaseUrl,
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
return app;
|
|
112
|
+
};
|
|
113
|
+
Verifier.prototype.createProxyStateHandler = function () {
|
|
114
|
+
var _this = this;
|
|
115
|
+
return function (req, res) {
|
|
116
|
+
var message = req.body;
|
|
117
|
+
return _this.setupStates(message)
|
|
118
|
+
.then(function () { return res.sendStatus(200); })
|
|
119
|
+
.catch(function (e) { return res.status(500).send(e); });
|
|
120
|
+
};
|
|
121
|
+
};
|
|
122
|
+
// Lookup the handler based on the description, or get the default handler
|
|
123
|
+
Verifier.prototype.setupStates = function (descriptor) {
|
|
124
|
+
var _this = this;
|
|
125
|
+
var promises = new Array();
|
|
126
|
+
if (descriptor.states) {
|
|
127
|
+
descriptor.states.forEach(function (state) {
|
|
128
|
+
var handler = _this.config.stateHandlers
|
|
129
|
+
? _this.config.stateHandlers[state]
|
|
130
|
+
: null;
|
|
131
|
+
if (handler) {
|
|
132
|
+
promises.push(handler());
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
logger_1.default.warn("No state handler found for \"" + state + "\", ignorning");
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
return Promise.all(promises);
|
|
140
|
+
};
|
|
141
|
+
Verifier.prototype.setConfig = function (config) {
|
|
142
|
+
var _this = this;
|
|
143
|
+
this.config = config;
|
|
144
|
+
this.deprecatedFields.forEach(function (f) {
|
|
145
|
+
if (_this.config[f]) {
|
|
146
|
+
logger_1.default.warn(f + " is deprecated, and will be removed in future versions");
|
|
147
|
+
}
|
|
148
|
+
});
|
|
149
|
+
if (this.config.logLevel && !lodash_1.isEmpty(this.config.logLevel)) {
|
|
150
|
+
pact_node_2.default.logLevel(this.config.logLevel);
|
|
151
|
+
logger_1.default.level(this.config.logLevel);
|
|
152
|
+
}
|
|
14
153
|
};
|
|
15
154
|
return Verifier;
|
|
16
155
|
}());
|
package/dsl/verifier.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verifier.js","sourceRoot":"","sources":["../../src/dsl/verifier.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verifier.js","sourceRoot":"","sources":["../../src/dsl/verifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|