zuora_connect 2.0.5z → 2.0.5za

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a444e75e8b7dde543c7fd746f2077ea447b0e4bff7c45f459e6032c00d657a3f
4
- data.tar.gz: b14e75d257b9cc63e0e70e2b17bb41be30d7e6da79fb82f0db8b242ceb169598
3
+ metadata.gz: bc2de03ab111d1b49a4ac3124b143d3c070f3854f365284b6fd0275d19b24373
4
+ data.tar.gz: 64a2e8fb4ff102e98c5d1850016d76d80e75f42bc1e9ae7c87512d465ca60786
5
5
  SHA512:
6
- metadata.gz: 9796c3c7bf607aafceda3ee497944ef7f76aec87dc8c98057096a61619b4896c6e0a0b09804eeec9cffe89c2cfd2832d604c5317f8e5220d49aa1c791006bc93
7
- data.tar.gz: 06bf04ef362d45e7954722de4a26b96b547080e78549a6118a48232dfbcb89592b4c4add15eec367e9ac3d698a77081be68484d922320ffb4d0c1cc95a5f94e3
6
+ metadata.gz: 5ed88071768d563993ea4566233dfe988ad49332b70b02a4c7f864d060598564b52fbdf90c52987b2ab25d2bd114373286e8270192a5b2084311e0a3f7fef92f
7
+ data.tar.gz: ed5f16d9d65e78d7293c79478eabbd219b648424f746bf967b58d302978179ce7ff06844d62304223785fcc734cdade3c60e3370ffcac7ee60b83b413e83aeb7
@@ -89,7 +89,11 @@ module ZuoraConnect
89
89
  Thread.current[:appinstance] = self
90
90
  end
91
91
 
92
- def new_session(session: self.data_lookup, username: self.access_token, password: self.refresh_token, holding_pattern: false, log_level: Logger::DEBUG)
92
+ def default_ougai_items
93
+ return {app_instance_id: self.id}
94
+ end
95
+
96
+ def new_session(session: self.data_lookup, username: self.access_token, password: self.refresh_token, holding_pattern: false, **args)
93
97
  self.api_version = "v2"
94
98
  self.username = username
95
99
  self.password = password
@@ -123,26 +127,26 @@ module ZuoraConnect
123
127
 
124
128
  if session.empty?
125
129
  self.new_session_message = "REFRESHING - Session Empty"
126
- ZuoraConnect.logger.add(log_level, self.new_session_message)
130
+ ZuoraConnect.logger.debug(self.new_session_message, self.default_ougai_items)
127
131
  raise ZuoraConnect::Exceptions::HoldingPattern if holding_pattern && !self.mark_for_refresh
128
132
  self.refresh(session: session)
129
133
 
130
134
  elsif (self.id != session["appInstance"].to_i)
131
135
  self.new_session_message = "REFRESHING - AppInstance ID(#{self.id}) does not match session id(#{session["appInstance"].to_i})"
132
- ZuoraConnect.logger.add(log_level, self.new_session_message)
136
+ ZuoraConnect.logger.debug(self.new_session_message, self.default_ougai_items)
133
137
  raise ZuoraConnect::Exceptions::HoldingPattern if holding_pattern && !self.mark_for_refresh
134
138
  self.refresh(session: session)
135
139
 
136
140
  elsif session["#{self.id}::task_data"].blank?
137
141
  self.new_session_message = "REFRESHING - Task Data Blank"
138
- ZuoraConnect.logger.add(log_level, self.new_session_message)
142
+ ZuoraConnect.logger.debug(self.new_session_message, self.default_ougai_items)
139
143
  raise ZuoraConnect::Exceptions::HoldingPattern if holding_pattern && !self.mark_for_refresh
140
144
  self.refresh(session: session)
141
145
 
142
146
  elsif session["#{self.id}::last_refresh"].blank?
143
147
  self.new_session_message = "REFRESHING - No Time on Cookie"
144
148
  recoverable_session = true
145
- ZuoraConnect.logger.add(log_level, self.new_session_message)
149
+ ZuoraConnect.logger.debug(self.new_session_message, self.default_ougai_items)
146
150
  raise ZuoraConnect::Exceptions::HoldingPattern if holding_pattern && !self.mark_for_refresh
