pact_broker 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (131) hide show
  1. checksums.yaml +5 -13
  2. data/.gitignore +0 -1
  3. data/.rspec +1 -0
  4. data/CHANGELOG.md +47 -0
  5. data/README.md +4 -2
  6. data/config.ru +3 -5
  7. data/db/migrations/09_add_timestamps.rb +12 -0
  8. data/db/migrations/10_populate_timestamps.rb +15 -0
  9. data/db/migrations/11_made_timestamps_mandatory.rb +20 -0
  10. data/db/migrations/12_create_webhooks_table.rb +21 -0
  11. data/db/migrations/13_add_columns_to_webhooks.rb +8 -0
  12. data/lib/pact_broker/api.rb +14 -0
  13. data/lib/pact_broker/api/decorators.rb +2 -2
  14. data/lib/pact_broker/api/decorators/base_decorator.rb +2 -1
  15. data/lib/pact_broker/api/decorators/basic_pacticipant_decorator.rb +21 -0
  16. data/lib/pact_broker/api/decorators/decorator_context.rb +20 -0
  17. data/lib/pact_broker/api/decorators/latest_pact_decorator.rb +2 -2
  18. data/lib/pact_broker/api/decorators/pact_decorator.rb +12 -5
  19. data/lib/pact_broker/api/decorators/pact_details_decorator.rb +22 -0
  20. data/lib/pact_broker/api/decorators/pacticipant_decorator.rb +6 -4
  21. data/lib/pact_broker/api/decorators/relationships_csv_decorator.rb +25 -3
  22. data/lib/pact_broker/api/decorators/representable_pact.rb +3 -1
  23. data/lib/pact_broker/api/decorators/tag_decorator.rb +3 -0
  24. data/lib/pact_broker/api/decorators/webhook_decorator.rb +52 -0
  25. data/lib/pact_broker/api/decorators/webhook_execution_result_decorator.rb +58 -0
  26. data/lib/pact_broker/api/decorators/webhook_request_decorator.rb +18 -0
  27. data/lib/pact_broker/api/decorators/webhooks_decorator.rb +37 -0
  28. data/lib/pact_broker/api/pact_broker_urls.rb +16 -0
  29. data/lib/pact_broker/api/renderers/html_pact_renderer.rb +2 -1
  30. data/lib/pact_broker/api/resources/base_resource.rb +12 -1
  31. data/lib/pact_broker/api/resources/group.rb +38 -0
  32. data/lib/pact_broker/api/resources/index.rb +30 -21
  33. data/lib/pact_broker/api/resources/latest_pact.rb +1 -1
  34. data/lib/pact_broker/api/resources/latest_pacts.rb +1 -1
  35. data/lib/pact_broker/api/resources/pact.rb +18 -2
  36. data/lib/pact_broker/api/resources/pact_webhooks.rb +87 -0
  37. data/lib/pact_broker/api/resources/pacticipant.rb +15 -6
  38. data/lib/pact_broker/api/resources/pacticipants.rb +1 -1
  39. data/lib/pact_broker/api/resources/tag.rb +2 -2
  40. data/lib/pact_broker/api/resources/webhook.rb +44 -0
  41. data/lib/pact_broker/api/resources/webhook_execution.rb +43 -0
  42. data/lib/pact_broker/api/resources/webhooks.rb +29 -0
  43. data/lib/pact_broker/app.rb +46 -8
  44. data/lib/pact_broker/db.rb +10 -0
  45. data/lib/pact_broker/doc/controllers/app.rb +32 -0
  46. data/lib/pact_broker/doc/views/latest-pacts.markdown +3 -0
  47. data/lib/pact_broker/doc/views/layouts/main.haml +5 -0
  48. data/lib/pact_broker/doc/views/pacticipants.markdown +10 -0
  49. data/lib/pact_broker/doc/views/self.markdown +8 -0
  50. data/lib/pact_broker/doc/views/webhooks.markdown +48 -0
  51. data/lib/pact_broker/functions/groupify.rb +39 -0
  52. data/lib/pact_broker/jobs/after_pact_save.rb +13 -0
  53. data/lib/pact_broker/json.rb +4 -0
  54. data/lib/pact_broker/locale/en.yml +23 -0
  55. data/lib/pact_broker/messages.rb +18 -0
  56. data/lib/pact_broker/models/group.rb +21 -0
  57. data/lib/pact_broker/models/pact.rb +4 -2
  58. data/lib/pact_broker/models/pacticipant.rb +3 -1
  59. data/lib/pact_broker/models/relationship.rb +34 -0
  60. data/lib/pact_broker/models/tag.rb +3 -1
  61. data/lib/pact_broker/models/version.rb +3 -1
  62. data/lib/pact_broker/models/webhook.rb +53 -0
  63. data/lib/pact_broker/models/webhook_execution_result.rb +26 -0
  64. data/lib/pact_broker/models/webhook_request.rb +107 -0
  65. data/lib/pact_broker/models/webhook_request_header.rb +13 -0
  66. data/lib/pact_broker/repositories.rb +6 -0
  67. data/lib/pact_broker/repositories/pact_repository.rb +25 -7
  68. data/lib/pact_broker/repositories/pacticipant_repository.rb +4 -0
  69. data/lib/pact_broker/repositories/webhook_repository.rb +134 -0
  70. data/lib/pact_broker/services.rb +10 -0
  71. data/lib/pact_broker/services/group_service.rb +24 -0
  72. data/lib/pact_broker/services/pact_service.rb +37 -7
  73. data/lib/pact_broker/services/pacticipant_service.rb +12 -1
  74. data/lib/pact_broker/services/webhook_service.rb +63 -0
  75. data/lib/pact_broker/tasks.rb +0 -1
  76. data/lib/pact_broker/ui/controllers/base_controller.rb +1 -0
  77. data/lib/pact_broker/ui/controllers/groups.rb +25 -0
  78. data/lib/pact_broker/ui/controllers/relationships.rb +0 -2
  79. data/lib/pact_broker/ui/helpers/url_helper.rb +17 -0
  80. data/lib/pact_broker/ui/view_models/relationship.rb +13 -4
  81. data/lib/pact_broker/ui/view_models/relationships.rb +1 -1
  82. data/lib/pact_broker/ui/views/groups/show.html.erb +409 -0
  83. data/lib/pact_broker/ui/views/relationships/show.haml +4 -2
  84. data/lib/pact_broker/version.rb +1 -1
  85. data/pact_broker.gemspec +7 -6
  86. data/public/{d3.v3.js.pagespeed.ce.dFNRrGTALe.js → javascripts/d3.v3.js.pagespeed.ce.dFNRrGTALe.js} +0 -0
  87. data/public/stylesheets/relationships.css +4 -0
  88. data/spec/integration/endpoints/group.rb +22 -0
  89. data/spec/lib/pact_broker/api/decorators/pact_decorator_spec.rb +49 -0
  90. data/spec/lib/pact_broker/api/decorators/pacticipant_decorator_spec.rb +25 -0
  91. data/spec/lib/pact_broker/api/decorators/relationships_csv_decorator_spec.rb +7 -4
  92. data/spec/lib/pact_broker/api/decorators/webhook_decorator_spec.rb +121 -0
  93. data/spec/lib/pact_broker/api/decorators/webhook_execution_result_decorator_spec.rb +69 -0
  94. data/spec/lib/pact_broker/api/decorators/webhook_request_decorator_spec.rb +78 -0
  95. data/spec/lib/pact_broker/api/decorators/webhooks_decorator_spec.rb +46 -0
  96. data/spec/lib/pact_broker/api/resources/group_spec.rb +80 -0
  97. data/spec/lib/pact_broker/api/resources/pact_spec.rb +41 -0
  98. data/spec/lib/pact_broker/api/resources/pact_webhooks_spec.rb +184 -0
  99. data/spec/lib/pact_broker/api/resources/pacticipant_spec.rb +71 -0
  100. data/spec/lib/pact_broker/api/resources/webhook_execution_spec.rb +77 -0
  101. data/spec/lib/pact_broker/api/resources/webhook_spec.rb +60 -0
  102. data/spec/lib/pact_broker/api/resources/webhooks_spec.rb +44 -0
  103. data/spec/lib/pact_broker/doc/controllers/app_spec.rb +51 -0
  104. data/spec/lib/pact_broker/functions/groupify_spec.rb +50 -0
  105. data/spec/lib/pact_broker/models/group_spec.rb +26 -0
  106. data/spec/lib/pact_broker/models/webhook_request_spec.rb +175 -0
  107. data/spec/lib/pact_broker/models/webhook_spec.rb +59 -0
  108. data/spec/lib/pact_broker/repositories/pact_repository_spec.rb +40 -0
  109. data/spec/lib/pact_broker/repositories/webhook_repository_spec.rb +257 -0
  110. data/spec/lib/pact_broker/services/group_service_spec.rb +52 -0
  111. data/spec/lib/pact_broker/services/pact_service_spec.rb +49 -0
  112. data/spec/lib/pact_broker/services/pacticipant_service_spec.rb +50 -0
  113. data/spec/lib/pact_broker/services/webhook_service_spec.rb +51 -0
  114. data/spec/lib/pact_broker/ui/view_models/relationship_spec.rb +20 -6
  115. data/spec/lib/pact_broker/ui/view_models/relationships_spec.rb +33 -0
  116. data/spec/service_consumers/provider_states_for_pact_broker_client.rb +1 -1
  117. data/spec/spec_helper.rb +11 -4
  118. data/spec/support/provider_state_builder.rb +11 -0
  119. data/spec/support/shared_examples_for_responses.rb +25 -0
  120. data/vendor/hal-browser/js/hal/views/embedded_resource.js +3 -3
  121. data/vendor/hal-browser/js/hal/views/resource.js +3 -3
  122. metadata +174 -80
  123. data/assets/d3.v3.js +0 -9263
  124. data/assets/force.csv +0 -29
  125. data/assets/index.html +0 -186
  126. data/assets/index2.html +0 -224
  127. data/assets/relationships +0 -4
  128. data/assets/stylesheets/github.css +0 -387
  129. data/lib/pact_broker/tasks/delete.rake +0 -20
  130. data/public/Network Graph REA.html +0 -48
  131. data/public/rea.csv +0 -10
