us_core_test_kit 0.9.3 → 0.10.1
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/config/presets/inferno_reference_server_311_preset.json +66 -0
- data/config/presets/inferno_reference_server_400_preset.json +66 -0
- data/config/presets/inferno_reference_server_501_preset.json +66 -0
- data/config/presets/inferno_reference_server_610_preset.json +66 -0
- data/config/presets/inferno_reference_server_700_preset.json +66 -0
- data/lib/us_core_test_kit/generated/v3.1.1/us_core_test_suite.rb +22 -3
- data/lib/us_core_test_kit/generated/v4.0.0/us_core_test_suite.rb +22 -3
- data/lib/us_core_test_kit/generated/v5.0.1/us_core_test_suite.rb +22 -3
- data/lib/us_core_test_kit/generated/v6.1.0/us_core_test_suite.rb +22 -3
- data/lib/us_core_test_kit/generated/v7.0.0/us_core_test_suite.rb +22 -3
- data/lib/us_core_test_kit/generator/templates/granular_scope_group.rb.erb +41 -0
- data/lib/us_core_test_kit/generator/templates/granular_scope_read_test.rb.erb +29 -0
- data/lib/us_core_test_kit/generator/templates/granular_scope_resource_type_group.rb.erb +19 -0
- data/lib/us_core_test_kit/generator/templates/granular_scope_test.rb.erb +38 -0
- data/lib/us_core_test_kit/generator/templates/group.rb.erb +24 -0
- data/lib/us_core_test_kit/generator/templates/must_support.rb.erb +41 -0
- data/lib/us_core_test_kit/generator/templates/practitioner_address_test.rb.erb +32 -0
- data/lib/us_core_test_kit/generator/templates/provenance_revinclude_search.rb.erb +50 -0
- data/lib/us_core_test_kit/generator/templates/read.rb.erb +26 -0
- data/lib/us_core_test_kit/generator/templates/reference_resolution.rb.erb +40 -0
- data/lib/us_core_test_kit/generator/templates/search.rb.erb +46 -0
- data/lib/us_core_test_kit/generator/templates/suite.rb.erb +162 -0
- data/lib/us_core_test_kit/generator/templates/validation.rb.erb +31 -0
- data/lib/us_core_test_kit/granular_scope_search_test.rb +2 -1
- data/lib/us_core_test_kit/igs/README.md +21 -0
- data/lib/us_core_test_kit/metadata.rb +70 -0
- data/lib/us_core_test_kit/reference_resolution_test.rb +1 -16
- data/lib/us_core_test_kit/search_test.rb +26 -50
- data/lib/us_core_test_kit/version.rb +2 -1
- data/lib/us_core_test_kit.rb +1 -0
- metadata +31 -10
@@ -0,0 +1,70 @@
|
|
1
|
+
require_relative 'version'
|
2
|
+
|
3
|
+
module USCoreTestKit
|
4
|
+
class Metadata < Inferno::TestKit
|
5
|
+
id :us_core_test_kit
|
6
|
+
title 'US Core Test Kit'
|
7
|
+
description <<~DESCRIPTION
|
8
|
+
The US Core Test Kit validates the conformance of a server implementation to a specific
|
9
|
+
version of the [US Core IG](http://hl7.org/fhir/us/core). Currently, Inferno can test
|
10
|
+
against implementations of following versions of the US Core IG:
|
11
|
+
[v3.1.1](http://hl7.org/fhir/us/core/STU3.1.1/),
|
12
|
+
[v4.0.0](http://hl7.org/fhir/us/core/STU4/),
|
13
|
+
[v5.0.1](http://hl7.org/fhir/us/core/STU5.0.1/),
|
14
|
+
[v6.1.0](https://hl7.org/fhir/us/core/STU6.1/),
|
15
|
+
and
|
16
|
+
[v7.0.0](https://hl7.org/fhir/us/core/STU7/).
|
17
|
+
<!-- break -->
|
18
|
+
|
19
|
+
This test kit is [open source](https://github.com/inferno-framework/us-core-test-kit#license)
|
20
|
+
and freely available for use or adoption by the health IT community including EHR vendors,
|
21
|
+
health app developers, and testing labs. It is built using the
|
22
|
+
[Inferno Framework](https://inferno-framework.github.io/inferno-core/).
|
23
|
+
The Inferno Framework is designed for reuse and aims to make it easier to build test kits
|
24
|
+
for any FHIR-based data exchange.
|
25
|
+
|
26
|
+
## Status
|
27
|
+
|
28
|
+
The US Core Test Kit is actively developed and regularly updated. Starting with STU3,
|
29
|
+
each STU sequence is kept up-to-date with the latest version.
|
30
|
+
|
31
|
+
The test kit currently tests the following requirements:
|
32
|
+
|
33
|
+
- Support for Capability Statement
|
34
|
+
- Support for all US Core Profiles
|
35
|
+
- Searches required for each resource
|
36
|
+
- Support for Must Support Elements
|
37
|
+
- Profile Validation
|
38
|
+
- Reference Validation
|
39
|
+
- Clinical Notes Guidance
|
40
|
+
- Missing Data Guidance
|
41
|
+
|
42
|
+
See the test descriptions within the test kit for detail on the specific validations
|
43
|
+
performed as part of testing these requirements.
|
44
|
+
|
45
|
+
## Repository
|
46
|
+
|
47
|
+
The US Core Test Kit GitHub repository can be [found here](https://github.com/inferno-framework/us-core-test-kit).
|
48
|
+
|
49
|
+
## Providing Feedback and Reporting Issues
|
50
|
+
|
51
|
+
We welcome feedback on the tests, including but not limited to the following areas:
|
52
|
+
|
53
|
+
- Validation logic, such as potential bugs, lax checks, and unexpected failures.
|
54
|
+
- Requirements coverage, such as requirements that have been missed, tests that necessitate
|
55
|
+
features that the IG does not require, or other issues with the interpretation of the IG’s requirements.
|
56
|
+
- User experience, such as confusing or missing information in the test UI.
|
57
|
+
|
58
|
+
Please report any issues with this set of tests in the
|
59
|
+
[issues section](https://github.com/inferno-framework/us-core-test-kit/issues)
|
60
|
+
of the repository.
|
61
|
+
DESCRIPTION
|
62
|
+
suite_ids [:us_core_v311, :us_core_v400, :us_core_v501, :us_core_v610, :us_core_v700]
|
63
|
+
tags ['SMART App Launch', 'US Core']
|
64
|
+
last_updated LAST_UPDATED
|
65
|
+
version VERSION
|
66
|
+
maturity 'High'
|
67
|
+
authors ['Stephen MacVicar', 'Yunwei Wang']
|
68
|
+
repo 'https://github.com/inferno-framework/us-core-test-kit'
|
69
|
+
end
|
70
|
+
end
|
@@ -167,22 +167,7 @@ module USCoreTestKit
|
|
167
167
|
def resource_is_valid_with_target_profile?(resource, target_profile)
|
168
168
|
return true if target_profile.blank?
|
169
169
|
|
170
|
-
|
171
|
-
# Calling resource_is_valid? causes validation errors to be logged.
|
172
|
-
validator = find_validator(:default)
|
173
|
-
|
174
|
-
target_profile_with_version = target_profile.include?('|') ? target_profile : "#{target_profile}|#{metadata.profile_version}"
|
175
|
-
|
176
|
-
validator_response = validator.validate(resource, target_profile_with_version)
|
177
|
-
outcome = validator.operation_outcome_from_hl7_wrapped_response(validator_response)
|
178
|
-
|
179
|
-
message_hashes = outcome.issue&.map { |issue| validator.message_hash_from_issue(issue, resource) } || []
|
180
|
-
|
181
|
-
message_hashes.concat(validator.additional_validation_messages(resource, target_profile_with_version))
|
182
|
-
|
183
|
-
validator.filter_messages(message_hashes)
|
184
|
-
|
185
|
-
message_hashes.none? { |message_hash| message_hash[:type] == 'error' }
|
170
|
+
resource_is_valid?(resource:, profile_url: target_profile, add_messages_to_runnable: false)
|
186
171
|
end
|
187
172
|
end
|
188
173
|
end
|
@@ -69,7 +69,7 @@ module USCoreTestKit
|
|
69
69
|
|
70
70
|
# TODO: check that only provenance resources for resources matching
|
71
71
|
# granular scopes returned
|
72
|
-
|
72
|
+
fetch_and_assert_all_bundled_resources(additional_resource_types: ['Provenance'], params:)
|
73
73
|
.select { |resource| resource.resourceType == 'Provenance' }
|
74
74
|
end
|
75
75
|
end
|
@@ -104,7 +104,7 @@ module USCoreTestKit
|
|
104
104
|
check_search_response
|
105
105
|
|
106
106
|
resources_returned =
|
107
|
-
|
107
|
+
fetch_and_assert_all_bundled_resources(params:).select { |resource| resource.resourceType == resource_type }
|
108
108
|
|
109
109
|
return [] if resources_returned.blank?
|
110
110
|
|
@@ -139,7 +139,7 @@ module USCoreTestKit
|
|
139
139
|
|
140
140
|
check_search_response
|
141
141
|
|
142
|
-
post_search_resources =
|
142
|
+
post_search_resources = fetch_and_assert_all_bundled_resources.select { |resource| resource.resourceType == resource_type }
|
143
143
|
|
144
144
|
filter_conditions(post_search_resources) if resource_type == 'Condition' && metadata.version == 'v5.0.1'
|
145
145
|
filter_devices(post_search_resources) if resource_type == 'Device'
|
@@ -247,7 +247,7 @@ module USCoreTestKit
|
|
247
247
|
|
248
248
|
search_and_check_response(params_with_comparator)
|
249
249
|
|
250
|
-
comparator_resources =
|
250
|
+
comparator_resources = fetch_and_assert_all_bundled_resources(params: params_with_comparator).each do |resource|
|
251
251
|
check_resource_against_params(resource, params_with_comparator) if resource.resourceType == resource_type
|
252
252
|
end
|
253
253
|
end
|
@@ -264,7 +264,7 @@ module USCoreTestKit
|
|
264
264
|
search_and_check_response(new_search_params)
|
265
265
|
|
266
266
|
reference_with_type_resources =
|
267
|
-
|
267
|
+
fetch_and_assert_all_bundled_resources(params: new_search_params)
|
268
268
|
.select { |resource| resource.resourceType == resource_type }
|
269
269
|
|
270
270
|
filter_conditions(reference_with_type_resources) if resource_type == 'Condition' && metadata.version == 'v5.0.1'
|
@@ -290,7 +290,7 @@ module USCoreTestKit
|
|
290
290
|
search_and_check_response(search_params)
|
291
291
|
|
292
292
|
resources_returned =
|
293
|
-
|
293
|
+
fetch_and_assert_all_bundled_resources(params: search_params)
|
294
294
|
.select { |resource| resource.resourceType == resource_type }
|
295
295
|
|
296
296
|
assert resources_returned.present?, "No resources were returned when searching by `system|code`"
|
@@ -361,7 +361,7 @@ module USCoreTestKit
|
|
361
361
|
search_and_check_response(search_params)
|
362
362
|
|
363
363
|
resources_returned =
|
364
|
-
|
364
|
+
fetch_and_assert_all_bundled_resources(params: search_params)
|
365
365
|
.select { |resource| resource.resourceType == resource_type }
|
366
366
|
|
367
367
|
multiple_or_search_params.each do |param_name|
|
@@ -409,7 +409,7 @@ module USCoreTestKit
|
|
409
409
|
search_and_check_response(search_params)
|
410
410
|
|
411
411
|
medications =
|
412
|
-
|
412
|
+
fetch_and_assert_all_bundled_resources(params: search_params)
|
413
413
|
.select { |resource| resource.resourceType == 'Medication' }
|
414
414
|
assert medications.present?, 'No Medications were included in the search results'
|
415
415
|
|
@@ -546,56 +546,32 @@ module USCoreTestKit
|
|
546
546
|
msg + ". Please use patients with more information"
|
547
547
|
end
|
548
548
|
|
549
|
-
def
|
549
|
+
def fetch_and_assert_all_bundled_resources(
|
550
|
+
resource_type: self.resource_type,
|
550
551
|
reply_handler: nil,
|
551
552
|
max_pages: 20,
|
552
553
|
additional_resource_types: [],
|
553
|
-
resource_type: self.resource_type,
|
554
554
|
params: nil
|
555
555
|
)
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
until bundle.nil? || page_count == max_pages
|
561
|
-
resources += bundle&.entry&.map { |entry| entry&.resource }
|
562
|
-
next_bundle_link = bundle&.link&.find { |link| link.relation == 'next' }&.url
|
563
|
-
reply_handler&.call(response)
|
564
|
-
|
565
|
-
break if next_bundle_link.blank?
|
566
|
-
|
567
|
-
reply = fhir_client.raw_read_url(next_bundle_link)
|
568
|
-
|
569
|
-
store_request('outgoing', tags: tags(params)) { reply }
|
570
|
-
error_message = cant_resolve_next_bundle_message(next_bundle_link)
|
571
|
-
|
572
|
-
assert_response_status(200)
|
573
|
-
assert_valid_json(reply.body, error_message)
|
574
|
-
|
575
|
-
bundle = fhir_client.parse_reply(FHIR::Bundle, fhir_client.default_format, reply)
|
576
|
-
|
577
|
-
page_count += 1
|
578
|
-
end
|
579
|
-
|
580
|
-
valid_resource_types = [resource_type, 'OperationOutcome'].concat(additional_resource_types)
|
581
|
-
valid_resource_types << 'Medication' if ['MedicationRequest', 'MedicationDispense'].include?(resource_type)
|
582
|
-
|
583
|
-
invalid_resource_types =
|
584
|
-
resources.reject { |entry| valid_resource_types.include? entry.resourceType }
|
585
|
-
.map(&:resourceType)
|
586
|
-
.uniq
|
556
|
+
tags = tags(params)
|
557
|
+
bundle = resource
|
558
|
+
additional_resource_types << 'Medication' if ['MedicationRequest', 'MedicationDispense'].include?(resource_type)
|
587
559
|
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
592
|
-
end
|
560
|
+
assert_handler = Proc.new do |response|
|
561
|
+
assert_response_status(200, response: response)
|
562
|
+
assert_valid_json(response[:body], "Could not resolve bundle as JSON: #{response[:body]}")
|
563
|
+
end
|
593
564
|
|
594
|
-
|
595
|
-
|
565
|
+
if reply_handler
|
566
|
+
reply_and_assert_handler = Proc.new do |response|
|
567
|
+
assert_handler.call(response)
|
568
|
+
reply_handler.call(response)
|
569
|
+
end
|
570
|
+
else
|
571
|
+
reply_and_assert_handler = assert_handler
|
572
|
+
end
|
596
573
|
|
597
|
-
|
598
|
-
"Could not resolve next bundle: #{link}"
|
574
|
+
fetch_all_bundled_resources(resource_type:, bundle:, reply_handler: reply_and_assert_handler, max_pages:, additional_resource_types:, tags:)
|
599
575
|
end
|
600
576
|
|
601
577
|
def search_param_value(name, resource, include_system: false)
|
data/lib/us_core_test_kit.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: us_core_test_kit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen MacVicar
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-02-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: inferno_core
|
@@ -16,42 +16,42 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.6.4
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.6.4
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: smart_app_launch_test_kit
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: 0.5.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.
|
40
|
+
version: 0.5.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: tls_test_kit
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.
|
47
|
+
version: 0.3.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.
|
54
|
+
version: 0.3.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: database_cleaner-sequel
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -116,6 +116,11 @@ extensions: []
|
|
116
116
|
extra_rdoc_files: []
|
117
117
|
files:
|
118
118
|
- LICENSE
|
119
|
+
- config/presets/inferno_reference_server_311_preset.json
|
120
|
+
- config/presets/inferno_reference_server_400_preset.json
|
121
|
+
- config/presets/inferno_reference_server_501_preset.json
|
122
|
+
- config/presets/inferno_reference_server_610_preset.json
|
123
|
+
- config/presets/inferno_reference_server_700_preset.json
|
119
124
|
- lib/us_core_test_kit.rb
|
120
125
|
- lib/us_core_test_kit/custom_groups/base_smart_granular_scopes_group.rb
|
121
126
|
- lib/us_core_test_kit/custom_groups/capability_statement/conformance_support_test.rb
|
@@ -2537,12 +2542,26 @@ files:
|
|
2537
2542
|
- lib/us_core_test_kit/generator/search_test_generator.rb
|
2538
2543
|
- lib/us_core_test_kit/generator/special_cases.rb
|
2539
2544
|
- lib/us_core_test_kit/generator/suite_generator.rb
|
2545
|
+
- lib/us_core_test_kit/generator/templates/granular_scope_group.rb.erb
|
2546
|
+
- lib/us_core_test_kit/generator/templates/granular_scope_read_test.rb.erb
|
2547
|
+
- lib/us_core_test_kit/generator/templates/granular_scope_resource_type_group.rb.erb
|
2548
|
+
- lib/us_core_test_kit/generator/templates/granular_scope_test.rb.erb
|
2549
|
+
- lib/us_core_test_kit/generator/templates/group.rb.erb
|
2550
|
+
- lib/us_core_test_kit/generator/templates/must_support.rb.erb
|
2551
|
+
- lib/us_core_test_kit/generator/templates/practitioner_address_test.rb.erb
|
2552
|
+
- lib/us_core_test_kit/generator/templates/provenance_revinclude_search.rb.erb
|
2553
|
+
- lib/us_core_test_kit/generator/templates/read.rb.erb
|
2554
|
+
- lib/us_core_test_kit/generator/templates/reference_resolution.rb.erb
|
2555
|
+
- lib/us_core_test_kit/generator/templates/search.rb.erb
|
2556
|
+
- lib/us_core_test_kit/generator/templates/suite.rb.erb
|
2557
|
+
- lib/us_core_test_kit/generator/templates/validation.rb.erb
|
2540
2558
|
- lib/us_core_test_kit/generator/terminology_binding_metadata_extractor.rb
|
2541
2559
|
- lib/us_core_test_kit/generator/validation_test_generator.rb
|
2542
2560
|
- lib/us_core_test_kit/generator/value_extractor.rb
|
2543
2561
|
- lib/us_core_test_kit/granular_scope.rb
|
2544
2562
|
- lib/us_core_test_kit/granular_scope_read_test.rb
|
2545
2563
|
- lib/us_core_test_kit/granular_scope_search_test.rb
|
2564
|
+
- lib/us_core_test_kit/igs/README.md
|
2546
2565
|
- lib/us_core_test_kit/igs/us_core_311.tgz
|
2547
2566
|
- lib/us_core_test_kit/igs/us_core_311/StructureDefinition-bodyheight.json
|
2548
2567
|
- lib/us_core_test_kit/igs/us_core_311/StructureDefinition-bodytemp.json
|
@@ -2564,6 +2583,7 @@ files:
|
|
2564
2583
|
- lib/us_core_test_kit/igs/us_core_700/StructureDefinition-condition-assertedDate.json
|
2565
2584
|
- lib/us_core_test_kit/igs/us_core_700/ValueSet-SmokingStatusType.json
|
2566
2585
|
- lib/us_core_test_kit/igs/us_core_700/ValueSet-servicerequest-category.json
|
2586
|
+
- lib/us_core_test_kit/metadata.rb
|
2567
2587
|
- lib/us_core_test_kit/must_support_test.rb
|
2568
2588
|
- lib/us_core_test_kit/practitioner_address_test.rb
|
2569
2589
|
- lib/us_core_test_kit/primitive_type.rb
|
@@ -2581,6 +2601,7 @@ homepage: https://github.com/inferno-framework/us-core-test-kit
|
|
2581
2601
|
licenses:
|
2582
2602
|
- Apache-2.0
|
2583
2603
|
metadata:
|
2604
|
+
inferno_test_kit: 'true'
|
2584
2605
|
homepage_uri: https://github.com/inferno-framework/us-core-test-kit
|
2585
2606
|
source_code_uri: https://github.com/inferno-framework/us-core-test-kit
|
2586
2607
|
post_install_message:
|
@@ -2591,14 +2612,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
2591
2612
|
requirements:
|
2592
2613
|
- - ">="
|
2593
2614
|
- !ruby/object:Gem::Version
|
2594
|
-
version: 3.
|
2615
|
+
version: 3.3.6
|
2595
2616
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
2596
2617
|
requirements:
|
2597
2618
|
- - ">="
|
2598
2619
|
- !ruby/object:Gem::Version
|
2599
2620
|
version: '0'
|
2600
2621
|
requirements: []
|
2601
|
-
rubygems_version: 3.5.
|
2622
|
+
rubygems_version: 3.5.22
|
2602
2623
|
signing_key:
|
2603
2624
|
specification_version: 4
|
2604
2625
|
summary: US Core Inferno tests
|