147
151
  self.refresh(session: session)
148
152
 
@@ -150,7 +154,7 @@ module ZuoraConnect
150
154
  elsif (session["#{self.id}::last_refresh"].to_i < INSTANCE_REFRESH_WINDOW.ago.to_i) && self.mark_for_refresh
151
155
  self.new_session_message = "REFRESHING - Session Old by #{time_expire.abs} second"
152
156
  recoverable_session = true
153
- ZuoraConnect.logger.add(log_level, self.new_session_message)
157
+ ZuoraConnect.logger.debug(self.new_session_message, self.default_ougai_items)
154
158
  self.refresh(session: session)
155
159
 
156
160
  else
@@ -159,14 +163,14 @@ module ZuoraConnect
159
163
  else
160
164
  self.new_session_message = "REBUILDING - Expires in #{time_expire} seconds"
161
165
  end
162
- ZuoraConnect.logger.add(log_level, self.new_session_message)
166
+ ZuoraConnect.logger.debug(self.new_session_message, self.default_ougai_items)
163
167
  self.build_task(task_data: session["#{self.id}::task_data"], session: session)
164
168
  end
165
169
  end
166
170
  return self
167
171
  rescue ZuoraConnect::Exceptions::HoldingPattern => ex
168
172
  while self.marked_for_refresh?
169
- ZuoraConnect.logger.info("Holding - Expires in #{self.reset_mark_expires_at}. '#{self.new_session_message}'")
173
+ ZuoraConnect.logger.info("Holding - Expires in #{self.reset_mark_expires_at}. '#{self.new_session_message}'", self.default_ougai_items)
170
174
  sleep(HOLDING_PATTERN_SLEEP)
171
175
  end
172
176
  self.reload_attributes([:refresh_token, :oauth_expires_at, :access_token])
@@ -174,7 +178,7 @@ module ZuoraConnect
174
178
  retry
175
179
  rescue => ex
176
180
  if recoverable_session
177
- ZuoraConnect.logger.warn("REBUILDING - Using backup expired cache")
181
+ ZuoraConnect.logger.warn("REBUILDING - Using backup expired cache", self.default_ougai_items)
178
182
  self.build_task(task_data: session["#{self.id}::task_data"], session: session)
179
183
  return self
180
184
  else
@@ -212,7 +216,7 @@ module ZuoraConnect
212
216
  response = HTTParty.get(ZuoraConnect.configuration.url + "/api/#{self.api_version}/tools/tasks/#{self.id}.json",:body => {:access_token => self.access_token})
213
217
  response_time = Time.now - start
214
218
 
215
- ZuoraConnect.logger.debug("[#{self.id}] REFRESH TASK - Connect Task Info Request Time #{response_time.round(2).to_s}")
219
+ ZuoraConnect.logger.debug("REFRESH TASK - Connect Task Info Request Time #{response_time.round(2).to_s}", self.default_ougai_items)
216
220
  if response.code == 200
217
221
  self.build_task(task_data: JSON.parse(response.body), session: session)
218
222
  self.last_refresh = Time.now.to_i
@@ -230,23 +234,23 @@ module ZuoraConnect
230
234
  rescue *(ZuoraAPI::Login::CONNECTION_EXCEPTIONS).concat(ZuoraAPI::Login::CONNECTION_READ_EXCEPTIONS) => ex
231
235
  if (refresh_count += 1) < 3
232
236
  sleep(30)
233
- ZuoraConnect.logger.info("[#{self.id}] REFRESH TASK - #{ex.class} Retrying(#{refresh_count})")
237
+ ZuoraConnect.logger.info("REFRESH TASK - #{ex.class} Retrying(#{refresh_count})", self.default_ougai_items)
234
238
  retry
235
239
  else
236
- ZuoraConnect.logger.fatal("[#{self.id}] REFRESH TASK - #{ex.class} Failed #{refresh_count}x")
240
+ ZuoraConnect.logger.fatal("REFRESH TASK - #{ex.class} Failed #{refresh_count}x", self.default_ougai_items)
237
241
  raise
238
242
  end