@@ -5,6 +5,32 @@ module PactBroker
5
5
  module Repositories
6
6
  describe PactRepository do
7
7
 
8
+ describe "find_previous_pact" do
9
+ before do
10
+ ProviderStateBuilder.new
11
+ .create_consumer("Consumer")
12
+ .create_consumer_version("1.2.2")
13
+ .create_provider("Provider")
14
+ .create_pact
15
+ .create_consumer_version("1.2.4")
16
+ .create_pact
17
+ .create_consumer_version("1.2.6")
18
+ .create_pact
19
+ .create_provider("Another Provider")
20
+ .create_consumer_version("1.2.5")
21
+ .create_pact
22
+ end
23
+
24
+ let(:pact) { PactRepository.new.find_latest_pact "Consumer", "Provider" }
25
+
26
+ subject { PactRepository.new.find_previous_pact pact }
27
+
28
+ it "finds the previous pact" do
29
+ expect(subject.consumer_version_number).to eq "1.2.4"
30
+ expect(subject.consumer_version.number).to eq "1.2.4"
31
+ end
32
+ end
33
+
8
34
  describe "find_latest_pact" do
9
35
 
10
36
  context "with a tag" do
@@ -25,6 +51,10 @@ module PactBroker
25
51
  it "returns the pact for the latest tagged version" do
