Class: PactBroker::Test::TestDataBuilder

Inherits:
Object
  • Object
show all
Includes:
Repositories, Services
Defined in:
lib/pact_broker/test/test_data_builder.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Services

#badge_service, #certificate_service, #group_service, #index_service, #integration_service, #label_service, #matrix_service, #metrics_service, #pact_service, #pacticipant_service, #tag_service, #verification_service, #version_service, #webhook_service, #webhook_trigger_service

Methods included from Repositories

#label_repository, #matrix_repository, #pact_repository, #pacticipant_repository, #tag_repository, #verification_repository, #version_repository, #webhook_repository

Constructor Details

#initialize(params = {}) ⇒ TestDataBuilder

Returns a new instance of TestDataBuilder.



48
49
# File 'lib/pact_broker/test/test_data_builder.rb', line 48

def initialize(params = {})
end

Instance Attribute Details

#consumerObject (readonly)

Returns the value of attribute consumer.



37
38
39
# File 'lib/pact_broker/test/test_data_builder.rb', line 37

def consumer
  @consumer
end

#consumer_versionObject (readonly)

Returns the value of attribute consumer_version.



39
40
41
# File 'lib/pact_broker/test/test_data_builder.rb', line 39

def consumer_version
  @consumer_version
end

#pactObject (readonly)

Returns the value of attribute pact.



42
43
44
# File 'lib/pact_broker/test/test_data_builder.rb', line 42

def pact
  @pact
end

#pacticipantObject (readonly)

Returns the value of attribute pacticipant.



36
37
38
# File 'lib/pact_broker/test/test_data_builder.rb', line 36

def pacticipant
  @pacticipant
end

#providerObject (readonly)

Returns the value of attribute provider.



38
39
40
# File 'lib/pact_broker/test/test_data_builder.rb', line 38

def provider
  @provider
end

#provider_versionObject (readonly)

Returns the value of attribute provider_version.



40
41
42
# File 'lib/pact_broker/test/test_data_builder.rb', line 40

def provider_version
  @provider_version
end

#triggered_webhookObject (readonly)

Returns the value of attribute triggered_webhook.



46
47
48
# File 'lib/pact_broker/test/test_data_builder.rb', line 46

def triggered_webhook
  @triggered_webhook
end

#verificationObject (readonly)

Returns the value of attribute verification.



43
44
45
# File 'lib/pact_broker/test/test_data_builder.rb', line 43

def verification
  @verification
end

#versionObject (readonly)

Returns the value of attribute version.



41
42
43
# File 'lib/pact_broker/test/test_data_builder.rb', line 41

def version
  @version
end

#webhookObject (readonly)

Returns the value of attribute webhook.



44
45
46
# File 'lib/pact_broker/test/test_data_builder.rb', line 44

def webhook
  @webhook
end

#webhook_executionObject (readonly)

Returns the value of attribute webhook_execution.



45
46
47
# File 'lib/pact_broker/test/test_data_builder.rb', line 45

def webhook_execution
  @webhook_execution
end

Instance Method Details

#add_dayObject



332
333
334
335
# File 'lib/pact_broker/test/test_data_builder.rb', line 332

def add_day
  @now = @now + 1
  self
end

#add_five_minutesObject



337
338
339
340
# File 'lib/pact_broker/test/test_data_builder.rb', line 337

def add_five_minutes
  @now = @now + (1.0/(24*60)*5)
  self
end

#and_return(instance_variable_name) ⇒ Object



323
324
325
# File 'lib/pact_broker/test/test_data_builder.rb', line 323

def and_return instance_variable_name
  instance_variable_get("@#{instance_variable_name}")
end

#comment(*args) ⇒ Object



51
52
53
# File 'lib/pact_broker/test/test_data_builder.rb', line 51

def comment *args
  self
end

#create_certificate(options = {path: 'spec/fixtures/single-certificate.pem'}) ⇒ Object



311
312
313
314
315
# File 'lib/pact_broker/test/test_data_builder.rb', line 311

def create_certificate options = {path: 'spec/fixtures/single-certificate.pem'}
  options.delete(:comment)
  PactBroker::Certificates::Certificate.create(uuid: SecureRandom.urlsafe_base64, content: File.read(options[:path]))
  self
