inferno_core 0.4.22 → 0.4.23

Sign up to get free protection for your applications and to get access to all the features.
@@ -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