pact_broker-client 0.0.5 → 0.0.6
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 +12 -1
- data/Gemfile.lock +12 -5
- data/Rakefile +1 -26
- data/lib/pact_broker/client/version.rb +1 -1
- data/lib/pact_broker/client/versions.rb +21 -4
- data/spec/pacts/pact_broker_client-pact_broker.json +96 -48
- data/spec/service_providers/pact_broker_client_publish_spec.rb +95 -0
- data/spec/service_providers/pact_broker_client_register_repository_spec.rb +49 -0
- data/spec/service_providers/pact_broker_client_retrive_pact_spec.rb +149 -0
- data/spec/service_providers/pact_broker_client_tags_spec.rb +101 -0
- data/spec/spec_helper.rb +1 -6
- data/spec/support/pacts_latest_list.json +4 -2
- data/spec/support/shared_context.rb +15 -0
- metadata +14 -6
- data/spec/service_providers/pact_broker_client_spec.rb +0 -338
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,17 @@
|
|
1
1
|
Do this to generate your change history
|
2
2
|
|
3
|
-
$ git log --
|
3
|
+
$ git log --pretty=format:' * %h - %s (%an, %ad)'
|
4
|
+
|
5
|
+
#### 0.0.6 (2014-03-24)
|
6
|
+
|
7
|
+
* 2ad5f7d - Updated method of tagging versions (bethesque, Sat Mar 22 16:54:37 2014 +1100)
|
8
|
+
* b74128f - Added 'latest' pact url to pact representation in the 'latest pacts' response (bethesque, Sat Mar 22 09:04:31 2014 +1100)
|
9
|
+
|
10
|
+
#### 0.0.5 (2014-01-03)
|
11
|
+
|
12
|
+
* 194183c - Removing debugger for Travis CI (bethesque, Fri Jan 3 12:45:07 2014 +1100)
|
13
|
+
* b42aba9 - Changed 'last' to 'latest' (bethesque, Tue Nov 19 09:30:12 2013 +1100)
|
14
|
+
* 30d63b7 - Changed name to title in list pacticipants response (bethesque, Mon Nov 18 09:37:11 2013 +1100)
|
4
15
|
|
5
16
|
#### 0.0.4 (2013-11-15)
|
6
17
|
|
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.6)
|
5
5
|
httparty
|
6
6
|
json
|
7
7
|
pact
|
@@ -9,24 +9,27 @@ PATH
|
|
9
9
|
GEM
|
10
10
|
remote: https://rubygems.org/
|
11
11
|
specs:
|
12
|
-
awesome_print (1.
|
12
|
+
awesome_print (1.2.0)
|
13
13
|
coderay (1.0.9)
|
14
|
+
daemons (1.1.9)
|
14
15
|
diff-lcs (1.2.5)
|
16
|
+
eventmachine (1.0.3)
|
15
17
|
fakefs (0.4.2)
|
16
18
|
find_a_port (1.0.1)
|
17
|
-
httparty (0.
|
19
|
+
httparty (0.13.0)
|
18
20
|
json (~> 1.8)
|
19
21
|
multi_xml (>= 0.5.2)
|
20
22
|
json (1.8.1)
|
21
23
|
method_source (0.8.2)
|
22
24
|
multi_xml (0.5.5)
|
23
|
-
pact (1.0.
|
24
|
-
awesome_print (~> 1.1
|
25
|
+
pact (1.0.30)
|
26
|
+
awesome_print (~> 1.1)
|
25
27
|
find_a_port (~> 1.0.1)
|
26
28
|
json
|
27
29
|
rack-test (~> 0.6.2)
|
28
30
|
randexp (~> 0.1.7)
|
29
31
|
rspec (~> 2.12)
|
32
|
+
thin
|
30
33
|
thor
|
31
34
|
webrick
|
32
35
|
pry (0.9.12.2)
|
@@ -49,6 +52,10 @@ GEM
|
|
49
52
|
rspec (~> 2.11)
|
50
53
|
rspec-mocks (2.14.4)
|
51
54
|
slop (3.4.6)
|
55
|
+
thin (1.6.1)
|
56
|
+
daemons (>= 1.0.9)
|
57
|
+
eventmachine (>= 1.0.0)
|
58
|
+
rack (>= 1.0.0)
|
52
59
|
thor (0.18.1)
|
53
60
|
webrick (1.3.1)
|
54
61
|
|
data/Rakefile
CHANGED
@@ -1,33 +1,8 @@
|
|
1
|
-
require
|
2
|
-
module Bundler
|
3
|
-
class GemHelper
|
4
|
-
def install
|
5
|
-
desc "Build #{name}-#{version}.gem into the pkg directory"
|
6
|
-
task 'build' do
|
7
|
-
build_gem
|
8
|
-
end
|
9
|
-
|
10
|
-
desc "Build and install #{name}-#{version}.gem into system gems"
|
11
|
-
task 'install' do
|
12
|
-
install_gem
|
13
|
-
end
|
14
|
-
|
15
|
-
GemHelper.instance = self
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
Bundler::GemHelper.install_tasks
|
1
|
+
require "bundler/gem_tasks"
|
20
2
|
require 'rspec/core/rake_task'
|
21
|
-
#require 'geminabox-client'
|
22
3
|
|
23
4
|
Dir.glob('lib/tasks/**/*.rake').each { |task| load "#{Dir.pwd}/#{task}" }
|
24
5
|
Dir.glob('tasks/**/*.rake').each { |task| load "#{Dir.pwd}/#{task}" }
|
25
6
|
RSpec::Core::RakeTask.new(:spec)
|
26
7
|
|
27
8
|
task :default => [:spec]
|
28
|
-
|
29
|
-
# desc "Release to REA gems host"
|
30
|
-
# task :publish => :build do
|
31
|
-
# gem_file = "pkg/pact-broker-client#{PactBroker::Client::VERSION}.gem"
|
32
|
-
# Geminabox::Client.new('http://rea-rubygems').upload(gem_file)
|
33
|
-
# end
|
@@ -7,18 +7,25 @@ module PactBroker
|
|
7
7
|
|
8
8
|
def latest options
|
9
9
|
query = options[:tag] ? {tag: options[:tag]} : {}
|
10
|
-
response = self.class.get("#{
|
10
|
+
response = self.class.get("#{versions_base_url(options)}/latest", query: query, headers: default_get_headers)
|
11
11
|
|
12
12
|
handle_response(response) do
|
13
13
|
string_keys_to_symbols(response.to_hash)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
+
def tag options
|
18
|
+
response = put(tag_url(options), headers: default_put_headers.merge("Content-Length" => "0"))
|
19
|
+
handle_response(response) do
|
20
|
+
true
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
17
24
|
def update options
|
18
25
|
body = options.select{ | key, v | [:repository_ref, :repository_url, :tags].include?(key)}
|
19
26
|
body[:tags] ||= []
|
20
27
|
(body[:tags] << options[:tag]) if options[:tag]
|
21
|
-
response = patch("#{version_base_url(options)}
|
28
|
+
response = patch("#{version_base_url(options)}", body: body, headers: default_patch_headers)
|
22
29
|
handle_response(response) do
|
23
30
|
true
|
24
31
|
end
|
@@ -29,10 +36,20 @@ module PactBroker
|
|
29
36
|
end
|
30
37
|
|
31
38
|
private
|
32
|
-
|
33
|
-
|
39
|
+
|
40
|
+
def tag_url options
|
41
|
+
"#{version_base_url(options)}/tags/#{options.fetch(:tag)}"
|
42
|
+
end
|
43
|
+
|
44
|
+
def versions_base_url options
|
45
|
+
pacticipant = encode_param(options.fetch(:pacticipant))
|
34
46
|
"/pacticipants/#{pacticipant}/versions"
|
35
47
|
end
|
48
|
+
|
49
|
+
def version_base_url options
|
50
|
+
version = encode_param(options.fetch(:version))
|
51
|
+
"#{versions_base_url(options)}/#{version}"
|
52
|
+
end
|
36
53
|
end
|
37
54
|
end
|
38
55
|
end
|
@@ -29,9 +29,14 @@
|
|
29
29
|
"pacts": [
|
30
30
|
{
|
31
31
|
"_links": {
|
32
|
-
"self":
|
33
|
-
|
34
|
-
|
32
|
+
"self": [
|
33
|
+
{
|
34
|
+
"href": "http://example.org/pact/provider/Pricing%20Service/consumer/Condor/latest"
|
35
|
+
},
|
36
|
+
{
|
37
|
+
"href": "http://example.org/pact/provider/Pricing%20Service/consumer/Condor/version/1.3.0"
|
38
|
+
}
|
39
|
+
]
|
35
40
|
},
|
36
41
|
"_embedded": {
|
37
42
|
"consumer": {
|
@@ -320,50 +325,6 @@
|
|
320
325
|
}
|
321
326
|
}
|
322
327
|
},
|
323
|
-
{
|
324
|
-
"description": "a request to tag the production version of Condor",
|
325
|
-
"provider_state": "'Condor' exists in the pact-broker",
|
326
|
-
"request": {
|
327
|
-
"method": "patch",
|
328
|
-
"path": "/pacticipants/Condor/versions/1.3.0",
|
329
|
-
"body": {
|
330
|
-
"tags": [
|
331
|
-
"prod"
|
332
|
-
],
|
333
|
-
"repository_ref": "packages/condor-1.3.0"
|
334
|
-
},
|
335
|
-
"headers": {
|
336
|
-
"Content-Type": "application/json"
|
337
|
-
}
|
338
|
-
},
|
339
|
-
"response": {
|
340
|
-
"status": 200,
|
341
|
-
"headers": {
|
342
|
-
}
|
343
|
-
}
|
344
|
-
},
|
345
|
-
{
|
346
|
-
"description": "a request to tag the production version of Condor",
|
347
|
-
"provider_state": "'Condor' does not exist in the pact-broker",
|
348
|
-
"request": {
|
349
|
-
"method": "patch",
|
350
|
-
"path": "/pacticipants/Condor/versions/1.3.0",
|
351
|
-
"body": {
|
352
|
-
"tags": [
|
353
|
-
"prod"
|
354
|
-
],
|
355
|
-
"repository_ref": "packages/condor-1.3.0"
|
356
|
-
},
|
357
|
-
"headers": {
|
358
|
-
"Content-Type": "application/json"
|
359
|
-
}
|
360
|
-
},
|
361
|
-
"response": {
|
362
|
-
"status": 201,
|
363
|
-
"headers": {
|
364
|
-
}
|
365
|
-
}
|
366
|
-
},
|
367
328
|
{
|
368
329
|
"description": "a request retrieve a pact for a specific version",
|
369
330
|
"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",
|
@@ -500,11 +461,98 @@
|
|
500
461
|
"headers": {
|
501
462
|
}
|
502
463
|
}
|
464
|
+
},
|
465
|
+
{
|
466
|
+
"description": "a request to tag the production version of Condor",
|
467
|
+
"provider_state": "'Condor' exists in the pact-broker",
|
468
|
+
"request": {
|
469
|
+
"method": "put",
|
470
|
+
"path": "/pacticipants/Condor/versions/1.3.0/tags/prod",
|
471
|
+
"headers": {
|
472
|
+
"Content-Type": "application/json"
|
473
|
+
}
|
474
|
+
},
|
475
|
+
"response": {
|
476
|
+
"status": 201,
|
477
|
+
"headers": {
|
478
|
+
},
|
479
|
+
"body": {
|
480
|
+
"_links": {
|
481
|
+
"self": {
|
482
|
+
"href": {
|
483
|
+
"json_class": "Pact::Term",
|
484
|
+
"data": {
|
485
|
+
"generate": "http://localhost:1234/pacticipants/Condor/versions/1.3.0/tags/prod",
|
486
|
+
"matcher": {"json_class":"Regexp","o":0,"s":"http://.*/pacticipants/Condor/versions/1.3.0/tags/prod"}
|
487
|
+
}
|
488
|
+
}
|
489
|
+
}
|
490
|
+
}
|
491
|
+
}
|
492
|
+
}
|
493
|
+
},
|
494
|
+
{
|
495
|
+
"description": "a request to tag the production version of Condor",
|
496
|
+
"provider_state": "'Condor' does not exist in the pact-broker",
|
497
|
+
"request": {
|
498
|
+
"method": "put",
|
499
|
+
"path": "/pacticipants/Condor/versions/1.3.0/tags/prod",
|
500
|
+
"headers": {
|
501
|
+
"Content-Type": "application/json"
|
502
|
+
}
|
503
|
+
},
|
504
|
+
"response": {
|
505
|
+
"status": 201,
|
506
|
+
"headers": {
|
507
|
+
},
|
508
|
+
"body": {
|
509
|
+
"_links": {
|
510
|
+
"self": {
|
511
|
+
"href": {
|
512
|
+
"json_class": "Pact::Term",
|
513
|
+
"data": {
|
514
|
+
"generate": "http://localhost:1234/pacticipants/Condor/versions/1.3.0/tags/prod",
|
515
|
+
"matcher": {"json_class":"Regexp","o":0,"s":"http://.*/pacticipants/Condor/versions/1.3.0/tags/prod"}
|
516
|
+
}
|
517
|
+
}
|
518
|
+
}
|
519
|
+
}
|
520
|
+
}
|
521
|
+
}
|
522
|
+
},
|
523
|
+
{
|
524
|
+
"description": "a request to tag the production version of Condor",
|
525
|
+
"provider_state": "'Condor' exists in the pact-broker with version 1.3.0, tagged with 'prod'",
|
526
|
+
"request": {
|
527
|
+
"method": "put",
|
528
|
+
"path": "/pacticipants/Condor/versions/1.3.0/tags/prod",
|
529
|
+
"headers": {
|
530
|
+
"Content-Type": "application/json"
|
531
|
+
}
|
532
|
+
},
|
533
|
+
"response": {
|
534
|
+
"status": 200,
|
535
|
+
"headers": {
|
536
|
+
},
|
537
|
+
"body": {
|
538
|
+
"_links": {
|
539
|
+
"self": {
|
540
|
+
"href": {
|
541
|
+
"json_class": "Pact::Term",
|
542
|
+
"data": {
|
543
|
+
"generate": "http://localhost:1234/pacticipants/Condor/versions/1.3.0/tags/prod",
|
544
|
+
"matcher": {"json_class":"Regexp","o":0,"s":"http://.*/pacticipants/Condor/versions/1.3.0/tags/prod"}
|
545
|
+
}
|
546
|
+
}
|
547
|
+
}
|
548
|
+
}
|
549
|
+
}
|
550
|
+
}
|
503
551
|
}
|
504
552
|
],
|
505
553
|
"metadata": {
|
506
554
|
"pact_gem": {
|
507
|
-
"version": "1.0.
|
555
|
+
"version": "1.0.23"
|
508
556
|
}
|
509
557
|
}
|
510
558
|
}
|
@@ -0,0 +1,95 @@
|
|
1
|
+
module PactBroker::Client
|
2
|
+
describe PactBrokerClient, :pact => true do
|
3
|
+
|
4
|
+
include_context "pact broker"
|
5
|
+
|
6
|
+
describe "publishing a pact" do
|
7
|
+
|
8
|
+
let(:options) { { pact_json: pact_json, consumer_version: consumer_version }}
|
9
|
+
|
10
|
+
context "when the provider already exists in the pact-broker" do
|
11
|
+
before do
|
12
|
+
pact_broker.
|
13
|
+
given("the 'Pricing Service' already exists in the pact-broker").
|
14
|
+
upon_receiving("a request to publish a pact").
|
15
|
+
with(
|
16
|
+
method: :put,
|
17
|
+
path: '/pact/provider/Pricing%20Service/consumer/Condor/version/1.3.0',
|
18
|
+
headers: default_request_headers,
|
19
|
+
body: pact_hash ).
|
20
|
+
will_respond_with(
|
21
|
+
headers: pact_broker_response_headers,
|
22
|
+
status: 201
|
23
|
+
)
|
24
|
+
end
|
25
|
+
it "returns true" do
|
26
|
+
expect(pact_broker_client.pacticipants.versions.pacts.publish(options)).to be_true
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context "when the provider, consumer, pact and version already exist in the pact-broker" do
|
31
|
+
before do
|
32
|
+
pact_broker.
|
33
|
+
given("the 'Pricing Service' and 'Condor' already exist in the pact-broker, and Condor already has a pact published for version 1.3.0").
|
34
|
+
upon_receiving("a request to publish a pact").
|
35
|
+
with(
|
36
|
+
method: :put,
|
37
|
+
path: '/pact/provider/Pricing%20Service/consumer/Condor/version/1.3.0',
|
38
|
+
headers: default_request_headers,
|
39
|
+
body: pact_hash ).
|
40
|
+
will_respond_with(
|
41
|
+
headers: pact_broker_response_headers,
|
42
|
+
status: 200
|
43
|
+
)
|
44
|
+
end
|
45
|
+
it "returns true" do
|
46
|
+
expect(pact_broker_client.pacticipants.versions.pacts.publish(options)).to be_true
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context "when the provider does not exist, but the consumer, pact and version already exist in the pact-broker" do
|
51
|
+
before do
|
52
|
+
pact_broker.
|
53
|
+
given("'Condor' already exist in the pact-broker, but the 'Pricing Service' does not").
|
54
|
+
upon_receiving("a request to publish a pact").
|
55
|
+
with(
|
56
|
+
method: :put,
|
57
|
+
path: '/pact/provider/Pricing%20Service/consumer/Condor/version/1.3.0',
|
58
|
+
headers: default_request_headers,
|
59
|
+
body: pact_hash ).
|
60
|
+
will_respond_with(
|
61
|
+
headers: pact_broker_response_headers,
|
62
|
+
status: 201
|
63
|
+
)
|
64
|
+
end
|
65
|
+
it "returns true" do
|
66
|
+
expect(pact_broker_client.pacticipants.versions.pacts.publish(options)).to be_true
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context "when publishing is not successful" do
|
71
|
+
before do
|
72
|
+
pact_broker.
|
73
|
+
given("an error occurs while publishing a pact").
|
74
|
+
upon_receiving("a request to publish a pact").
|
75
|
+
with(
|
76
|
+
method: :put,
|
77
|
+
path: '/pact/provider/Pricing%20Service/consumer/Condor/version/1.3.0',
|
78
|
+
headers: default_request_headers,
|
79
|
+
body: pact_hash ).
|
80
|
+
will_respond_with(
|
81
|
+
status: 500,
|
82
|
+
headers: {'Content-Type' => 'application/json'},
|
83
|
+
body: {
|
84
|
+
message: Pact::Term.new(matcher: /.*/, generate: 'An error occurred')
|
85
|
+
}
|
86
|
+
)
|
87
|
+
end
|
88
|
+
it "raises an error" do
|
89
|
+
expect { pact_broker_client.pacticipants.versions.pacts.publish options }.to raise_error /An error occurred/
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module PactBroker::Client
|
2
|
+
describe Pacticipants, :pact => true do
|
3
|
+
|
4
|
+
include_context "pact broker"
|
5
|
+
|
6
|
+
let(:repository_url ) { "git@git.realestate.com.au:business-systems/pricing-service" }
|
7
|
+
|
8
|
+
describe "registering a repository url" do
|
9
|
+
context "where the pacticipant does not already exist in the pact-broker" do
|
10
|
+
before do
|
11
|
+
pact_broker.
|
12
|
+
given("the 'Pricing Service' does not exist in the pact-broker").
|
13
|
+
upon_receiving("a request to register the repository URL of a pacticipant").
|
14
|
+
with(
|
15
|
+
method: :patch,
|
16
|
+
path: '/pacticipants/Pricing%20Service',
|
17
|
+
headers: patch_request_headers,
|
18
|
+
body: {repository_url: repository_url} ).
|
19
|
+
will_respond_with(
|
20
|
+
status: 201,
|
21
|
+
headers: pact_broker_response_headers
|
22
|
+
)
|
23
|
+
end
|
24
|
+
it "returns true" do
|
25
|
+
expect(pact_broker_client.pacticipants.update({:pacticipant => 'Pricing Service', :repository_url => repository_url})).to be_true
|
26
|
+
end
|
27
|
+
end
|
28
|
+
context "where the 'Pricing Service' exists in the pact-broker" do
|
29
|
+
before do
|
30
|
+
pact_broker.
|
31
|
+
given("the 'Pricing Service' already exists in the pact-broker").
|
32
|
+
upon_receiving("a request to register the repository URL of a pacticipant").
|
33
|
+
with(
|
34
|
+
method: :patch,
|
35
|
+
path: '/pacticipants/Pricing%20Service',
|
36
|
+
headers: patch_request_headers,
|
37
|
+
body: { repository_url: repository_url }).
|
38
|
+
will_respond_with(
|
39
|
+
status: 200,
|
40
|
+
headers: pact_broker_response_headers
|
41
|
+
)
|
42
|
+
end
|
43
|
+
it "returns true" do
|
44
|
+
expect(pact_broker_client.pacticipants.update({:pacticipant => 'Pricing Service', :repository_url => repository_url})).to be_true
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,149 @@
|
|
1
|
+
require_relative 'pact_helper'
|
2
|
+
require 'pact_broker/client'
|
3
|
+
|
4
|
+
module PactBroker::Client
|
5
|
+
describe Pacts, :pact => true do
|
6
|
+
|
7
|
+
include_context "pact broker"
|
8
|
+
|
9
|
+
describe "retrieving a pact" do
|
10
|
+
describe "retriving a specific version" do
|
11
|
+
before do
|
12
|
+
pact_broker.
|
13
|
+
given("the 'Pricing Service' and 'Condor' already exist in the pact-broker, and Condor already has a pact published for version 1.3.0").
|
14
|
+
upon_receiving("a request retrieve a pact for a specific version").
|
15
|
+
with(
|
16
|
+
method: :get,
|
17
|
+
path: '/pact/provider/Pricing%20Service/consumer/Condor/version/1.3.0',
|
18
|
+
headers: {} ).
|
19
|
+
will_respond_with(
|
20
|
+
headers: pact_broker_response_headers,
|
21
|
+
status: 200,
|
22
|
+
body: pact_hash
|
23
|
+
)
|
24
|
+
end
|
25
|
+
it "returns the pact json" do
|
26
|
+
response = pact_broker_client.pacticipants.versions.pacts.get consumer: 'Condor', provider: 'Pricing Service', consumer_version: '1.3.0'
|
27
|
+
expect(response).to eq(pact_json)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "finding the latest version" do
|
32
|
+
context "when a pact is found" do
|
33
|
+
|
34
|
+
let(:response_headers) { pact_broker_response_headers.merge({'Content-Type' => 'application/json', 'X-Pact-Consumer-Version' => consumer_version}) }
|
35
|
+
before do
|
36
|
+
pact_broker.
|
37
|
+
given("a pact between Condor and the Pricing Service exists").
|
38
|
+
upon_receiving("a request to retrieve the latest pact between Condor and the Pricing Service").
|
39
|
+
with(
|
40
|
+
method: :get,
|
41
|
+
path: '/pact/provider/Pricing%20Service/consumer/Condor/latest',
|
42
|
+
headers: {}
|
43
|
+
).
|
44
|
+
will_respond_with(
|
45
|
+
status: 200,
|
46
|
+
headers: response_headers,
|
47
|
+
body: pact_hash
|
48
|
+
)
|
49
|
+
end
|
50
|
+
|
51
|
+
it "returns the pact json" do
|
52
|
+
response = pact_broker_client.pacticipants.versions.pacts.latest consumer: 'Condor', provider: 'Pricing Service'
|
53
|
+
expect(response).to eq(pact_json)
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
context "when no pact is found" do
|
58
|
+
before do
|
59
|
+
pact_broker.
|
60
|
+
given("no pact between Condor and the Pricing Service exists").
|
61
|
+
upon_receiving("a request to retrieve the latest pact between Condor and the Pricing Service").
|
62
|
+
with(
|
63
|
+
method: :get,
|
64
|
+
path: '/pact/provider/Pricing%20Service/consumer/Condor/latest',
|
65
|
+
headers: {}
|
66
|
+
).
|
67
|
+
will_respond_with(
|
68
|
+
status: 404,
|
69
|
+
headers: pact_broker_response_headers
|
70
|
+
)
|
71
|
+
end
|
72
|
+
it "returns nil" do
|
73
|
+
response = pact_broker_client.pacticipants.versions.pacts.latest consumer: 'Condor', provider: 'Pricing Service'
|
74
|
+
expect(response).to eq(nil)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
describe "finding the latest production version" do
|
79
|
+
context "when a pact is found" do
|
80
|
+
before do
|
81
|
+
pact_broker.
|
82
|
+
given("a pact between Condor and the Pricing Service exists for the production version of Condor").
|
83
|
+
upon_receiving("a request to retrieve the pact between the production verison of Condor and the Pricing Service").
|
84
|
+
with(
|
85
|
+
method: :get,
|
86
|
+
path: '/pact/provider/Pricing%20Service/consumer/Condor/latest/prod',
|
87
|
+
headers: get_request_headers
|
88
|
+
).
|
89
|
+
will_respond_with(
|
90
|
+
status: 200,
|
91
|
+
headers: {'Content-Type' => 'application/json', 'X-Pact-Consumer-Version' => consumer_version},
|
92
|
+
body: pact_hash,
|
93
|
+
headers: pact_broker_response_headers
|
94
|
+
)
|
95
|
+
end
|
96
|
+
|
97
|
+
it "returns the pact json" do
|
98
|
+
response = pact_broker_client.pacticipants.versions.pacts.latest consumer: 'Condor', provider: 'Pricing Service', tag: 'prod'
|
99
|
+
expect(response).to eq(pact_json)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
describe "retriving versions" do
|
106
|
+
context "when retrieving the production details of a version" do
|
107
|
+
context "when a version is found" do
|
108
|
+
let(:repository_ref) { "package/pricing-service-1.2.3"}
|
109
|
+
let(:tags) { ['prod']}
|
110
|
+
let(:body) { { number: '1.2.3', repository_ref: repository_ref, tags: tags } }
|
111
|
+
before do
|
112
|
+
pact_broker.
|
113
|
+
given("a version with production details exists for the Pricing Service").
|
114
|
+
upon_receiving("a request for the latest version tagged with 'prod'").
|
115
|
+
with(
|
116
|
+
method: :get,
|
117
|
+
path: '/pacticipants/Pricing%20Service/versions/latest',
|
118
|
+
query: 'tag=prod',
|
119
|
+
headers: get_request_headers).
|
120
|
+
will_respond_with(
|
121
|
+
status: 200,
|
122
|
+
headers: pact_broker_response_headers.merge({'Content-Type' => 'application/json'}),
|
123
|
+
body: body )
|
124
|
+
end
|
125
|
+
it 'returns the version details' do
|
126
|
+
expect( pact_broker_client.pacticipants.versions.latest pacticipant: 'Pricing Service', tag: 'prod' ).to eq body
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
context "when a version is not found" do
|
131
|
+
before do
|
132
|
+
pact_broker.
|
133
|
+
given("no version exists for the Pricing Service").
|
134
|
+
upon_receiving("a request for the latest version").
|
135
|
+
with(
|
136
|
+
method: :get,
|
137
|
+
path: '/pacticipants/Pricing%20Service/versions/latest',
|
138
|
+
headers: get_request_headers).
|
139
|
+
will_respond_with(
|
140
|
+
status: 404,
|
141
|
+
headers: pact_broker_response_headers )
|
142
|
+
end
|
143
|
+
it 'returns nil' do
|
144
|
+
expect( pact_broker_client.pacticipants.versions.latest pacticipant: 'Pricing Service' ).to eq nil
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'pact_broker/client'
|
3
|
+
require_relative 'pact_helper'
|
4
|
+
|
5
|
+
describe PactBroker::Client::Versions, pact: true do
|
6
|
+
|
7
|
+
include_context "pact broker"
|
8
|
+
|
9
|
+
describe "tagging a version with prod details" do
|
10
|
+
let(:repository_ref) { "packages/condor-#{version}" }
|
11
|
+
|
12
|
+
let(:tag_options) { {pacticipant: 'Condor', version: version, repository_ref: repository_ref, :tag => 'prod'} }
|
13
|
+
context "when the component exists" do
|
14
|
+
before do
|
15
|
+
pact_broker.
|
16
|
+
given("'Condor' exists in the pact-broker").
|
17
|
+
upon_receiving("a request to tag the production version of Condor").
|
18
|
+
with(
|
19
|
+
method: :put,
|
20
|
+
path: '/pacticipants/Condor/versions/1.3.0/tags/prod',
|
21
|
+
headers: default_request_headers).
|
22
|
+
will_respond_with(
|
23
|
+
status: 201,
|
24
|
+
headers: pact_broker_response_headers,
|
25
|
+
body: {
|
26
|
+
_links: {
|
27
|
+
self: {
|
28
|
+
href:
|
29
|
+
Pact::Term.new(
|
30
|
+
generate: 'http://localhost:1234/pacticipants/Condor/versions/1.3.0/tags/prod',
|
31
|
+
matcher: %r{http://.*/pacticipants/Condor/versions/1.3.0/tags/prod})
|
32
|
+
}
|
33
|
+
}
|
34
|
+
}
|
35
|
+
)
|
36
|
+
end
|
37
|
+
it "returns true" do
|
38
|
+
expect(pact_broker_client.pacticipants.versions.tag tag_options).to be_true
|
39
|
+
end
|
40
|
+
end
|
41
|
+
context "when the component does not exist" do
|
42
|
+
before do
|
43
|
+
pact_broker.
|
44
|
+
given("'Condor' does not exist in the pact-broker").
|
45
|
+
upon_receiving("a request to tag the production version of Condor").
|
46
|
+
with(
|
47
|
+
method: :put,
|
48
|
+
path: '/pacticipants/Condor/versions/1.3.0/tags/prod',
|
49
|
+
headers: default_request_headers).
|
50
|
+
will_respond_with(
|
51
|
+
status: 201,
|
52
|
+
headers: pact_broker_response_headers,
|
53
|
+
body: {
|
54
|
+
_links: {
|
55
|
+
self: {
|
56
|
+
href:
|
57
|
+
Pact::Term.new(
|
58
|
+
generate: 'http://localhost:1234/pacticipants/Condor/versions/1.3.0/tags/prod',
|
59
|
+
matcher: %r{http://.*/pacticipants/Condor/versions/1.3.0/tags/prod})
|
60
|
+
}
|
61
|
+
}
|
62
|
+
}
|
63
|
+
)
|
64
|
+
end
|
65
|
+
it "returns true" do
|
66
|
+
expect(pact_broker_client.pacticipants.versions.tag tag_options).to be_true
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context "when the tag already exists" do
|
71
|
+
before do
|
72
|
+
pact_broker.
|
73
|
+
given("'Condor' exists in the pact-broker with version 1.3.0, tagged with 'prod'").
|
74
|
+
upon_receiving("a request to tag the production version of Condor").
|
75
|
+
with(
|
76
|
+
method: :put,
|
77
|
+
path: '/pacticipants/Condor/versions/1.3.0/tags/prod',
|
78
|
+
headers: default_request_headers).
|
79
|
+
will_respond_with(
|
80
|
+
status: 200,
|
81
|
+
headers: pact_broker_response_headers,
|
82
|
+
body: {
|
83
|
+
_links: {
|
84
|
+
self: {
|
85
|
+
href:
|
86
|
+
Pact::Term.new(
|
87
|
+
generate: 'http://localhost:1234/pacticipants/Condor/versions/1.3.0/tags/prod',
|
88
|
+
matcher: %r{http://.*/pacticipants/Condor/versions/1.3.0/tags/prod})
|
89
|
+
}
|
90
|
+
}
|
91
|
+
}
|
92
|
+
)
|
93
|
+
end
|
94
|
+
|
95
|
+
it "returns true" do
|
96
|
+
expect(pact_broker_client.pacticipants.versions.tag tag_options).to be_true
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -7,9 +7,11 @@
|
|
7
7
|
"pacts": [
|
8
8
|
{
|
9
9
|
"_links": {
|
10
|
-
"self": {
|
10
|
+
"self": [{
|
11
|
+
"href": "http://example.org/pact/provider/Pricing%20Service/consumer/Condor/latest"
|
12
|
+
},{
|
11
13
|
"href": "http://example.org/pact/provider/Pricing%20Service/consumer/Condor/version/1.3.0"
|
12
|
-
}
|
14
|
+
}]
|
13
15
|
},
|
14
16
|
"_embedded": {
|
15
17
|
"consumer": {
|
@@ -0,0 +1,15 @@
|
|
1
|
+
shared_context "pact broker" do
|
2
|
+
|
3
|
+
let(:pact_hash) { {consumer: {name: 'Condor'}, provider: {name: 'Pricing Service'}, interactions: []} }
|
4
|
+
let(:consumer_contract) { Pact::ConsumerContract.from_hash pact_hash }
|
5
|
+
let(:pact_json) { pact_hash.to_json }
|
6
|
+
let(:pact_broker_client) { PactBroker::Client::PactBrokerClient.new(base_url: 'http://localhost:1234') }
|
7
|
+
let(:consumer_version) { '1.3.0' }
|
8
|
+
let(:version) { '1.3.0' }
|
9
|
+
let(:pact_broker_version) { Pact::Term.new(:matcher => /\d+\.\d+\.\d+/, :generate => '1.0.0') }
|
10
|
+
let(:pact_broker_response_headers) { {} }
|
11
|
+
let(:default_request_headers) { { 'Content-Type' => 'application/json'} }
|
12
|
+
let(:patch_request_headers) { { 'Content-Type' => 'application/json'} }
|
13
|
+
let(:get_request_headers) { { 'Accept' => 'application/json'} }
|
14
|
+
|
15
|
+
end
|
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.6
|
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: 2014-
|
12
|
+
date: 2014-03-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: pact
|
@@ -155,12 +155,16 @@ files:
|
|
155
155
|
- spec/lib/pact_broker/client/tasks/publication_task_spec.rb
|
156
156
|
- spec/pacts/pact_broker_client-pact_broker.json
|
157
157
|
- spec/service_providers/extra_goodies_spec.rb
|
158
|
-
- spec/service_providers/
|
158
|
+
- spec/service_providers/pact_broker_client_publish_spec.rb
|
159
|
+
- spec/service_providers/pact_broker_client_register_repository_spec.rb
|
160
|
+
- spec/service_providers/pact_broker_client_retrive_pact_spec.rb
|
161
|
+
- spec/service_providers/pact_broker_client_tags_spec.rb
|
159
162
|
- spec/service_providers/pact_helper.rb
|
160
163
|
- spec/spec_helper.rb
|
161
164
|
- spec/support/pacticipant_get.json
|
162
165
|
- spec/support/pacticipants_list.json
|
163
166
|
- spec/support/pacts_latest_list.json
|
167
|
+
- spec/support/shared_context.rb
|
164
168
|
- tasks/pact.rake
|
165
169
|
homepage: https://github.com/bethesque/pact_broker-client.git
|
166
170
|
licenses:
|
@@ -177,7 +181,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
177
181
|
version: '0'
|
178
182
|
segments:
|
179
183
|
- 0
|
180
|
-
hash: -
|
184
|
+
hash: -3052204763703773771
|
181
185
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
182
186
|
none: false
|
183
187
|
requirements:
|
@@ -186,7 +190,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
186
190
|
version: '0'
|
187
191
|
segments:
|
188
192
|
- 0
|
189
|
-
hash: -
|
193
|
+
hash: -3052204763703773771
|
190
194
|
requirements: []
|
191
195
|
rubyforge_project:
|
192
196
|
rubygems_version: 1.8.23
|
@@ -199,9 +203,13 @@ test_files:
|
|
199
203
|
- spec/lib/pact_broker/client/tasks/publication_task_spec.rb
|
200
204
|
- spec/pacts/pact_broker_client-pact_broker.json
|
201
205
|
- spec/service_providers/extra_goodies_spec.rb
|
202
|
-
- spec/service_providers/
|
206
|
+
- spec/service_providers/pact_broker_client_publish_spec.rb
|
207
|
+
- spec/service_providers/pact_broker_client_register_repository_spec.rb
|
208
|
+
- spec/service_providers/pact_broker_client_retrive_pact_spec.rb
|
209
|
+
- spec/service_providers/pact_broker_client_tags_spec.rb
|
203
210
|
- spec/service_providers/pact_helper.rb
|
204
211
|
- spec/spec_helper.rb
|
205
212
|
- spec/support/pacticipant_get.json
|
206
213
|
- spec/support/pacticipants_list.json
|
207
214
|
- spec/support/pacts_latest_list.json
|
215
|
+
- spec/support/shared_context.rb
|
@@ -1,338 +0,0 @@
|
|
1
|
-
require_relative 'pact_helper'
|
2
|
-
require 'pact_broker/client'
|
3
|
-
|
4
|
-
module PactBroker::Client
|
5
|
-
describe PactBrokerClient, :pact => true do
|
6
|
-
|
7
|
-
before do
|
8
|
-
@backup_version = PactBroker::Client::VERSION
|
9
|
-
silence_warnings do
|
10
|
-
PactBroker::Client::VERSION = "2.0.0"
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
after do
|
15
|
-
silence_warnings do
|
16
|
-
PactBroker::Client::VERSION = @backup_version
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
let(:pact_hash) { {consumer: {name: 'Condor'}, provider: {name: 'Pricing Service'}, interactions: []} }
|
21
|
-
let(:consumer_contract) { Pact::ConsumerContract.from_hash pact_hash }
|
22
|
-
let(:pact_json) { pact_hash.to_json }
|
23
|
-
let(:pact_broker_client) { PactBrokerClient.new(base_url: 'http://localhost:1234') }
|
24
|
-
let(:consumer_version) { '1.3.0' }
|
25
|
-
let(:version) { '1.3.0' }
|
26
|
-
let(:pact_broker_version) { Pact::Term.new(:matcher => /\d+\.\d+\.\d+/, :generate => '1.0.0') }
|
27
|
-
let(:pact_broker_response_headers) { {} }
|
28
|
-
let(:default_request_headers) { { 'Content-Type' => 'application/json'} }
|
29
|
-
let(:patch_request_headers) { { 'Content-Type' => 'application/json'} }
|
30
|
-
let(:get_request_headers) { { 'Accept' => 'application/json'} }
|
31
|
-
|
32
|
-
describe "publishing a pact" do
|
33
|
-
|
34
|
-
let(:options) { { pact_json: pact_json, consumer_version: consumer_version }}
|
35
|
-
|
36
|
-
context "when the provider already exists in the pact-broker" do
|
37
|
-
before do
|
38
|
-
pact_broker.
|
39
|
-
given("the 'Pricing Service' already exists in the pact-broker").
|
40
|
-
upon_receiving("a request to publish a pact").
|
41
|
-
with({
|
42
|
-
method: :put,
|
43
|
-
path: '/pact/provider/Pricing%20Service/consumer/Condor/version/1.3.0',
|
44
|
-
headers: default_request_headers,
|
45
|
-
body: pact_hash }).
|
46
|
-
will_respond_with( headers: pact_broker_response_headers,
|
47
|
-
status: 201
|
48
|
-
)
|
49
|
-
end
|
50
|
-
it "returns true" do
|
51
|
-
expect(pact_broker_client.pacticipants.versions.pacts.publish(options)).to be_true
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
context "when the provider, consumer, pact and version already exist in the pact-broker" do
|
56
|
-
before do
|
57
|
-
pact_broker.
|
58
|
-
given("the 'Pricing Service' and 'Condor' already exist in the pact-broker, and Condor already has a pact published for version 1.3.0").
|
59
|
-
upon_receiving("a request to publish a pact").
|
60
|
-
with({
|
61
|
-
method: :put,
|
62
|
-
path: '/pact/provider/Pricing%20Service/consumer/Condor/version/1.3.0',
|
63
|
-
headers: default_request_headers,
|
64
|
-
body: pact_hash }).
|
65
|
-
will_respond_with( headers: pact_broker_response_headers,
|
66
|
-
status: 200
|
67
|
-
)
|
68
|
-
end
|
69
|
-
it "returns true" do
|
70
|
-
expect(pact_broker_client.pacticipants.versions.pacts.publish(options)).to be_true
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
context "when the provider does not exist, but the consumer, pact and version already exist in the pact-broker" do
|
75
|
-
before do
|
76
|
-
pact_broker.
|
77
|
-
given("'Condor' already exist in the pact-broker, but the 'Pricing Service' does not").
|
78
|
-
upon_receiving("a request to publish a pact").
|
79
|
-
with({
|
80
|
-
method: :put,
|
81
|
-
path: '/pact/provider/Pricing%20Service/consumer/Condor/version/1.3.0',
|
82
|
-
headers: default_request_headers,
|
83
|
-
body: pact_hash }).
|
84
|
-
will_respond_with( headers: pact_broker_response_headers,
|
85
|
-
status: 201
|
86
|
-
)
|
87
|
-
end
|
88
|
-
it "returns true" do
|
89
|
-
expect(pact_broker_client.pacticipants.versions.pacts.publish(options)).to be_true
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
context "when publishing is not successful" do
|
94
|
-
before do
|
95
|
-
pact_broker.
|
96
|
-
given("an error occurs while publishing a pact").
|
97
|
-
upon_receiving("a request to publish a pact").
|
98
|
-
with({
|
99
|
-
method: :put,
|
100
|
-
path: '/pact/provider/Pricing%20Service/consumer/Condor/version/1.3.0',
|
101
|
-
headers: default_request_headers,
|
102
|
-
body: pact_hash }).
|
103
|
-
will_respond_with({
|
104
|
-
status: 500,
|
105
|
-
headers: {'Content-Type' => 'application/json'},
|
106
|
-
body: {
|
107
|
-
message: Pact::Term.new(matcher: /.*/, generate: 'An error occurred')
|
108
|
-
}
|
109
|
-
})
|
110
|
-
end
|
111
|
-
it "raises an error" do
|
112
|
-
expect { pact_broker_client.pacticipants.versions.pacts.publish options }.to raise_error /An error occurred/
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
end
|
117
|
-
|
118
|
-
let(:repository_url ) { "git@git.realestate.com.au:business-systems/pricing-service" }
|
119
|
-
|
120
|
-
describe "registering a repository url" do
|
121
|
-
context "where the pacticipant does not already exist in the pact-broker" do
|
122
|
-
before do
|
123
|
-
pact_broker.
|
124
|
-
given("the 'Pricing Service' does not exist in the pact-broker").
|
125
|
-
upon_receiving("a request to register the repository URL of a pacticipant").
|
126
|
-
with(
|
127
|
-
method: :patch,
|
128
|
-
path: '/pacticipants/Pricing%20Service',
|
129
|
-
headers: patch_request_headers,
|
130
|
-
body: {repository_url: repository_url} ).
|
131
|
-
will_respond_with(
|
132
|
-
status: 201,
|
133
|
-
headers: pact_broker_response_headers
|
134
|
-
)
|
135
|
-
end
|
136
|
-
it "returns true" do
|
137
|
-
expect(pact_broker_client.pacticipants.update({:pacticipant => 'Pricing Service', :repository_url => repository_url})).to be_true
|
138
|
-
end
|
139
|
-
end
|
140
|
-
context "where the 'Pricing Service' exists in the pact-broker" do
|
141
|
-
before do
|
142
|
-
pact_broker.
|
143
|
-
given("the 'Pricing Service' already exists in the pact-broker").
|
144
|
-
upon_receiving("a request to register the repository URL of a pacticipant").
|
145
|
-
with(
|
146
|
-
method: :patch,
|
147
|
-
path: '/pacticipants/Pricing%20Service',
|
148
|
-
headers: patch_request_headers,
|
149
|
-
body: {repository_url: repository_url} ).
|
150
|
-
will_respond_with(
|
151
|
-
status: 200,
|
152
|
-
headers: pact_broker_response_headers
|
153
|
-
)
|
154
|
-
end
|
155
|
-
it "returns true" do
|
156
|
-
expect(pact_broker_client.pacticipants.update({:pacticipant => 'Pricing Service', :repository_url => repository_url})).to be_true
|
157
|
-
end
|
158
|
-
end
|
159
|
-
end
|
160
|
-
|
161
|
-
describe "tagging a version with prod details" do
|
162
|
-
let(:repository_ref) { "packages/condor-#{version}" }
|
163
|
-
|
164
|
-
let(:tag_options) { {pacticipant: 'Condor', version: version, repository_ref: repository_ref, :tag => 'prod'} }
|
165
|
-
context "when the component exists" do
|
166
|
-
before do
|
167
|
-
pact_broker.
|
168
|
-
given("'Condor' exists in the pact-broker").
|
169
|
-
upon_receiving("a request to tag the production version of Condor").
|
170
|
-
with(
|
171
|
-
method: :patch,
|
172
|
-
path: '/pacticipants/Condor/versions/1.3.0',
|
173
|
-
headers: patch_request_headers,
|
174
|
-
body: {:tags => ['prod'], :repository_ref => repository_ref } ).
|
175
|
-
will_respond_with(
|
176
|
-
status: 200,
|
177
|
-
headers: pact_broker_response_headers
|
178
|
-
)
|
179
|
-
end
|
180
|
-
it "returns true" do
|
181
|
-
expect(pact_broker_client.pacticipants.versions.update tag_options).to be_true
|
182
|
-
end
|
183
|
-
end
|
184
|
-
context "when the component does not exist" do
|
185
|
-
before do
|
186
|
-
pact_broker.
|
187
|
-
given("'Condor' does not exist in the pact-broker").
|
188
|
-
upon_receiving("a request to tag the production version of Condor").
|
189
|
-
with(
|
190
|
-
method: :patch,
|
191
|
-
path: '/pacticipants/Condor/versions/1.3.0',
|
192
|
-
headers: patch_request_headers,
|
193
|
-
body: {:tags => ['prod'], :repository_ref => repository_ref } ).
|
194
|
-
will_respond_with(
|
195
|
-
status: 201,
|
196
|
-
headers: pact_broker_response_headers
|
197
|
-
)
|
198
|
-
end
|
199
|
-
it "returns true" do
|
200
|
-
expect(pact_broker_client.pacticipants.versions.update tag_options).to be_true
|
201
|
-
end
|
202
|
-
end
|
203
|
-
end
|
204
|
-
|
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
|
-
|
226
|
-
describe "finding the latest version" do
|
227
|
-
context "when a pact is found" do
|
228
|
-
|
229
|
-
let(:response_headers) { pact_broker_response_headers.merge({'Content-Type' => 'application/json', 'X-Pact-Consumer-Version' => consumer_version}) }
|
230
|
-
before do
|
231
|
-
pact_broker.
|
232
|
-
given("a pact between Condor and the Pricing Service exists").
|
233
|
-
upon_receiving("a request to retrieve the latest pact between Condor and the Pricing Service").
|
234
|
-
with({
|
235
|
-
method: :get,
|
236
|
-
path: '/pact/provider/Pricing%20Service/consumer/Condor/latest',
|
237
|
-
headers: {}
|
238
|
-
}).
|
239
|
-
will_respond_with({
|
240
|
-
status: 200,
|
241
|
-
headers: response_headers,
|
242
|
-
body: pact_hash
|
243
|
-
})
|
244
|
-
end
|
245
|
-
|
246
|
-
it "returns the pact json" do
|
247
|
-
response = pact_broker_client.pacticipants.versions.pacts.latest consumer: 'Condor', provider: 'Pricing Service'
|
248
|
-
expect(response).to eq(pact_json)
|
249
|
-
end
|
250
|
-
|
251
|
-
end
|
252
|
-
context "when no pact is found" do
|
253
|
-
before do
|
254
|
-
pact_broker.
|
255
|
-
given("no pact between Condor and the Pricing Service exists").
|
256
|
-
upon_receiving("a request to retrieve the latest pact between Condor and the Pricing Service").
|
257
|
-
with({
|
258
|
-
method: :get,
|
259
|
-
path: '/pact/provider/Pricing%20Service/consumer/Condor/latest',
|
260
|
-
headers: {}
|
261
|
-
}).
|
262
|
-
will_respond_with({
|
263
|
-
status: 404,
|
264
|
-
headers: pact_broker_response_headers
|
265
|
-
})
|
266
|
-
end
|
267
|
-
it "returns nil" do
|
268
|
-
response = pact_broker_client.pacticipants.versions.pacts.latest consumer: 'Condor', provider: 'Pricing Service'
|
269
|
-
expect(response).to eq(nil)
|
270
|
-
end
|
271
|
-
end
|
272
|
-
end
|
273
|
-
describe "finding the latest production version" do
|
274
|
-
context "when a pact is found" do
|
275
|
-
before do
|
276
|
-
pact_broker.
|
277
|
-
given("a pact between Condor and the Pricing Service exists for the production version of Condor").
|
278
|
-
upon_receiving("a request to retrieve the pact between the production verison of Condor and the Pricing Service").
|
279
|
-
with({
|
280
|
-
method: :get,
|
281
|
-
path: '/pact/provider/Pricing%20Service/consumer/Condor/latest/prod',
|
282
|
-
headers: get_request_headers
|
283
|
-
}).
|
284
|
-
will_respond_with({
|
285
|
-
status: 200,
|
286
|
-
headers: {'Content-Type' => 'application/json', 'X-Pact-Consumer-Version' => consumer_version},
|
287
|
-
body: pact_hash,
|
288
|
-
headers: pact_broker_response_headers
|
289
|
-
})
|
290
|
-
end
|
291
|
-
|
292
|
-
it "returns the pact json" do
|
293
|
-
response = pact_broker_client.pacticipants.versions.pacts.latest consumer: 'Condor', provider: 'Pricing Service', tag: 'prod'
|
294
|
-
expect(response).to eq(pact_json)
|
295
|
-
end
|
296
|
-
end
|
297
|
-
end
|
298
|
-
end
|
299
|
-
|
300
|
-
describe "retriving versions" do
|
301
|
-
context "when retrieving the production details of a version" do
|
302
|
-
context "when a version is found" do
|
303
|
-
let(:repository_ref) { "package/pricing-service-1.2.3"}
|
304
|
-
let(:tags) { ['prod']}
|
305
|
-
let(:body) { { number: '1.2.3', repository_ref: repository_ref, tags: tags } }
|
306
|
-
before do
|
307
|
-
pact_broker.
|
308
|
-
given("a version with production details exists for the Pricing Service").
|
309
|
-
upon_receiving("a request for the latest version tagged with 'prod'").
|
310
|
-
with(
|
311
|
-
method: :get,
|
312
|
-
path: '/pacticipants/Pricing%20Service/versions/latest',
|
313
|
-
query: 'tag=prod',
|
314
|
-
headers: get_request_headers).
|
315
|
-
will_respond_with( status: 200,
|
316
|
-
headers: pact_broker_response_headers.merge({'Content-Type' => 'application/json'}),
|
317
|
-
body: body )
|
318
|
-
end
|
319
|
-
it 'returns the version details' do
|
320
|
-
expect( pact_broker_client.pacticipants.versions.latest pacticipant: 'Pricing Service', tag: 'prod' ).to eq body
|
321
|
-
end
|
322
|
-
end
|
323
|
-
end
|
324
|
-
context "when a version is not found" do
|
325
|
-
before do
|
326
|
-
pact_broker.
|
327
|
-
given("no version exists for the Pricing Service").
|
328
|
-
upon_receiving("a request for the latest version").
|
329
|
-
with(method: :get, path: '/pacticipants/Pricing%20Service/versions/latest', headers: get_request_headers).
|
330
|
-
will_respond_with( status: 404, headers: pact_broker_response_headers )
|
331
|
-
end
|
332
|
-
it 'returns nil' do
|
333
|
-
expect( pact_broker_client.pacticipants.versions.latest pacticipant: 'Pricing Service' ).to eq nil
|
334
|
-
end
|
335
|
-
end
|
336
|
-
end
|
337
|
-
end
|
338
|
-
end
|