end

#create_condorObject



70
71
72
73
# File 'lib/pact_broker/test/test_data_builder.rb', line 70

def create_condor
  create_consumer("Condor")
  self
end

#create_consumer(consumer_name = "Consumer #{model_counter}", params = {}) ⇒ Object



102
103
104
105
106
107
# File 'lib/pact_broker/test/test_data_builder.rb', line 102

def create_consumer consumer_name = "Consumer #{model_counter}", params = {}
  params.delete(:comment)
  create_pacticipant consumer_name, params
  @consumer = @pacticipant
  self
end

#create_consumer_version(version_number = "1.0.#{model_counter}", params = {}) ⇒ Object



133
134
135
136
137
138
139
140
141
# File 'lib/pact_broker/test/test_data_builder.rb', line 133

def create_consumer_version version_number = "1.0.#{model_counter}", params = {}
  params.delete(:comment)
  tag_names = [params.delete(:tag_names), params.delete(:tag_name)].flatten.compact
  @consumer_version = PactBroker::Domain::Version.create(:number => version_number, :pacticipant => @consumer)
  tag_names.each do | tag_name |
    PactBroker::Domain::Tag.create(name: tag_name, version: @consumer_version)
  end
  self
end

#create_consumer_version_tag(tag_name, params = {}) ⇒ Object



167
168
169
170
171
172
# File 'lib/pact_broker/test/test_data_builder.rb', line 167

def create_consumer_version_tag tag_name, params = {}
  params.delete(:comment)
  @tag = PactBroker::Domain::Tag.create(name: tag_name, version: @consumer_version)
  set_created_at_if_set params[:created_at], :tags, { name: @tag.name, version_id: @tag.version_id }
  self
end

#create_consumer_webhook(parameters = {}) ⇒ Object



253
254
255
# File 'lib/pact_broker/test/test_data_builder.rb', line 253

def create_consumer_webhook parameters = {}
  create_webhook(parameters.merge(provider: nil))
end

#create_contract_email_serviceObject



65
66
67
68
# File 'lib/pact_broker/test/test_data_builder.rb', line 65

def create_contract_email_service
  create_consumer("Contract Email Service", :repository_url => '[email protected]:business-systems/contract-email-service')
  self
end

#create_contract_proposal_serviceObject



60
61
62
63
# File 'lib/pact_broker/test/test_data_builder.rb', line 60

def create_contract_proposal_service
  create_provider("Contract Proposal Service", :repository_url => '[email protected]:business-systems/contract-proposal-service')
  self
end

#create_deprecated_webhook_execution(params = {}) ⇒ Object



278
279
280
281
282
283
284
285
286
287
288
289
# File 'lib/pact_broker/test/test_data_builder.rb', line 278

def create_deprecated_webhook_execution params = {}
  params.delete(:comment)
  create_webhook_execution params
  Sequel::Model.db[:webhook_executions].where(id: webhook_execution.id).update(
    triggered_webhook_id: nil,
    consumer_id: consumer.id,
    provider_id: provider.id,
    webhook_id: PactBroker::Webhooks::Webhook.find(uuid: webhook.uuid).id,
    pact_publication_id: pact.id
  )
  self
end

#create_global_verification_webhook(parameters = {}) ⇒ Object



245
246
247
# File 'lib/pact_broker/test/test_data_builder.rb', line 245

def create_global_verification_webhook parameters = {}
  create_webhook(parameters.merge(consumer: nil, provider: nil, event_names: [PactBroker::Webhooks::WebhookEvent::VERIFICATION_PUBLISHED]))
end

#create_global_webhook(parameters = {}) ⇒ Object



241
242
243
# File 'lib/pact_broker/test/test_data_builder.rb', line 241

def create_global_webhook parameters = {}
  create_webhook(parameters.merge(consumer: nil, provider: nil))
end

#create_label(label_name) ⇒ Object



181
182
183
184
# File 'lib/pact_broker/test/test_data_builder.rb', line 181

def create_label label_name
  @label = PactBroker::Domain::Label.create(name: label_name, pacticipant: @pacticipant)
  self
