inferno_core 0.4.22 → 0.4.24

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.
@@ -23,6 +23,11 @@ module Inferno
23
23
  self.class.singleton_class.instance_variable_get(:@test_run_identifier_block)
24
24
  end
25
25
 
26
+ # @private
27
+ def tags
28
+ self.class.singleton_class.instance_variable_get(:@tags)
29
+ end
30
+
26
31
  # @private
27
32
  def find_test_run(test_run_identifier)
28
33
  test_runs_repo.find_latest_waiting_by_identifier(test_run_identifier)
@@ -44,7 +49,8 @@ module Inferno
44
49
  request.to_hash.merge(
45
50
  test_session_id: test_run.test_session_id,
46
51
  result_id: waiting_result.id,
47
- name: test.config.request_name(test.incoming_request_name)
52
+ name: test.config.request_name(test.incoming_request_name),
53
+ tags:
48
54
  )
49
55
  )
50
56
  end
@@ -318,7 +318,7 @@ module Inferno
318
318
  #
319
319
  # @see Inferno::DSL::Results#wait
320
320
  # @example
321
- # resume_test_route :get, '/launch' do
321
+ # resume_test_route :get, '/launch', tags: ['launch'] do
322
322
  # request.query_parameters['iss']
323
323
  # end
324
324
  #
@@ -341,15 +341,17 @@ module Inferno
341
341
  # [Any of the path options available in Hanami
342
342
  # Router](https://github.com/hanami/router/tree/f41001d4c3ee9e2d2c7bb142f74b43f8e1d3a265#a-beautiful-dsl)
343
343
  # can be used here.
344
+ # @param tags [Array<String>] a list of tags to assign to the request
344
345
  # @yield This method takes a block which must return the identifier
345
346
  # defined when a test was set to wait for the test run that hit this
346
347
  # route. The block has access to the `request` method which returns a
347
348
  # {Inferno::Entities::Request} object with the information for the
348
349
  # incoming request.
349
350
  # @return [void]
350
- def resume_test_route(method, path, &block)
351
+ def resume_test_route(method, path, tags: [], &block)
351
352
  route_class = Class.new(ResumeTestRoute) do |klass|
352
353
  klass.singleton_class.instance_variable_set(:@test_run_identifier_block, block)
354
+ klass.singleton_class.instance_variable_set(:@tags, tags)
353
355
  end
354
356
 
355
357
  route(method, path, route_class)
data/lib/inferno/dsl.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require_relative 'dsl/assertions'
2
2
  require_relative 'dsl/fhir_client'
3
3
  require_relative 'dsl/fhir_validation'
4
+ require_relative 'dsl/fhir_resource_validation'
4
5
  require_relative 'dsl/http_client'
5
6
  require_relative 'dsl/results'
6
7
  require_relative 'dsl/runnable'
@@ -13,7 +14,8 @@ module Inferno
13
14
  FHIRClient,
14
15
  HTTPClient,
15
16
  Results,
16
- FHIRValidation
17
+ FHIRValidation,
18
+ FHIRResourceValidation
17
19
  ].freeze
18
20
 