26
52
  expect(latest_prod_pact.consumer_version.number).to eq("1.2.3")
27
53
  end
54
+
55
+ xit "has timestamps" do
56
+
57
+ end
28
58
  end
29
59
 
30
60
  end
@@ -53,14 +83,24 @@ module PactBroker
53
83
 
54
84
  expect(pacts[0].consumer_version.pacticipant.name).to eq("Condor")
55
85
  expect(pacts[0].consumer.name).to eq("Condor")
86
+ expect(pacts[0].consumer.id).to_not be nil
56
87
  expect(pacts[0].provider.name).to eq("Pricing Service")
88
+ expect(pacts[0].provider.id).to_not be nil
57
89
  expect(pacts[0].consumer_version.number).to eq("1.4.0")
90
+ expect(pacts[0].consumer_version_number).to eq("1.4.0")
58
91
 
59
92
  expect(pacts[1].consumer_version.pacticipant.name).to eq("Contract Email Service")
60
93
  expect(pacts[1].consumer.name).to eq("Contract Email Service")
61
94
  expect(pacts[1].provider.name).to eq("Contract Proposal Service")
62
95
  expect(pacts[1].consumer_version.number).to eq("2.7.0")
63
96
  end
97
+
98
+ xit "includes the timestamps" do
99
+ pacts = PactRepository.new.find_latest_pacts
100
+
101
+ expect(pacts[0].updated_at).to be_instance_of DateTime
102
+ expect(pacts[0].created_at).to be_instance_of DateTime
103
+ end
64
104
  end
