inferno_core 0.4.39 → 0.4.40
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 +4 -4
- data/lib/inferno/apps/web/router.rb +3 -0
- data/lib/inferno/config/application.rb +2 -0
- data/lib/inferno/dsl/auth_info.rb +142 -6
- data/lib/inferno/dsl/fhir_client.rb +2 -2
- data/lib/inferno/dsl/fhir_client_builder.rb +29 -0
- data/lib/inferno/dsl/fhir_resource_validation.rb +18 -14
- data/lib/inferno/dsl/fhir_validation.rb +14 -9
- data/lib/inferno/dsl/fhirpath_evaluation.rb +121 -0
- data/lib/inferno/dsl/jwks.rb +79 -0
- data/lib/inferno/dsl/messages.rb +71 -0
- data/lib/inferno/dsl/runnable.rb +12 -0
- data/lib/inferno/dsl.rb +5 -1
- data/lib/inferno/entities/test.rb +0 -76
- data/lib/inferno/entities/test_group.rb +13 -1
- data/lib/inferno/entities/test_suite.rb +15 -0
- data/lib/inferno/exceptions.rb +19 -0
- data/lib/inferno/ext/fhir_client.rb +3 -3
- data/lib/inferno/jobs/invoke_validator_session.rb +9 -10
- data/lib/inferno/public/bundle.js +18 -18
- data/lib/inferno/result_collection.rb +72 -0
- data/lib/inferno/result_summarizer.rb +9 -10
- data/lib/inferno/test_runner.rb +55 -27
- data/lib/inferno/version.rb +1 -1
- data/spec/fixtures/auth_info_constants.rb +71 -0
- metadata +7 -2
data/lib/inferno/dsl.rb
CHANGED
@@ -2,10 +2,12 @@ require_relative 'dsl/assertions'
|
|
2
2
|
require_relative 'dsl/fhir_client'
|
3
3
|
require_relative 'dsl/fhir_validation'
|
4
4
|
require_relative 'dsl/fhir_resource_validation'
|
5
|
+
require_relative 'dsl/fhirpath_evaluation'
|
5
6
|
require_relative 'dsl/http_client'
|
6
7
|
require_relative 'dsl/results'
|
7
8
|
require_relative 'dsl/runnable'
|
8
9
|
require_relative 'dsl/suite_endpoint'
|
10
|
+
require_relative 'dsl/messages'
|
9
11
|
|
10
12
|
module Inferno
|
11
13
|
# The DSL for writing tests.
|
@@ -16,7 +18,9 @@ module Inferno
|
|
16
18
|
HTTPClient,
|
17
19
|
Results,
|
18
20
|
FHIRValidation,
|
19
|
-
FHIRResourceValidation
|
21
|
+
FHIRResourceValidation,
|
22
|
+
FhirpathEvaluation,
|
23
|
+
Messages
|
20
24
|
].freeze
|
21
25
|
|
22
26
|
EXTENDABLE_DSL_MODULES = [
|
@@ -1,6 +1,5 @@
|
|
1
1
|
require_relative '../dsl'
|
2
2
|
require_relative '../repositories/tests'
|
3
|
-
require_relative '../utils/markdown_formatter'
|
4
3
|
require 'pry'
|
5
4
|
|
6
5
|
module Inferno
|
@@ -8,7 +7,6 @@ module Inferno
|
|
8
7
|
class Test
|
9
8
|
extend Forwardable
|
10
9
|
include DSL
|
11
|
-
include Inferno::Utils::MarkdownFormatter
|
12
10
|
|
13
11
|
def_delegators 'self.class', :title, :id, :block, :inputs, :outputs
|
14
12
|
|
@@ -23,20 +21,6 @@ module Inferno
|
|
23
21
|
@suite_options = params[:suite_options].presence || {}
|
24
22
|
end
|
25
23
|
|
26
|
-
# @private
|
27
|
-
def messages
|
28
|
-
@messages ||= []
|
29
|
-
end
|
30
|
-
|
31
|
-
# Add a message to the result.
|
32
|
-
#
|
33
|
-
# @param type [String] error, warning, or info
|
34
|
-
# @param message [String]
|
35
|
-
# @return [void]
|
36
|
-
def add_message(type, message)
|
37
|
-
messages << { type: type.to_s, message: format_markdown(message) }
|
38
|
-
end
|
39
|
-
|
40
24
|
# Set output values. Once set, these values will be available to any
|
41
25
|
# subsequent tests.
|
42
26
|
#
|
@@ -59,54 +43,6 @@ module Inferno
|
|
59
43
|
@outputs_to_persist ||= {}
|
60
44
|
end
|
61
45
|
|
62
|
-
# Add an informational message to the results of a test. If passed a
|
63
|
-
# block, a failed assertion will become an info message and test execution
|
64
|
-
# will continue.
|
65
|
-
#
|
66
|
-
# @param message [String]
|
67
|
-
# @return [void]
|
68
|
-
# @example
|
69
|
-
# # Add an info message
|
70
|
-
# info 'This message will be added to the test results'
|
71
|
-
#
|
72
|
-
# # The message for the failed assertion will be treated as an info
|
73
|
-
# # message. Test exection will continue.
|
74
|
-
# info { assert false == true }
|
75
|
-
def info(message = nil)
|
76
|
-
unless block_given?
|
77
|
-
add_message('info', message) unless message.nil?
|
78
|
-
return
|
79
|
-
end
|
80
|
-
|
81
|
-
yield
|
82
|
-
rescue Exceptions::AssertionException => e
|
83
|
-
add_message('info', e.message)
|
84
|
-
end
|
85
|
-
|
86
|
-
# Add a warning message to the results of a test. If passed a block, a
|
87
|
-
# failed assertion will become a warning message and test execution will
|
88
|
-
# continue.
|
89
|
-
#
|
90
|
-
# @param message [String]
|
91
|
-
# @return [void]
|
92
|
-
# @example
|
93
|
-
# # Add a warning message
|
94
|
-
# warning 'This message will be added to the test results'
|
95
|
-
#
|
96
|
-
# # The message for the failed assertion will be treated as a warning
|
97
|
-
# # message. Test exection will continue.
|
98
|
-
# warning { assert false == true }
|
99
|
-
def warning(message = nil)
|
100
|
-
unless block_given?
|
101
|
-
add_message('warning', message) unless message.nil?
|
102
|
-
return
|
103
|
-
end
|
104
|
-
|
105
|
-
yield
|
106
|
-
rescue Exceptions::AssertionException => e
|
107
|
-
add_message('warning', e.message)
|
108
|
-
end
|
109
|
-
|
110
46
|
# @private
|
111
47
|
def method_missing(name, *args, &)
|
112
48
|
parent_instance = self.class.parent&.new
|
@@ -167,18 +103,6 @@ module Inferno
|
|
167
103
|
Inferno::Repositories::Tests.new
|
168
104
|
end
|
169
105
|
|
170
|
-
# Set/Get the block that is executed when a Test is run
|
171
|
-
#
|
172
|
-
# @param block [Proc]
|
173
|
-
# @return [Proc] the block that is executed when a Test is run
|
174
|
-
def block(&block)
|
175
|
-
return @block unless block_given?
|
176
|
-
|
177
|
-
@block = block
|
178
|
-
end
|
179
|
-
|
180
|
-
alias run block
|
181
|
-
|
182
106
|
def short_id
|
183
107
|
@short_id ||= begin
|
184
108
|
prefix = parent.respond_to?(:short_id) ? "#{parent.short_id}." : ''
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require_relative '../dsl'
|
2
2
|
require_relative '../repositories/test_groups'
|
3
|
+
require_relative '../result_collection'
|
3
4
|
|
4
5
|
module Inferno
|
5
6
|
module Entities
|
@@ -9,8 +10,19 @@ module Inferno
|
|
9
10
|
extend DSL::HTTPClient::ClassMethods
|
10
11
|
extend DSL::Runnable
|
11
12
|
include DSL::FHIRValidation
|
13
|
+
include DSL::FhirpathEvaluation
|
14
|
+
include DSL::Results
|
15
|
+
include DSL::Assertions
|
16
|
+
include DSL::Messages
|
12
17
|
|
13
|
-
def_delegators 'self.class', :title, :id, :groups, :inputs, :outputs, :tests
|
18
|
+
def_delegators 'self.class', :title, :id, :block, :groups, :inputs, :outputs, :tests
|
19
|
+
|
20
|
+
attr_accessor :result_message, :results
|
21
|
+
|
22
|
+
# @private
|
23
|
+
def initialize
|
24
|
+
@results = Inferno::ResultCollection.new
|
25
|
+
end
|
14
26
|
|
15
27
|
# @private
|
16
28
|
def method_missing(name, *args, &)
|
@@ -1,8 +1,10 @@
|
|
1
1
|
require_relative 'test_group'
|
2
2
|
require_relative '../dsl/runnable'
|
3
3
|
require_relative '../dsl/suite_option'
|
4
|
+
require_relative '../dsl/messages'
|
4
5
|
require_relative '../repositories/test_groups'
|
5
6
|
require_relative '../repositories/test_suites'
|
7
|
+
require_relative '../result_collection'
|
6
8
|
|
7
9
|
module Inferno
|
8
10
|
module Entities
|
@@ -14,6 +16,19 @@ module Inferno
|
|
14
16
|
extend DSL::HTTPClient::ClassMethods
|
15
17
|
include DSL::FHIRValidation
|
16
18
|
include DSL::FHIRResourceValidation
|
19
|
+
include DSL::FhirpathEvaluation
|
20
|
+
include DSL::Results
|
21
|
+
include DSL::Assertions
|
22
|
+
include DSL::Messages
|
23
|
+
|
24
|
+
def_delegators 'self.class', :block
|
25
|
+
|
26
|
+
attr_accessor :result_message, :results
|
27
|
+
|
28
|
+
# @private
|
29
|
+
def initialize
|
30
|
+
@results = Inferno::ResultCollection.new
|
31
|
+
end
|
17
32
|
|
18
33
|
class << self
|
19
34
|
extend Forwardable
|
data/lib/inferno/exceptions.rb
CHANGED
@@ -64,6 +64,25 @@ module Inferno
|
|
64
64
|
end
|
65
65
|
end
|
66
66
|
|
67
|
+
class FhirpathNotFoundException < RuntimeError
|
68
|
+
def initialize(fhirpath_name)
|
69
|
+
super("No '#{fhirpath_name}' FHIRPath evaluator found")
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
# ErrorInFhirpathException is used when an exception occurred in
|
74
|
+
# calling the FHIRPath service, for example a connection timeout
|
75
|
+
# or an unexpected response format.
|
76
|
+
# Note: This class extends TestResultException instead of RuntimeError
|
77
|
+
# to bypass printing the stack trace in the UI, since
|
78
|
+
# the stack trace of this exception is not likely be useful.
|
79
|
+
# Instead the message should point to where in the fhirpath evaluator an error occurred.
|
80
|
+
class ErrorInFhirpathException < TestResultException
|
81
|
+
def result
|
82
|
+
'error'
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
67
86
|
class RequiredInputsNotFound < RuntimeError
|
68
87
|
def initialize(missing_inputs)
|
69
88
|
super("Missing the following required inputs: #{missing_inputs.join(', ')}")
|
@@ -1,13 +1,13 @@
|
|
1
1
|
module FHIR
|
2
2
|
class Client
|
3
|
-
attr_accessor :oauth_credentials
|
3
|
+
attr_accessor :oauth_credentials, :auth_info
|
4
4
|
|
5
5
|
def need_to_refresh?
|
6
|
-
oauth_credentials&.need_to_refresh?
|
6
|
+
!!(auth_info&.need_to_refresh? || oauth_credentials&.need_to_refresh?)
|
7
7
|
end
|
8
8
|
|
9
9
|
def able_to_refresh?
|
10
|
-
oauth_credentials&.able_to_refresh?
|
10
|
+
!!(auth_info&.able_to_refresh? || oauth_credentials&.able_to_refresh?)
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
@@ -8,16 +8,15 @@ module Inferno
|
|
8
8
|
suite = Inferno::Repositories::TestSuites.new.find suite_id
|
9
9
|
validator = suite.fhir_validators[validator_name.to_sym][validator_index]
|
10
10
|
response_body = validator.validate(FHIR::Patient.new, 'http://hl7.org/fhir/StructureDefinition/Patient')
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
end
|
11
|
+
res = JSON.parse(response_body)
|
12
|
+
session_id = res['sessionId']
|
13
|
+
session_repo = Inferno::Repositories::ValidatorSessions.new
|
14
|
+
session_repo.save(test_suite_id: suite_id, validator_session_id: session_id,
|
15
|
+
validator_name:, suite_options: validator.requirements)
|
16
|
+
validator.session_id = session_id
|
17
|
+
rescue JSON::ParserError
|
18
|
+
Inferno::Application['logger']
|
19
|
+
.error("InvokeValidatorSession - error unexpected response format from validator: #{response_body}")
|
21
20
|
end
|
22
21
|
end
|
23
22
|
end
|