pact_broker 2.27.3 → 2.27.4
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/lib/pact_broker/pacticipants/repository.rb +7 -1
- data/lib/pact_broker/pacts/service.rb +1 -1
- data/lib/pact_broker/version.rb +1 -1
- data/spec/features/merge_pact_spec.rb +1 -1
- data/spec/fixtures/a_consumer-a_provider-merged.json +4 -4
- data/spec/lib/pact_broker/pacticipants/repository_spec.rb +33 -0
- data/spec/lib/pact_broker/pacts/merger_spec.rb +32 -37
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d4636b4295346d4ca3722a84204382c69fcedf36
|
4
|
+
data.tar.gz: b0d2d464ad6e2faeb3d77b054b574a4a6afa88a5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bbaeb6db596dfc7b43427e193b645431dc94e529134db0fc1b5184beee4111c5ef80fd8f6d20e86a6ec1da44bd06ec4d4b4a8aafcd31f5bbc8c0ba57aaa9d2af
|
7
|
+
data.tar.gz: 5e3fd018f7283e8ee7c55ad47e59d003c6499ed11dfff2cd2496e0a77d82c2de0437897bc2208bb72df1d78b8c0be2db07c84a6e69ed5faf73b218f3ed5bdf6b
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
<a name="v2.27.4"></a>
|
2
|
+
### v2.27.4 (2018-11-15)
|
3
|
+
|
4
|
+
|
5
|
+
#### Bug Fixes
|
6
|
+
|
7
|
+
* handle race conditions when creating a pacticipant ([b3799670](/../../commit/b3799670))
|
8
|
+
* correct order of arguments for merging pacts ([f6cfb197](/../../commit/f6cfb197))
|
9
|
+
|
10
|
+
|
1
11
|
<a name="v2.27.3"></a>
|
2
12
|
### v2.27.3 (2018-11-01)
|
3
13
|
|
@@ -42,7 +42,13 @@ module PactBroker
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def create args
|
45
|
-
PactBroker::Domain::Pacticipant.
|
45
|
+
id = PactBroker::Domain::Pacticipant.dataset.insert_ignore.insert(
|
46
|
+
name: args[:name],
|
47
|
+
repository_url: args[:repository_url],
|
48
|
+
created_at: Sequel.datetime_class.now,
|
49
|
+
updated_at: Sequel.datetime_class.now
|
50
|
+
)
|
51
|
+
PactBroker::Domain::Pacticipant.find(id: id)
|
46
52
|
end
|
47
53
|
|
48
54
|
def pacticipant_names
|
@@ -59,7 +59,7 @@ module PactBroker
|
|
59
59
|
consumer_version = version_repository.find_by_pacticipant_id_and_number_or_create consumer.id, params[:consumer_version_number]
|
60
60
|
existing_pact = pact_repository.find_by_version_and_provider(consumer_version.id, provider.id)
|
61
61
|
|
62
|
-
params.merge!(json_content: Merger.merge_pacts(params[:json_content]
|
62
|
+
params.merge!(json_content: Merger.merge_pacts(existing_pact.json_content, params[:json_content]))
|
63
63
|
|
64
64
|
update_pact params, existing_pact
|
65
65
|
end
|
data/lib/pact_broker/version.rb
CHANGED
@@ -29,7 +29,7 @@ describe "Merging a pact" do
|
|
29
29
|
let(:merged_pact_content) { load_fixture('a_consumer-a_provider-merged.json') }
|
30
30
|
|
31
31
|
before do
|
32
|
-
TestDataBuilder.new.create_pact_with_hierarchy("A Consumer", "1.2.3", "A Provider", existing_pact_content)
|
32
|
+
TestDataBuilder.new.create_pact_with_hierarchy("A Consumer", "1.2.3", "A Provider", existing_pact_content)
|
33
33
|
end
|
34
34
|
|
35
35
|
it "returns a 200 Success" do
|
@@ -7,11 +7,11 @@
|
|
7
7
|
},
|
8
8
|
"interactions": [
|
9
9
|
{
|
10
|
-
"description" : "
|
10
|
+
"description" : "another request for something",
|
11
11
|
"providerState": null,
|
12
12
|
"request": {
|
13
13
|
"method": "get",
|
14
|
-
"path" : "/
|
14
|
+
"path" : "/something_else"
|
15
15
|
},
|
16
16
|
"response": {
|
17
17
|
"status": 200,
|
@@ -19,11 +19,11 @@
|
|
19
19
|
}
|
20
20
|
},
|
21
21
|
{
|
22
|
-
"description" : "
|
22
|
+
"description" : "a request for something",
|
23
23
|
"providerState": null,
|
24
24
|
"request": {
|
25
25
|
"method": "get",
|
26
|
-
"path" : "/
|
26
|
+
"path" : "/something"
|
27
27
|
},
|
28
28
|
"response": {
|
29
29
|
"status": 200,
|
@@ -5,6 +5,39 @@ require 'support/test_data_builder'
|
|
5
5
|
module PactBroker
|
6
6
|
module Pacticipants
|
7
7
|
describe Repository do
|
8
|
+
describe "#create" do
|
9
|
+
let(:repository) { Repository.new }
|
10
|
+
|
11
|
+
subject { repository.create(name: "Foo") }
|
12
|
+
|
13
|
+
context "when the pacticipant does not already exist" do
|
14
|
+
before do
|
15
|
+
TestDataBuilder.new.create_pacticipant("Bar")
|
16
|
+
end
|
17
|
+
|
18
|
+
subject { repository.create(name: "Foo") }
|
19
|
+
|
20
|
+
it "returns the new pacticipant" do
|
21
|
+
expect(subject).to be_a(PactBroker::Domain::Pacticipant)
|
22
|
+
expect(subject.name).to eq "Foo"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
context "when a race condition occurs and the pacticipant was already created by another request" do
|
27
|
+
before do
|
28
|
+
TestDataBuilder.new.create_pacticipant("Foo")
|
29
|
+
end
|
30
|
+
|
31
|
+
it "does not raise an error" do
|
32
|
+
subject
|
33
|
+
end
|
34
|
+
|
35
|
+
it "returns the existing pacticipant" do
|
36
|
+
expect(subject).to be_a(PactBroker::Domain::Pacticipant)
|
37
|
+
expect(subject.name).to eq "Foo"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
8
41
|
|
9
42
|
describe "#find" do
|
10
43
|
before do
|
@@ -29,43 +29,40 @@ module PactBroker
|
|
29
29
|
end
|
30
30
|
|
31
31
|
describe "#merge" do
|
32
|
-
|
33
|
-
before :each do
|
34
|
-
@pact_to_merge = load_json_fixture('consumer-provider.json')
|
35
|
-
end
|
32
|
+
let(:pact_to_merge) { load_json_fixture('consumer-provider.json') }
|
36
33
|
|
37
34
|
it "merges two pacts" do
|
38
|
-
|
39
|
-
result = merge_pacts(example_pact,
|
35
|
+
pact_to_merge["interactions"] << example_interaction
|
36
|
+
result = merge_pacts(example_pact, pact_to_merge)
|
40
37
|
expect(result["interactions"]).to match_array(example_pact["interactions"].push(example_interaction))
|
41
38
|
end
|
42
39
|
|
43
40
|
it "is idempotent" do
|
44
|
-
|
45
|
-
first_result = merge_pacts(example_pact,
|
46
|
-
second_result = merge_pacts(first_result,
|
41
|
+
pact_to_merge["interactions"] << example_interaction
|
42
|
+
first_result = merge_pacts(example_pact, pact_to_merge)
|
43
|
+
second_result = merge_pacts(first_result, pact_to_merge)
|
47
44
|
expect(first_result).to contain_hash second_result
|
48
45
|
end
|
49
46
|
|
50
47
|
it "overwrites identical interactions" do
|
51
|
-
|
52
|
-
result = merge_pacts(example_pact,
|
48
|
+
pact_to_merge["interactions"][0]["response"]["body"] = "changed!"
|
49
|
+
result = merge_pacts(example_pact, pact_to_merge)
|
53
50
|
|
54
51
|
expect(result["interactions"].length).to eq example_pact["interactions"].length
|
55
52
|
expect(result["interactions"].first["response"]["body"]).to eq "changed!"
|
56
53
|
end
|
57
54
|
|
58
55
|
it "appends interactions with a different provider state" do
|
59
|
-
|
56
|
+
pact_to_merge["interactions"][0]["provider_state"] = "upside down"
|
60
57
|
|
61
|
-
result = merge_pacts(example_pact,
|
58
|
+
result = merge_pacts(example_pact, pact_to_merge)
|
62
59
|
expect(result["interactions"].length).to eq example_pact["interactions"].length + 1
|
63
60
|
end
|
64
61
|
|
65
62
|
it "appends interactions with a different description" do
|
66
|
-
|
63
|
+
pact_to_merge["interactions"][0]["description"] = "getting $$$"
|
67
64
|
|
68
|
-
result = merge_pacts(example_pact,
|
65
|
+
result = merge_pacts(example_pact, pact_to_merge)
|
69
66
|
expect(result["interactions"].length).to eq example_pact["interactions"].length + 1
|
70
67
|
end
|
71
68
|
|
@@ -78,59 +75,57 @@ module PactBroker
|
|
78
75
|
end
|
79
76
|
|
80
77
|
describe "#conflict?" do
|
81
|
-
|
82
|
-
@pact_to_compare = load_json_fixture('consumer-provider.json')
|
83
|
-
end
|
78
|
+
let(:pact_to_compare) { load_json_fixture('consumer-provider.json') }
|
84
79
|
|
85
80
|
it "returns false if interactions have different descriptions" do
|
86
|
-
|
81
|
+
pact_to_compare["interactions"][0]["description"] = "something else"
|
87
82
|
|
88
|
-
expect(compare_pacts(example_pact,
|
83
|
+
expect(compare_pacts(example_pact, pact_to_compare)).to eq false
|
89
84
|
end
|
90
85
|
|
91
86
|
it "returns false if interactions have different provider states" do
|
92
|
-
|
93
|
-
expect(compare_pacts(example_pact,
|
87
|
+
pact_to_compare["interactions"][0]["provider_state"] = "some other thing"
|
88
|
+
expect(compare_pacts(example_pact, pact_to_compare)).to eq false
|
94
89
|
end
|
95
90
|
|
96
91
|
context "when interactions have the same desc/state" do
|
97
92
|
it "returns false if request parameters are the same" do
|
98
|
-
expect(compare_pacts(example_pact,
|
93
|
+
expect(compare_pacts(example_pact, pact_to_compare)).to eq false
|
99
94
|
end
|
100
95
|
|
101
96
|
it "returns true if requests have a different query" do
|
102
|
-
|
103
|
-
expect(compare_pacts(example_pact,
|
97
|
+
pact_to_compare["interactions"][0]["request"]["query"] = "foo=bar&baz=qux"
|
98
|
+
expect(compare_pacts(example_pact, pact_to_compare)).to eq true
|
104
99
|
end
|
105
100
|
|
106
101
|
it "returns true if requests have a different body" do
|
107
|
-
|
108
|
-
expect(compare_pacts(example_pact,
|
102
|
+
pact_to_compare["interactions"][0]["request"]["body"] = { "something" => { "nested" => "deeply" } }
|
103
|
+
expect(compare_pacts(example_pact, pact_to_compare)).to eq true
|
109
104
|
end
|
110
105
|
|
111
106
|
it "returns true if request method is different" do
|
112
|
-
|
113
|
-
expect(compare_pacts(example_pact,
|
107
|
+
pact_to_compare["interactions"][0]["request"]["method"] = "post"
|
108
|
+
expect(compare_pacts(example_pact, pact_to_compare)).to eq true
|
114
109
|
end
|
115
110
|
|
116
111
|
it "returns true if request path is different" do
|
117
|
-
|
118
|
-
expect(compare_pacts(example_pact,
|
112
|
+
pact_to_compare["interactions"][0]["request"]["path"] = "/new_path"
|
113
|
+
expect(compare_pacts(example_pact, pact_to_compare)).to eq true
|
119
114
|
end
|
120
115
|
|
121
116
|
it "returns true if request headers are different" do
|
122
|
-
|
123
|
-
expect(compare_pacts(example_pact,
|
117
|
+
pact_to_compare["interactions"][0]["request"]["headers"]["Content-Type"] = "text/html"
|
118
|
+
expect(compare_pacts(example_pact, pact_to_compare)).to eq true
|
124
119
|
end
|
125
120
|
|
126
121
|
it "returns true if request has additional headers" do
|
127
|
-
|
128
|
-
expect(compare_pacts(example_pact,
|
122
|
+
pact_to_compare["interactions"][0]["request"]["headers"]["Accept"] = "text/html"
|
123
|
+
expect(compare_pacts(example_pact, pact_to_compare)).to eq true
|
129
124
|
end
|
130
125
|
|
131
126
|
it "returns true if request has missing headers" do
|
132
|
-
|
133
|
-
expect(compare_pacts(example_pact,
|
127
|
+
pact_to_compare["interactions"][0]["request"]["headers"].delete("Content-Type")
|
128
|
+
expect(compare_pacts(example_pact, pact_to_compare)).to eq true
|
134
129
|
end
|
135
130
|
end
|
136
131
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pact_broker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.27.
|
4
|
+
version: 2.27.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bethany Skurrie
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2018-11-
|
13
|
+
date: 2018-11-15 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: httparty
|