65
105
  end
66
106
  end
@@ -0,0 +1,257 @@
1
+ require 'spec_helper'
2
+ require 'pact_broker/repositories/webhook_repository'
3
+
4
+ module PactBroker
5
+ module Repositories
6
+ describe WebhookRepository do
7
+
8
+ let(:url) { 'http://example.org' }
9
+ let(:body) { {'some' => 'json' } }
10
+ let(:headers) { {'Content-Type' => 'application/json', 'Accept' => 'application/json'} }
11
+ let(:request) do
12
+ Models::WebhookRequest.new(
13
+ method: 'post',
14
+ url: url,
15
+ headers: headers,
16
+ username: 'username',
17
+ password: 'password',
18
+ body: body)
19
+ end
20
+ let(:webhook) { Models::Webhook.new(request: request)}
21
+ let(:test_data_builder) { ProviderStateBuilder.new }
22
+ let(:consumer) { test_data_builder.create_pacticipant 'Consumer'; test_data_builder.pacticipant}
23
+ let(:provider) { test_data_builder.create_pacticipant 'Provider'; test_data_builder.pacticipant}
24
+ let(:uuid) { 'the-uuid' }
25
+ let(:created_webhook_record) { ::DB::PACT_BROKER_DB[:webhooks].order(:id).last }
26
+ let(:created_headers) { ::DB::PACT_BROKER_DB[:webhook_headers].where(webhook_id: created_webhook_record[:id]).order(:name).all }
27
+ let(:expected_webhook_record) { {
28
+ :uuid=>"the-uuid",
29
+ :method=>"post",
30
+ :url=>"http://example.org",
31
+ :username => 'username',
32
+ :password => "cGFzc3dvcmQ=",
33
+ :body=>body.to_json,
34
+ :consumer_id=> consumer.id,
35
+ :provider_id=> provider.id } }
36
+
37
+ before do
38
+ allow(SecureRandom).to receive(:urlsafe_base64).and_return(uuid)
39
+ end
40
+
41
+ describe "#create" do
42
+
43
+ subject { WebhookRepository.new.create webhook, consumer, provider }
44
+
45
+
46
+ it "generates a UUID" do
47
+ expect(SecureRandom).to receive(:urlsafe_base64)
48
+ subject
49
+ end
50
+
51
+ it "saves webhook" do
52
+ subject
53
+ expect(created_webhook_record).to include expected_webhook_record
54
+ end
55
+
56
+ it "saves the headers" do
57
+ subject
58
+ expect(created_headers.size).to eq 2
59
+ expect(created_headers.first[:name]).to eq "Accept"
60
+ expect(created_headers.first[:value]).to eq "application/json"
61
+ expect(created_headers.last[:name]).to eq "Content-Type"
62
+ expect(created_headers.last[:value]).to eq "application/json"
63
+ end
64
+
65
+ end
66
+
67
+ describe "delete_by_uuid" do
68
+
69
+ before do
70
+ allow(SecureRandom).to receive(:urlsafe_base64).and_return(uuid, 'another-uuid')
71
+ WebhookRepository.new.create webhook, consumer, provider
72
+ WebhookRepository.new.create webhook, consumer, provider
73
+ end
74
+
75
+ subject { WebhookRepository.new.delete_by_uuid uuid }
76
+
77
+ it "deletes the webhook headers" do
78
+ expect { subject }.to change {
79
+ ::DB::PACT_BROKER_DB[:webhook_headers].count
80
+ }.by(-2)
81
+ end
82
+
83
+ it "deletes the webhook" do
84
+ expect { subject }.to change {
85
+ ::DB::PACT_BROKER_DB[:webhooks].where(uuid: uuid).count
86
+ }.by(-1)
87
+ end
88
+ end
89
+
90
+ describe "delete_by_pacticipant" do
91
+
92
+ before do
93
+ allow(SecureRandom).to receive(:urlsafe_base64).and_return(uuid, 'another-uuid')
94
+ WebhookRepository.new.create webhook, consumer, provider
95
+ end
96
+
97
+ context "when the pacticipant is the consumer" do
98
+
99
+ subject { WebhookRepository.new.delete_by_pacticipant consumer }
100
+
101
+ it "deletes the webhook" do
102
+ expect { subject }.to change {
103
+ ::DB::PACT_BROKER_DB[:webhooks].where(uuid: uuid).count
104
+ }.by(-1)
105
+ end
106
+ end
107
+
108
+ context "when the pacticipant is the provider" do
109
+
110
+ subject { WebhookRepository.new.delete_by_pacticipant provider }
111
+
112
+ it "deletes the webhook" do
113
+ expect { subject }.to change {
114
+ ::DB::PACT_BROKER_DB[:webhooks].where(uuid: uuid).count
115
+ }.by(-1)
116
+ end
117
+ end
118
+
119
+ end
120
+
121
+ describe "find_by_uuid" do
122
+
123
+
124
+ subject { WebhookRepository.new.find_by_uuid uuid }
125
+
126
+ context "when a webhook is found" do
127
+ before do
128
+ WebhookRepository.new.create webhook, consumer, provider
129
+ end
130
+
131
+ it "returns a webhook with the consumer set" do
132
+ expect(subject.consumer.id).to eq consumer.id
133
+ expect(subject.consumer.name).to eq consumer.name
134
+ end
135
+
136
+ it "returns a webhook with the provider set" do
137
+ expect(subject.provider.id).to eq provider.id
138
+ expect(subject.provider.name).to eq provider.name
139
+ end
140
+
141
+ it "returns a webhook with the uuid set" do
142
+ expect(subject.uuid).to eq uuid
143
+ end
144
+
145
+ it "returns a webhook with the body set" do
146
+ expect(subject.request.body).to eq body
147
+ end
148
+
149
+ it "returns a webhook with the headers set" do
150
+ expect(subject.request.headers).to eq headers
151
+ end
152
+
153
+
154
+ it "returns a webhook with the username set" do
155
+ expect(subject.request.username).to eq 'username'
156
+ end
157
+
158
+ it "returns a webhook with the password set" do
159
+ expect(subject.request.password).to eq 'password'
160
+ end
161
+
162
+ it "returns a webhook with the url set" do
163
+ expect(subject.request.url).to eq url
164
+ end
165
+
166
+ it "returns a webhook with a created_at date" do
167
+ expect(subject.created_at).to be_instance_of(DateTime)
168
+ end
169
+
170
+ it "returns a webhook with a updated_at date" do
171
+ expect(subject.updated_at).to be_instance_of(DateTime)
172
+ end
173
+
174
+ context "when the body is a XML string" do
175
+ let(:body) { "<xml>Why would you do this?</xml>" }
176
+
177
+ it "returns the body as the XML String, not an JSON Object" do
178
+ expect(subject.request.body).to eq body
179
+ end
180
+ end
181
+
182
+ context "when the optional attributes are nil" do
183
+ let(:body) { nil }
184
+ let(:headers) { nil }
185
+
186
+ it "does not blow up" do
187
+ expect(subject.request.body).to eq body
188
+ expect(subject.request.headers).to eq({})
189
+ end
190
+ end
191
+ end
192
+
193
+ context "when a webhook is not found" do
194
+ it "returns nil" do
195
+ expect(subject).to be nil
196
+ end
197
+ end
198
+
199
+ end
200
+
201
+ describe "find_all" do
202
+ before do
203
+ allow(SecureRandom).to receive(:urlsafe_base64).and_return(uuid, 'some-other-uuid')
204
+ WebhookRepository.new.create webhook, consumer, provider
205
+ WebhookRepository.new.create webhook, consumer, provider
206
+ end
207
+
208
+ subject { WebhookRepository.new.find_all }
209
+
210
+ it "returns a list of webhooks" do
211
+ expect(subject.size).to be 2
212
+ expect(subject.first).to be_instance_of Models::Webhook
213
+ end
214
+ end
215
+
216
+ describe "find_by_consumer_and_provider" do
217
+ let(:test_data_builder) { ProviderStateBuilder.new }
218
+ subject { WebhookRepository.new.find_by_consumer_and_provider test_data_builder.consumer, test_data_builder.provider}
219
+
220
+ context "when a webhook exists with a matching consumer and provider" do
221
+
222
+ before do
223
+ allow(SecureRandom).to receive(:urlsafe_base64).and_call_original
224
+ test_data_builder
225
+ .create_consumer("Consumer")
226
+ .create_provider("Another Provider")
227
+ .create_webhook
228
+ .create_provider("Provider")
229
+ .create_webhook
230
+ end
231
+
232
+
233
+ it "returns an array of webhooks" do
234
+ expect(subject).to be_instance_of Array
235
+ expect(subject.first.uuid).to eq test_data_builder.webhook.uuid
236
+ end
237
+ end
238
+
239
+ context "when a webhook does not exist with a matching consumer and provider" do
240
+
241
+ before do
242
+ test_data_builder
243
+ .create_consumer("Consumer")
244
+ .create_provider("Provider")
245
+ .create_webhook
246
+ .create_provider("Another Provider")
247
+ end
248
+
249
+ it "returns an empty array" do
250
+ expect(subject).to eq []
251
+ end
252
+ end
253
+ end
254
+
255
+ end
256
+ end
257
+ end
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+ require 'pact_broker/services/group_service'
3
+
4
+ module PactBroker
5
+
6
+ module Services
7
+ describe GroupService do
8
+
9
+
10
+ describe "#find_group_containing" do
11
+
12
+ let(:consumer_a) { double('consumer a', name: 'consumer a', id: 1)}
13
+ let(:consumer_b) { double('consumer b', name: 'consumer b', id: 2)}
14
+
15
+ let(:provider_x) { double('provider x', name: 'provider x', id: 3)}
16
+ let(:provider_y) { double('provider y', name: 'provider y', id: 4)}
17
+
18
+ let(:relationship_1) { Models::Relationship.new(consumer_a, provider_x) }
19
+ let(:relationship_2) { Models::Relationship.new(consumer_b, provider_y) }
20
+
21
+ let(:group_1) { Models::Group.new(relationship_1) }
22
+ let(:group_2) { Models::Group.new(relationship_2) }
23
+
24
+ let(:relationship_list) { double('relationship list') }
25
+ let(:groups) { [group_1, group_2]}
26
+
27
+ subject { GroupService.find_group_containing(consumer_b) }
28
+
29
+ before do
30
+ allow(PacticipantService).to receive(:find_relationships).and_return(relationship_list)
31
+ allow(Functions::Groupify).to receive(:call).and_return(groups)
32
+ end
33
+
34
+ it "retrieves a list of the relationships" do
35
+ allow(PacticipantService).to receive(:find_relationships)
36
+ subject
37
+ end
38
+
39
+ it "turns the relationships into groups" do
40
+ expect(Functions::Groupify).to receive(:call).with(relationship_list)
41
+ subject
42
+ end
43
+
44
+ it "returns the Group containing the given pacticipant" do
45
+ expect(subject).to be group_2
46
+ end
47
+
48
+ end
49
+
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+ require 'pact_broker/services/pact_service'
3
+
4
+ module PactBroker
5
+
6
+ module Services
7
+ module PactService
8
+
9
+ describe "#pact_has_changed_since_previous_version?" do
10
+
11
+ let(:json_content) { { 'some' => 'json'}.to_json }
12
+ let(:pact) { instance_double(PactBroker::Models::Pact, json_content: json_content)}
13
+
14
+ before do
15
+ allow_any_instance_of(Repositories::PactRepository).to receive(:find_previous_pact).and_return(previous_pact)
16
+ end
17
+
18
+ subject { PactService.pact_has_changed_since_previous_version? pact }
19
+
20
+ context "when a previous pact is found" do
21
+ let(:previous_pact) { instance_double(PactBroker::Models::Pact, json_content: previous_json_content)}
22
+ let(:previous_json_content) { {'some' => 'json'}.to_json }
23
+
24
+ context "when the json_content is the same" do
25
+ it "returns false" do
26
+ expect(subject).to be_falsey
27
+ end
28
+ end
29
+
30
+ context "when the json_content is not the same" do
31
+ let(:previous_json_content) { {'some-other' => 'json'}.to_json }
32
+ it "returns truthy" do
33
+ expect(subject).to be_truthy
34
+ end
35
+ end
36
+ end
37
+
38
+ context "when a previous pact is not found" do
39
+ let(:previous_pact) { nil }
40
+ it "returns false" do
41
+ expect(subject).to be_falsey
42
+ end
43
+ end
44
+
45
+ end
46
+
47
+ end
48
+ end
49
+ end
@@ -1,5 +1,8 @@
1
1
  require 'spec_helper'
