davinci_dtr_test_kit 0.13.0 → 0.14.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_adaptive_questionnaire_completion_group.rb +23 -0
- data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_adaptive_questionnaire_followup_questions_group.rb +26 -0
- data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_adaptive_questionnaire_next_question_request_test.rb +93 -0
- data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_adaptive_questionnaire_next_question_request_validation_test.rb +62 -0
- data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_adaptive_questionnaire_next_question_retrieval_group.rb +23 -0
- data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_adaptive_questionnaire_response_validation_test.rb +66 -0
- data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_full_ehr_adaptive_dinner_questionnaire_workflow_group.rb +76 -0
- data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_full_ehr_adaptive_questionnaire_initial_retrieval_group.rb +27 -0
- data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_full_ehr_adaptive_questionnaire_request_test.rb +63 -0
- data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_smart_app_adaptive_questionnaire_initial_retrieval_group.rb +24 -0
- data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_smart_app_adaptive_questionnaire_request_test.rb +148 -0
- data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_smart_app_questionnaire_workflow_group.rb +75 -0
- data/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_full_ehr_questionnaire_workflow_group.rb +22 -38
- data/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_smart_app_dinner_questionnaire_package_request_test.rb +13 -16
- data/lib/davinci_dtr_test_kit/client_groups/dinner_static/dtr_smart_app_questionnaire_workflow_group.rb +9 -31
- data/lib/davinci_dtr_test_kit/client_groups/{dinner_static → full_ehr}/dtr_full_ehr_launch_attestation_test.rb +7 -6
- data/lib/davinci_dtr_test_kit/client_groups/{dinner_static → full_ehr}/dtr_full_ehr_prepopulation_attestation_test.rb +7 -7
- data/lib/davinci_dtr_test_kit/client_groups/{dinner_static → full_ehr}/dtr_full_ehr_prepopulation_override_attestation_test.rb +7 -7
- data/lib/davinci_dtr_test_kit/client_groups/{dinner_static/dtr_full_ehr_dinner_questionnaire_package_request_test.rb → full_ehr/dtr_full_ehr_questionnaire_package_request_test.rb} +2 -3
- data/lib/davinci_dtr_test_kit/client_groups/{dinner_static/dtr_full_ehr_dinner_static_questionnaire_response_conformance_test.rb → full_ehr/dtr_full_ehr_questionnaire_response_conformance_test.rb} +7 -3
- data/lib/davinci_dtr_test_kit/client_groups/{dinner_static/dtr_full_ehr_dinner_static_questionnaire_response_correctness_test.rb → full_ehr/dtr_full_ehr_questionnaire_response_correctness_test.rb} +14 -7
- data/lib/davinci_dtr_test_kit/client_groups/{dinner_static → full_ehr}/dtr_full_ehr_rendering_enabled_questions_attestation_test.rb +7 -7
- data/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_saving_questionnaire_response_group.rb +29 -0
- data/lib/davinci_dtr_test_kit/client_groups/{dinner_static → full_ehr}/dtr_full_ehr_store_attestation_test.rb +7 -7
- data/lib/davinci_dtr_test_kit/client_groups/resp_assist_device/dtr_questionnaire_rendering_attestation_test.rb +7 -6
- data/lib/davinci_dtr_test_kit/client_groups/resp_assist_device/dtr_resp_questionnaire_package_request_test.rb +15 -18
- data/lib/davinci_dtr_test_kit/client_groups/shared/dtr_questionnaire_response_basic_conformance_test.rb +5 -1
- data/lib/davinci_dtr_test_kit/client_groups/shared/dtr_questionnaire_response_pre_population_test.rb +12 -5
- data/lib/davinci_dtr_test_kit/client_groups/{dinner_static → smart_app}/dtr_smart_app_prepopulation_attestation_test.rb +7 -7
- data/lib/davinci_dtr_test_kit/client_groups/{dinner_static → smart_app}/dtr_smart_app_prepopulation_override_attestation_test.rb +7 -6
- data/lib/davinci_dtr_test_kit/client_groups/{dinner_static → smart_app}/dtr_smart_app_questionnaire_response_save_test.rb +17 -7
- data/lib/davinci_dtr_test_kit/client_groups/{dinner_static → smart_app}/dtr_smart_app_rendering_enabled_questions_attestation_test.rb +7 -7
- data/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_saving_questionnaire_response_group.rb +27 -0
- data/lib/davinci_dtr_test_kit/cql_test.rb +37 -140
- data/lib/davinci_dtr_test_kit/create_test.rb +25 -0
- data/lib/davinci_dtr_test_kit/docs/dtr_full_ehr_suite_description_v201.md +95 -37
- data/lib/davinci_dtr_test_kit/docs/dtr_light_ehr_suite_description_v201.md +15 -6
- data/lib/davinci_dtr_test_kit/docs/dtr_payer_server_suite_description_v201.md +32 -29
- data/lib/davinci_dtr_test_kit/docs/dtr_smart_app_suite_description_v201.md +48 -32
- data/lib/davinci_dtr_test_kit/dtr_full_ehr_suite.rb +13 -17
- data/lib/davinci_dtr_test_kit/dtr_light_ehr_suite.rb +67 -2
- data/lib/davinci_dtr_test_kit/dtr_payer_server_suite.rb +9 -20
- data/lib/davinci_dtr_test_kit/dtr_questionnaire_response_validation.rb +18 -10
- data/lib/davinci_dtr_test_kit/dtr_smart_app_suite.rb +32 -59
- data/lib/davinci_dtr_test_kit/endpoints/cors.rb +20 -0
- data/lib/davinci_dtr_test_kit/endpoints/mock_authorization/authorize_endpoint.rb +32 -0
- data/lib/davinci_dtr_test_kit/endpoints/mock_authorization/simple_token_endpoint.rb +19 -0
- data/lib/davinci_dtr_test_kit/endpoints/mock_authorization/token_endpoint.rb +116 -0
- data/lib/davinci_dtr_test_kit/endpoints/mock_authorization.rb +83 -0
- data/lib/davinci_dtr_test_kit/endpoints/mock_ehr/fhir_get_endpoint.rb +95 -0
- data/lib/davinci_dtr_test_kit/endpoints/mock_ehr/questionnaire_response_endpoint.rb +22 -0
- data/lib/davinci_dtr_test_kit/endpoints/mock_ehr.rb +25 -0
- data/lib/davinci_dtr_test_kit/endpoints/mock_payer/full_ehr_next_question_endpoint.rb +11 -0
- data/lib/davinci_dtr_test_kit/endpoints/mock_payer/full_ehr_questionnaire_package_endpoint.rb +11 -0
- data/lib/davinci_dtr_test_kit/endpoints/mock_payer/next_question_endpoint.rb +162 -0
- data/lib/davinci_dtr_test_kit/endpoints/mock_payer/next_question_proxy_endpoint.rb +36 -0
- data/lib/davinci_dtr_test_kit/endpoints/mock_payer/questionnaire_package_endpoint.rb +62 -0
- data/lib/davinci_dtr_test_kit/endpoints/mock_payer/questionnaire_package_proxy_endpoint.rb +38 -0
- data/lib/davinci_dtr_test_kit/endpoints/mock_payer.rb +36 -0
- data/lib/davinci_dtr_test_kit/fixtures/dinner_adaptive/dinner_order_adaptive_next_question_burrito.json +10 -2
- data/lib/davinci_dtr_test_kit/fixtures/dinner_adaptive/dinner_order_adaptive_next_question_hamburger.json +10 -2
- data/lib/davinci_dtr_test_kit/fixtures/dinner_adaptive/dinner_order_adaptive_next_question_initial.json +10 -2
- data/lib/davinci_dtr_test_kit/fixtures/dinner_adaptive/questionnaire_dinner_order_adaptive.json +4 -3
- data/lib/davinci_dtr_test_kit/fixtures.rb +24 -1
- data/lib/davinci_dtr_test_kit/payer_server_groups/adaptive_form_libraries_test.rb +2 -2
- data/lib/davinci_dtr_test_kit/payer_server_groups/adaptive_form_questionnaire_expressions_test.rb +4 -3
- data/lib/davinci_dtr_test_kit/payer_server_groups/adaptive_form_questionnaire_extensions_test.rb +3 -2
- data/lib/davinci_dtr_test_kit/payer_server_groups/adaptive_next_questionnaire_expressions_test.rb +6 -6
- data/lib/davinci_dtr_test_kit/payer_server_groups/adaptive_next_questionnaire_extensions_test.rb +6 -5
- data/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_adaptive_group.rb +2 -2
- data/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_adaptive_response_bundles_validation_test.rb +6 -9
- data/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_adaptive_response_search_validation_test.rb +15 -12
- data/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_adaptive_response_validation_test.rb +33 -23
- data/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_next_response_complete_test.rb +4 -4
- data/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_next_response_validation_test.rb +16 -12
- data/lib/davinci_dtr_test_kit/payer_server_groups/static_form_libraries_test.rb +2 -2
- data/lib/davinci_dtr_test_kit/payer_server_groups/static_form_questionnaire_expressions_test.rb +5 -4
- data/lib/davinci_dtr_test_kit/payer_server_groups/static_form_questionnaire_extensions_test.rb +4 -3
- data/lib/davinci_dtr_test_kit/payer_server_groups/static_form_response_validation_test.rb +32 -25
- data/lib/davinci_dtr_test_kit/profiles/communication_request/communication_request_read.rb +29 -0
- data/lib/davinci_dtr_test_kit/profiles/communication_request/communication_request_validation.rb +35 -0
- data/lib/davinci_dtr_test_kit/profiles/communication_request_group.rb +39 -0
- data/lib/davinci_dtr_test_kit/profiles/coverage/coverage_read.rb +29 -0
- data/lib/davinci_dtr_test_kit/profiles/coverage/coverage_validation.rb +35 -0
- data/lib/davinci_dtr_test_kit/profiles/coverage_group.rb +38 -0
- data/lib/davinci_dtr_test_kit/profiles/device_request/device_request_read.rb +29 -0
- data/lib/davinci_dtr_test_kit/profiles/device_request/device_request_validation.rb +35 -0
- data/lib/davinci_dtr_test_kit/profiles/device_request_group.rb +39 -0
- data/lib/davinci_dtr_test_kit/profiles/encounter/encounter_read.rb +29 -0
- data/lib/davinci_dtr_test_kit/profiles/encounter/encounter_validation.rb +35 -0
- data/lib/davinci_dtr_test_kit/profiles/encounter_group.rb +39 -0
- data/lib/davinci_dtr_test_kit/profiles/medication_request/medication_request_read.rb +29 -0
- data/lib/davinci_dtr_test_kit/profiles/medication_request/medication_request_validation.rb +35 -0
- data/lib/davinci_dtr_test_kit/profiles/medication_request_group.rb +39 -0
- data/lib/davinci_dtr_test_kit/profiles/nutrition_order/nutrition_order_read.rb +29 -0
- data/lib/davinci_dtr_test_kit/profiles/nutrition_order/nutrition_order_validation.rb +35 -0
- data/lib/davinci_dtr_test_kit/profiles/nutrition_order_group.rb +39 -0
- data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_context_search.rb +35 -0
- data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_create.rb +26 -0
- data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_patient_search.rb +55 -0
- data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_read.rb +22 -0
- data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_update.rb +26 -0
- data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_validation.rb +37 -0
- data/lib/davinci_dtr_test_kit/profiles/questionnaire_response_group.rb +66 -0
- data/lib/davinci_dtr_test_kit/profiles/service_request/service_request_read.rb +29 -0
- data/lib/davinci_dtr_test_kit/profiles/service_request/service_request_validation.rb +35 -0
- data/lib/davinci_dtr_test_kit/profiles/service_request_group.rb +39 -0
- data/lib/davinci_dtr_test_kit/profiles/task/task_create.rb +26 -0
- data/lib/davinci_dtr_test_kit/profiles/task/task_read.rb +29 -0
- data/lib/davinci_dtr_test_kit/profiles/task/task_update.rb +26 -0
- data/lib/davinci_dtr_test_kit/profiles/task/task_validation.rb +35 -0
- data/lib/davinci_dtr_test_kit/profiles/task_group.rb +52 -0
- data/lib/davinci_dtr_test_kit/profiles/vision_prescription/vision_prescription_read.rb +29 -0
- data/lib/davinci_dtr_test_kit/profiles/vision_prescription/vision_prescription_validation.rb +35 -0
- data/lib/davinci_dtr_test_kit/profiles/vision_prescription_group.rb +39 -0
- data/lib/davinci_dtr_test_kit/read_test.rb +22 -0
- data/lib/davinci_dtr_test_kit/tags.rb +5 -7
- data/lib/davinci_dtr_test_kit/update_test.rb +25 -0
- data/lib/davinci_dtr_test_kit/validation_test.rb +19 -4
- data/lib/davinci_dtr_test_kit/version.rb +1 -1
- metadata +110 -21
- data/lib/davinci_dtr_test_kit/ext/inferno_core/record_response_route.rb +0 -98
- data/lib/davinci_dtr_test_kit/ext/inferno_core/request.rb +0 -19
- data/lib/davinci_dtr_test_kit/ext/inferno_core/runnable.rb +0 -35
- data/lib/davinci_dtr_test_kit/mock_auth_server.rb +0 -228
- data/lib/davinci_dtr_test_kit/mock_ehr.rb +0 -105
- data/lib/davinci_dtr_test_kit/mock_payer.rb +0 -100
@@ -0,0 +1,35 @@
|
|
1
|
+
require_relative '../../validation_test'
|
2
|
+
|
3
|
+
module DaVinciDTRTestKit
|
4
|
+
class DeviceRequestValidationTest < Inferno::Test
|
5
|
+
include DaVinciDTRTestKit::ValidationTest
|
6
|
+
|
7
|
+
title 'DeviceRequest resources returned during previous tests conform to the CRD DeviceRequest'
|
8
|
+
description %(
|
9
|
+
This test verifies resources returned from the read step conform to
|
10
|
+
the [CRD DeviceRequest](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-devicerequest).
|
11
|
+
Systems must demonstrate at least one valid example in order to pass this test.
|
12
|
+
|
13
|
+
It verifies the presence of mandatory elements and that elements with
|
14
|
+
required bindings contain appropriate values. CodeableConcept element
|
15
|
+
bindings will fail if none of their codings have a code/system belonging
|
16
|
+
to the bound ValueSet. Quantity, Coding, and code element bindings will
|
17
|
+
fail if their code/system are not found in the valueset.
|
18
|
+
|
19
|
+
)
|
20
|
+
|
21
|
+
id :device_request_validation
|
22
|
+
input :device_request_resources,
|
23
|
+
optional: true
|
24
|
+
|
25
|
+
def resource_type
|
26
|
+
'DeviceRequest'
|
27
|
+
end
|
28
|
+
|
29
|
+
run do
|
30
|
+
skip_if(device_request_ids.nil?, "No `#{resource_type}` IDs provided, skipping test.")
|
31
|
+
perform_profile_validation_test(device_request_resources, resource_type,
|
32
|
+
'http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-devicerequest|2.0.1')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require_relative 'device_request/device_request_read'
|
2
|
+
require_relative 'device_request/device_request_validation'
|
3
|
+
|
4
|
+
module DaVinciDTRTestKit
|
5
|
+
class DeviceRequestGroup < Inferno::TestGroup
|
6
|
+
title 'CRD DeviceRequest Tests'
|
7
|
+
short_description 'Verify support for the server capabilities required by the CRD DeviceRequest Profile'
|
8
|
+
description %(
|
9
|
+
# Background
|
10
|
+
|
11
|
+
The CRD DeviceRequest sequence verifies that the system under test is
|
12
|
+
able to provide correct responses for DeviceRequest queries. These queries
|
13
|
+
must return resources conforming to the [CRD DeviceRequest Profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-devicerequest.html).
|
14
|
+
|
15
|
+
# Testing Methodology
|
16
|
+
## Read
|
17
|
+
First, Inferno will attempt to read each DeviceRequest resource id provided in
|
18
|
+
the DeviceRequest IDs input. The server SHOULD be capable of returning a
|
19
|
+
DeviceRequest resource using the read interaction.
|
20
|
+
|
21
|
+
## Profile Validation
|
22
|
+
Each resource returned from the read step SHALL conform to
|
23
|
+
the [CRD DeviceRequest Profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-devicerequest.html).
|
24
|
+
Each element is checked against terminology binding and cardinality requirements.
|
25
|
+
|
26
|
+
)
|
27
|
+
id :device_request_group
|
28
|
+
optional
|
29
|
+
run_as_group
|
30
|
+
|
31
|
+
input :device_request_ids,
|
32
|
+
title: 'Device Request IDs',
|
33
|
+
description: 'Comma separated list of DeviceRequest IDs',
|
34
|
+
optional: true
|
35
|
+
|
36
|
+
test from: :device_request_read
|
37
|
+
test from: :device_request_validation
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require_relative '../../read_test'
|
2
|
+
|
3
|
+
module DaVinciDTRTestKit
|
4
|
+
class EncounterReadTest < Inferno::Test
|
5
|
+
include DaVinciDTRTestKit::ReadTest
|
6
|
+
|
7
|
+
title 'Server returns correct Encounter resource from Encounter read interaction'
|
8
|
+
description 'A server SHOULD support the Encounter read interaction.'
|
9
|
+
|
10
|
+
id :encounter_read
|
11
|
+
output :encounter_resources
|
12
|
+
|
13
|
+
def resource_type
|
14
|
+
'Encounter'
|
15
|
+
end
|
16
|
+
|
17
|
+
def encounter_id_list
|
18
|
+
return [nil] unless respond_to? :encounter_ids
|
19
|
+
|
20
|
+
encounter_ids&.split(',')&.map(&:strip)
|
21
|
+
end
|
22
|
+
|
23
|
+
run do
|
24
|
+
resources = perform_read_test(encounter_id_list, resource_type)
|
25
|
+
|
26
|
+
output encounter_resources: resources.to_json
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require_relative '../../validation_test'
|
2
|
+
|
3
|
+
module DaVinciDTRTestKit
|
4
|
+
class EncounterValidationTest < Inferno::Test
|
5
|
+
include DaVinciDTRTestKit::ValidationTest
|
6
|
+
|
7
|
+
title 'Encounter resources returned during previous tests conform to the CRD Encounter'
|
8
|
+
description %(
|
9
|
+
This test verifies resources returned from the read step conform to
|
10
|
+
the [CRD Encounter](http://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition/profile-encounter).
|
11
|
+
Systems must demonstrate at least one valid example in order to pass this test.
|
12
|
+
|
13
|
+
It verifies the presence of mandatory elements and that elements with
|
14
|
+
required bindings contain appropriate values. CodeableConcept element
|
15
|
+
bindings will fail if none of their codings have a code/system belonging
|
16
|
+
to the bound ValueSet. Quantity, Coding, and code element bindings will
|
17
|
+
fail if their code/system are not found in the valueset.
|
18
|
+
|
19
|
+
)
|
20
|
+
|
21
|
+
id :encounter_validation
|
22
|
+
input :encounter_resources,
|
23
|
+
optional: true
|
24
|
+
|
25
|
+
def resource_type
|
26
|
+
'Encounter'
|
27
|
+
end
|
28
|
+
|
29
|
+
run do
|
30
|
+
skip_if(encounter_ids.nil?, "No `#{resource_type}` IDs provided, skipping test.")
|
31
|
+
perform_profile_validation_test(encounter_resources, resource_type,
|
32
|
+
'http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-encounter|2.0.1')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require_relative 'encounter/encounter_read'
|
2
|
+
require_relative 'encounter/encounter_validation'
|
3
|
+
|
4
|
+
module DaVinciDTRTestKit
|
5
|
+
class EncounterGroup < Inferno::TestGroup
|
6
|
+
title 'CRD Encounter Tests'
|
7
|
+
short_description 'Verify support for the server capabilities required by the CRD Encounter Profile'
|
8
|
+
description %(
|
9
|
+
# Background
|
10
|
+
|
11
|
+
The CRD Encounter sequence verifies that the system under test is
|
12
|
+
able to provide correct responses for Encounter queries. These queries
|
13
|
+
must return resources conforming to the [CRD Encounter Profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-encounter.html).
|
14
|
+
|
15
|
+
# Testing Methodology
|
16
|
+
## Read
|
17
|
+
First, Inferno will attempt to read each Encounter resource id provided in
|
18
|
+
the Encounter IDs input. The server SHOULD be capable of returning a
|
19
|
+
Encounter resource using the read interaction.
|
20
|
+
|
21
|
+
## Profile Validation
|
22
|
+
Each resource returned from the read step SHALL conform to
|
23
|
+
the [CRD Encounter Profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-encounter.html).
|
24
|
+
Each element is checked against terminology binding and cardinality requirements.
|
25
|
+
|
26
|
+
)
|
27
|
+
id :encounter_group
|
28
|
+
optional
|
29
|
+
run_as_group
|
30
|
+
|
31
|
+
input :encounter_ids,
|
32
|
+
title: 'Encounter IDs',
|
33
|
+
description: 'Comma separated list of Encounter IDs',
|
34
|
+
optional: true
|
35
|
+
|
36
|
+
test from: :encounter_read
|
37
|
+
test from: :encounter_validation
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require_relative '../../read_test'
|
2
|
+
|
3
|
+
module DaVinciDTRTestKit
|
4
|
+
class MedicationRequestReadTest < Inferno::Test
|
5
|
+
include DaVinciDTRTestKit::ReadTest
|
6
|
+
|
7
|
+
title 'Server returns correct MedicationRequest resource from MedicationRequest read interaction'
|
8
|
+
description 'A server SHOULD support the MedicationRequest read interaction.'
|
9
|
+
|
10
|
+
id :medication_request_read
|
11
|
+
output :medication_request_resources
|
12
|
+
|
13
|
+
def resource_type
|
14
|
+
'MedicationRequest'
|
15
|
+
end
|
16
|
+
|
17
|
+
def medication_request_id_list
|
18
|
+
return [nil] unless respond_to? :medication_request_ids
|
19
|
+
|
20
|
+
medication_request_ids&.split(',')&.map(&:strip)
|
21
|
+
end
|
22
|
+
|
23
|
+
run do
|
24
|
+
resources = perform_read_test(medication_request_id_list, resource_type)
|
25
|
+
|
26
|
+
output medication_request_resources: resources.to_json
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require_relative '../../validation_test'
|
2
|
+
|
3
|
+
module DaVinciDTRTestKit
|
4
|
+
class MedicationRequestValidationTest < Inferno::Test
|
5
|
+
include DaVinciDTRTestKit::ValidationTest
|
6
|
+
|
7
|
+
title 'MedicationRequest resources returned during previous tests conform to the CRD MedicationRequest'
|
8
|
+
description %(
|
9
|
+
This test verifies resources returned from the read step conform to
|
10
|
+
the [CRD MedicationRequest](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-medicationrequest).
|
11
|
+
Systems must demonstrate at least one valid example in order to pass this test.
|
12
|
+
|
13
|
+
It verifies the presence of mandatory elements and that elements with
|
14
|
+
required bindings contain appropriate values. CodeableConcept element
|
15
|
+
bindings will fail if none of their codings have a code/system belonging
|
16
|
+
to the bound ValueSet. Quantity, Coding, and code element bindings will
|
17
|
+
fail if their code/system are not found in the valueset.
|
18
|
+
|
19
|
+
)
|
20
|
+
|
21
|
+
id :medication_request_validation
|
22
|
+
input :medication_request_resources,
|
23
|
+
optional: true
|
24
|
+
|
25
|
+
def resource_type
|
26
|
+
'MedicationRequest'
|
27
|
+
end
|
28
|
+
|
29
|
+
run do
|
30
|
+
skip_if(medication_request_ids.nil?, "No `#{resource_type}` IDs provided, skipping test.")
|
31
|
+
perform_profile_validation_test(medication_request_resources, resource_type,
|
32
|
+
'http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-medicationrequest|2.0.1')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require_relative 'medication_request/medication_request_read'
|
2
|
+
require_relative 'medication_request/medication_request_validation'
|
3
|
+
|
4
|
+
module DaVinciDTRTestKit
|
5
|
+
class MedicationRequestGroup < Inferno::TestGroup
|
6
|
+
title 'CRD MedicationRequest Tests'
|
7
|
+
short_description 'Verify support for the server capabilities required by the CRD MedicationRequest Profile'
|
8
|
+
description %(
|
9
|
+
# Background
|
10
|
+
|
11
|
+
The CRD MedicationRequest sequence verifies that the system under test is
|
12
|
+
able to provide correct responses for MedicationRequest queries. These queries
|
13
|
+
must return resources conforming to the [CRD MedicationRequest Profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-medicationrequest.html).
|
14
|
+
|
15
|
+
# Testing Methodology
|
16
|
+
## Read
|
17
|
+
First, Inferno will attempt to read each MedicationRequest resource id provided in
|
18
|
+
the MedicationRequest IDs input. The server SHOULD be capable of returning a
|
19
|
+
MedicationRequest resource using the read interaction.
|
20
|
+
|
21
|
+
## Profile Validation
|
22
|
+
Each resource returned from the read step SHALL conform to
|
23
|
+
the [CRD MedicationRequest Profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-medicationrequest.html).
|
24
|
+
Each element is checked against terminology binding and cardinality requirements.
|
25
|
+
|
26
|
+
)
|
27
|
+
id :medication_request_group
|
28
|
+
optional
|
29
|
+
run_as_group
|
30
|
+
|
31
|
+
input :medication_request_ids,
|
32
|
+
title: 'Medication Request IDs',
|
33
|
+
description: 'Comma separated list of MedicationRequest IDs',
|
34
|
+
optional: true
|
35
|
+
|
36
|
+
test from: :medication_request_read
|
37
|
+
test from: :medication_request_validation
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require_relative '../../read_test'
|
2
|
+
|
3
|
+
module DaVinciDTRTestKit
|
4
|
+
class NutritionOrderReadTest < Inferno::Test
|
5
|
+
include DaVinciDTRTestKit::ReadTest
|
6
|
+
|
7
|
+
title 'Server returns correct NutritionOrder resource from NutritionOrder read interaction'
|
8
|
+
description 'A server SHOULD support the NutritionOrder read interaction.'
|
9
|
+
|
10
|
+
id :nutrition_order_read
|
11
|
+
output :nutrition_order_resources
|
12
|
+
|
13
|
+
def resource_type
|
14
|
+
'NutritionOrder'
|
15
|
+
end
|
16
|
+
|
17
|
+
def nutrition_order_id_list
|
18
|
+
return [nil] unless respond_to? :nutrition_order_ids
|
19
|
+
|
20
|
+
nutrition_order_ids&.split(',')&.map(&:strip)
|
21
|
+
end
|
22
|
+
|
23
|
+
run do
|
24
|
+
resources = perform_read_test(nutrition_order_id_list, resource_type)
|
25
|
+
|
26
|
+
output nutrition_order_resources: resources.to_json
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require_relative '../../validation_test'
|
2
|
+
|
3
|
+
module DaVinciDTRTestKit
|
4
|
+
class NutritionOrderValidationTest < Inferno::Test
|
5
|
+
include DaVinciDTRTestKit::ValidationTest
|
6
|
+
|
7
|
+
title 'NutritionOrder resources returned during previous tests conform to the CRD NutritionOrder'
|
8
|
+
description %(
|
9
|
+
This test verifies resources returned from the read step conform to
|
10
|
+
the [CRD NutritionOrder](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-nutritionorder).
|
11
|
+
Systems must demonstrate at least one valid example in order to pass this test.
|
12
|
+
|
13
|
+
It verifies the presence of mandatory elements and that elements with
|
14
|
+
required bindings contain appropriate values. CodeableConcept element
|
15
|
+
bindings will fail if none of their codings have a code/system belonging
|
16
|
+
to the bound ValueSet. Quantity, Coding, and code element bindings will
|
17
|
+
fail if their code/system are not found in the valueset.
|
18
|
+
|
19
|
+
)
|
20
|
+
|
21
|
+
id :nutrition_order_validation
|
22
|
+
input :nutrition_order_resources,
|
23
|
+
optional: true
|
24
|
+
|
25
|
+
def resource_type
|
26
|
+
'NutritionOrder'
|
27
|
+
end
|
28
|
+
|
29
|
+
run do
|
30
|
+
skip_if(nutrition_order_ids.nil?, "No `#{resource_type}` IDs provided, skipping test.")
|
31
|
+
perform_profile_validation_test(nutrition_order_resources, resource_type,
|
32
|
+
'http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-nutritionorder|2.0.1')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require_relative 'nutrition_order/nutrition_order_read'
|
2
|
+
require_relative 'nutrition_order/nutrition_order_validation'
|
3
|
+
|
4
|
+
module DaVinciDTRTestKit
|
5
|
+
class NutritionOrderGroup < Inferno::TestGroup
|
6
|
+
title 'CRD NutritionOrder Tests'
|
7
|
+
short_description 'Verify support for the server capabilities required by the CRD NutritionOrder Profile'
|
8
|
+
description %(
|
9
|
+
# Background
|
10
|
+
|
11
|
+
The CRD NutritionOrder sequence verifies that the system under test is
|
12
|
+
able to provide correct responses for NutritionOrder queries. These queries
|
13
|
+
must return resources conforming to the [CRD NutritionOrder Profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-nutritionorder.html).
|
14
|
+
|
15
|
+
# Testing Methodology
|
16
|
+
## Read
|
17
|
+
First, Inferno will attempt to read each NutritionOrder resource id provided in
|
18
|
+
the NutritionOrder IDs input. The server SHOULD be capable of returning a
|
19
|
+
NutritionOrder resource using the read interaction.
|
20
|
+
|
21
|
+
## Profile Validation
|
22
|
+
Each resource returned from the read step SHALL conform to
|
23
|
+
the [CRD NutritionOrder Profile](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-profile-communicationrequest.html).
|
24
|
+
Each element is checked against terminology binding and cardinality requirements.
|
25
|
+
|
26
|
+
)
|
27
|
+
id :nutrition_order_group
|
28
|
+
optional
|
29
|
+
run_as_group
|
30
|
+
|
31
|
+
input :nutrition_order_ids,
|
32
|
+
title: 'Nutrition Order IDs',
|
33
|
+
description: 'Comma separated list of NutritionOrder IDs',
|
34
|
+
optional: true
|
35
|
+
|
36
|
+
test from: :nutrition_order_read
|
37
|
+
test from: :nutrition_order_validation
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module DaVinciDTRTestKit
|
2
|
+
class QuestionnaireResponseContextSearchTest < Inferno::Test
|
3
|
+
include USCoreTestKit::SearchTest
|
4
|
+
|
5
|
+
title 'Server returns valid results for QuestionnaireResponse search by context'
|
6
|
+
description %(
|
7
|
+
A server SHALL support searching by
|
8
|
+
context on the QuestionnaireResponse resource. This test
|
9
|
+
will pass if resources are returned and match the search criteria. If
|
10
|
+
none are returned, the test is skipped.
|
11
|
+
)
|
12
|
+
|
13
|
+
id :questionnaire_response_context_search
|
14
|
+
|
15
|
+
def self.properties
|
16
|
+
@properties ||= USCoreTestKit::SearchTestProperties.new(
|
17
|
+
resource_type: 'QuestionnaireResponse',
|
18
|
+
search_param_names: ['context']
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.metadata
|
23
|
+
@metadata ||= USCoreTestKit::Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'),
|
24
|
+
aliases: true))
|
25
|
+
end
|
26
|
+
|
27
|
+
def scratch_resources
|
28
|
+
scratch[:questionnaire_response_resources] ||= {}
|
29
|
+
end
|
30
|
+
|
31
|
+
run do
|
32
|
+
run_search_test
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_create.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require_relative '../../create_test'
|
2
|
+
|
3
|
+
module DaVinciDTRTestKit
|
4
|
+
class QuestionnaireResponseCreateTest < Inferno::Test
|
5
|
+
include DaVinciDTRTestKit::CreateTest
|
6
|
+
|
7
|
+
title 'Server is capable of creating a QuestionnaireResponse resource from QuestionnaireResponse create interaction'
|
8
|
+
description 'A sever SHALL support the QuestionnaireResponse create interaction'
|
9
|
+
|
10
|
+
id :questionnaire_response_create
|
11
|
+
input :create_questionnaire_resources,
|
12
|
+
type: 'textarea',
|
13
|
+
title: 'Create QuestionnaireResponse Resources',
|
14
|
+
description:
|
15
|
+
'Provide a list of QuestionnaireResponse resources to create. e.g., [json_resource_1, json_resource_2]',
|
16
|
+
optional: true
|
17
|
+
|
18
|
+
def resource_type
|
19
|
+
'QuestionnaireResponse'
|
20
|
+
end
|
21
|
+
|
22
|
+
run do
|
23
|
+
perform_create_test(create_questionnaire_resources, resource_type)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module DaVinciDTRTestKit
|
2
|
+
class QuestionnaireResponsePatientSearchTest < Inferno::Test
|
3
|
+
include USCoreTestKit::SearchTest
|
4
|
+
|
5
|
+
title 'Server returns valid results for QuestionnaireResponse search by patient'
|
6
|
+
description %(
|
7
|
+
A server SHALL support searching by
|
8
|
+
patient on the QuestionnaireResponse resource. This test
|
9
|
+
will pass if resources are returned and match the search criteria. If
|
10
|
+
none are returned, the test is skipped.
|
11
|
+
|
12
|
+
This test verifies that the server supports searching by reference using
|
13
|
+
the form `patient=[id]` as well as `patient=Patient/[id]`. The two
|
14
|
+
different forms are expected to return the same number of results. US
|
15
|
+
Core requires that both forms are supported by US Core responders.
|
16
|
+
|
17
|
+
Because this is the first search of the sequence, resources in the
|
18
|
+
response will be used for subsequent tests.
|
19
|
+
|
20
|
+
Additionally, this test will check that GET and POST search methods
|
21
|
+
return the same number of results. Search by POST is required by the
|
22
|
+
FHIR R4 specification, and these tests interpret search by GET as a
|
23
|
+
requirement of US Core v3.1.1.
|
24
|
+
)
|
25
|
+
|
26
|
+
id :questionnaire_response_patient_search
|
27
|
+
input :patient_ids,
|
28
|
+
title: 'Patient IDs',
|
29
|
+
description: 'Comma separated list of Patient IDs used to search for QuestionnaireResponses'
|
30
|
+
|
31
|
+
def self.properties
|
32
|
+
@properties ||= USCoreTestKit::SearchTestProperties.new(
|
33
|
+
first_search: true,
|
34
|
+
resource_type: 'QuestionnaireResponse',
|
35
|
+
search_param_names: ['patient'],
|
36
|
+
saves_delayed_references: true,
|
37
|
+
test_reference_variants: true,
|
38
|
+
test_post_search: true
|
39
|
+
)
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.metadata
|
43
|
+
@metadata ||= USCoreTestKit::Generator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'),
|
44
|
+
aliases: true))
|
45
|
+
end
|
46
|
+
|
47
|
+
def scratch_resources
|
48
|
+
scratch[:questionnaire_response_resources] ||= {}
|
49
|
+
end
|
50
|
+
|
51
|
+
run do
|
52
|
+
run_search_test
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module DaVinciDTRTestKit
|
2
|
+
class QuestionnaireResponseReadTest < Inferno::Test
|
3
|
+
include USCoreTestKit::ReadTest
|
4
|
+
|
5
|
+
title 'Server returns correct QuestionnaireResponse resource from QuestionnaireResponse read interaction'
|
6
|
+
description 'A server SHALL support the QuestionnaireResponse read interaction'
|
7
|
+
|
8
|
+
id :questionnaire_response_read
|
9
|
+
|
10
|
+
def resource_type
|
11
|
+
'QuestionnaireResponse'
|
12
|
+
end
|
13
|
+
|
14
|
+
def scratch_resources
|
15
|
+
scratch[:questionnaire_response_resources] ||= {}
|
16
|
+
end
|
17
|
+
|
18
|
+
run do
|
19
|
+
perform_read_test(all_scratch_resources)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_update.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require_relative '../../update_test'
|
2
|
+
|
3
|
+
module DaVinciDTRTestKit
|
4
|
+
class QuestionnaireResponseUpdateTest < Inferno::Test
|
5
|
+
include DaVinciDTRTestKit::UpdateTest
|
6
|
+
|
7
|
+
title 'Server is capable of updating a QuestionnaireResponse resource from QuestionnaireResponse update interaction'
|
8
|
+
description 'A server SHALL support the QuestionnaireResponse update interaction'
|
9
|
+
|
10
|
+
id :questionnaire_response_update
|
11
|
+
input :update_questionnaire_resources,
|
12
|
+
type: 'textarea',
|
13
|
+
title: 'Update QuestionnaireResponse Resources',
|
14
|
+
description:
|
15
|
+
'Provide a list of QuestionnaireResponse resources to update. e.g., [json_resource_1, json_resource_2]',
|
16
|
+
optional: true
|
17
|
+
|
18
|
+
def resource_type
|
19
|
+
'QuestionnaireResponse'
|
20
|
+
end
|
21
|
+
|
22
|
+
run do
|
23
|
+
perform_update_test(update_questionnaire_resources, resource_type)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_validation.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
module DaVinciDTRTestKit
|
2
|
+
class QuestionnaireResponseValidationTest < Inferno::Test
|
3
|
+
include USCoreTestKit::ValidationTest
|
4
|
+
|
5
|
+
id :questionnaire_response_validation
|
6
|
+
title 'QuestionnaireResponse resources returned during previous tests conform to the DTR Questionnaire Response'
|
7
|
+
description %(
|
8
|
+
This test verifies resources returned from the first search conform to
|
9
|
+
the [DTR Questionnaire Response](https://hl7.org/fhir/us/davinci-dtr/STU2/StructureDefinition-dtr-questionnaireresponse).
|
10
|
+
Systems must demonstrate at least one valid example in order to pass this test.
|
11
|
+
|
12
|
+
It verifies the presence of mandatory elements and that elements with
|
13
|
+
required bindings contain appropriate values. CodeableConcept element
|
14
|
+
bindings will fail if none of their codings have a code/system belonging
|
15
|
+
to the bound ValueSet. Quantity, Coding, and code element bindings will
|
16
|
+
fail if their code/system are not found in the valueset.
|
17
|
+
|
18
|
+
)
|
19
|
+
|
20
|
+
output :dar_code_found, :dar_extension_found
|
21
|
+
|
22
|
+
def resource_type
|
23
|
+
'QuestionnaireResponse'
|
24
|
+
end
|
25
|
+
|
26
|
+
def scratch_resources
|
27
|
+
scratch[:questionnaire_response_resources] ||= {}
|
28
|
+
end
|
29
|
+
|
30
|
+
run do
|
31
|
+
perform_validation_test(scratch_resources[:all] || [],
|
32
|
+
'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaireresponse',
|
33
|
+
'2.0.1',
|
34
|
+
skip_if_empty: true)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require_relative 'questionnaire_response/questionnaire_response_patient_search'
|
2
|
+
require_relative 'questionnaire_response/questionnaire_response_context_search'
|
3
|
+
require_relative 'questionnaire_response/questionnaire_response_read'
|
4
|
+
require_relative 'questionnaire_response/questionnaire_response_validation'
|
5
|
+
require_relative 'questionnaire_response/questionnaire_response_create'
|
6
|
+
require_relative 'questionnaire_response/questionnaire_response_update'
|
7
|
+
|
8
|
+
module DaVinciDTRTestKit
|
9
|
+
class QuestionnaireResponseGroup < Inferno::TestGroup
|
10
|
+
title 'DTR QuestionnaireResponse Tests'
|
11
|
+
short_description 'Verify support for the server capabilities required by the DTR QuestionnaireResponse Profile'
|
12
|
+
description %(
|
13
|
+
# Background
|
14
|
+
|
15
|
+
The DTR QuestionnaireResponse sequences verifies that the system under test is able to create and update
|
16
|
+
QuestionnaireResponse instances and provide correct responses for QuestionnaireResponse queries. These queries must
|
17
|
+
return resources conforming to the [DTR QuestionnaireResponse Profile](http://hl7.org/fhir/us/davinci-dtr/STU2/StructureDefinition-dtr-questionnaireresponse.html).
|
18
|
+
|
19
|
+
# Testing Methodology
|
20
|
+
## Searching
|
21
|
+
This test sequence will first perform each required search associated with this resource. This sequence will perform
|
22
|
+
searches with the following parameters:
|
23
|
+
|
24
|
+
* `patient`
|
25
|
+
* `context`
|
26
|
+
|
27
|
+
### Search Parameters
|
28
|
+
The first search uses the patient(s) from the *Patient IDs* input. Subsequent searches will look for its parameter
|
29
|
+
values from the results of the first search. For example, the `context` search in this sequence is performed by
|
30
|
+
looking for an existing `context` extension from any of the resources returned in the `patient` search. If a value
|
31
|
+
cannot be found this way, the search is skipped.
|
32
|
+
|
33
|
+
### Search Validation
|
34
|
+
Inferno will retrieve up to the first 20 bundle pages of the reply for QuestionnaireResponse resources and save them
|
35
|
+
for subsequent tests. Each of these resources is then checked to see if it matches the searched parameters in
|
36
|
+
accordance with [FHIR search guidelines](https://www.hl7.org/fhir/search.html). The test will fail, for example, if
|
37
|
+
a search for `context=Coverage/cov015` returns a QuestionnaireResponse without a link to Coverage `cov015` in the
|
38
|
+
`context` extension.
|
39
|
+
|
40
|
+
## Read
|
41
|
+
The ids of each resource returned from the searches are then used to verify that the system under test is able to
|
42
|
+
return the correct QuestionnaireResponse resource using the read interaction.
|
43
|
+
|
44
|
+
## Profile Validation
|
45
|
+
Each resource returned from the search step SHALL conform to the [DTR QuestionnaireResponse Profile](http://hl7.org/fhir/us/davinci-dtr/STU2/StructureDefinition-dtr-questionnaireresponse.html).
|
46
|
+
Each element is checked against terminology binding and cardinality requirements.
|
47
|
+
|
48
|
+
## Create
|
49
|
+
This test sequence will perform create interactions with the provided json QuestionnaireResponse resources. The
|
50
|
+
server SHALL be capable of creating a QuestionnaireResponse resource using the create interaction.
|
51
|
+
|
52
|
+
## Update
|
53
|
+
This test sequence will perform update interactions with the provided json QuestionnaireResponse resources. The
|
54
|
+
server SHALL be capable of creating a QuestionnaireResponse resource using the update interaction.
|
55
|
+
)
|
56
|
+
id :questionnaire_response_group
|
57
|
+
run_as_group
|
58
|
+
|
59
|
+
test from: :questionnaire_response_patient_search
|
60
|
+
test from: :questionnaire_response_context_search
|
61
|
+
test from: :questionnaire_response_read
|
62
|
+
test from: :questionnaire_response_validation
|
63
|
+
test from: :questionnaire_response_create
|
64
|
+
test from: :questionnaire_response_update
|
65
|
+
end
|
66
|
+
end
|