inferno_core 0.3.12 → 0.4.0

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.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/lib/inferno/apps/web/application.rb +1 -0
  3. data/lib/inferno/apps/web/controllers/controller.rb +6 -8
  4. data/lib/inferno/apps/web/controllers/requests/show.rb +3 -3
  5. data/lib/inferno/apps/web/controllers/test_runs/create.rb +13 -17
  6. data/lib/inferno/apps/web/controllers/test_runs/destroy.rb +8 -10
  7. data/lib/inferno/apps/web/controllers/test_runs/results/index.rb +4 -4
  8. data/lib/inferno/apps/web/controllers/test_runs/show.rb +9 -7
  9. data/lib/inferno/apps/web/controllers/test_sessions/create.rb +9 -8
  10. data/lib/inferno/apps/web/controllers/test_sessions/last_test_run.rb +4 -4
  11. data/lib/inferno/apps/web/controllers/test_sessions/results/index.rb +6 -6
  12. data/lib/inferno/apps/web/controllers/test_sessions/session_data/apply_preset.rb +10 -10
  13. data/lib/inferno/apps/web/controllers/test_sessions/session_data/index.rb +5 -3
  14. data/lib/inferno/apps/web/controllers/test_sessions/show.rb +3 -3
  15. data/lib/inferno/apps/web/controllers/test_suites/check_configuration.rb +3 -3
  16. data/lib/inferno/apps/web/controllers/test_suites/index.rb +2 -2
  17. data/lib/inferno/apps/web/controllers/test_suites/show.rb +3 -3
  18. data/lib/inferno/apps/web/router.rb +55 -41
  19. data/lib/inferno/apps/web/serializers/message.rb +2 -0
  20. data/lib/inferno/apps/web/serializers/preset.rb +2 -5
  21. data/lib/inferno/apps/web/serializers/request.rb +2 -0
  22. data/lib/inferno/apps/web/serializers/result.rb +1 -0
  23. data/lib/inferno/apps/web/serializers/session_data.rb +2 -0
  24. data/lib/inferno/apps/web/serializers/suite_option.rb +2 -0
  25. data/lib/inferno/apps/web/serializers/test.rb +3 -0
  26. data/lib/inferno/apps/web/serializers/test_group.rb +4 -2
  27. data/lib/inferno/apps/web/serializers/test_run.rb +3 -0
  28. data/lib/inferno/apps/web/serializers/test_suite.rb +5 -1
  29. data/lib/inferno/config/application.rb +1 -6
  30. data/lib/inferno/config/boot/web.rb +2 -7
  31. data/lib/inferno/dsl/assertions.rb +2 -2
  32. data/lib/inferno/dsl/configurable.rb +4 -4
  33. data/lib/inferno/dsl/fhir_client.rb +3 -2
  34. data/lib/inferno/dsl/fhir_client_builder.rb +2 -2
  35. data/lib/inferno/dsl/fhir_validation.rb +5 -6
  36. data/lib/inferno/dsl/http_client.rb +17 -18
  37. data/lib/inferno/dsl/http_client_builder.rb +4 -4
  38. data/lib/inferno/dsl/input_output_handling.rb +1 -1
  39. data/lib/inferno/dsl/request_storage.rb +2 -2
  40. data/lib/inferno/dsl/resume_test_route.rb +36 -34
  41. data/lib/inferno/dsl/runnable.rb +8 -9
  42. data/lib/inferno/entities/header.rb +7 -7
  43. data/lib/inferno/entities/request.rb +35 -36
  44. data/lib/inferno/entities/session_data.rb +6 -6
  45. data/lib/inferno/entities/test.rb +4 -4
  46. data/lib/inferno/entities/test_group.rb +2 -2
  47. data/lib/inferno/entities/test_run.rb +1 -1
  48. data/lib/inferno/jobs/execute_test_run.rb +1 -1
  49. data/lib/inferno/jobs/resume_test_run.rb +1 -1
  50. data/lib/inferno/public/bundle.js +2 -2
  51. data/lib/inferno/repositories/messages.rb +1 -1
  52. data/lib/inferno/repositories/repository.rb +1 -1
  53. data/lib/inferno/repositories/requests.rb +6 -6
  54. data/lib/inferno/repositories/results.rb +16 -16
  55. data/lib/inferno/repositories/session_data.rb +6 -6
  56. data/lib/inferno/repositories/test_runs.rb +6 -6
  57. data/lib/inferno/repositories/test_sessions.rb +7 -7
  58. data/lib/inferno/test_runner.rb +3 -3
  59. data/lib/inferno/utils/preset_template_generator.rb +1 -1
  60. data/lib/inferno/version.rb +1 -1
  61. data/spec/factories/test_run.rb +1 -1
  62. data/spec/factories/test_session.rb +1 -1
  63. data/spec/fixtures/basic_test_suite.rb +1 -0
  64. metadata +24 -24