2
2
  require 'pact_broker/services/pacticipant_service'
3
+ require 'pact_broker/models/tag'
4
+ require 'pact_broker/models/pact'
5
+
3
6
 
4
7
  module PactBroker
5
8
 
@@ -25,6 +28,53 @@ module PactBroker
25
28
 
26
29
  end
27
30
 
31
+ describe "delete" do
32
+
33
+ before do
34
+ ProviderStateBuilder.new
35
+ .create_consumer("Consumer")
36
+ .create_consumer_version("2.3.4")
37
+ .create_provider("Provider")
38
+ .create_pact
39
+ .create_consumer_version("1.2.3")
40
+ .create_consumer_version_tag("prod")
41
+ .create_pact
42
+ .create_webhook
43
+ end
44
+
45
+ let(:delete_pacticipant) { subject.delete "Consumer" }
46
+
47
+ it "deletes the pacticipant" do
48
+ expect{ delete_pacticipant }.to change{
49
+ PactBroker::Models::Pacticipant.all.count
50
+ }.by(-1)
51
+ end
52
+
53
+ it "deletes the child versions" do
54
+ expect{ delete_pacticipant }.to change{
55
+ PactBroker::Models::Version.where(number: "1.2.3").count
56
+ }.by(-1)
57
+ end
58
+
59
+ it "deletes the child tags" do
60
+ expect{ delete_pacticipant }.to change{
61
+ PactBroker::Models::Tag.where(name: "prod").count
62
+ }.by(-1)
63
+ end
64
+
65
+ it "deletes the webhooks" do
66
+ expect{ delete_pacticipant }.to change{
67
+ PactBroker::Repositories::Webhook.count
68
+ }.by(-1)
69
+ end
70
+
71
+ it "deletes the child pacts" do
72
+ expect{ delete_pacticipant }.to change{
73
+ PactBroker::Models::Pact.count
74
+ }.by(-2)
75
+ end
76
+ end
77
+
28
78
  end
29
79
  end
30
80
  end