end

#create_pact(params = {}) ⇒ Object



186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
# File 'lib/pact_broker/test/test_data_builder.rb', line 186

def create_pact params = {}
  params.delete(:comment)
  json_content = params[:json_content] || default_json_content
  pact_version_sha = params[:pact_version_sha] || generate_pact_version_sha(json_content)
  @pact = PactBroker::Pacts::Repository.new.create(
    version_id: @consumer_version.id,
    consumer_id: @consumer.id,
    provider_id: @provider.id,
    pact_version_sha: pact_version_sha,
    json_content: prepare_json_content(json_content),
  )
  set_created_at_if_set params[:created_at], :pact_publications, {id: @pact.id}
  set_created_at_if_set params[:created_at], :pact_versions, {sha: @pact.pact_version_sha}
  @pact = PactBroker::Pacts::PactPublication.find(id: @pact.id).to_domain
  self
end

#create_pact_with_hierarchy(consumer_name = "Consumer", consumer_version = "1.2.3", provider_name = "Provider", json_content = default_json_content) ⇒ Object



75
76
77
78
79
80
81
# File 'lib/pact_broker/test/test_data_builder.rb', line 75

def create_pact_with_hierarchy consumer_name = "Consumer", consumer_version = "1.2.3", provider_name = "Provider", json_content = default_json_content
  create_consumer consumer_name
  create_provider provider_name
  create_consumer_version consumer_version
  create_pact json_content: json_content
  self
end

#create_pacticipant(pacticipant_name, params = {}) ⇒ Object



96
97
98
99
100
# File 'lib/pact_broker/test/test_data_builder.rb', line 96

def create_pacticipant pacticipant_name, params = {}
  params.delete(:comment)
  @pacticipant = PactBroker::Domain::Pacticipant.create({ :name => pacticipant_name }.merge(params))
  self
end

#create_pricing_serviceObject



55
56
57
58
# File 'lib/pact_broker/test/test_data_builder.rb', line 55

def create_pricing_service
  create_provider("Pricing Service", :repository_url => '[email protected]:business-systems/pricing-service')
  self
end

#create_provider(provider_name = "Provider #{model_counter}", params = {}) ⇒ Object



115
116
117
118
119
120
# File 'lib/pact_broker/test/test_data_builder.rb', line 115

def create_provider provider_name = "Provider #{model_counter}", params = {}
  params.delete(:comment)
  create_pacticipant provider_name, params
  @provider = @pacticipant
  self
end

#create_provider_version(version_number = "1.0.#{model_counter}", params = {}) ⇒ Object



143
144
145
146
147
148
# File 'lib/pact_broker/test/test_data_builder.rb', line 143

def create_provider_version version_number = "1.0.#{model_counter}", params = {}
  params.delete(:comment)
  @version = PactBroker::Domain::Version.create(:number => version_number, :pacticipant => @provider)
  @provider_version = @version
  self
end

#create_provider_version_tag(tag_name, params = {}) ⇒ Object



174
175
176
177
178
179
# File 'lib/pact_broker/test/test_data_builder.rb', line 174

def create_provider_version_tag tag_name, params = {}
  params.delete(:comment)
  @tag = PactBroker::Domain::Tag.create(name: tag_name, version: @provider_version)
  set_created_at_if_set params[:created_at], :tags, { name: @tag.name, version_id: @tag.version_id }
  self
end

#create_provider_webhook(parameters = {}) ⇒ Object



249
250
251
# File 'lib/pact_broker/test/test_data_builder.rb', line 249

def create_provider_webhook parameters = {}
  create_webhook(parameters.merge(consumer: nil))
end

#create_tag(tag_name, params = {}) ⇒ Object



160
161
162
163
164
165
# File 'lib/pact_broker/test/test_data_builder.rb', line 160

def create_tag tag_name, params = {}
  params.delete(:comment)
  @tag = PactBroker::Domain::Tag.create(name: tag_name, version: @version)
  set_created_at_if_set params[:created_at], :tags, { name: @tag.name, version_id: @tag.version_id }
  self
end

#create_tag_with_hierarchy(pacticipant_name, pacticipant_version, tag_name) ⇒ Object