@@ -1,3 +1,7 @@
1
+ require_relative 'preset'
2
+ require_relative 'suite_option'
3
+ require_relative 'test_group'
4
+
1
5
  module Inferno
2
6
  module Web
3
7
  module Serializers
@@ -25,7 +29,7 @@ module Inferno
25
29
  include_view :summary
26
30
  field :test_groups do |suite, options|
27
31
  suite_options = options[:suite_options]
28
- TestGroup.render_as_hash(suite.groups(suite_options), suite_options: suite_options)
32
+ TestGroup.render_as_hash(suite.groups(suite_options), suite_options:)
29
33
  end
30
34
  field :configuration_messages
31
35
  field :inputs do |suite, options|
@@ -25,13 +25,8 @@ module Inferno
25
25
 
26
26
  configure do |config|
27
27
  config.root = File.expand_path('../../..', __dir__)
28
- config.default_namespace = 'inferno'
29
- config.system_dir = File.join('lib', 'inferno', 'config')
30
28
  config.bootable_dirs = [File.join('lib', 'inferno', 'config', 'boot')]
31
-
32
- config.auto_register = 'lib'
29
+ config.component_dirs.add 'lib'
33
30
  end
34
-
35
- load_paths!('lib')
36
31
  end
37
32
  end
@@ -1,15 +1,10 @@
1
1
  Inferno::Application.boot(:web) do |_app|
2
2
  init do
3
3
  require 'blueprinter'
4
- require 'hanami-router'
5
- require 'hanami-controller'
4
+ require 'hanami/router'
5
+ require 'hanami/controller'
6
6
  require 'oj'
7
7
 
8
- Hanami::Controller.configure do
9
- default_request_format :json
10
- default_response_format :json
11
- end
12
-
13
8
  Blueprinter.configure do |config|
14
9
  config.generator = Oj
15
10
  end
@@ -58,7 +58,7 @@ module Inferno
58
58
  # @param profile_url [String] url of the profile to validate against,
59
59
  # defaults to validating against the base FHIR resource
60
60
  def assert_valid_resource(resource: self.resource, profile_url: nil)
61
- assert resource_is_valid?(resource: resource, profile_url: profile_url),
61
+ assert resource_is_valid?(resource:, profile_url:),
62
62
  invalid_resource_message(profile_url)
63
63
  end
64
64
 
@@ -100,7 +100,7 @@ module Inferno
100
100
  .map(&:resource)
101
101
  .select { |resource| types_to_check.empty? || types_to_check.include?(resource.resourceType) }
102
102
  .reject do |resource|
103
- validation_params = { resource: resource }
103
+ validation_params = { resource: }
104
104
  profile = types_to_check[resource.resourceType]
105
105
  validation_params[:profile_url] = profile if profile
106
106
 
@@ -37,7 +37,7 @@ module Inferno
37
37
  new_configuration
38
38
  end
39
39
 