239
243
  rescue ZuoraConnect::Exceptions::ConnectCommunicationError => ex
240
244
  if (refresh_count += 1) < 3
241
245
  if ex.code == 401
242
- ZuoraConnect.logger.info("[#{self.id}] REFRESH TASK - Failed #{ex.code} - Retrying(#{refresh_count})")
246
+ ZuoraConnect.logger.info("REFRESH TASK - Failed #{ex.code} - Retrying(#{refresh_count})", self.default_ougai_items)
243
247
  self.refresh_oauth
244
248
  else
245
- ZuoraConnect.logger.warn("[#{self.id}] REFRESH TASK - Failed #{ex.code} - Retrying(#{refresh_count})")
249
+ ZuoraConnect.logger.warn("REFRESH TASK - Failed #{ex.code} - Retrying(#{refresh_count})", self.default_ougai_items)
246
250
  end
247
251
  retry
248
252
  else
249
- ZuoraConnect.logger.fatal("[#{self.id}] REFRESH TASK - Failed #{ex.code} - #{refresh_count}x")
253
+ ZuoraConnect.logger.fatal("REFRESH TASK - Failed #{ex.code} - #{refresh_count}x", self.default_ougai_items)
250
254
  raise
251
255
  end
252
256
  end
@@ -484,7 +488,7 @@ module ZuoraConnect
484
488
  def check_oauth_state(method)
485
489
  #Refresh token if already expired
486
490
  if self.oauth_expired?
487
- ZuoraConnect.logger.debug("[#{self.id}] Before '#{method}' method, Oauth expired")
491
+ ZuoraConnect.logger.debug("Before '#{method}' method, Oauth expired", self.default_ougai_items)
488
492
  self.refresh_oauth
489
493
  end
490
494
  end
@@ -503,7 +507,7 @@ module ZuoraConnect
503
507
  }
504
508
  response = HTTParty.post("#{ZuoraConnect.configuration.url}/oauth/token",:body => params)
505
509
  response_time = Time.now - start
506
- ZuoraConnect.logger.debug("[#{self.id}] REFRESH OAUTH - In #{response_time.round(2).to_s}")
510
+ ZuoraConnect.logger.debug("REFRESH OAUTH - In #{response_time.round(2).to_s}", self.default_ougai_items)
507
511
 
508
512
  if response.code == 200
509
513
  response_body = JSON.parse(response.body)
@@ -517,10 +521,10 @@ module ZuoraConnect
517
521
  end
518
522
  rescue *(ZuoraAPI::Login::CONNECTION_EXCEPTIONS).concat(ZuoraAPI::Login::CONNECTION_READ_EXCEPTIONS) => ex
519
523
  if (refresh_oauth_count += 1) < 3
520
- ZuoraConnect.logger.info("[#{self.id}] REFRESH OAUTH - #{ex.class} Retrying(#{refresh_oauth_count})")
524
+ ZuoraConnect.logger.info("REFRESH OAUTH - #{ex.class} Retrying(#{refresh_oauth_count})", self.default_ougai_items)
521
525
  retry
522
526
  else
523
- ZuoraConnect.logger.fatal("[#{self.id}] REFRESH OAUTH - #{ex.class} Failed #{refresh_oauth_count}x")
527
+ ZuoraConnect.logger.fatal("REFRESH OAUTH - #{ex.class} Failed #{refresh_oauth_count}x", self.default_ougai_items)
524
528
  raise
525
529
  end
526
530
  rescue ZuoraConnect::Exceptions::ConnectCommunicationError => ex
@@ -531,10 +535,10 @@ module ZuoraConnect
531
535
  return if !self.oauth_expired?
532
536
 
533
537
  if (refresh_oauth_count += 1) < 3
534
- ZuoraConnect.logger.info("[#{self.id}] REFRESH OAUTH - Failed #{ex.code} - Retrying(#{refresh_oauth_count})")
538
+ ZuoraConnect.logger.info("REFRESH OAUTH - Failed #{ex.code} - Retrying(#{refresh_oauth_count})", self.default_ougai_items)
535
539
  retry
536
540
  else