90
91
92
93
94
# File 'lib/pact_broker/test/test_data_builder.rb', line 90

def create_tag_with_hierarchy pacticipant_name, pacticipant_version, tag_name
  create_version_with_hierarchy pacticipant_name, pacticipant_version
  PactBroker::Domain::Tag.create(name: tag_name, version: @version)
  self
end

#create_triggered_webhook(params = {}) ⇒ Object



257
258
259
260
261
262
263
264
265
# File 'lib/pact_broker/test/test_data_builder.rb', line 257

def create_triggered_webhook params = {}
  params.delete(:comment)
  trigger_uuid = params[:trigger_uuid] || webhook_service.next_uuid
  verification = @webhook.trigger_on_provider_verification_published? ? @verification : nil
  @triggered_webhook = webhook_repository.create_triggered_webhook trigger_uuid, @webhook, @pact, verification, PactBroker::Webhooks::Service::RESOURCE_CREATION
  @triggered_webhook.update(status: params[:status]) if params[:status]
  set_created_at_if_set params[:created_at], :triggered_webhooks, {id: @triggered_webhook.id}
  self
end

#create_verification(parameters = {}) ⇒ Object



291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
# File 'lib/pact_broker/test/test_data_builder.rb', line 291

def create_verification parameters = {}
  parameters.delete(:comment)
  tag_names = [parameters.delete(:tag_names), parameters.delete(:tag_name)].flatten.compact
  provider_version_number = parameters[:provider_version] || '4.5.6'
  default_parameters = {success: true, number: 1, test_results: {some: 'results'}}
  default_parameters[:execution_date] = @now if @now
  parameters = default_parameters.merge(parameters)
  parameters.delete(:provider_version)
  verification = PactBroker::Domain::Verification.new(parameters)
  @verification = PactBroker::Verifications::Repository.new.create(verification, provider_version_number, @pact)
  @provider_version = PactBroker::Domain::Version.where(pacticipant_id: @provider.id, number: provider_version_number).single_record

  if tag_names.any?
    tag_names.each do | tag_name |
      PactBroker::Domain::Tag.create(name: tag_name, version: @provider_version)
    end
  end
  self
end

#create_verification_webhook(parameters = {}) ⇒ Object



237
238
239
# File 'lib/pact_broker/test/test_data_builder.rb', line 237

def create_verification_webhook parameters = {}
  create_webhook(parameters.merge(event_names: [PactBroker::Webhooks::WebhookEvent::VERIFICATION_PUBLISHED]))
end

#create_version(version_number = "1.0.#{model_counter}", params = {}) ⇒ Object



127
128
129
130
131
# File 'lib/pact_broker/test/test_data_builder.rb', line 127

def create_version version_number = "1.0.#{model_counter}", params = {}
  params.delete(:comment)
  @version = PactBroker::Domain::Version.create(:number => version_number, :pacticipant => @pacticipant)
  self
end

#create_version_with_hierarchy(pacticipant_name, pacticipant_version) ⇒ Object



83
84
85
86
87
88
# File 'lib/pact_broker/test/test_data_builder.rb', line 83

def create_version_with_hierarchy pacticipant_name, pacticipant_version
  pacticipant = pacticipant_service.create(:name => pacticipant_name)
  version = PactBroker::Domain::Version.create(:number => pacticipant_version, :pacticipant => pacticipant)
  @version = PactBroker::Domain::Version.find(id: version.id) # Get version with populated order
  self
end

#create_webhook(parameters = {}) ⇒ Object



220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
# File 'lib/pact_broker/test/test_data_builder.rb', line 220

def create_webhook parameters = {}
  params = parameters.dup
  consumer = params.key?(:consumer) ? params.delete(:consumer) : @consumer
  provider = params.key?(:provider) ? params.delete(:provider) : @provider
  uuid = params[:uuid] || PactBroker::Webhooks::Service.next_uuid
  event_params = if params[:event_names]
    params[:event_names].collect{ |event_name| {name: event_name} }
  else
    params[:events] || [{ name: PactBroker::Webhooks::WebhookEvent::DEFAULT_EVENT_NAME }]
  end
  events = event_params.collect{ |e| PactBroker::Webhooks::WebhookEvent.new(e) }
  template_params = { method: 'POST', url: 'http://example.org', headers: {'Content-Type' => 'application/json'}, username: params[:username], password: params[:password]}
  request = PactBroker::Webhooks::WebhookRequestTemplate.new(template_params.merge(params))
  @webhook = PactBroker::Webhooks::Repository.new.create uuid, PactBroker::Domain::Webhook.new(request: request, events: events), consumer, provider
  self
