Module: Inferno::DSL::Assertions
- Includes:
- Messages
- Included in:
- Entities::TestGroup, Entities::TestSuite
- Defined in:
- lib/inferno/dsl/assertions.rb
Overview
This module contains the assertions used within tests to verify the
behavior of the systems under test. Failing an assertion causes a test to
immediately stop execution and receive a fail result. Additional
assertions added to this module will be available in all tests.
Instance Method Summary collapse
-
#assert(test, message = '') ⇒ void
Make an assertion.
-
#assert_conformance_to_logical_model(object, model_url, validator: :default, message_prefix: '') ⇒ void
Validate an object against a logical model.
-
#assert_must_support_elements_present(resources, profile_url, validator_name: :default, metadata: nil, requirement_extension: nil) {|Metadata| ... } ⇒ void
Check that all Must Support elements defined on the given profile are present in the given resources.
-
#assert_no_error_messages(message = '', message_list: messages) ⇒ void
Check that there are no messages associated with the current runnable with a type of ‘error’.
-
#assert_resource_type(resource_type, resource: self.resource) ⇒ void
Check a FHIR resource’s type.
-
#assert_response_content_type(type, request: self.request) ⇒ void
Check the Content-Type header of a response.
-
#assert_response_status(status, request: self.request, response: nil) ⇒ void
Check a response’s status.
-
#assert_valid_bundle_entries(bundle: resource, resource_types: {}, message_prefix: '') ⇒ void
Validate each entry of a Bundle.
-
#assert_valid_http_uri(uri, message = '') ⇒ void
Check for a valid http/https uri.
-
#assert_valid_json(maybe_json_string, message = '') ⇒ void
Check for valid JSON.
-
#assert_valid_resource(resource: self.resource, profile_url: nil, validator: :default, message_prefix: '') ⇒ void
Validate a FHIR resource.
-
#parsed_json_if_valid(maybe_json_string, message = '', continue: true) ⇒ void
Return parsed json Hash if valid, or indicate an error with an error message or a failed assert.
Methods included from Messages
#add_message, #error_messages?, #info, #warning
Instance Method Details
#assert(test, message = '') ⇒ void
This method returns an undefined value.
Make an assertion
18 19 20 |
# File 'lib/inferno/dsl/assertions.rb', line 18 def assert(test, = '') raise Exceptions::AssertionException, unless test end |
#assert_conformance_to_logical_model(object, model_url, validator: :default, message_prefix: '') ⇒ void
This method returns an undefined value.
Validate an object against a logical model
96 97 98 99 |
# File 'lib/inferno/dsl/assertions.rb', line 96 def assert_conformance_to_logical_model(object, model_url, validator: :default, message_prefix: '') assert conforms_to_logical_model?(object, model_url, validator:, message_prefix:), (model_url) end |
#assert_must_support_elements_present(resources, profile_url, validator_name: :default, metadata: nil, requirement_extension: nil) {|Metadata| ... } ⇒ void
This method returns an undefined value.
Check that all Must Support elements defined on the given profile are present in the given resources. Must Support elements are identified on the profile StructureDefinition and pre-parsed into metadata, which may be customized prior to the check by passing a block. Alternate metadata may be provided directly. Set test suite config flag debug_must_support_metadata: true to log the metadata to a file for debugging.
254 255 256 257 258 259 |
# File 'lib/inferno/dsl/assertions.rb', line 254 def assert_must_support_elements_present(resources, profile_url, validator_name: :default, metadata: nil, requirement_extension: nil, &) missing_elements = missing_must_support_elements(resources, profile_url, validator_name:, metadata:, requirement_extension:, &) assert missing_elements.empty?, (missing_elements, resources) end |
#assert_no_error_messages(message = '', message_list: messages) ⇒ void
This method returns an undefined value.
Check that there are no messages associated with the current runnable with a type of ‘error’
273 274 275 |
# File 'lib/inferno/dsl/assertions.rb', line 273 def ( = '', message_list: ) assert !(message_list:), .present? ? : 'Errors found - see Messages for details.' end |
#assert_resource_type(resource_type, resource: self.resource) ⇒ void
This method returns an undefined value.
Check a FHIR resource’s type
54 55 56 57 58 59 |
# File 'lib/inferno/dsl/assertions.rb', line 54 def assert_resource_type(resource_type, resource: self.resource) resource_type_name = normalize_resource_type(resource_type) assert resource&.resourceType == resource_type_name, (resource_type_name, resource&.resourceType) end |
#assert_response_content_type(type, request: self.request) ⇒ void
This method returns an undefined value.
Check the Content-Type header of a response. This assertion will fail if the response’s content type does not begin with the provided type.
224 225 226 227 228 229 |
# File 'lib/inferno/dsl/assertions.rb', line 224 def assert_response_content_type(type, request: self.request) header = request.response_header('Content-Type') assert header.present?, assert header.value.start_with?(type), (type, header.value) end |
#assert_response_status(status, request: self.request, response: nil) ⇒ void
This method returns an undefined value.
Check a response’s status
34 35 36 37 |
# File 'lib/inferno/dsl/assertions.rb', line 34 def assert_response_status(status, request: self.request, response: nil) response ||= request&.response assert Array.wrap(status).include?(response[:status]), (status, response[:status]) end |
#assert_valid_bundle_entries(bundle: resource, resource_types: {}, message_prefix: '') ⇒ void
This method returns an undefined value.
Validate each entry of a Bundle
[String,Symbol,FHIR::Model,Array<String,Symbol,FHIR::Model>,Hash] If a string, symbol, or FHIR::Model is provided, only that resource type will be validated. If an array of strings is provided, only those resource types will be validated. If a hash is provided with resource types as keys and profile urls (or nil) as values, only those resource types will be validated against the provided profile url or the base resource if nil.
130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'lib/inferno/dsl/assertions.rb', line 130 def assert_valid_bundle_entries(bundle: resource, resource_types: {}, message_prefix: '') assert_resource_type('Bundle', resource: bundle) types_to_check = normalize_types_to_check(resource_types) invalid_resources = bundle .entry .map(&:resource) .select { |resource| types_to_check.empty? || types_to_check.include?(resource.resourceType) } .reject do |resource| validation_params = { resource:, message_prefix: } profile = types_to_check[resource.resourceType] validation_params[:profile_url] = profile if profile resource_is_valid?(**validation_params) end assert invalid_resources.empty?, (invalid_resources) end |
#assert_valid_http_uri(uri, message = '') ⇒ void
This method returns an undefined value.
Check for a valid http/https uri
213 214 215 216 |
# File 'lib/inferno/dsl/assertions.rb', line 213 def assert_valid_http_uri(uri, = '') = .presence || "\"#{uri}\" is not a valid URI" assert uri =~ /\A#{URI::DEFAULT_PARSER.make_regexp(['http', 'https'])}\z/, end |
#assert_valid_json(maybe_json_string, message = '') ⇒ void
This method returns an undefined value.
Check for valid JSON
186 187 188 |
# File 'lib/inferno/dsl/assertions.rb', line 186 def assert_valid_json(maybe_json_string, = '') parsed_json_if_valid(maybe_json_string, , continue: false) end |
#assert_valid_resource(resource: self.resource, profile_url: nil, validator: :default, message_prefix: '') ⇒ void
This method returns an undefined value.
Validate a FHIR resource
78 79 80 81 |
# File 'lib/inferno/dsl/assertions.rb', line 78 def assert_valid_resource(resource: self.resource, profile_url: nil, validator: :default, message_prefix: '') assert resource_is_valid?(resource:, profile_url:, validator:, message_prefix:), (resource, profile_url) end |
#parsed_json_if_valid(maybe_json_string, message = '', continue: true) ⇒ void
This method returns an undefined value.
Return parsed json Hash if valid, or indicate an error with an error message or a failed assert
197 198 199 200 201 202 203 204 205 206 |
# File 'lib/inferno/dsl/assertions.rb', line 197 def parsed_json_if_valid(maybe_json_string, = '', continue: true) JSON.parse(maybe_json_string) rescue JSON::ParserError if continue (:error, "Invalid JSON. #{}") nil else assert false, "Invalid JSON. #{}" end end |