537
- ZuoraConnect.logger.fatal("[#{self.id}] REFRESH OAUTH - Failed #{ex.code} - #{refresh_oauth_count}x")
541
+ ZuoraConnect.logger.fatal("REFRESH OAUTH - Failed #{ex.code} - #{refresh_oauth_count}x", self.default_ougai_items)
538
542
  raise
539
543
  end
540
544
  end
@@ -584,10 +588,10 @@ module ZuoraConnect
584
588
  end
585
589
  end
586
590
  if cached_instance.blank?
587
- ZuoraConnect.logger.debug("[#{self.id}] Cached AppInstance Missing")
591
+ ZuoraConnect.logger.debug("Cached AppInstance Missing", self.default_ougai_items)
588
592
  return session
589
593
  else
590
- ZuoraConnect.logger.debug("[#{self.id}] Cached AppInstance Found")
594
+ ZuoraConnect.logger.debug("Cached AppInstance Found", self.default_ougai_items)
591
595
  return decrypt_data(data: cached_instance, rescue_return: session).merge(session)
592
596
  end
593
597
  else
@@ -599,7 +603,7 @@ module ZuoraConnect
599
603
  if defined?(Redis.current)
600
604
  #Task data must be present and the last refresh cannot be old. We dont want to overwite new cache data with old
601
605
  if self.task_data.present? && (self.last_refresh.to_i > INSTANCE_REFRESH_WINDOW.ago.to_i)
602
- ZuoraConnect.logger.debug("[#{self.id}] Caching AppInstance")
606
+ ZuoraConnect.logger.debug("Caching AppInstance", self.default_ougai_items)
603
607
  Redis.current.setex("AppInstance:#{self.id}", INSTANCE_REDIS_CACHE_PERIOD.to_i, self.encrypt_data(data: self.save_data))
604
608
  end
605
609
  end
@@ -660,7 +664,7 @@ module ZuoraConnect
660
664
  begin
661
665
  return JSON.parse(encryptor.decrypt_and_verify(CGI::unescape(data)))
662
666
  rescue ActiveSupport::MessageVerifier::InvalidSignature => ex
663
- ZuoraConnect.logger.add(Logger::ERROR, "Error Decrypting for #{self.id}") if log_fatal
667
+ ZuoraConnect.logger.error("Error Decrypting", self.default_ougai_items) if log_fatal
664
668
  return rescue_return
665
669
  rescue JSON::ParserError => ex
666
670
  return encryptor.decrypt_and_verify(CGI::unescape(data))
@@ -1029,9 +1033,7 @@ module ZuoraConnect
1029
1033
 
1030
1034
  def method_missing(method_sym, *arguments, &block)
1031
1035
  if method_sym.to_s.include?("login")
1032
- ZuoraConnect.logger.fatal("Method Missing #{method_sym}")
1033
- ZuoraConnect.logger.fatal("Instance Data: #{self.task_data}")
1034
- ZuoraConnect.logger.fatal("Instance Logins: #{self.logins}")
1036
+ ZuoraConnect.logger.fatal("Method Missing #{method_sym}. Instance Data: #{self.task_data} Instance Logins: #{self.logins}", self.default_ougai_items)
1035
1037
  end
1036
1038
  super
1037
1039
  end
@@ -0,0 +1,9 @@
1
+ #Used to ensure encode of UploadedFile for lograge does not dump entire file.
2
+ class ActionDispatch::Http::UploadedFile
3
+ def as_json(options = nil)
4
+ %w(headers).inject({}) do |hash, attr|
5
+ hash[attr] = send(attr).force_encoding('utf-8')
6
+ hash
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,22 @@
1
+ module ZuoraConnect
2
+ class JsonParseErrors
3
+ def initialize(app)
4
+ @app = app
5
+ end
6
+
7
+ def call(env)
8
+ begin
9
+ @app.call(env)
10
+ rescue ActionDispatch::ParamsParser::ParseError => error
11
+ if env['HTTP_ACCEPT'] =~ /application\/json/ || env['CONTENT_TYPE'] =~ /application\/json/
12
+ return [
13
+ 400, { "Content-Type" => "application/json" },
14
+ [{"success": false, "reasons": [{"code": 50000090, "message": "Malformed json was submitted." }]}.to_json ]
15
+ ]
16
+ else
17
+ raise error
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -211,7 +211,7 @@ module ZuoraConnect
211
211
  client_describe = session["ZuoraCurrentUserInfo"]