end

#create_webhook_execution(params = {}) ⇒ Object



267
268
269
270
271
272
273
274
275
276
# File 'lib/pact_broker/test/test_data_builder.rb', line 267

def create_webhook_execution params = {}
  params.delete(:comment)
  logs = params[:logs] || "logs"
  webhook_execution_result = PactBroker::Webhooks::WebhookExecutionResult.new(nil, OpenStruct.new(code: "200"), logs, nil)
  @webhook_execution = PactBroker::Webhooks::Repository.new.create_execution @triggered_webhook, webhook_execution_result
  created_at = params[:created_at] || @pact.created_at + Rational(1, 86400)
  set_created_at_if_set created_at, :webhook_executions, {id: @webhook_execution.id}
  @webhook_execution = PactBroker::Webhooks::Execution.find(id: @webhook_execution.id)
  self
end

#in_utcObject



342
343
344
345
346
347
348
349
350
# File 'lib/pact_broker/test/test_data_builder.rb', line 342

def in_utc
  original_tz = ENV['TZ']
  begin
    ENV['TZ'] = 'UTC'
    yield
  ensure
    ENV['TZ'] = original_tz
  end
end

#model_counterObject



317
318
319
320
321
# File 'lib/pact_broker/test/test_data_builder.rb', line 317

def model_counter
  @@model_counter ||= 0
  @@model_counter += 1
  @@model_counter
end

#republish_same_pact(params = {}) ⇒ Object



203
204
205
206
207
208
# File 'lib/pact_broker/test/test_data_builder.rb', line 203

def republish_same_pact params = {}
  params.delete(:comment)
  last_pact_version = PactBroker::Pacts::PactVersion.order(:id).last
  create_pact json_content: last_pact_version.content
  self
end

#revise_pact(json_content = nil) ⇒ Object



210
211
212
213
214
215
216
217
218
# File 'lib/pact_broker/test/test_data_builder.rb', line 210

def revise_pact json_content = nil
  json_content = json_content ? json_content : {random: rand}.to_json
  pact_version_sha = generate_pact_version_sha(json_content)
  @pact = PactBroker::Pacts::Repository.new.update(@pact.id,
    json_content: prepare_json_content(json_content),
    pact_version_sha: pact_version_sha
  )
  self
end

#set_now(date) ⇒ Object



327
328
329
330
# File 'lib/pact_broker/test/test_data_builder.rb', line 327

def set_now date
  @now = date
  self
end

#use_consumer(consumer_name, params = {}) ⇒ Object



109
110
111
112
113
# File 'lib/pact_broker/test/test_data_builder.rb', line 109

def use_consumer consumer_name, params = {}
  params.delete(:comment)
  @consumer = PactBroker::Domain::Pacticipant.find(:name => consumer_name)
  self
end

#use_consumer_version(version_number) ⇒ Object



150
151
152
153
# File 'lib/pact_broker/test/test_data_builder.rb', line 150

def use_consumer_version version_number
  @consumer_version = PactBroker::Domain::Version.where(pacticipant_id: @consumer.id, number: version_number).single_record
  self
end

#use_provider(provider_name) ⇒ Object



122
123
124
125
# File 'lib/pact_broker/test/test_data_builder.rb', line 122

def use_provider provider_name
  @provider = PactBroker::Domain::Pacticipant.find(:name => provider_name)
  self
end

#use_provider_version(version_number) ⇒ Object



155
156
157
158
# File 'lib/pact_broker/test/test_data_builder.rb', line 155

def use_provider_version version_number
  @provider_version = PactBroker::Domain::Version.where(pacticipant_id: @provider.id, number: version_number).single_record
  self
end