zuora_connect 2.0.5z → 2.0.5za

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 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