212
212
  end
213
213
 
214
- available_entities = client_describe["accessibleEntities"].select {|entity| entity['id'] == client_describe['defaultEntityId']}
214
+ available_entities = client_describe["accessibleEntities"].select {|entity| entity['id'] == zuora_entity_id}
215
215
  task_data = {
216
216
  "id": next_id,
217
217
  "name": client_describe["tenantName"],
@@ -227,7 +227,7 @@ module ZuoraConnect
227
227
  "authentication_type": "OAUTH",
228
228
  "entities": available_entities.map {|e| e.merge({'displayName' => client_describe["tenantName"]})}
229
229
  },
230
- "tenant_ids": available_entities.map{|e| e['entityId'] }.push(client_describe["tenantId"]).uniq,
230
+ "tenant_ids": available_entities.map{|e| e['entityId']}.uniq,
231
231
  }
232
232
  mapped_values = {:id => next_id, :api_token => rand(36**64).to_s(36), :token => rand(36**64).to_s(36), :zuora_logins => task_data, :oauth_expires_at => Time.now + 1000.years, :zuora_domain => zuora_client.rest_domain, :zuora_entity_ids => [zuora_entity_id]}
233
233
  @appinstance = ZuoraConnect::AppInstance.new(mapped_values)
@@ -1,5 +1,6 @@
1
1
  require 'middleware/metrics_middleware'
2
2
  require 'middleware/request_id_middleware'
3
+ require 'middleware/json_parse_errors'
3
4
 
4
5
  module ZuoraConnect
5
6
  class Railtie < Rails::Railtie
@@ -25,6 +26,7 @@ module ZuoraConnect
25
26
  initializer "zuora_connect.configure_rails_initialization" do |app|
26
27
  app.middleware.insert_after Rack::Sendfile, ZuoraConnect::MetricsMiddleware
27
28
  app.middleware.insert_after ActionDispatch::RequestId, ZuoraConnect::RequestIdMiddleware
29
+ app.config.middleware.use ZuoraConnect::JsonParseErrors
28
30
  end
29
31
 
30
32
  # hook to process_action
@@ -52,7 +54,7 @@ module ZuoraConnect
52
54
  exceptions = %w(controller action format id)
53
55
  items = {
54
56
  #time: event.time.strftime('%FT%T.%6N'),
55
- params: event.payload[:params].except(*exceptions).to_json.to_s
57
+ params: event.payload[:params].as_json(except: exceptions).to_json.to_s
56
58
  }
57
59
  items.merge!({exception_object: event.payload[:exception_object]}) if event.payload[:exception_object].present?
58
60
  items.merge!({exception: event.payload[:exception]}) if event.payload[:exception].present?
@@ -1,3 +1,3 @@
1
1
  module ZuoraConnect
2
- VERSION = "2.0.5z"
3
- end
2
+ VERSION = "2.0.5za"
3
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zuora_connect
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.5z
4
+ version: 2.0.5za
5
5
  platform: ruby
6
6
  authors:
7
7
  - Connect Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-01 00:00:00.000000000 Z
11
+ date: 2019-08-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: apartment
@@ -58,20 +58,20 @@ dependencies:
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: 1.6.48
61
+ version: 1.7.00
62
62
  - - "~>"
63
63
  - !ruby/object:Gem::Version
64
- version: 1.6.48
64
+ version: 1.7.00
65
65
  type: :runtime
66
66
  prerelease: false
67
67
  version_requirements: !ruby/object:Gem::Requirement
68
68
  requirements:
69
69
  - - ">="
70
70
  - !ruby/object:Gem::Version
71
- version: 1.6.48
71
+ version: 1.7.00
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: 1.6.48
74
+ version: 1.7.00
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: httparty
77
77
  requirement: !ruby/object:Gem::Requirement
@@ -314,6 +314,7 @@ files:
314
314
  - config/initializers/apartment.rb
315
315
  - config/initializers/aws.rb
