@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.
Files changed (97) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/CONTRIBUTING.md +22 -9
  3. package/LICENSE +1 -2
  4. package/README.md +253 -157
  5. package/common/logger.js +10 -5
  6. package/common/logger.js.map +1 -1
  7. package/common/metadata.js.map +1 -1
  8. package/common/net.js +3 -2
  9. package/common/net.js.map +1 -1
  10. package/common/net.spec.d.ts +1 -0
  11. package/common/net.spec.js +47 -0
  12. package/common/net.spec.js.map +1 -0
  13. package/common/request.js +1 -2
  14. package/common/request.js.map +1 -1
  15. package/common/request.spec.d.ts +1 -0
  16. package/common/request.spec.js +71 -0
  17. package/common/request.spec.js.map +1 -0
  18. package/common/utils.js +1 -2
  19. package/common/utils.js.map +1 -1
  20. package/dsl/apolloGraphql.d.ts +1 -1
  21. package/dsl/apolloGraphql.js +6 -3
  22. package/dsl/apolloGraphql.js.map +1 -1
  23. package/dsl/apolloGraphql.spec.d.ts +1 -0
  24. package/dsl/apolloGraphql.spec.js +47 -0
  25. package/dsl/apolloGraphql.spec.js.map +1 -0
  26. package/dsl/graphql.js +19 -9
  27. package/dsl/graphql.js.map +1 -1
  28. package/dsl/graphql.spec.d.ts +1 -0
  29. package/dsl/graphql.spec.js +141 -0
  30. package/dsl/graphql.spec.js.map +1 -0
  31. package/dsl/interaction.js +9 -7
  32. package/dsl/interaction.js.map +1 -1
  33. package/dsl/interaction.spec.d.ts +1 -0
  34. package/dsl/interaction.spec.js +172 -0
  35. package/dsl/interaction.spec.js.map +1 -0
  36. package/dsl/matchers.d.ts +25 -25
  37. package/dsl/matchers.js +57 -55
  38. package/dsl/matchers.js.map +1 -1
  39. package/dsl/matchers.spec.d.ts +1 -0
  40. package/dsl/matchers.spec.js +537 -0
  41. package/dsl/matchers.spec.js.map +1 -0
  42. package/dsl/message.d.ts +29 -3
  43. package/dsl/mockService.d.ts +6 -0
  44. package/dsl/mockService.js +10 -4
  45. package/dsl/mockService.js.map +1 -1
  46. package/dsl/mockService.spec.d.ts +1 -0
  47. package/dsl/mockService.spec.js +126 -0
  48. package/dsl/mockService.spec.js.map +1 -0
  49. package/dsl/verifier.d.ts +48 -2
  50. package/dsl/verifier.js +142 -3
  51. package/dsl/verifier.js.map +1 -1
  52. package/dsl/verifier.spec.d.ts +1 -0
  53. package/dsl/verifier.spec.js +299 -0
  54. package/dsl/verifier.spec.js.map +1 -0
  55. package/errors/configurationError.d.ts +2 -0
  56. package/errors/configurationError.js +24 -0
  57. package/errors/configurationError.js.map +1 -0
  58. package/errors/graphQLQueryError.d.ts +2 -0
  59. package/errors/graphQLQueryError.js +24 -0
  60. package/errors/graphQLQueryError.js.map +1 -0
  61. package/errors/matcherError.d.ts +2 -0
  62. package/errors/matcherError.js +24 -0
  63. package/errors/matcherError.js.map +1 -0
  64. package/errors/verificationError.d.ts +2 -0
  65. package/errors/verificationError.js +24 -0
  66. package/errors/verificationError.js.map +1 -0
  67. package/httpPact.d.ts +69 -0
  68. package/httpPact.js +206 -0
  69. package/httpPact.js.map +1 -0
  70. package/httpPact.spec.d.ts +1 -0
  71. package/httpPact.spec.js +337 -0
  72. package/httpPact.spec.js.map +1 -0
  73. package/messageConsumerPact.d.ts +3 -3
  74. package/messageConsumerPact.js +5 -4
  75. package/messageConsumerPact.js.map +1 -1
  76. package/messageConsumerPact.spec.d.ts +1 -0
  77. package/messageConsumerPact.spec.js +161 -0
  78. package/messageConsumerPact.spec.js.map +1 -0
  79. package/messageProviderPact.d.ts +0 -1
  80. package/messageProviderPact.js +11 -11
  81. package/messageProviderPact.js.map +1 -1
  82. package/messageProviderPact.spec.d.ts +1 -0
  83. package/messageProviderPact.spec.js +146 -0
  84. package/messageProviderPact.spec.js.map +1 -0
  85. package/package.json +24 -26
  86. package/pact-web.d.ts +2 -2
  87. package/pact-web.js +20 -10
  88. package/pact-web.js.map +1 -1
  89. package/pact-web.spec.d.ts +1 -0
  90. package/pact-web.spec.js +205 -0
  91. package/pact-web.spec.js.map +1 -0
  92. package/pact.d.ts +28 -65
  93. package/pact.integration.spec.d.ts +0 -0
  94. package/pact.integration.spec.js +292 -0
  95. package/pact.integration.spec.js.map +1 -0
  96. package/pact.js +21 -189
  97. package/pact.js.map +1 -1
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /* tslint:disable:no-unused-expression object-literal-sort-keys */
4
+ var chai = require("chai");
5
+ var chaiAsPromised = require("chai-as-promised");
6
+ var sinon = require("sinon");
7
+ var sinonChai = require("sinon-chai");
8
+ var request_1 = require("./common/request");
9
+ var interaction_1 = require("./dsl/interaction");
10
+ var mockService_1 = require("./dsl/mockService");
11
+ var pact_web_1 = require("./pact-web");
12
+ var expect = chai.expect;
13
+ chai.use(sinonChai);
14
+ chai.use(chaiAsPromised);
15
+ describe("PactWeb", function () {
16
+ var pact;
17
+ var fullOpts = {
18
+ consumer: "A",
19
+ cors: false,
20
+ host: "127.0.0.1",
21
+ logLevel: "info",
22
+ pactfileWriteMode: "overwrite",
23
+ port: 1234,
24
+ provider: "B",
25
+ spec: 2,
26
+ ssl: false,
27
+ };
28
+ beforeEach(function () {
29
+ pact = Object.create(pact_web_1.PactWeb.prototype);
30
+ pact.opts = fullOpts;
31
+ });
32
+ afterEach(function () {
33
+ sinon.restore();
34
+ });
35
+ describe("#constructor", function () {
36
+ it("throws Error when consumer not provided", function () {
37
+ expect(function () {
38
+ new pact_web_1.PactWeb({ consumer: "", provider: "provider" });
39
+ }).not.to.throw(Error, "You must specify a Consumer for this pact.");
40
+ });
41
+ it("throws Error when provider not provided", function () {
42
+ expect(function () {
43
+ new pact_web_1.PactWeb({ consumer: "someconsumer", provider: "" });
44
+ }).not.to.throw(Error, "You must specify a Provider for this pact.");
45
+ });
46
+ });
47
+ describe("#addInteraction", function () {
48
+ var interaction = {
49
+ state: "i have a list of projects",
50
+ uponReceiving: "a request for projects",
51
+ withRequest: {
52
+ headers: { Accept: "application/json" },
53
+ method: request_1.HTTPMethod.GET,
54
+ path: "/projects",
55
+ },
56
+ willRespondWith: {
57
+ body: {},
58
+ headers: { "Content-Type": "application/json" },
59
+ status: 200,
60
+ },
61
+ };
62
+ describe("when given a provider state", function () {
63
+ it("creates interaction with state", function (done) {
64
+ pact.mockService = {
65
+ addInteraction: function (int) { return Promise.resolve(int.state); },
66
+ };
67
+ expect(pact.addInteraction(interaction))
68
+ .to.eventually.have.property("providerState")
69
+ .notify(done);
70
+ });
71
+ });
72
+ describe("when not given a provider state", function () {
73
+ it("creates interaction with state", function (done) {
74
+ pact.mockService = {
75
+ addInteraction: function (int) { return Promise.resolve(int.state); },
76
+ };
77
+ var interactionWithNoState = interaction;
78
+ interactionWithNoState.state = undefined;
79
+ expect(pact.addInteraction(interaction))
80
+ .to.eventually.not.have.property("providerState")
81
+ .notify(done);
82
+ });
83
+ describe("when given an Interaction as a builder", function () {
84
+ it("creates interaction", function () {
85
+ var interaction2 = new interaction_1.Interaction()
86
+ .given("i have a list of projects")
87
+ .uponReceiving("a request for projects")
88
+ .withRequest({
89
+ method: request_1.HTTPMethod.GET,
90
+ path: "/projects",
91
+ headers: { Accept: "application/json" },
92
+ })
93
+ .willRespondWith({
94
+ status: 200,
95
+ headers: { "Content-Type": "application/json" },
96
+ body: {},
97
+ });
98
+ pact.mockService = {
99
+ addInteraction: function (int) {
100
+ return Promise.resolve(int);
101
+ },
102
+ };
103
+ return expect(pact.addInteraction(interaction2)).to.eventually.have.property("given");
104
+ });
105
+ });
106
+ });
107
+ });
108
+ describe("#verify", function () {
109
+ describe("when pact verification is successful", function () {
110
+ it("returns a successful promise and remove interactions", function () {
111
+ pact.mockService = {
112
+ verify: function () { return Promise.resolve("verified!"); },
113
+ removeInteractions: function () { return Promise.resolve("removeInteractions"); },
114
+ };
115
+ var verifyPromise = pact.verify();
116
+ return Promise.all([
117
+ expect(verifyPromise).to.eventually.eq("removeInteractions"),
118
+ expect(verifyPromise).to.eventually.be.fulfilled,
119
+ ]);
120
+ });
121
+ });
122
+ describe("when pact verification is unsuccessful", function () {
123
+ it("throws an error", function () {
124
+ var removeInteractionsStub = sinon
125
+ .stub(mockService_1.MockService.prototype, "removeInteractions")
126
+ .resolves("removeInteractions");
127
+ pact.mockService = {
128
+ verify: function () { return Promise.reject("not verified!"); },
129
+ removeInteractions: function () { return removeInteractionsStub; },
130
+ };
131
+ var verifyPromise = pact.verify();
132
+ return Promise.all([
133
+ expect(verifyPromise).to.eventually.be.rejectedWith(Error),
134
+ verifyPromise.catch(function (e) {
135
+ expect(removeInteractionsStub).to.callCount(0);
136
+ }),
137
+ ]);
138
+ });
139
+ });
140
+ describe("when pact verification is successful", function () {
141
+ describe("and an error is thrown in the cleanup", function () {
142
+ it("throws an error", function () {
143
+ pact.mockService = {
144
+ verify: function () { return Promise.resolve("verified!"); },
145
+ removeInteractions: function () {
146
+ throw new Error("error removing interactions");
147
+ },
148
+ };
149
+ return expect(pact.verify()).to.eventually.be.rejectedWith(Error);
150
+ });
151
+ });
152
+ });
153
+ });
154
+ describe("#finalize", function () {
155
+ describe("when writing Pact is successful", function () {
156
+ it("returns a successful promise and shut down down the mock server", function () {
157
+ pact.mockService = {
158
+ writePact: function () { return Promise.resolve("pact file written!"); },
159
+ removeInteractions: sinon.stub(),
160
+ };
161
+ var writePactPromise = pact.finalize();
162
+ return expect(writePactPromise).to.eventually.be.fulfilled;
163
+ });
164
+ });
165
+ describe("when writing Pact is unsuccessful", function () {
166
+ it("throws an error", function () {
167
+ pact.mockService = {
168
+ writePact: function () { return Promise.reject(new Error("pact not file written!")); },
169
+ removeInteractions: sinon.stub(),
170
+ };
171
+ return expect(pact.finalize()).to.eventually.be.rejectedWith(Error);
172
+ });
173
+ });
174
+ });
175
+ describe("#writePact", function () {
176
+ describe("when writing Pact is successful", function () {
177
+ it("returns a successful promise", function () {
178
+ pact.mockService = {
179
+ writePact: function () { return Promise.resolve("pact file written!"); },
180
+ removeInteractions: sinon.stub(),
181
+ };
182
+ var writePactPromise = pact.writePact();
183
+ return Promise.all([
184
+ expect(writePactPromise).to.eventually.eq("pact file written!"),
185
+ expect(writePactPromise).to.eventually.be.fulfilled,
186
+ ]);
187
+ });
188
+ });
189
+ });
190
+ describe("#removeInteractions", function () {
191
+ describe("when removing interactions is successful", function () {
192
+ it("returns a successful promise", function () {
193
+ pact.mockService = {
194
+ removeInteractions: function () { return Promise.resolve("interactions removed!"); },
195
+ };
196
+ var removeInteractionsPromise = pact.removeInteractions();
197
+ return Promise.all([
198
+ expect(removeInteractionsPromise).to.eventually.eq("interactions removed!"),
199
+ expect(removeInteractionsPromise).to.eventually.be.fulfilled,
200
+ ]);
201
+ });
202
+ });
203
+ });
204
+ });
205
+ //# sourceMappingURL=pact-web.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pact-web.spec.js","sourceRoot":"","sources":["../src/pact-web.spec.ts"],"names":[],"mappings":"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"}
package/pact.d.ts CHANGED
@@ -1,73 +1,30 @@
1
- import * as Matchers from "./dsl/matchers";
2
- import { Interaction, InteractionObject } from "./dsl/interaction";
3
- import { MockService } from "./dsl/mockService";
4
- import { PactOptions, PactOptionsComplete } from "./dsl/options";
5
- import { Server } from "@pact-foundation/pact-node/src/server";
6
1
  /**
7
- * Creates a new {@link PactProvider}.
2
+ * Pact module meta package.
3
+ * @module Pact
4
+ */
5
+ /**
6
+ * Exposes {@link Pact}
8
7
  * @memberof Pact
9
- * @name create
10
- * @param {PactOptions} opts
11
- * @return {@link PactProvider}
8
+ * @static
9
+ */
10
+ export * from "./httpPact";
11
+ /**
12
+ * Exposes {@link MessageConsumerPact}
13
+ * @memberof Pact
14
+ * @static
12
15
  */