19
21
  EXTENDABLE_DSL_MODULES = [
@@ -34,7 +34,7 @@ module Inferno
34
34
  ATTRIBUTES = [
35
35
  :id, :index, :verb, :url, :direction, :name, :status,
36
36
  :request_body, :response_body, :result_id, :test_session_id, :created_at,
37
- :updated_at, :headers
37
+ :updated_at, :headers, :tags
38
38
  ].freeze
39
39
  SUMMARY_FIELDS = [
40
40
  :id, :index, :url, :verb, :direction, :name, :status, :result_id, :created_at, :updated_at
@@ -48,6 +48,18 @@ module Inferno
48
48
 
49
49
  @name = params[:name]&.to_sym
50
50
  @headers = params[:headers]&.map { |header| header.is_a?(Hash) ? Header.new(header) : header } || []
51
+ format_tags(params[:tags] || [])
52
+ end
53
+
54
+ def format_tags(raw_tags)
55
+ @tags = raw_tags.map do |tag|
56
+ case tag
57
+ when Hash
58
+ tag[:name]
59
+ when String
60
+ tag
61
+ end
62
+ end
51
63
  end
52
64
 
53
65
  # @return [Hash<String, String>]
@@ -124,6 +136,7 @@ module Inferno
124
136
  test_session_id:,
125
137
  request_headers: request_headers.map(&:to_hash),
126
138
  response_headers: response_headers.map(&:to_hash),
139
+ tags:,
127
140
  created_at:,
128
141
  updated_at:
129
142
  }.compact
@@ -138,7 +151,7 @@ module Inferno
138
151
 
139
152
  class << self
140
153
  # @private
141
- def from_hanami_request(request, name: nil)
154
+ def from_hanami_request(request, name: nil, tags: [])
142
155
  url = "#{request.base_url}#{request.path}"
143
156
  url += "?#{request.query_string}" if request.query_string.present?
144
157
  request_headers =
@@ -153,12 +166,13 @@ module Inferno
153
166
  direction: 'incoming',
154
167
  name:,
155
168
  request_body: request.body.string,
156
- headers: request_headers
169
+ headers: request_headers,
170
+ tags:
157
171
  )
158
172
  end
159
173
 
160
174
  # @private
161
- def from_http_response(response, test_session_id:, direction: 'outgoing', name: nil)
175
+ def from_http_response(response, test_session_id:, direction: 'outgoing', name: nil, tags: [])
162
176
  request_headers =
163
177
  response.env.request_headers
164
178
  .map { |header_name, value| Header.new(name: header_name.downcase, value:, type: 'request') }
@@ -175,12 +189,13 @@ module Inferno
175
189
  request_body: response.env.request_body,
176
190
  response_body: response.body,
177
191
  test_session_id:,
178
- headers: request_headers + response_headers
192
+ headers: request_headers + response_headers,
193
+ tags:
179
194
  )
180
195
  end
181
196
 
182
197
  # @private
183
- def from_fhir_client_reply(reply, test_session_id:, direction: 'outgoing', name: nil)
198
+ def from_fhir_client_reply(reply, test_session_id:, direction: 'outgoing', name: nil, tags: [])
184
199
  request = reply.request
185
200
  response = reply.response
186
201
  request_headers = request[:headers]
@@ -203,7 +218,8 @@ module Inferno
203
218
  request_body:,
204
219
  response_body: response[:body],
205
220
  test_session_id:,
206
- headers: request_headers + response_headers
221
+ headers: request_headers + response_headers,
222
+ tags:
207
223
  )
208
224
  end
209
225
  end
@@ -13,6 +13,7 @@ module Inferno
13
13
  extend DSL::FHIRClient::ClassMethods
14
14
  extend DSL::HTTPClient::ClassMethods
15
15
  include DSL::FHIRValidation
16
+ include DSL::FHIRResourceValidation
16
17
 
17
18
  class << self
18
19
  extend Forwardable
@@ -0,0 +1,23 @@
1
+ module Inferno
2
+ module Jobs
3
+ class InvokeValidatorSession
4
+ include Sidekiq::Worker
5
+
6
+ def perform(suite_id, validator_name, validator_index)
7
+ suite = Inferno::Repositories::TestSuites.new.find suite_id
8
+ validator = suite.fhir_validators[validator_name.to_sym][validator_index]
9
+
10
+ response_body = validator.validate(FHIR::Patient.new, 'http://hl7.org/fhir/StructureDefinition/Patient')
11
+
12
+ if response_body.start_with? '{'
13
+ res = JSON.parse(response_body)
14
+ session_id = res['sessionId']
15
+ # TODO: (FI-2311) store this session ID so it can be referenced as needed
16
+ validator.session_id = session_id
17
+ else
18
+ Inferno::Application['logger'].error("InvokeValidatorSession - error from validator: #{response_body}")
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
data/lib/inferno/jobs.rb CHANGED
@@ -2,6 +2,7 @@ require 'sidekiq'
2
2
 
3
3
  require_relative 'jobs/execute_test_run'
4
4
  require_relative 'jobs/resume_test_run'
5
+ require_relative 'jobs/invoke_validator_session'
5
6
 
6
7
  module Inferno
7
8
  module Jobs