40
- self.configuration = configuration.deep_merge(config_to_apply.reject { |key, _| key == :inputs })
40
+ self.configuration = configuration.deep_merge(config_to_apply.except(:inputs))
41
41
 
42
42
  config_to_apply[:inputs]&.each do |identifier, new_input|
43
43
  add_input(identifier, new_input.to_hash)
@@ -58,13 +58,13 @@ module Inferno
58
58
  existing_config = input(identifier)
59
59
 
60
60
  if existing_config.nil?
61
- return inputs[identifier] = Entities::Input.new(default_input_params(identifier).merge(new_config))
61
+ return inputs[identifier] = Entities::Input.new(**default_input_params(identifier).merge(new_config))
62
62
  end
63
63
 
64
64
  inputs[identifier] =
65
65
  Entities::Input
66
- .new(existing_config.to_hash)
67
- .merge(Entities::Input.new(new_config))
66
+ .new(**existing_config.to_hash)
67
+ .merge(Entities::Input.new(**new_config))
68
68
  end
69
69
 
70
70
  def default_input_params(identifier)
@@ -1,3 +1,4 @@
1
+ require_relative 'fhir_client_builder'
1
2
  require_relative 'request_storage'
2
3
  require_relative 'tcp_exception_handler'
3
4
 
@@ -136,7 +137,7 @@ module Inferno
136
137
  store_request_and_refresh_token(fhir_client(client), name) do
137
138
  tcp_exception_handler do
138
139
  fhir_client(client)
139
- .search(fhir_class_from_resource_type(resource_type), { search: search })
140
+ .search(fhir_class_from_resource_type(resource_type), { search: })
140
141
  end
141
142
  end
142
143
  end
@@ -194,7 +195,7 @@ module Inferno
194
195
  name: credentials.name,
195
196
  value: credentials,
196
197
  type: 'oauth_credentials',
197
- test_session_id: test_session_id
198
+ test_session_id:
198
199
  )
199
200
  end
200
201
  rescue StandardError => e
@@ -73,8 +73,8 @@ module Inferno
73
73
  end
74
74
 
75
75
  # @private
76
- def method_missing(name, *args, &block)
77
- return runnable.call(name, *args, &block) if runnable.respond_to? name
76
+ def method_missing(name, *args, &)
77
+ return runnable.call(name, *args, &) if runnable.respond_to? name
78
78
 
79
79
  super
80
80
  end
@@ -45,8 +45,8 @@ module Inferno
45
45
  attr_reader :requirements
46
46
 
47
47
  # @private
48
- def initialize(requirements = nil, &block)
49
- instance_eval(&block)
48
+ def initialize(requirements = nil, &)
49
+ instance_eval(&)
50
50
  @requirements = requirements
51
51
  end
52
52
 
@@ -172,11 +172,10 @@ module Inferno
172
172
  # @param profile_url [String]
173
173
  # @return [String] the body of the validation response
174
174
  def validate(resource, profile_url)
175
- RestClient.post(
176
- "#{url}/validate",
177
- resource.source_contents,
175
+ Faraday.new(
176
+ url,
178
177
  params: { profile: profile_url }
179
- ).body
178
+ ).post('validate', resource.source_contents).body
180
179
  end
181
180
  end
182
181
 
@@ -1,5 +1,6 @@
1
1
  require 'faraday_middleware'
2
2
 
3
+ require_relative 'http_client_builder'
3
4
  require_relative 'request_storage'
4
5
  require_relative 'tcp_exception_handler'
5
6
 
@@ -66,18 +67,17 @@ module Inferno
66
67
  # @param client [Symbol]
67
68
  # @param name [Symbol] Name for this request to allow it to be used by
68
69
  # other tests
69
- # @option options [Hash] Input headers here - headers are optional and
70
- # must be entered as the last piece of input to this method
70
+ # @param headers [Hash] Input headers here
71
71
  # @return [Inferno::Entities::Request]