13
- export declare class Pact {
14
- static defaults: PactOptions;
15
- static createOptionsWithDefaults(opts: PactOptions): PactOptionsComplete;
16
- server: Server;
17
- opts: PactOptionsComplete;
18
- mockService: MockService;
19
- private finalized;
20
- constructor(config: PactOptions);
21
- /**
22
- * Start the Mock Server.
23
- * @returns {Promise}
24
- */
25
- setup(): Promise<PactOptionsComplete>;
26
- /**
27
- * Add an interaction to the {@link MockService}.
28
- * @memberof PactProvider
29
- * @instance
30
- * @param {Interaction} interactionObj
31
- * @returns {Promise}
32
- */
33
- addInteraction(interactionObj: InteractionObject | Interaction): Promise<string>;
34
- /**
35
- * Checks with the Mock Service if the expected interactions have been exercised.
36
- * @memberof PactProvider
37
- * @instance
38
- * @returns {Promise}
39
- */
40
- verify(): Promise<string>;
41
- /**
42
- * Writes the Pact and clears any interactions left behind and shutdown the
43
- * mock server
44
- * @memberof PactProvider
45
- * @instance
46
- * @returns {Promise}
47
- */
48
- finalize(): Promise<void>;
49
- /**
50
- * Writes the pact file out to file. Should be called when all tests have been performed for a
51
- * given Consumer <-> Provider pair. It will write out the Pact to the
52
- * configured file.
53
- * @memberof PactProvider
54
- * @instance
55
- * @returns {Promise}
56
- */
57
- writePact(): Promise<string>;
58
- /**
59
- * Clear up any interactions in the Provider Mock Server.
60
- * @memberof PactProvider
61
- * @instance
62
- * @returns {Promise}
63
- */
64
- removeInteractions(): Promise<string>;
65
- private checkPort;
66
- private setupMockService;
67
- private startServer;
68
- }
69
16
  export * from "./messageConsumerPact";