316
316
  - config/initializers/object_method_hooks.rb
317
+ - config/initializers/patches.rb
317
318
  - config/initializers/postgresql_adapter.rb
318
319
  - config/initializers/prometheus.rb
319
320
  - config/initializers/redis.rb
@@ -337,6 +338,7 @@ files:
337
338
  - lib/logging/connect_formatter.rb
338
339
  - lib/metrics/influx/point_value.rb
339
340
  - lib/metrics/net.rb
341
+ - lib/middleware/json_parse_errors.rb
340
342
  - lib/middleware/metrics_middleware.rb
341
343
  - lib/middleware/request_id_middleware.rb
342
344
  - lib/resque/additions.rb
@@ -416,44 +418,44 @@ signing_key:
416
418
  specification_version: 4
417
419
  summary: Summary of Connect.
418
420
  test_files:
421
+ - test/integration/navigation_test.rb
422
+ - test/controllers/zuora_connect/api/v1/app_instance_controller_test.rb
423
+ - test/fixtures/zuora_connect/app_instances.yml
419
424
  - test/dummy/app/controllers/application_controller.rb
420
425
  - test/dummy/app/views/layouts/application.html.erb
421
- - test/dummy/app/assets/javascripts/application.js
422
426
  - test/dummy/app/assets/stylesheets/application.css
427
+ - test/dummy/app/assets/javascripts/application.js
423
428
  - test/dummy/app/helpers/application_helper.rb
424
- - test/dummy/bin/rake
425
429
  - test/dummy/bin/setup
426
430
  - test/dummy/bin/bundle
431
+ - test/dummy/bin/rake
427
432
  - test/dummy/bin/rails
428
- - test/dummy/config/secrets.yml
429
433
  - test/dummy/config/routes.rb
430
- - test/dummy/config/locales/en.yml
431
- - test/dummy/config/environments/production.rb
432
- - test/dummy/config/environments/development.rb
433
- - test/dummy/config/environments/test.rb
434
434
  - test/dummy/config/environment.rb
435
435
  - test/dummy/config/application.rb
436
- - test/dummy/config/database.yml
437
436
  - test/dummy/config/boot.rb
437
+ - test/dummy/config/database.yml
438
+ - test/dummy/config/environments/production.rb
439
+ - test/dummy/config/environments/development.rb
440
+ - test/dummy/config/environments/test.rb
441
+ - test/dummy/config/secrets.yml
442
+ - test/dummy/config/locales/en.yml
443
+ - test/dummy/config/initializers/inflections.rb
438
444
  - test/dummy/config/initializers/backtrace_silencers.rb
439
445
  - test/dummy/config/initializers/mime_types.rb
440
446
  - test/dummy/config/initializers/filter_parameter_logging.rb
441
- - test/dummy/config/initializers/session_store.rb
442
- - test/dummy/config/initializers/wrap_parameters.rb
443
447
  - test/dummy/config/initializers/assets.rb
444
448
  - test/dummy/config/initializers/cookies_serializer.rb
445
- - test/dummy/config/initializers/inflections.rb
446
- - test/dummy/config.ru
447
- - test/dummy/Rakefile
449
+ - test/dummy/config/initializers/session_store.rb
450
+ - test/dummy/config/initializers/wrap_parameters.rb
448
451
  - test/dummy/public/favicon.ico
449
- - test/dummy/public/422.html
450
452
  - test/dummy/public/500.html
451
453
  - test/dummy/public/404.html
454
+ - test/dummy/public/422.html
455
+ - test/dummy/Rakefile
452
456
  - test/dummy/README.rdoc
453
- - test/integration/navigation_test.rb
454
- - test/zuora_connect_test.rb
455
- - test/models/zuora_connect/app_instance_test.rb
457
+ - test/dummy/config.ru
456
458
  - test/lib/generators/zuora_connect/datatable_generator_test.rb
457
- - test/fixtures/zuora_connect/app_instances.yml
458
459
  - test/test_helper.rb
459
- - test/controllers/zuora_connect/api/v1/app_instance_controller_test.rb
460
+ - test/zuora_connect_test.rb
461
+ - test/models/zuora_connect/app_instance_test.rb