72
- def get(url = '', client: :default, name: nil, **options)
72
+ def get(url = '', client: :default, name: nil, headers: nil)
73
73
  store_request('outgoing', name) do
74
74
  tcp_exception_handler do
75
75
  client = http_client(client)
76
76
 
77
77
  if client
78
- client.get(url, nil, options[:headers])
78
+ client.get(url, nil, headers)
79
79
  elsif url.match?(%r{\Ahttps?://})
80
- connection.get(url, nil, options[:headers])
80
+ connection.get(url, nil, headers)
81
81
  else
82
82
  raise StandardError, 'Must use an absolute url or define an HTTP client with a base url'
83
83
  end
@@ -102,18 +102,17 @@ module Inferno
102
102
  # @param client [Symbol]
103
103
  # @param name [Symbol] Name for this request to allow it to be used by
104
104
  # other tests
105
- # @option options [Hash] Input headers here - headers are optional and
106
- # must be entered as the last piece of input to this method
105
+ # @param headers [Hash] Input headers here
107
106
  # @return [Inferno::Entities::Request]
108
- def post(url = '', body: nil, client: :default, name: nil, **options)
107
+ def post(url = '', body: nil, client: :default, name: nil, headers: nil)
109
108
  store_request('outgoing', name) do
110
109
  tcp_exception_handler do
111
110
  client = http_client(client)
112
111
 
113
112
  if client
114
- client.post(url, body, options[:headers])
113
+ client.post(url, body, headers)
115
114
  elsif url.match?(%r{\Ahttps?://})
116
- connection.post(url, body, options[:headers])
115
+ connection.post(url, body, headers)
117
116
  else
118
117
  raise StandardError, 'Must use an absolute url or define an HTTP client with a base url'
119
118
  end
@@ -129,16 +128,17 @@ module Inferno
129
128
  # @param client [Symbol]
130
129
  # @param name [Symbol] Name for this request to allow it to be used by
131
130
  # other tests
131
+ # @param headers [Hash] Input headers here
132
132
  # @return [Inferno::Entities::Request]
133
- def delete(url = '', client: :default, name: :nil, **options)
133
+ def delete(url = '', client: :default, name: :nil, headers: nil)
134
134
  store_request('outgoing', name) do
135
135
  tcp_exception_handler do
136
136
  client = http_client(client)
137
137
 
138
138
  if client
139
- client.delete(url, nil, options[:headers])
139
+ client.delete(url, nil, headers)
140
140
  elsif url.match?(%r{\Ahttps?://})
141
- connection.delete(url, nil, options[:headers])
141
+ connection.delete(url, nil, headers)
142
142
  else
143
143
  raise StandardError, 'Must use an absolute url or define an HTTP client with a base url'
144
144
  end
@@ -158,10 +158,9 @@ module Inferno
158
158
  # @param client [Symbol]
159
159
  # @param name [Symbol] Name for this request to allow it to be used by
160
160
  # other tests
161
- # @option options [Hash] Input headers here - headers are optional and
162
- # must be entered as the last piece of input to this method
161
+ # @param headers [Hash] Input headers here
163
162
  # @return [Inferno::Entities::Request]
164
- def stream(block, url = '', limit = 100, client: :default, name: nil, **options)
163
+ def stream(block, url = '', limit = 100, client: :default, name: nil, headers: nil)
165
164
  streamed = []
166
165
 
167
166
  collector = proc do |chunk, bytes|
@@ -175,9 +174,9 @@ module Inferno
175
174
  client = http_client(client)
176
175
 
177
176
  if client
178
- response = client.get(url, nil, options[:headers]) { |req| req.options.on_data = collector }
177
+ response = client.get(url, nil, headers) { |req| req.options.on_data = collector }
179
178
  elsif url.match?(%r{\Ahttps?://})
180
- response = connection.get(url, nil, options[:headers]) { |req| req.options.on_data = collector }
179
+ response = connection.get(url, nil, headers) { |req| req.options.on_data = collector }
181
180
  else
182
181
  raise StandardError, 'Must use an absolute url or define an HTTP client with a base url'
183
182
  end
@@ -11,8 +11,8 @@ module Inferno
11
11
  self.runnable = runnable
12
12
  instance_exec(self, &block)
13
13
 
14
- params = { url: url }
15
- params.merge!(headers: headers) if headers
14
+ params = { url: }
15
+ params.merge!(headers:) if headers
16
16
 
17
17
  Faraday.new(params) do |f|
18
18
  f.request :url_encoded
@@ -44,8 +44,8 @@ module Inferno
44
44
  end
45
45
 
46
46
  # @private
47
- def method_missing(name, *args, &block)
48
- return runnable.call(name, *args, &block) if runnable.respond_to? name
47
+ def method_missing(name, *args, &)
48
+ return runnable.call(name, *args, &) if runnable.respond_to? name
49
49
 
50
50
  super
51
51
  end
@@ -183,7 +183,7 @@ module Inferno
183
183
  config.inputs
184
184
  .slice(*inputs)
185
185
  .each_with_object({}) do |(_, input), inputs|
186
- inputs[input.name.to_sym] = Entities::Input.new(input.to_hash)
186
+ inputs[input.name.to_sym] = Entities::Input.new(**input.to_hash)
187
187
  end
188
188
 
189
189
  available_inputs.each do |input, current_definition|
@@ -49,11 +49,11 @@ module Inferno
49
49
  request =
50
50
  if response.is_a? FHIR::ClientReply
51
51
  Entities::Request.from_fhir_client_reply(
52
- response, direction: direction, name: name, test_session_id: test_session_id
52
+ response, direction:, name:, test_session_id:
53
53
  )
54
54
  else
55
55
  Entities::Request.from_http_response(
56
- response, direction: direction, name: name, test_session_id: test_session_id
56
+ response, direction:, name:, test_session_id:
57
57
  )
58
58
  end
59
59
 
@@ -1,4 +1,4 @@
1
- require 'hanami-controller'
1
+ require 'hanami/controller'
2
2
 
3
3
  module Inferno
4
4
  module DSL
@@ -6,44 +6,40 @@ module Inferno
6
6
  # an incoming request.
7
7
  # @private
8
8
  # @see Inferno::DSL::Runnable#resume_test_route
9
- class ResumeTestRoute
10
- include Hanami::Action
9
+ class ResumeTestRoute < Hanami::Action
11
10
  include Import[
12
- requests_repo: 'repositories.requests',
13
- results_repo: 'repositories.results',
14
- test_runs_repo: 'repositories.test_runs',
15
- tests_repo: 'repositories.tests'
11
+ requests_repo: 'inferno.repositories.requests',
12
+ results_repo: 'inferno.repositories.results',
13
+ test_runs_repo: 'inferno.repositories.test_runs',
14
+ tests_repo: 'inferno.repositories.tests'
16
15
  ]
17
16
 
18
- def self.call(params)
19
- new.call(params)
17
+ def self.call(...)
18
+ new.call(...)
20
19
  end
21
20
 
22
- # The incoming request
23
- #
24
- # @return [Inferno::Entities::Request]
25
- def request
26
- @request ||= Inferno::Entities::Request.from_rack_env(@params.env)
21
+ # @private
22
+ def test_run_identifier_block
23
+ self.class.singleton_class.instance_variable_get(:@test_run_identifier_block)
27
24
  end
28
25
 
29
26
  # @private
30
- def test_run
31
- @test_run ||=
32
- test_runs_repo.find_latest_waiting_by_identifier(test_run_identifier)
27
+ def find_test_run(test_run_identifier)
28
+ test_runs_repo.find_latest_waiting_by_identifier(test_run_identifier)
33
29
  end
34
30
 
35
31
  # @private
36
- def waiting_result
37
- @waiting_result ||= results_repo.find_waiting_result(test_run_id: test_run.id)
32
+ def find_waiting_result(test_run)
33
+ results_repo.find_waiting_result(test_run_id: test_run.id)
38
34
  end
39
35
 
40
36
  # @private
41
- def update_result
37
+ def update_result(waiting_result)
42
38
  results_repo.pass_waiting_result(waiting_result.id)
43
39
  end
44
40
 
45
41
  # @private
46
- def persist_request
42
+ def persist_request(request, test_run, waiting_result, test)
47
43
  requests_repo.create(
48
44
  request.to_hash.merge(
49
45
  test_session_id: test_run.test_session_id,
@@ -54,35 +50,41 @@ module Inferno
54
50
  end
55
51
 
56
52
  # @private
57
- def redirect_route
58
- "#{Application['base_url']}/test_sessions/#{test_run.test_session_id}##{resume_ui_at_id}"
53
+ def redirect_route(test_run, test)
54
+ "#{Application['base_url']}/test_sessions/#{test_run.test_session_id}##{resume_ui_at_id(test_run, test)}"
59
55
  end
60
56
 
61
57
  # @private
62
- def test
63
- @test ||= tests_repo.find(waiting_result.test_id)
58
+ def find_test(waiting_result)
59
+ tests_repo.find(waiting_result.test_id)
64
60
  end
65
61
 
66
62
  # @private
67
- def resume_ui_at_id
63
+ def resume_ui_at_id(test_run, test)
68
64
  test_run.test_suite_id || test_run.test_group_id || test.parent.id
69
65
  end
70
66
 
71
67
  # @private
72
- def call(_params)
73
- if test_run.nil?
74
- status(500, "Unable to find test run with identifier '#{test_run_identifier}'.")
75
- return
76
- end
68
+ def handle(req, res)
69
+ request = Inferno::Entities::Request.from_hanami_request(req)
70
+
71
+ test_run_identifier = instance_exec(request, &test_run_identifier_block)
72
+
73
+ test_run = find_test_run(test_run_identifier)
74
+
75
+ halt 500, "Unable to find test run with identifier '#{test_run_identifier}'." if test_run.nil?
77
76
 
78
77
  test_runs_repo.mark_as_no_longer_waiting(test_run.id)
79
78
 
80
- update_result
81
- persist_request
79
+ waiting_result = find_waiting_result(test_run)
80
+ test = find_test(waiting_result)
81
+
82
+ update_result(waiting_result)
83
+ persist_request(request, test_run, waiting_result, test)
82
84
 
83
85
  Jobs.perform(Jobs::ResumeTestRun, test_run.id)
84
86
 
85
- redirect_to redirect_route
87
+ res.redirect_to redirect_route(test_run, test)
86
88
  end
87
89
  end
88
90
  end
@@ -88,7 +88,7 @@ module Inferno
88
88
  # alias the method name they wish to use to define child entities to this
89
89
  # method.
90
90
  # @private
91
- def define_child(*args, &block)
91
+ def define_child(*args, &)
92
92
  hash_args = process_args(args)
93
93
 
94
94
  klass = create_child_class(hash_args)
@@ -99,7 +99,7 @@ module Inferno
99
99
 
100
100
  configure_child_class(klass, hash_args)
101
101
 
102
- handle_child_definition_block(klass, &block)
102
+ handle_child_definition_block(klass, &)
103
103
 
104
104
  klass.add_self_to_repository
105
105
 
@@ -190,8 +190,8 @@ module Inferno
190
190
  end
191
191
 
192
192
  # @private
193
- def handle_child_definition_block(klass, &block)
194
- klass.class_eval(&block) if block_given?
193
+ def handle_child_definition_block(klass, &)
194
+ klass.class_eval(&) if block_given?
195
195
  end
196
196
 
197
197
  # Set/Get a runnable's id
@@ -353,9 +353,8 @@ module Inferno
353
353
  # {Inferno::Entities::Request} object with the information for the
354
354
  # incoming request.
355
355
  def resume_test_route(method, path, &block)
356
- route_class = Class.new(ResumeTestRoute) do
357
- define_method(:test_run_identifier, &block)
358
- define_method(:request_name, -> { options[:name] })
356
+ route_class = Class.new(ResumeTestRoute) do |klass|
357
+ klass.singleton_class.instance_variable_set(:@test_run_identifier_block, block)
359
358
  end
360
359
 
361
360
  route(method, path, route_class)
@@ -375,7 +374,7 @@ module Inferno
375
374
  # app](http://sinatrarb.com/)) as described in the [Hanami Router
376
375
  # documentation.](https://github.com/hanami/router/tree/f41001d4c3ee9e2d2c7bb142f74b43f8e1d3a265#mount-rack-applications)
377
376
  def route(method, path, handler)
378
- Inferno.routes << { method: method, path: path, handler: handler, suite: suite }
377
+ Inferno.routes << { method:, path:, handler:, suite: }
379
378
  end
380
379
 
381
380
  # @private
@@ -401,7 +400,7 @@ module Inferno
401
400
  def required_suite_options(suite_option_requirements)
402
401
  @suite_option_requirements =
403
402
  suite_option_requirements.map do |key, value|
404
- DSL::SuiteOption.new(id: key, value: value)
403
+ DSL::SuiteOption.new(id: key, value:)
405
404
  end
406
405
  end
407
406
 
@@ -35,13 +35,13 @@ module Inferno
35
35
 
36
36
  def to_hash
37
37
  {
38
- id: id,
39
- request_id: request_id,
40
- type: type,
41
- name: name,
42
- value: value,
43
- created_at: created_at,
44
- updated_at: updated_at
38
+ id:,
39
+ request_id:,
40
+ type:,
41
+ name:,
42
+ value:,
43
+ created_at:,
44
+ updated_at:
45
45
  }.compact
46
46
  end
47
47
  end
@@ -89,8 +89,8 @@ module Inferno
89
89
  # @return [Hash]
90
90
  def request
91
91
  {
92
- verb: verb,
93
- url: url,
92
+ verb:,
93
+ url:,
94
94
  headers: request_headers,
95
95
  body: request_body
96
96
  }
@@ -101,7 +101,7 @@ module Inferno
101
101
  # @return [Hash]
102
102
  def response
103
103
  {
104
- status: status,
104
+ status:,
105
105
  headers: response_headers,
106
106
  body: response_body
107
107
  }
@@ -110,20 +110,20 @@ module Inferno
110
110
  # @private
111
111
  def to_hash
112
112
  {
113
- id: id,
114
- verb: verb,
115
- url: url,
116
- direction: direction,
117
- status: status,
118
- name: name,
119
- request_body: request_body,
120
- response_body: response_body,
121
- result_id: result_id,
122
- test_session_id: test_session_id,
113
+ id:,
114
+ verb:,
115
+ url:,
116
+ direction:,
117
+ status:,
118
+ name:,
119
+ request_body:,
120
+ response_body:,
121
+ result_id:,
122
+ test_session_id:,
123
123
  request_headers: request_headers.map(&:to_hash),
124
124
  response_headers: response_headers.map(&:to_hash),
125
- created_at: created_at,
126
- updated_at: updated_at
125
+ created_at:,
126
+ updated_at:
127
127
  }.compact
128
128
  end
129
129
 
@@ -136,22 +136,21 @@ module Inferno
136
136
 
137
137
  class << self
138
138
  # @private
139
- def from_rack_env(env, name: nil)
140
- rack_request = env['router.request'].rack_request
141
- url = "#{rack_request.base_url}#{rack_request.path}"
142
- url += "?#{rack_request.query_string}" if rack_request.query_string.present?
139
+ def from_hanami_request(request, name: nil)
140
+ url = "#{request.base_url}#{request.path}"
141
+ url += "?#{request.query_string}" if request.query_string.present?
143
142
  request_headers =
144
- env
143
+ request.params.env
145
144
  .select { |key, _| key.start_with? 'HTTP_' }
146
145
  .transform_keys { |key| key.delete_prefix('HTTP_').tr('_', '-').downcase }
147
- .map { |header_name, value| Header.new(name: header_name, value: value, type: 'request') }
146
+ .map { |header_name, value| Header.new(name: header_name, value:, type: 'request') }
148
147
 
149
148
  new(
150
- verb: rack_request.request_method.downcase,
151
- url: url,
149
+ verb: request.request_method.downcase,
150
+ url:,
152
151
  direction: 'incoming',
153
- name: name,
154
- request_body: rack_request.body.string,
152
+ name:,
153
+ request_body: request.body.string,
155
154
  headers: request_headers
156
155
  )
157
156
  end
@@ -160,20 +159,20 @@ module Inferno
160
159
  def from_http_response(response, test_session_id:, direction: 'outgoing', name: nil)
161
160
  request_headers =
162
161
  response.env.request_headers
163
- .map { |header_name, value| Header.new(name: header_name.downcase, value: value, type: 'request') }
162
+ .map { |header_name, value| Header.new(name: header_name.downcase, value:, type: 'request') }
164
163
  response_headers =
165
164
  response.headers
166
- .map { |header_name, value| Header.new(name: header_name.downcase, value: value, type: 'response') }
165
+ .map { |header_name, value| Header.new(name: header_name.downcase, value:, type: 'response') }
167
166
 
168
167
  new(
169
168
  verb: response.env.method,
170
169
  url: response.env.url.to_s,
171
- direction: direction,
172
- name: name,
170
+ direction:,
171
+ name:,
173
172
  status: response.status,
174
173
  request_body: response.env.request_body,
175
174
  response_body: response.body,
176
- test_session_id: test_session_id,
175
+ test_session_id:,
177
176
  headers: request_headers + response_headers
178
177
  )
179
178
  end
@@ -183,9 +182,9 @@ module Inferno
183
182
  request = reply.request
184
183
  response = reply.response
185
184
  request_headers = request[:headers]
186
- .map { |header_name, value| Header.new(name: header_name.downcase, value: value, type: 'request') }
185
+ .map { |header_name, value| Header.new(name: header_name.downcase, value:, type: 'request') }
187
186
  response_headers = response[:headers]
188
- .map { |header_name, value| Header.new(name: header_name.downcase, value: value, type: 'response') }
187
+ .map { |header_name, value| Header.new(name: header_name.downcase, value:, type: 'response') }
189
188
  request_body =
190
189
  if request.dig(:headers, 'Content-Type')&.include?('application/x-www-form-urlencoded')
191
190
  URI.encode_www_form(request[:payload])
@@ -196,12 +195,12 @@ module Inferno
196
195
  new(
197
196
  verb: request[:method],
198
197
  url: request[:url],
199
- direction: direction,
200
- name: name,
198
+ direction:,
199
+ name:,
201
200
  status: response[:code].to_i,
202
- request_body: request_body,
201
+ request_body:,
203
202
  response_body: response[:body],
204
- test_session_id: test_session_id,
203
+ test_session_id:,
205
204
  headers: request_headers + response_headers
206
205
  )
207
206
  end
@@ -26,12 +26,12 @@ module Inferno
26
26
 
27
27
  def to_hash
28
28
  {
29
- id: id,
30
- name: name,
31
- value: value,
32
- test_session_id: test_session_id,
33
- created_at: created_at,
34
- updated_at: updated_at
29
+ id:,
30
+ name:,
31
+ value:,
32
+ test_session_id:,
33
+ created_at:,
34
+ updated_at:
35
35
  }
36
36
  end
37
37
  end