17
+ /**
18
+ * Exposes {@link MessageProviderPact}
19
+ * @memberof Pact
20
+ * @static
21
+ */
70
22
  export * from "./messageProviderPact";
23
+ /**
24
+ * Exposes {@link Message}
25
+ * @memberof Pact
26
+ * @static
27
+ */
71
28
  export * from "./dsl/message";
72
29
  /**
73
30
  * Exposes {@link Verifier}
@@ -81,6 +38,11 @@ export * from "./dsl/verifier";
81
38
  * @static
82
39
  */
83
40
  export * from "./dsl/graphql";
41
+ /**
42
+ * Exposes {@link ApolloGraphQL}
43
+ * @memberof Pact
44
+ * @static
45
+ */
84
46
  export * from "./dsl/apolloGraphql";
85
47
  /**
86
48
  * Exposes {@link Matchers}
@@ -89,6 +51,7 @@ export * from "./dsl/apolloGraphql";
89
51
  * @memberof Pact
90
52
  * @static
91
53
  */
54
+ import * as Matchers from "./dsl/matchers";
92
55
  export import Matchers = Matchers;
93
56
  /**
94
57
  * Exposes {@link Interaction}
File without changes
@@ -0,0 +1,292 @@
1
+ // /* tslint:disable:no-unused-expression object-literal-sort-keys no-empty no-console */
2
+ // import * as Promise from "bluebird"
3
+ // import * as chai from "chai"
4
+ // import * as chaiAsPromised from "chai-as-promised"
5
+ // import * as path from "path"
6
+ // import * as superagent from "superagent"
7
+ // import { HTTPMethod } from "./common/request"
8
+ // import { Matchers, Pact } from "./pact"
9
+ // chai.use(chaiAsPromised)
10
+ // const expect = chai.expect
11
+ // const { eachLike, like, term } = Matchers
12
+ // describe("Integration", () => {
13
+ // const protocols = ["http", "https"]
14
+ // protocols.forEach(protocol => {
15
+ // describe(`Pact on ${protocol} protocol`, () => {
16
+ // const MOCK_PORT = Math.floor(Math.random() * 999) + 9000
17
+ // const PROVIDER_URL = `${protocol}://localhost:${MOCK_PORT}`
18
+ // // TODO: this is eagerly run (even if test skipped)
19
+ // const provider = new Pact({
20
+ // consumer: "Matching Service",
21
+ // provider: "Animal Profile Service",
22
+ // port: MOCK_PORT,
23
+ // log: path.resolve(process.cwd(), "logs", "mockserver-integration.log"),
24
+ // dir: path.resolve(process.cwd(), "pacts"),
25
+ // logLevel: "warn",
26
+ // ssl: protocol === "https",
27
+ // spec: 2,
28
+ // })
29
+ // const EXPECTED_BODY = [
30
+ // {
31
+ // id: 1,
32
+ // name: "Project 1",
33
+ // due: "2016-02-11T09:46:56.023Z",
34
+ // tasks: [
35
+ // {
36
+ // id: 1,
37
+ // name: "Do the laundry",
38
+ // done: true,
39
+ // },
40
+ // {
41
+ // id: 2,
42
+ // name: "Do the dishes",
43
+ // done: false,
44
+ // },
45
+ // {
46
+ // id: 3,
47
+ // name: "Do the backyard",
48
+ // done: false,
49
+ // },
50
+ // {
51
+ // id: 4,
52
+ // name: "Do nothing",
53
+ // done: false,
54
+ // },
55
+ // ],
56
+ // },
57
+ // ]
58
+ // before(() => provider.setup())
59
+ // // once all tests are run, write pact and remove interactions
60
+ // after(() => provider.finalize())
61
+ // context("with a single request", () => {
62
+ // // add interactions, as many as needed
63
+ // before(() =>
64
+ // provider.addInteraction({
65
+ // state: "i have a list of projects",
66
+ // uponReceiving: "a request for projects",
67
+ // withRequest: {
68
+ // method: HTTPMethod.GET,
69
+ // path: "/projects",
70
+ // headers: {
71
+ // Accept: "application/json",
72
+ // },
73
+ // },
74
+ // willRespondWith: {
75
+ // status: 200,
76
+ // headers: {
77
+ // "Content-Type": "application/json",
78
+ // },
79
+ // body: EXPECTED_BODY,
80
+ // },
81
+ // })
82
+ // )
83
+ // // execute your assertions
84
+ // it("returns the correct body", () =>
85
+ // superagent
86
+ // .get(`${PROVIDER_URL}/projects`)
87
+ // .set({
88
+ // Accept: "application/json",
89
+ // })
90
+ // .then((res: any) => {
91
+ // expect(res.text).to.eql(JSON.stringify(EXPECTED_BODY))
92
+ // }))
93
+ // // verify with Pact, and reset expectations
94
+ // it("successfully verifies", () => provider.verify())
95
+ // })
96
+ // context("with a single request with query string parameters", () => {
97
+ // // add interactions, as many as needed
98
+ // before(() => {
99
+ // return provider.addInteraction({
100
+ // state: "i have a list of projects",
101
+ // uponReceiving: "a request for projects with a filter",
102
+ // withRequest: {
103
+ // method: HTTPMethod.GET,
104
+ // path: "/projects",
105
+ // query: {
106
+ // from: "today",
107
+ // },
108
+ // headers: {
109
+ // Accept: "application/json",
110
+ // },
111
+ // },
112
+ // willRespondWith: {
113
+ // status: 200,
114
+ // headers: {
115
+ // "Content-Type": "application/json",
116
+ // },
117
+ // body: EXPECTED_BODY,
118
+ // },
119
+ // })
120
+ // })
121
+ // // execute your assertions
122
+ // it("returns the correct body", () =>
123
+ // superagent
124
+ // .get(`${PROVIDER_URL}/projects?from=today`)
125
+ // .set({
126
+ // Accept: "application/json",
127
+ // })
128
+ // .then((res: any) => {
129
+ // expect(res.text).to.eql(JSON.stringify(EXPECTED_BODY))
130
+ // }))
131
+ // // verify with Pact, and reset expectations
132
+ // it("successfully verifies", () => provider.verify())
133
+ // })
134
+ // context("with a single request and eachLike, like, term", () => {
135
+ // // add interactions, as many as needed
136
+ // before(() => {
137
+ // return provider.addInteraction({
138
+ // state: "i have a list of projects but I dont know how many",
139
+ // uponReceiving: "a request for such projects",
140
+ // withRequest: {
141
+ // method: HTTPMethod.GET,
142
+ // path: "/projects",
143
+ // headers: {
144
+ // Accept: "application/json",
145
+ // },
146
+ // },
147
+ // willRespondWith: {
148
+ // status: 200,
149
+ // headers: {
150
+ // "Content-Type": term({
151
+ // generate: "application/json",
152
+ // matcher: "application/json",
153
+ // }),
154
+ // },
155
+ // body: [
156
+ // {
157
+ // id: 1,
158
+ // name: "Project 1",
159
+ // due: "2016-02-11T09:46:56.023Z",
160
+ // tasks: eachLike(
161
+ // {
162
+ // id: like(1),
163
+ // name: like("Do the laundry"),
164
+ // done: like(true),
165
+ // },
166
+ // {
167
+ // min: 4,
168
+ // }
169
+ // ),
170
+ // },
171
+ // ],
172
+ // },
173
+ // })
174
+ // })
175
+ // // execute your assertions
176
+ // it("returns the correct body", () => {
177
+ // const verificationPromise = superagent
178
+ // .get(`${PROVIDER_URL}/projects`)
179
+ // .set({ Accept: "application/json" })
180
+ // .then((res: any) => JSON.parse(res.text)[0])
181
+ // return expect(verificationPromise).to.eventually.have.property(
182
+ // "tasks"
183
+ // )
184
+ // })
185
+ // // verify with Pact, and reset expectations
186
+ // it("successfully verifies", () => provider.verify())
187
+ // })
188
+ // context("with two requests", () => {
189
+ // before(() => {
190
+ // const interaction1 = provider.addInteraction({
191
+ // state: "i have a list of projects",
192
+ // uponReceiving: "a request for projects",
193
+ // withRequest: {
194
+ // method: HTTPMethod.GET,
195
+ // path: "/projects",
196
+ // headers: {
197
+ // Accept: "application/json",
198
+ // },
199
+ // },
200
+ // willRespondWith: {
201
+ // status: 200,
202
+ // headers: {
203
+ // "Content-Type": "application/json",
204
+ // },
205
+ // body: EXPECTED_BODY,
206
+ // },
207
+ // })
208
+ // const interaction2 = provider.addInteraction({
209
+ // state: "i have a list of projects",
210
+ // uponReceiving: "a request for a project that does not exist",
211
+ // withRequest: {
212
+ // method: HTTPMethod.GET,
213
+ // path: "/projects/2",
214
+ // headers: {
215
+ // Accept: "application/json",
216
+ // },
217
+ // },
218
+ // willRespondWith: {
219
+ // status: 404,
220
+ // headers: {
221
+ // "Content-Type": "application/json",
222
+ // },
223
+ // },
224
+ // })
225
+ // return Promise.all([interaction1, interaction2])
226
+ // })
227
+ // it("allows two requests", () => {
228
+ // const verificationPromise = superagent
229
+ // .get(`${PROVIDER_URL}/projects`)
230
+ // .set({
231
+ // Accept: "application/json",
232
+ // })
233
+ // .then((res: any) => res.text)
234
+ // const verificationPromise404 = superagent
235
+ // .get(`${PROVIDER_URL}/projects/2`)
236
+ // .set({
237
+ // Accept: "application/json",
238
+ // })
239
+ // return Promise.all([
240
+ // expect(verificationPromise).to.eventually.equal(
241
+ // JSON.stringify(EXPECTED_BODY)
242
+ // ),
243
+ // expect(verificationPromise404).to.eventually.be.rejected,
244
+ // ])
245
+ // })
246
+ // // verify with Pact, and reset expectations
247
+ // it("successfully verifies", () => provider.verify())
248
+ // })
249
+ // context("with an unexpected interaction", () => {
250
+ // // add interactions, as many as needed
251
+ // before(() =>
252
+ // provider
253
+ // .addInteraction({
254
+ // state: "i have a list of projects",
255
+ // uponReceiving: "a request for projects",
256
+ // withRequest: {
257
+ // method: HTTPMethod.GET,
258
+ // path: "/projects",
259
+ // headers: {
260
+ // Accept: "application/json",
261
+ // },
262
+ // },
263
+ // willRespondWith: {
264
+ // status: 200,
265
+ // headers: {
266
+ // "Content-Type": "application/json",
267
+ // },
268
+ // body: EXPECTED_BODY,
269
+ // },
270
+ // })
271
+ // .then(
272
+ // () => console.log("Adding interaction worked"),
273
+ // () => console.warn("Adding interaction failed.")
274
+ // )
275
+ // )
276
+ // it("fails verification", () => {
277
+ // const verificationPromise = superagent
278
+ // .get(`${PROVIDER_URL}/projects`)
279
+ // .set({ Accept: "application/json" })
280
+ // .then(() =>
281
+ // superagent.delete(`${PROVIDER_URL}/projects/2`).catch(() => {})
282
+ // )
283
+ // .then(() => provider.verify())
284
+ // return expect(verificationPromise).to.be.rejectedWith(
285
+ // "Pact verification failed - expected interactions did not match actual."
286
+ // )
287
+ // })
288
+ // })
289
+ // })
290
+ // })
291
+ // })
292
+ //# sourceMappingURL=pact.integration.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pact.integration.spec.js","sourceRoot":"","sources":["../src/pact.integration.spec.ts"],"names":[],"mappings":"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"}