pact_broker-client 0.0.2 → 0.0.3
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.
- data/CHANGELOG.md +13 -0
- data/Gemfile.lock +3 -3
- data/lib/pact_broker/client/base_client.rb +1 -1
- data/lib/pact_broker/client/pact_broker_client.rb +4 -0
- data/lib/pact_broker/client/pacticipants.rb +2 -2
- data/lib/pact_broker/client/pacts.rb +51 -6
- data/lib/pact_broker/client/version.rb +1 -1
- data/spec/pacts/pact_broker_client-pact_broker.json +98 -51
- data/spec/service_providers/extra_goodies_spec.rb +39 -2
- data/spec/service_providers/pact_broker_client_spec.rb +37 -54
- data/spec/service_providers/pact_helper.rb +4 -0
- data/spec/support/pacts_latest_list.json +39 -0
- metadata +7 -4
data/CHANGELOG.md
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
Do this to generate your change history
|
2
|
+
|
3
|
+
$ git log --date=relative --pretty=format:' * %h - %s (%an, %ad)' 'package/pact_broker-client-0.0.PRODVERSION'..'package/pact_broker-client-0.0.NEWVERSION'
|
4
|
+
|
5
|
+
#### 0.0.3 (2013-11-13)
|
6
|
+
|
7
|
+
* a3488bd - Fixing application/json+hal to application/hal+json (Beth, 2 days ago)
|
8
|
+
* 0fa89ef - Updating content type to match new Webmachine implementation. Removing redundant repository_url interaction. (Beth, 2 days ago)
|
9
|
+
* 9e1539e - Redoing the URLs yet again (Beth, 3 days ago)
|
10
|
+
* 9067b83 - Working on list latest pacts (Beth, 3 days ago)
|
11
|
+
* 3ba218a - Specifying pact/latest response (Beth, 6 days ago)
|
12
|
+
* b746f23 - Changing to new /pacts/latest URL format (Beth, 6 days ago)
|
13
|
+
* 39f52cf - Working on expected 'pacts/latest' response (Beth, 6 days ago)
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
pact_broker-client (0.0.
|
4
|
+
pact_broker-client (0.0.3)
|
5
5
|
httparty
|
6
6
|
json
|
7
7
|
pact
|
@@ -19,7 +19,7 @@ GEM
|
|
19
19
|
debugger-ruby_core_source (~> 1.2.3)
|
20
20
|
debugger-linecache (1.2.0)
|
21
21
|
debugger-ruby_core_source (1.2.3)
|
22
|
-
diff-lcs (1.2.
|
22
|
+
diff-lcs (1.2.5)
|
23
23
|
eventmachine (1.0.3)
|
24
24
|
fakefs (0.4.2)
|
25
25
|
find_a_port (1.0.1)
|
@@ -52,7 +52,7 @@ GEM
|
|
52
52
|
rspec-expectations (~> 2.14.0)
|
53
53
|
rspec-mocks (~> 2.14.0)
|
54
54
|
rspec-core (2.14.7)
|
55
|
-
rspec-expectations (2.14.
|
55
|
+
rspec-expectations (2.14.4)
|
56
56
|
diff-lcs (>= 1.1.3, < 2.0)
|
57
57
|
rspec-fire (1.2.0)
|
58
58
|
rspec (~> 2.11)
|
@@ -19,14 +19,14 @@ module PactBroker
|
|
19
19
|
def get1 options
|
20
20
|
response = get(pacticipant_base_url(options), headers: default_get_headers)
|
21
21
|
handle_response(response) do
|
22
|
-
response.
|
22
|
+
JSON.parse(response.body)
|
23
23
|
end
|
24
24
|
end
|
25
25
|
|
26
26
|
def list
|
27
27
|
response = get("/pacticipants", headers: default_get_headers)
|
28
28
|
handle_response(response) do
|
29
|
-
response.
|
29
|
+
JSON.parse(response.body)
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
@@ -17,10 +17,24 @@ module PactBroker
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
+
def get options
|
21
|
+
url = get_consumer_contract_url(options)
|
22
|
+
response = self.class.get(url, headers: default_get_headers)
|
23
|
+
handle_response(response) do
|
24
|
+
response.body
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def latest
|
29
|
+
response = self.class.get("/pacts/latest", headers: default_get_headers)
|
30
|
+
handle_response(response) do
|
31
|
+
map_pact_list_do_hash JSON.parse(response.body)["pacts"]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
20
35
|
def last options
|
21
|
-
url =
|
22
|
-
|
23
|
-
response = self.class.get(url, headers: default_get_headers, query: query)
|
36
|
+
url = get_latest_consumer_contract_url(options)
|
37
|
+
response = self.class.get(url, headers: default_get_headers)
|
24
38
|
handle_response(response) do
|
25
39
|
response.body
|
26
40
|
end
|
@@ -28,17 +42,48 @@ module PactBroker
|
|
28
42
|
|
29
43
|
private
|
30
44
|
|
31
|
-
|
45
|
+
#TODO Move into mapper class
|
46
|
+
def map_pact_list_do_hash pacts_list
|
47
|
+
pacts_list.collect do | pact_hash |
|
48
|
+
{
|
49
|
+
consumer: {
|
50
|
+
name: pact_hash["_embedded"]["consumer"]["name"],
|
51
|
+
version: {
|
52
|
+
number: pact_hash["_embedded"]["consumer"]["_embedded"]["version"]["number"]
|
53
|
+
}
|
54
|
+
},
|
55
|
+
provider: {
|
56
|
+
name: pact_hash["_embedded"]["provider"]["name"]
|
57
|
+
}
|
58
|
+
}
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def find_last_consumer_contract_query options
|
63
|
+
query = {:consumer => options[:consumer], :provider => options[:provider]}
|
64
|
+
query[:tag] = options[:tag] if options[:tag]
|
65
|
+
query
|
66
|
+
end
|
67
|
+
|
68
|
+
def get_latest_consumer_contract_url options
|
69
|
+
consumer_name = encode_param(options[:consumer])
|
70
|
+
provider_name = encode_param(options[:provider])
|
71
|
+
tag = options[:tag] ? "/#{options[:tag]}" : ""
|
72
|
+
"/pact/provider/#{provider_name}/consumer/#{consumer_name}/latest#{tag}"
|
73
|
+
end
|
74
|
+
|
75
|
+
def get_consumer_contract_url options
|
32
76
|
consumer_name = encode_param(options[:consumer])
|
33
77
|
provider_name = encode_param(options[:provider])
|
34
|
-
|
78
|
+
consumer_version = encode_param(options[:consumer_version])
|
79
|
+
"/pact/provider/#{provider_name}/consumer/#{consumer_name}/version/#{consumer_version}"
|
35
80
|
end
|
36
81
|
|
37
82
|
def save_consumer_contract_url consumer_contract, consumer_version
|
38
83
|
consumer_name = encode_param(consumer_contract.consumer.name)
|
39
84
|
provider_name = encode_param(consumer_contract.provider.name)
|
40
85
|
version = encode_param(consumer_version)
|
41
|
-
"/
|
86
|
+
"/pact/provider/#{provider_name}/consumer/#{consumer_name}/version/#{version}"
|
42
87
|
end
|
43
88
|
end
|
44
89
|
end
|
@@ -6,6 +6,61 @@
|
|
6
6
|
"name": "Pact Broker Client"
|
7
7
|
},
|
8
8
|
"interactions": [
|
9
|
+
{
|
10
|
+
"description": "a request to list the latest pacts",
|
11
|
+
"provider_state": "a pact between Condor and the Pricing Service exists",
|
12
|
+
"request": {
|
13
|
+
"method": "get",
|
14
|
+
"path": "/pacts/latest",
|
15
|
+
"headers": {
|
16
|
+
}
|
17
|
+
},
|
18
|
+
"response": {
|
19
|
+
"headers": {
|
20
|
+
"Content-Type": "application/hal+json"
|
21
|
+
},
|
22
|
+
"status": 200,
|
23
|
+
"body": {
|
24
|
+
"_links": {
|
25
|
+
"self": {
|
26
|
+
"href": "http://localhost:1234/pacts/latest"
|
27
|
+
}
|
28
|
+
},
|
29
|
+
"pacts": [
|
30
|
+
{
|
31
|
+
"_links": {
|
32
|
+
"self": {
|
33
|
+
"href": "http://localhost:1234/pacticipants/Condor/versions/1.3.0/pacts/Pricing%20Service"
|
34
|
+
}
|
35
|
+
},
|
36
|
+
"_embedded": {
|
37
|
+
"consumer": {
|
38
|
+
"name": "Condor",
|
39
|
+
"_links": {
|
40
|
+
"self": {
|
41
|
+
"href": "http://localhost:1234/pacticipants/Condor"
|
42
|
+
}
|
43
|
+
},
|
44
|
+
"_embedded": {
|
45
|
+
"version": {
|
46
|
+
"number": "1.3.0"
|
47
|
+
}
|
48
|
+
}
|
49
|
+
},
|
50
|
+
"provider": {
|
51
|
+
"_links": {
|
52
|
+
"self": {
|
53
|
+
"href": "http://localhost:1234/pacticipants/Pricing%20Service"
|
54
|
+
}
|
55
|
+
},
|
56
|
+
"name": "Pricing Service"
|
57
|
+
}
|
58
|
+
}
|
59
|
+
}
|
60
|
+
]
|
61
|
+
}
|
62
|
+
}
|
63
|
+
},
|
9
64
|
{
|
10
65
|
"description": "a request to list pacticipants",
|
11
66
|
"provider_state": "'Condor' exists in the pact-broker",
|
@@ -17,7 +72,7 @@
|
|
17
72
|
},
|
18
73
|
"response": {
|
19
74
|
"headers": {
|
20
|
-
"Content-Type": "application/json
|
75
|
+
"Content-Type": "application/hal+json"
|
21
76
|
},
|
22
77
|
"status": 200,
|
23
78
|
"body": {
|
@@ -66,7 +121,7 @@
|
|
66
121
|
},
|
67
122
|
"response": {
|
68
123
|
"headers": {
|
69
|
-
"Content-Type": "application/json
|
124
|
+
"Content-Type": "application/hal+json"
|
70
125
|
},
|
71
126
|
"status": 200,
|
72
127
|
"body": {
|
@@ -114,7 +169,7 @@
|
|
114
169
|
"provider_state": "the 'Pricing Service' already exists in the pact-broker",
|
115
170
|
"request": {
|
116
171
|
"method": "put",
|
117
|
-
"path": "/
|
172
|
+
"path": "/pact/provider/Pricing%20Service/consumer/Condor/version/1.3.0",
|
118
173
|
"body": {
|
119
174
|
"consumer": {
|
120
175
|
"name": "Condor"
|
@@ -141,7 +196,7 @@
|
|
141
196
|
"provider_state": "the 'Pricing Service' and 'Condor' already exist in the pact-broker, and Condor already has a pact published for version 1.3.0",
|
142
197
|
"request": {
|
143
198
|
"method": "put",
|
144
|
-
"path": "/
|
199
|
+
"path": "/pact/provider/Pricing%20Service/consumer/Condor/version/1.3.0",
|
145
200
|
"body": {
|
146
201
|
"consumer": {
|
147
202
|
"name": "Condor"
|
@@ -168,7 +223,7 @@
|
|
168
223
|
"provider_state": "'Condor' already exist in the pact-broker, but the 'Pricing Service' does not",
|
169
224
|
"request": {
|
170
225
|
"method": "put",
|
171
|
-
"path": "/
|
226
|
+
"path": "/pact/provider/Pricing%20Service/consumer/Condor/version/1.3.0",
|
172
227
|
"body": {
|
173
228
|
"consumer": {
|
174
229
|
"name": "Condor"
|
@@ -195,7 +250,7 @@
|
|
195
250
|
"provider_state": "an error occurs while publishing a pact",
|
196
251
|
"request": {
|
197
252
|
"method": "put",
|
198
|
-
"path": "/
|
253
|
+
"path": "/pact/provider/Pricing%20Service/consumer/Condor/version/1.3.0",
|
199
254
|
"body": {
|
200
255
|
"consumer": {
|
201
256
|
"name": "Condor"
|
@@ -214,6 +269,7 @@
|
|
214
269
|
"response": {
|
215
270
|
"status": 500,
|
216
271
|
"headers": {
|
272
|
+
"Content-Type": "application/json"
|
217
273
|
},
|
218
274
|
"body": {
|
219
275
|
"message": {
|
@@ -236,7 +292,7 @@
|
|
236
292
|
"repository_url": "git@git.realestate.com.au:business-systems/pricing-service"
|
237
293
|
},
|
238
294
|
"headers": {
|
239
|
-
"Content-Type": "application/json
|
295
|
+
"Content-Type": "application/json"
|
240
296
|
}
|
241
297
|
},
|
242
298
|
"response": {
|
@@ -255,7 +311,7 @@
|
|
255
311
|
"repository_url": "git@git.realestate.com.au:business-systems/pricing-service"
|
256
312
|
},
|
257
313
|
"headers": {
|
258
|
-
"Content-Type": "application/json
|
314
|
+
"Content-Type": "application/json"
|
259
315
|
}
|
260
316
|
},
|
261
317
|
"response": {
|
@@ -264,40 +320,6 @@
|
|
264
320
|
}
|
265
321
|
}
|
266
322
|
},
|
267
|
-
{
|
268
|
-
"description": "a request to retrieve the repository URL of the 'Pricing Service'",
|
269
|
-
"provider_state": "the 'Pricing Service' does not exist in the pact-broker",
|
270
|
-
"request": {
|
271
|
-
"method": "get",
|
272
|
-
"path": "/pacticipants/Pricing%20Service/repository_url",
|
273
|
-
"headers": {
|
274
|
-
"Accept": "text/plain"
|
275
|
-
}
|
276
|
-
},
|
277
|
-
"response": {
|
278
|
-
"status": 404,
|
279
|
-
"headers": {
|
280
|
-
}
|
281
|
-
}
|
282
|
-
},
|
283
|
-
{
|
284
|
-
"description": "a request to retrieve the repository URL of the 'Pricing Service'",
|
285
|
-
"provider_state": "the 'Pricing Service' already exists in the pact-broker",
|
286
|
-
"request": {
|
287
|
-
"method": "get",
|
288
|
-
"path": "/pacticipants/Pricing%20Service/repository_url",
|
289
|
-
"headers": {
|
290
|
-
"Accept": "text/plain"
|
291
|
-
}
|
292
|
-
},
|
293
|
-
"response": {
|
294
|
-
"status": 200,
|
295
|
-
"headers": {
|
296
|
-
"Content-Type": "text/plain;charset=utf-8"
|
297
|
-
},
|
298
|
-
"body": "git@git.realestate.com.au:business-systems/pricing-service"
|
299
|
-
}
|
300
|
-
},
|
301
323
|
{
|
302
324
|
"description": "a request to tag the production version of Condor",
|
303
325
|
"provider_state": "'Condor' exists in the pact-broker",
|
@@ -311,7 +333,7 @@
|
|
311
333
|
"repository_ref": "packages/condor-1.3.0"
|
312
334
|
},
|
313
335
|
"headers": {
|
314
|
-
"Content-Type": "application/json
|
336
|
+
"Content-Type": "application/json"
|
315
337
|
}
|
316
338
|
},
|
317
339
|
"response": {
|
@@ -333,7 +355,7 @@
|
|
333
355
|
"repository_ref": "packages/condor-1.3.0"
|
334
356
|
},
|
335
357
|
"headers": {
|
336
|
-
"Content-Type": "application/json
|
358
|
+
"Content-Type": "application/json"
|
337
359
|
}
|
338
360
|
},
|
339
361
|
"response": {
|
@@ -342,19 +364,45 @@
|
|
342
364
|
}
|
343
365
|
}
|
344
366
|
},
|
367
|
+
{
|
368
|
+
"description": "a request retrieve a pact for a specific version",
|
369
|
+
"provider_state": "the 'Pricing Service' and 'Condor' already exist in the pact-broker, and Condor already has a pact published for version 1.3.0",
|
370
|
+
"request": {
|
371
|
+
"method": "get",
|
372
|
+
"path": "/pact/provider/Pricing%20Service/consumer/Condor/version/1.3.0",
|
373
|
+
"headers": {
|
374
|
+
}
|
375
|
+
},
|
376
|
+
"response": {
|
377
|
+
"headers": {
|
378
|
+
},
|
379
|
+
"status": 200,
|
380
|
+
"body": {
|
381
|
+
"consumer": {
|
382
|
+
"name": "Condor"
|
383
|
+
},
|
384
|
+
"provider": {
|
385
|
+
"name": "Pricing Service"
|
386
|
+
},
|
387
|
+
"interactions": [
|
388
|
+
|
389
|
+
]
|
390
|
+
}
|
391
|
+
}
|
392
|
+
},
|
345
393
|
{
|
346
394
|
"description": "a request to retrieve the latest pact between Condor and the Pricing Service",
|
347
395
|
"provider_state": "a pact between Condor and the Pricing Service exists",
|
348
396
|
"request": {
|
349
397
|
"method": "get",
|
350
|
-
"path": "/
|
398
|
+
"path": "/pact/provider/Pricing%20Service/consumer/Condor/latest",
|
351
399
|
"headers": {
|
352
400
|
}
|
353
401
|
},
|
354
402
|
"response": {
|
355
403
|
"status": 200,
|
356
404
|
"headers": {
|
357
|
-
"Content-Type": "application/json
|
405
|
+
"Content-Type": "application/json",
|
358
406
|
"X-Pact-Consumer-Version": "1.3.0"
|
359
407
|
},
|
360
408
|
"body": {
|
@@ -375,7 +423,7 @@
|
|
375
423
|
"provider_state": "no pact between Condor and the Pricing Service exists",
|
376
424
|
"request": {
|
377
425
|
"method": "get",
|
378
|
-
"path": "/
|
426
|
+
"path": "/pact/provider/Pricing%20Service/consumer/Condor/latest",
|
379
427
|
"headers": {
|
380
428
|
}
|
381
429
|
},
|
@@ -390,11 +438,10 @@
|
|
390
438
|
"provider_state": "a pact between Condor and the Pricing Service exists for the production version of Condor",
|
391
439
|
"request": {
|
392
440
|
"method": "get",
|
393
|
-
"path": "/
|
441
|
+
"path": "/pact/provider/Pricing%20Service/consumer/Condor/latest/prod",
|
394
442
|
"headers": {
|
395
443
|
"Accept": "application/json"
|
396
|
-
}
|
397
|
-
"query": "tag=prod"
|
444
|
+
}
|
398
445
|
},
|
399
446
|
"response": {
|
400
447
|
"status": 200,
|
@@ -427,7 +474,7 @@
|
|
427
474
|
"response": {
|
428
475
|
"status": 200,
|
429
476
|
"headers": {
|
430
|
-
"Content-Type": "application/json
|
477
|
+
"Content-Type": "application/json"
|
431
478
|
},
|
432
479
|
"body": {
|
433
480
|
"number": "1.2.3",
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require_relative 'pact_helper'
|
3
|
+
require 'pact_broker/client/pact_broker_client'
|
3
4
|
|
4
5
|
|
5
6
|
module PactBroker::Client
|
@@ -7,6 +8,42 @@ module PactBroker::Client
|
|
7
8
|
|
8
9
|
let(:pact_broker_client) { PactBrokerClient.new(base_url: 'http://localhost:1234') }
|
9
10
|
|
11
|
+
describe "listing pacts" do
|
12
|
+
context "when pacts exist" do
|
13
|
+
let(:response_body) { JSON.parse(File.read("./spec/support/pacts_latest_list.json"))}
|
14
|
+
let(:expected_pacts) do
|
15
|
+
[{
|
16
|
+
:consumer => {
|
17
|
+
:name => 'Condor',
|
18
|
+
:version => {
|
19
|
+
:number => '1.3.0'
|
20
|
+
}
|
21
|
+
},
|
22
|
+
:provider => {
|
23
|
+
:name => 'Pricing Service'
|
24
|
+
}
|
25
|
+
}
|
26
|
+
]
|
27
|
+
end
|
28
|
+
before do
|
29
|
+
pact_broker.
|
30
|
+
given("a pact between Condor and the Pricing Service exists").
|
31
|
+
upon_receiving("a request to list the latest pacts").
|
32
|
+
with(
|
33
|
+
method: :get,
|
34
|
+
path: '/pacts/latest',
|
35
|
+
headers: {} ).
|
36
|
+
will_respond_with( headers: {'Content-Type' => 'application/hal+json'},
|
37
|
+
status: 200,
|
38
|
+
body: response_body
|
39
|
+
)
|
40
|
+
end
|
41
|
+
it "returns the response body" do
|
42
|
+
expect(pact_broker_client.pacts.latest).to eq(expected_pacts)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
10
47
|
describe "listing pacticipants" do
|
11
48
|
context "when a pacticipant exists" do
|
12
49
|
let(:response_body) { JSON.parse(File.read("./spec/support/pacticipants_list.json"))}
|
@@ -18,7 +55,7 @@ module PactBroker::Client
|
|
18
55
|
method: :get,
|
19
56
|
path: '/pacticipants',
|
20
57
|
headers: {} ).
|
21
|
-
will_respond_with( headers: {'Content-Type' => 'application/json
|
58
|
+
will_respond_with( headers: {'Content-Type' => 'application/hal+json'},
|
22
59
|
status: 200,
|
23
60
|
body: response_body
|
24
61
|
)
|
@@ -41,7 +78,7 @@ module PactBroker::Client
|
|
41
78
|
method: :get,
|
42
79
|
path: '/pacticipants/Pricing%20Service',
|
43
80
|
headers: {} ).
|
44
|
-
will_respond_with( headers: {'Content-Type' => 'application/json
|
81
|
+
will_respond_with( headers: {'Content-Type' => 'application/hal+json'},
|
45
82
|
status: 200,
|
46
83
|
body: response_body
|
47
84
|
)
|
@@ -26,7 +26,7 @@ module PactBroker::Client
|
|
26
26
|
let(:pact_broker_version) { Pact::Term.new(:matcher => /\d+\.\d+\.\d+/, :generate => '1.0.0') }
|
27
27
|
let(:pact_broker_response_headers) { {} }
|
28
28
|
let(:default_request_headers) { { 'Content-Type' => 'application/json'} }
|
29
|
-
let(:patch_request_headers) { { 'Content-Type' => 'application/json
|
29
|
+
let(:patch_request_headers) { { 'Content-Type' => 'application/json'} }
|
30
30
|
let(:get_request_headers) { { 'Accept' => 'application/json'} }
|
31
31
|
|
32
32
|
describe "publishing a pact" do
|
@@ -40,7 +40,7 @@ module PactBroker::Client
|
|
40
40
|
upon_receiving("a request to publish a pact").
|
41
41
|
with({
|
42
42
|
method: :put,
|
43
|
-
path: '/
|
43
|
+
path: '/pact/provider/Pricing%20Service/consumer/Condor/version/1.3.0',
|
44
44
|
headers: default_request_headers,
|
45
45
|
body: pact_hash }).
|
46
46
|
will_respond_with( headers: pact_broker_response_headers,
|
@@ -59,7 +59,7 @@ module PactBroker::Client
|
|
59
59
|
upon_receiving("a request to publish a pact").
|
60
60
|
with({
|
61
61
|
method: :put,
|
62
|
-
path: '/
|
62
|
+
path: '/pact/provider/Pricing%20Service/consumer/Condor/version/1.3.0',
|
63
63
|
headers: default_request_headers,
|
64
64
|
body: pact_hash }).
|
65
65
|
will_respond_with( headers: pact_broker_response_headers,
|
@@ -78,7 +78,7 @@ module PactBroker::Client
|
|
78
78
|
upon_receiving("a request to publish a pact").
|
79
79
|
with({
|
80
80
|
method: :put,
|
81
|
-
path: '/
|
81
|
+
path: '/pact/provider/Pricing%20Service/consumer/Condor/version/1.3.0',
|
82
82
|
headers: default_request_headers,
|
83
83
|
body: pact_hash }).
|
84
84
|
will_respond_with( headers: pact_broker_response_headers,
|
@@ -97,12 +97,12 @@ module PactBroker::Client
|
|
97
97
|
upon_receiving("a request to publish a pact").
|
98
98
|
with({
|
99
99
|
method: :put,
|
100
|
-
path: '/
|
100
|
+
path: '/pact/provider/Pricing%20Service/consumer/Condor/version/1.3.0',
|
101
101
|
headers: default_request_headers,
|
102
102
|
body: pact_hash }).
|
103
103
|
will_respond_with({
|
104
104
|
status: 500,
|
105
|
-
headers:
|
105
|
+
headers: {'Content-Type' => 'application/json'},
|
106
106
|
body: {
|
107
107
|
message: Pact::Term.new(matcher: /.*/, generate: 'An error occurred')
|
108
108
|
}
|
@@ -158,46 +158,6 @@ module PactBroker::Client
|
|
158
158
|
end
|
159
159
|
end
|
160
160
|
|
161
|
-
describe "retrieving a repository url" do
|
162
|
-
context "where the pacticipant does not already exist in the pact-broker" do
|
163
|
-
before do
|
164
|
-
pact_broker.
|
165
|
-
given("the 'Pricing Service' does not exist in the pact-broker").
|
166
|
-
upon_receiving("a request to retrieve the repository URL of the 'Pricing Service'").
|
167
|
-
with(
|
168
|
-
method: :get,
|
169
|
-
path: '/pacticipants/Pricing%20Service/repository_url',
|
170
|
-
headers: get_request_headers.merge({'Accept' => 'text/plain'})).
|
171
|
-
will_respond_with(
|
172
|
-
status: 404,
|
173
|
-
headers: pact_broker_response_headers
|
174
|
-
)
|
175
|
-
end
|
176
|
-
it "returns nil" do
|
177
|
-
expect(pact_broker_client.pacticipants.repository_url({:pacticipant => 'Pricing Service'})).to eq(nil)
|
178
|
-
end
|
179
|
-
end
|
180
|
-
context "where the 'Pricing Service' exists in the pact-broker" do
|
181
|
-
before do
|
182
|
-
pact_broker.
|
183
|
-
given("the 'Pricing Service' already exists in the pact-broker").
|
184
|
-
upon_receiving("a request to retrieve the repository URL of the 'Pricing Service'").
|
185
|
-
with(
|
186
|
-
method: :get,
|
187
|
-
path: '/pacticipants/Pricing%20Service/repository_url',
|
188
|
-
headers: get_request_headers.merge({'Accept' => 'text/plain'})).
|
189
|
-
will_respond_with(
|
190
|
-
status: 200,
|
191
|
-
headers: pact_broker_response_headers.merge({'Content-Type' => 'text/plain;charset=utf-8'}),
|
192
|
-
body: repository_url
|
193
|
-
)
|
194
|
-
end
|
195
|
-
it "returns the URL" do
|
196
|
-
expect(pact_broker_client.pacticipants.repository_url({:pacticipant => 'Pricing Service'})).to eq repository_url
|
197
|
-
end
|
198
|
-
end
|
199
|
-
end
|
200
|
-
|
201
161
|
describe "tagging a version with prod details" do
|
202
162
|
let(:repository_ref) { "packages/condor-#{version}" }
|
203
163
|
|
@@ -243,17 +203,37 @@ module PactBroker::Client
|
|
243
203
|
end
|
244
204
|
|
245
205
|
describe "retrieving a pact" do
|
206
|
+
describe "retriving a specific version" do
|
207
|
+
before do
|
208
|
+
pact_broker.
|
209
|
+
given("the 'Pricing Service' and 'Condor' already exist in the pact-broker, and Condor already has a pact published for version 1.3.0").
|
210
|
+
upon_receiving("a request retrieve a pact for a specific version").
|
211
|
+
with(
|
212
|
+
method: :get,
|
213
|
+
path: '/pact/provider/Pricing%20Service/consumer/Condor/version/1.3.0',
|
214
|
+
headers: {} ).
|
215
|
+
will_respond_with( headers: pact_broker_response_headers,
|
216
|
+
status: 200,
|
217
|
+
body: pact_hash
|
218
|
+
)
|
219
|
+
end
|
220
|
+
it "returns the pact json" do
|
221
|
+
response = pact_broker_client.pacticipants.versions.pacts.get consumer: 'Condor', provider: 'Pricing Service', consumer_version: '1.3.0'
|
222
|
+
expect(response).to eq(pact_json)
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
246
226
|
describe "finding the latest version" do
|
247
227
|
context "when a pact is found" do
|
248
228
|
|
249
|
-
let(:response_headers) { pact_broker_response_headers.merge({'Content-Type' => 'application/json
|
229
|
+
let(:response_headers) { pact_broker_response_headers.merge({'Content-Type' => 'application/json', 'X-Pact-Consumer-Version' => consumer_version}) }
|
250
230
|
before do
|
251
231
|
pact_broker.
|
252
232
|
given("a pact between Condor and the Pricing Service exists").
|
253
233
|
upon_receiving("a request to retrieve the latest pact between Condor and the Pricing Service").
|
254
234
|
with({
|
255
235
|
method: :get,
|
256
|
-
path: '/
|
236
|
+
path: '/pact/provider/Pricing%20Service/consumer/Condor/latest',
|
257
237
|
headers: {}
|
258
238
|
}).
|
259
239
|
will_respond_with({
|
@@ -276,7 +256,7 @@ module PactBroker::Client
|
|
276
256
|
upon_receiving("a request to retrieve the latest pact between Condor and the Pricing Service").
|
277
257
|
with({
|
278
258
|
method: :get,
|
279
|
-
path: '/
|
259
|
+
path: '/pact/provider/Pricing%20Service/consumer/Condor/latest',
|
280
260
|
headers: {}
|
281
261
|
}).
|
282
262
|
will_respond_with({
|
@@ -298,13 +278,12 @@ module PactBroker::Client
|
|
298
278
|
upon_receiving("a request to retrieve the pact between the production verison of Condor and the Pricing Service").
|
299
279
|
with({
|
300
280
|
method: :get,
|
301
|
-
path: '/
|
302
|
-
query: 'tag=prod',
|
281
|
+
path: '/pact/provider/Pricing%20Service/consumer/Condor/latest/prod',
|
303
282
|
headers: get_request_headers
|
304
283
|
}).
|
305
284
|
will_respond_with({
|
306
285
|
status: 200,
|
307
|
-
headers: {'Content-Type' => 'application/json
|
286
|
+
headers: {'Content-Type' => 'application/json', 'X-Pact-Consumer-Version' => consumer_version},
|
308
287
|
body: pact_hash,
|
309
288
|
headers: pact_broker_response_headers
|
310
289
|
})
|
@@ -328,9 +307,13 @@ module PactBroker::Client
|
|
328
307
|
pact_broker.
|
329
308
|
given("a version with production details exists for the Pricing Service").
|
330
309
|
upon_receiving("a request for the latest version tagged with 'prod'").
|
331
|
-
with(
|
310
|
+
with(
|
311
|
+
method: :get,
|
312
|
+
path: '/pacticipants/Pricing%20Service/versions/last',
|
313
|
+
query: 'tag=prod',
|
314
|
+
headers: get_request_headers).
|
332
315
|
will_respond_with( status: 200,
|
333
|
-
headers: pact_broker_response_headers.merge({'Content-Type' => 'application/json
|
316
|
+
headers: pact_broker_response_headers.merge({'Content-Type' => 'application/json'}),
|
334
317
|
body: body )
|
335
318
|
end
|
336
319
|
it 'returns the version details' do
|
@@ -0,0 +1,39 @@
|
|
1
|
+
{
|
2
|
+
"_links": {
|
3
|
+
"self": {
|
4
|
+
"href": "http://localhost:1234/pacts/latest"
|
5
|
+
}
|
6
|
+
},
|
7
|
+
"pacts": [
|
8
|
+
{
|
9
|
+
"_links": {
|
10
|
+
"self": {
|
11
|
+
"href": "http://localhost:1234/pacticipants/Condor/versions/1.3.0/pacts/Pricing%20Service"
|
12
|
+
}
|
13
|
+
},
|
14
|
+
"_embedded": {
|
15
|
+
"consumer": {
|
16
|
+
"name": "Condor",
|
17
|
+
"_links": {
|
18
|
+
"self": {
|
19
|
+
"href": "http://localhost:1234/pacticipants/Condor"
|
20
|
+
}
|
21
|
+
},
|
22
|
+
"_embedded": {
|
23
|
+
"version": {
|
24
|
+
"number": "1.3.0"
|
25
|
+
}
|
26
|
+
}
|
27
|
+
},
|
28
|
+
"provider": {
|
29
|
+
"_links": {
|
30
|
+
"self": {
|
31
|
+
"href": "http://localhost:1234/pacticipants/Pricing%20Service"
|
32
|
+
}
|
33
|
+
},
|
34
|
+
"name": "Pricing Service"
|
35
|
+
}
|
36
|
+
}
|
37
|
+
}
|
38
|
+
]
|
39
|
+
}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pact_broker-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-11-
|
12
|
+
date: 2013-11-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: pact
|
@@ -148,6 +148,7 @@ extra_rdoc_files: []
|
|
148
148
|
files:
|
149
149
|
- .gitignore
|
150
150
|
- .rspec
|
151
|
+
- CHANGELOG.md
|
151
152
|
- Gemfile
|
152
153
|
- Gemfile.lock
|
153
154
|
- README.md
|
@@ -175,6 +176,7 @@ files:
|
|
175
176
|
- spec/spec_helper.rb
|
176
177
|
- spec/support/pacticipant_get.json
|
177
178
|
- spec/support/pacticipants_list.json
|
179
|
+
- spec/support/pacts_latest_list.json
|
178
180
|
- tasks/pact.rake
|
179
181
|
homepage: https://github.com/bethesque/pact_broker-client.git
|
180
182
|
licenses:
|
@@ -191,7 +193,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
191
193
|
version: '0'
|
192
194
|
segments:
|
193
195
|
- 0
|
194
|
-
hash:
|
196
|
+
hash: 931028457925136727
|
195
197
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
196
198
|
none: false
|
197
199
|
requirements:
|
@@ -200,7 +202,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
200
202
|
version: '0'
|
201
203
|
segments:
|
202
204
|
- 0
|
203
|
-
hash:
|
205
|
+
hash: 931028457925136727
|
204
206
|
requirements: []
|
205
207
|
rubyforge_project:
|
206
208
|
rubygems_version: 1.8.23
|
@@ -218,3 +220,4 @@ test_files:
|
|
218
220
|
- spec/spec_helper.rb
|
219
221
|
- spec/support/pacticipant_get.json
|
220
222
|
- spec/support/pacticipants_list.json
|
223
|
+
- spec/support/pacts_latest_list.json
|