davinci_dtr_test_kit 0.14.2 → 0.15.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/full_ehr_postman_dinner_order_example_postman.json +19 -0
- data/config/presets/full_ehr_postman_respiratory_device_example.json +15 -0
- data/config/presets/light_ehr_ref_server_local.json +105 -0
- data/config/presets/light_ehr_ref_server_prod.json +85 -0
- data/config/presets/payer_server_adaptive_client_flow.json +37 -0
- data/config/presets/payer_server_adaptive_manual_flow.json +44 -0
- data/config/presets/payer_server_run_against_smart_app_tests.json +35 -0
- data/config/presets/smart_app_postman_dinner_order_example.json +44 -0
- data/config/presets/smart_app_postman_respiratory_device_example.json +43 -0
- data/lib/davinci_dtr_test_kit/auth_groups/token_validation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/client_groups/custom_static/dtr_custom_questionnaire_expressions_test.rb +22 -0
- data/lib/davinci_dtr_test_kit/client_groups/custom_static/dtr_custom_questionnaire_extensions_test.rb +19 -0
- data/lib/davinci_dtr_test_kit/client_groups/custom_static/dtr_custom_questionnaire_libraries_test.rb +21 -0
- data/lib/davinci_dtr_test_kit/client_groups/custom_static/dtr_custom_questionnaire_package_validation_test.rb +39 -0
- data/lib/davinci_dtr_test_kit/client_groups/custom_static/dtr_full_ehr_custom_static_workflow_group.rb +122 -0
- data/lib/davinci_dtr_test_kit/client_groups/custom_static/dtr_smart_app_custom_static_workflow_group.rb +91 -0
- data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_adaptive_questionnaire_completion_group.rb → dtr_adaptive_completion_group.rb} +4 -4
- data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_adaptive_questionnaire_followup_questions_group.rb → dtr_adaptive_followup_questions_group.rb} +4 -4
- data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_adaptive_questionnaire_next_question_request_test.rb → dtr_adaptive_next_question_request_test.rb} +3 -2
- data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_adaptive_questionnaire_next_question_request_validation_test.rb → dtr_adaptive_next_question_request_validation_test.rb} +3 -2
- data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_adaptive_questionnaire_next_question_retrieval_group.rb → dtr_adaptive_next_question_retrieval_group.rb} +8 -8
- data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_adaptive_questionnaire_response_validation_test.rb → dtr_adaptive_response_validation_test.rb} +6 -4
- data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_full_ehr_adaptive_dinner_questionnaire_workflow_group.rb → dtr_full_ehr_adaptive_dinner_workflow_group.rb} +14 -12
- data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_full_ehr_adaptive_questionnaire_initial_retrieval_group.rb → dtr_full_ehr_adaptive_initial_retrieval_group.rb} +10 -10
- data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_full_ehr_adaptive_questionnaire_request_test.rb → dtr_full_ehr_adaptive_request_test.rb} +4 -2
- data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_smart_app_questionnaire_workflow_group.rb → dtr_smart_app_adaptive_dinner_workflow_group.rb} +25 -19
- data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_smart_app_adaptive_initial_retrieval_group.rb +24 -0
- data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_smart_app_adaptive_questionnaire_request_test.rb → dtr_smart_app_adaptive_request_test.rb} +2 -2
- data/lib/davinci_dtr_test_kit/client_groups/dinner_static/{dtr_full_ehr_questionnaire_workflow_group.rb → dtr_full_ehr_static_dinner_workflow_group.rb} +15 -14
- data/lib/davinci_dtr_test_kit/client_groups/dinner_static/{dtr_smart_app_questionnaire_workflow_group.rb → dtr_smart_app_static_dinner_workflow_group.rb} +18 -13
- data/lib/davinci_dtr_test_kit/client_groups/{full_ehr/dtr_full_ehr_rendering_enabled_questions_attestation_test.rb → dinner_static/dtr_static_dinner_enabled_questions_attestation_test.rb} +2 -2
- data/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_launch_attestation_test.rb +8 -3
- data/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_prepopulation_attestation_test.rb +3 -1
- data/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_prepopulation_override_attestation_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_questionnaire_package_request_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_questionnaire_response_conformance_test.rb +6 -1
- data/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_questionnaire_response_correctness_test.rb +11 -22
- data/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_saving_questionnaire_response_group.rb +4 -4
- data/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_store_attestation_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/client_groups/light_ehr/dtr_light_ehr_supported_endpoints_group.rb +22 -0
- data/lib/davinci_dtr_test_kit/client_groups/light_ehr/dtr_light_ehr_supported_payers_accept_header_test.rb +26 -0
- data/lib/davinci_dtr_test_kit/client_groups/light_ehr/dtr_light_ehr_supported_payers_config_test.rb +34 -0
- data/lib/davinci_dtr_test_kit/client_groups/light_ehr/dtr_light_ehr_supported_payers_endpoint_test.rb +44 -0
- data/lib/davinci_dtr_test_kit/client_groups/light_ehr/dtr_light_ehr_supported_payers_use_test.rb +32 -0
- data/lib/davinci_dtr_test_kit/client_groups/light_ehr/dtr_light_ehr_supported_payers_user_response_test.rb +70 -0
- data/lib/davinci_dtr_test_kit/client_groups/light_ehr/dtr_smart_ehr_launch.rb +18 -0
- data/lib/davinci_dtr_test_kit/client_groups/light_ehr/fhir_context_coverage_test.rb +42 -0
- data/lib/davinci_dtr_test_kit/client_groups/light_ehr/fhir_context_references_test.rb +59 -0
- data/lib/davinci_dtr_test_kit/client_groups/light_ehr/fhir_launch_context_test.rb +23 -0
- data/lib/davinci_dtr_test_kit/client_groups/{resp_assist_device/dtr_questionnaire_package_group.rb → respiratory/dtr_respiratory_questionnaire_package_group.rb} +5 -5
- data/lib/davinci_dtr_test_kit/client_groups/{resp_assist_device/dtr_resp_questionnaire_package_request_test.rb → respiratory/dtr_respiratory_questionnaire_package_request_test.rb} +2 -2
- data/lib/davinci_dtr_test_kit/client_groups/{resp_assist_device/dtr_questionnaire_response_group.rb → respiratory/dtr_respiratory_questionnaire_response_group.rb} +7 -7
- data/lib/davinci_dtr_test_kit/client_groups/{resp_assist_device/dtr_questionnaire_response_save_test.rb → respiratory/dtr_respiratory_questionnaire_response_save_test.rb} +2 -2
- data/lib/davinci_dtr_test_kit/client_groups/{resp_assist_device/dtr_questionnaire_rendering_attestation_test.rb → respiratory/dtr_respiratory_rendering_attestation_test.rb} +2 -2
- data/lib/davinci_dtr_test_kit/client_groups/respiratory/dtr_respiratory_rendering_group.rb +14 -0
- data/lib/davinci_dtr_test_kit/client_groups/{resp_assist_device/dtr_smart_app_questionnaire_workflow_group.rb → respiratory/dtr_smart_app_respiratory_workflow_group.rb} +8 -8
- data/lib/davinci_dtr_test_kit/client_groups/shared/dtr_prepopulation_attestation_test.rb +33 -0
- data/lib/davinci_dtr_test_kit/client_groups/shared/dtr_prepopulation_override_attestation_test.rb +36 -0
- data/lib/davinci_dtr_test_kit/client_groups/shared/dtr_questionnaire_package_request_validation_test.rb +3 -1
- data/lib/davinci_dtr_test_kit/client_groups/shared/dtr_questionnaire_response_basic_conformance_test.rb +8 -4
- data/lib/davinci_dtr_test_kit/client_groups/shared/{dtr_questionnaire_response_pre_population_test.rb → dtr_questionnaire_response_prepopulation_test.rb} +5 -2
- data/lib/davinci_dtr_test_kit/client_groups/shared/dtr_rendering_attestation_test.rb +32 -0
- data/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_prepopulation_attestation_test.rb +3 -1
- data/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_prepopulation_override_attestation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/client_groups/{dinner_static/dtr_smart_app_dinner_questionnaire_package_request_test.rb → smart_app/dtr_smart_app_questionnaire_package_request_test.rb} +6 -6
- data/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_questionnaire_response_correctness_test.rb +30 -0
- data/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_questionnaire_response_save_test.rb +2 -2
- data/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_saving_questionnaire_response_group.rb +3 -7
- data/lib/davinci_dtr_test_kit/cql_test.rb +58 -0
- data/lib/davinci_dtr_test_kit/docs/dtr_light_ehr_suite_description_v201.md +9 -6
- data/lib/davinci_dtr_test_kit/dtr_full_ehr_suite.rb +19 -6
- data/lib/davinci_dtr_test_kit/dtr_light_ehr_suite.rb +60 -40
- data/lib/davinci_dtr_test_kit/dtr_payer_server_suite.rb +0 -2
- data/lib/davinci_dtr_test_kit/dtr_questionnaire_response_validation.rb +50 -4
- data/lib/davinci_dtr_test_kit/dtr_smart_app_suite.rb +9 -9
- data/lib/davinci_dtr_test_kit/endpoints/mock_authorization.rb +10 -2
- data/lib/davinci_dtr_test_kit/endpoints/mock_ehr.rb +17 -1
- data/lib/davinci_dtr_test_kit/endpoints/mock_payer/light_ehr_supported_payer_endpoint.rb +44 -0
- data/lib/davinci_dtr_test_kit/endpoints/mock_payer/questionnaire_package_endpoint.rb +7 -1
- data/lib/davinci_dtr_test_kit/fixtures.rb +6 -6
- data/lib/davinci_dtr_test_kit/igs/davinci_dtr_2.0.1.tgz +0 -0
- data/lib/davinci_dtr_test_kit/metadata.rb +104 -0
- data/lib/davinci_dtr_test_kit/payer_server_groups/adaptive_form_libraries_test.rb +4 -1
- data/lib/davinci_dtr_test_kit/payer_server_groups/adaptive_form_questionnaire_expressions_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/payer_server_groups/adaptive_form_questionnaire_extensions_test.rb +4 -1
- data/lib/davinci_dtr_test_kit/payer_server_groups/adaptive_next_questionnaire_expressions_test.rb +1 -0
- data/lib/davinci_dtr_test_kit/payer_server_groups/adaptive_next_questionnaire_extensions_test.rb +4 -1
- data/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_adaptive_request_test.rb +2 -0
- data/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_adaptive_response_bundles_validation_test.rb +3 -2
- data/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_adaptive_response_search_validation_test.rb +8 -3
- data/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_adaptive_response_validation_test.rb +6 -15
- data/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_next_response_complete_test.rb +1 -0
- data/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_static_group.rb +1 -1
- data/lib/davinci_dtr_test_kit/payer_server_groups/static_form_libraries_test.rb +4 -1
- data/lib/davinci_dtr_test_kit/payer_server_groups/static_form_questionnaire_expressions_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/payer_server_groups/static_form_questionnaire_extensions_test.rb +4 -1
- data/lib/davinci_dtr_test_kit/payer_server_groups/static_form_request_test.rb +3 -1
- data/lib/davinci_dtr_test_kit/payer_server_groups/static_form_response_validation_test.rb +6 -15
- data/lib/davinci_dtr_test_kit/profiles/communication_request/communication_request_must_support_test.rb +46 -0
- data/lib/davinci_dtr_test_kit/profiles/communication_request/communication_request_read.rb +6 -3
- data/lib/davinci_dtr_test_kit/profiles/communication_request/communication_request_validation.rb +9 -8
- data/lib/davinci_dtr_test_kit/profiles/communication_request/metadata.yml +135 -0
- data/lib/davinci_dtr_test_kit/profiles/communication_request_group.rb +9 -0
- data/lib/davinci_dtr_test_kit/profiles/coverage/coverage_must_support_test.rb +54 -0
- data/lib/davinci_dtr_test_kit/profiles/coverage/coverage_read.rb +5 -3
- data/lib/davinci_dtr_test_kit/profiles/coverage/coverage_validation.rb +9 -8
- data/lib/davinci_dtr_test_kit/profiles/coverage/metadata.yml +133 -0
- data/lib/davinci_dtr_test_kit/profiles/coverage_group.rb +8 -0
- data/lib/davinci_dtr_test_kit/profiles/device_request/device_request_must_support_test.rb +45 -0
- data/lib/davinci_dtr_test_kit/profiles/device_request/device_request_read.rb +6 -3
- data/lib/davinci_dtr_test_kit/profiles/device_request/device_request_validation.rb +9 -8
- data/lib/davinci_dtr_test_kit/profiles/device_request/metadata.yml +130 -0
- data/lib/davinci_dtr_test_kit/profiles/device_request_group.rb +9 -0
- data/lib/davinci_dtr_test_kit/profiles/encounter/encounter_must_support_test.rb +58 -0
- data/lib/davinci_dtr_test_kit/profiles/encounter/encounter_read.rb +6 -3
- data/lib/davinci_dtr_test_kit/profiles/encounter/encounter_validation.rb +9 -8
- data/lib/davinci_dtr_test_kit/profiles/encounter/metadata.yml +169 -0
- data/lib/davinci_dtr_test_kit/profiles/encounter_group.rb +9 -0
- data/lib/davinci_dtr_test_kit/profiles/medication_request/medication_request_must_support_test.rb +50 -0
- data/lib/davinci_dtr_test_kit/profiles/medication_request/medication_request_read.rb +6 -3
- data/lib/davinci_dtr_test_kit/profiles/medication_request/medication_request_validation.rb +9 -8
- data/lib/davinci_dtr_test_kit/profiles/medication_request/metadata.yml +159 -0
- data/lib/davinci_dtr_test_kit/profiles/medication_request_group.rb +9 -0
- data/lib/davinci_dtr_test_kit/profiles/nutrition_order/metadata.yml +94 -0
- data/lib/davinci_dtr_test_kit/profiles/nutrition_order/nutrition_order_must_support_test.rb +45 -0
- data/lib/davinci_dtr_test_kit/profiles/nutrition_order/nutrition_order_read.rb +6 -3
- data/lib/davinci_dtr_test_kit/profiles/nutrition_order/nutrition_order_validation.rb +9 -8
- data/lib/davinci_dtr_test_kit/profiles/nutrition_order_group.rb +9 -0
- data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_context_search.rb +3 -1
- data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_create.rb +1 -0
- data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_must_support_test.rb +54 -0
- data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_patient_search.rb +3 -1
- data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_read.rb +2 -1
- data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_update.rb +1 -0
- data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_validation.rb +1 -1
- data/lib/davinci_dtr_test_kit/profiles/questionnaire_response_group.rb +11 -1
- data/lib/davinci_dtr_test_kit/profiles/service_request/metadata.yml +140 -0
- data/lib/davinci_dtr_test_kit/profiles/service_request/service_request_must_support_test.rb +47 -0
- data/lib/davinci_dtr_test_kit/profiles/service_request/service_request_read.rb +6 -3
- data/lib/davinci_dtr_test_kit/profiles/service_request/service_request_validation.rb +9 -8
- data/lib/davinci_dtr_test_kit/profiles/service_request_group.rb +9 -0
- data/lib/davinci_dtr_test_kit/profiles/task/metadata.yml +165 -0
- data/lib/davinci_dtr_test_kit/profiles/task/task_create.rb +1 -0
- data/lib/davinci_dtr_test_kit/profiles/task/task_must_support_test.rb +46 -0
- data/lib/davinci_dtr_test_kit/profiles/task/task_read.rb +6 -3
- data/lib/davinci_dtr_test_kit/profiles/task/task_update.rb +1 -0
- data/lib/davinci_dtr_test_kit/profiles/task/task_validation.rb +9 -8
- data/lib/davinci_dtr_test_kit/profiles/task_group.rb +11 -1
- data/lib/davinci_dtr_test_kit/profiles/vision_prescription/metadata.yml +107 -0
- data/lib/davinci_dtr_test_kit/profiles/vision_prescription/vision_prescription_must_support_test.rb +54 -0
- data/lib/davinci_dtr_test_kit/profiles/vision_prescription/vision_prescription_read.rb +6 -3
- data/lib/davinci_dtr_test_kit/profiles/vision_prescription/vision_prescription_validation.rb +9 -8
- data/lib/davinci_dtr_test_kit/profiles/vision_prescription_group.rb +9 -0
- data/lib/davinci_dtr_test_kit/read_test.rb +5 -0
- data/lib/davinci_dtr_test_kit/requirements/davinci-dtr-test-kit_out_of_scope_requirements.csv +13 -0
- data/lib/davinci_dtr_test_kit/requirements/davinci-dtr-test-kit_requirements.csv +374 -0
- data/lib/davinci_dtr_test_kit/requirements/generated/davinci-dtr-test-kit_requirements_coverage.csv +372 -0
- data/lib/davinci_dtr_test_kit/tags.rb +1 -0
- data/lib/davinci_dtr_test_kit/urls.rb +6 -0
- data/lib/davinci_dtr_test_kit/version.rb +2 -1
- data/lib/davinci_dtr_test_kit.rb +2 -0
- data/lib/inferno_requirements_tools/ext/inferno_core/runnable.rb +22 -0
- data/lib/inferno_requirements_tools/rake/rakefile_template +31 -0
- data/lib/inferno_requirements_tools/tasks/requirements_coverage.rb +284 -0
- data/lib/requirements_config.yaml +25 -0
- metadata +95 -37
- data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_smart_app_adaptive_questionnaire_initial_retrieval_group.rb +0 -24
- data/lib/davinci_dtr_test_kit/client_groups/resp_assist_device/dtr_questionnaire_rendering_group.rb +0 -14
- data/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_rendering_enabled_questions_attestation_test.rb +0 -30
@@ -1,10 +1,9 @@
|
|
1
1
|
require_relative 'dtr_smart_app_questionnaire_response_save_test'
|
2
2
|
require_relative '../shared/dtr_questionnaire_response_basic_conformance_test'
|
3
|
-
require_relative '../shared/dtr_questionnaire_response_pre_population_test'
|
4
3
|
|
5
4
|
module DaVinciDTRTestKit
|
6
5
|
class DTRSmartAppSavingQuestionnaireResponseGroup < Inferno::TestGroup
|
7
|
-
id :
|
6
|
+
id :dtr_smart_app_saving_qr
|
8
7
|
title 'Saving the QuestionnaireResponse'
|
9
8
|
description %(
|
10
9
|
The tester will complete the questionnaire such that a QuestionnaireResponse is stored
|
@@ -15,13 +14,10 @@ module DaVinciDTRTestKit
|
|
15
14
|
run_as_group
|
16
15
|
|
17
16
|
# Test 1: wait for a QuestionnaireResponse
|
18
|
-
test from: :
|
17
|
+
test from: :dtr_smart_app_qr_save,
|
19
18
|
receives_request: :questionnaire_response_save
|
20
19
|
# Test 2: validate basic conformance of the QuestionnaireResponse
|
21
|
-
test from: :
|
22
|
-
uses_request: :questionnaire_response_save
|
23
|
-
# Test 3: validate workflow-specific details such as pre-population and overrides
|
24
|
-
test from: :dtr_questionnaire_response_pre_population,
|
20
|
+
test from: :dtr_qr_basic_conformance,
|
25
21
|
uses_request: :questionnaire_response_save
|
26
22
|
end
|
27
23
|
end
|
@@ -1,5 +1,19 @@
|
|
1
1
|
module DaVinciDTRTestKit
|
2
2
|
module CQLTest
|
3
|
+
STATIC_QUESTIONNAIRE_PACKAGE_BUNDLE_PROFILE = 'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/DTR-QPackageBundle|2.0.1'.freeze
|
4
|
+
STATIC_QUESTIONNAIRE_PACKAGE_PARAMETER_PROFILE = 'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-qpackage-output-parameters|2.0.1'.freeze
|
5
|
+
ADAPTIVE_QUESTIONNAIRE_PACKAGE_BUNDLE_PROFILE = 'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/DTR-QPackageBundle|2.0.1'.freeze
|
6
|
+
ADAPTIVE_QUESTIONNAIRE_PACKAGE_PARAMETER_PROFILE = 'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-qpackage-output-parameters|2.0.1'.freeze
|
7
|
+
|
8
|
+
def questionnaire_package_profile_urls
|
9
|
+
{
|
10
|
+
static_bundle: STATIC_QUESTIONNAIRE_PACKAGE_BUNDLE_PROFILE,
|
11
|
+
static_parameter: STATIC_QUESTIONNAIRE_PACKAGE_PARAMETER_PROFILE,
|
12
|
+
adaptive_bundle: ADAPTIVE_QUESTIONNAIRE_PACKAGE_BUNDLE_PROFILE,
|
13
|
+
adaptive_parameter: ADAPTIVE_QUESTIONNAIRE_PACKAGE_PARAMETER_PROFILE
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
3
17
|
def extension_presence
|
4
18
|
@extension_presence ||= { 'found_min_launch_context' => false, 'found_min_variable' => false,
|
5
19
|
'found_min_pop_context' => false, 'found_min_init_expression' => false,
|
@@ -320,6 +334,50 @@ module DaVinciDTRTestKit
|
|
320
334
|
end&.flatten&.compact
|
321
335
|
end
|
322
336
|
|
337
|
+
def perform_questionnaire_package_validation(resource, form = 'static')
|
338
|
+
scratch[:"#{form}_questionnaire_bundles"] = extract_questionnaire_bundles(resource)
|
339
|
+
validate_questionnaire_package(resource, form)
|
340
|
+
assert scratch[:"#{form}_questionnaire_bundles"].present?, 'No questionnaire bundle found in the response'
|
341
|
+
end
|
342
|
+
|
343
|
+
def validate_questionnaire_package(resource, form)
|
344
|
+
case resource&.resourceType
|
345
|
+
when 'Bundle'
|
346
|
+
assert_valid_resource(resource:, profile_url: questionnaire_package_profile_urls[:"#{form}_bundle"])
|
347
|
+
when 'Parameters'
|
348
|
+
assert_valid_resource(resource:, profile_url: questionnaire_package_profile_urls[:"#{form}_parameter"])
|
349
|
+
else
|
350
|
+
assert(false, "Unexpected resourceType: #{resource&.resourceType}. Expected Parameters or Bundle")
|
351
|
+
end
|
352
|
+
end
|
353
|
+
|
354
|
+
def extract_questionnaire_bundles(resource)
|
355
|
+
case resource&.resourceType
|
356
|
+
when 'Bundle'
|
357
|
+
[resource]
|
358
|
+
when 'Parameters'
|
359
|
+
extract_bundles_from_parameter(resource)
|
360
|
+
else
|
361
|
+
[]
|
362
|
+
end
|
363
|
+
end
|
364
|
+
|
365
|
+
def extract_bundles_from_parameter(parameter)
|
366
|
+
return [] if parameter.blank?
|
367
|
+
|
368
|
+
parameter.parameter&.filter_map do |param|
|
369
|
+
param.resource if param.resource&.resourceType == 'Bundle'
|
370
|
+
end
|
371
|
+
end
|
372
|
+
|
373
|
+
def extract_questionnaire_from_questionnaire_package(questionnaire_pkg_json, questionnaire_url)
|
374
|
+
resource = FHIR.from_contents(questionnaire_pkg_json)
|
375
|
+
questionnaire_bundles = extract_questionnaire_bundles(resource)
|
376
|
+
questionnaires = extract_questionnaires_from_bundles(questionnaire_bundles)
|
377
|
+
|
378
|
+
questionnaires.find { |q| q.url == questionnaire_url }
|
379
|
+
end
|
380
|
+
|
323
381
|
def extract_libraries_from_bundles(questionnaire_bundles)
|
324
382
|
questionnaire_bundles.filter_map do |qb|
|
325
383
|
qb.entry.filter_map { |entry| entry.resource if entry&.resource.is_a?(FHIR::Library) }
|
@@ -12,11 +12,18 @@ requirements and may change the test validation logic.
|
|
12
12
|
|
13
13
|
## Test Methodology
|
14
14
|
|
15
|
-
Inferno will simulate a DTR SMART App that will connect to the DTR Light EHR system under test. The tester will need to launch Inferno using
|
15
|
+
Inferno will simulate a DTR SMART App that will connect to the DTR Light EHR system under test. The tester will need to launch Inferno using an EHR launch. Once the connection between Inferno's simulated DTR SMART App and the DTR Light EHR under test is established, tests within this suite will make FHIR API requests corresponding to capabilities required by the [Light DTR EHR Capability Statement](https://hl7.org/fhir/us/davinci-dtr/STU2/CapabilityStatement-light-dtr-ehr) and check that the EHR's responses are conformant.
|
16
16
|
|
17
17
|
## Running the Tests
|
18
18
|
|
19
|
-
If you would like to try out the tests but don't have a DTR
|
19
|
+
If you would like to try out the tests but don't have a Light DTR EHR implementation, you can run these tests against the [public instance of the Inferno Reference Server](https://inferno.healthit.gov/reference-server/r4/) by using the Inferno Reference Server preset in the test suite. In order to get the Inferno Reference Server to do an EHR launch, navigate to https://inferno.healthit.gov/reference-server/app/app-launch and use https://inferno.healthit.gov/suites/custom/smart/launch as the App Launch URL. When using the Inferno Reference Server preset for the DTR Light EHR test suite, note that the sample patient used for testing (`dtr_bundle_patient_pat015.json`) is focused on DTR-specific data and does not have the complete set of US Core data needed to pass all the US Core tests. In addition, this preset does not test the `create` or `update` tests for DTR QuestionnaireResponse resources and PAS Task resources.
|
20
|
+
|
21
|
+
In addition, if you would like to try out the DTR-specific SMART Launch tests, meaning the tests that check for DTR `fhirContext` conformance, but do not have a Light DTR EHR implementation, you can run these tests against an instance of Inferno running the DTR Smart App Test Suite as your Light DTR EHR. This process is described in the following steps:
|
22
|
+
|
23
|
+
1. In the tab with the Light DTR EHR Test Suite open, click "1 Authorization" test group and click "Run all tests". The FHIR Server Base Url should be `[URL prefix]/custom/dtr_smart_app/fhir` where `[URL prefix]` comes from the URL of the test session which will be of the form `[URL prefix]/dtr_smart_app/[session id]` and the EHR Launch Client ID should be `sample`. Click "Submit". Take note of the launch_uri provided by the following prompt.
|
24
|
+
2. In a separate tab from the DTR Light EHR Test Suite, pull up the Da Vinci DTR SMART App Test Suite and click "Run all tests".
|
25
|
+
3. Start off by launching it with "EHR Launch from Inferno" with a client_id of `sample` and a launch_uri provided by the DTR Light EHR prompt in step 1. Before clicking "Submit", change the SMART App Launch fhirContext input to be an array of strings, rather than the default JSON object since the DTR Light EHR tests use STU2.0 version of SMART Launch. The input should be `["Coverage/cov015","DeviceRequest/devreqe0470"]`. Click "Submit".
|
26
|
+
4. Right click on the link in the resulting popup and click "Open Link in New Window" to complete the Authorization Test Group of the DTR Light EHR Test Suite.
|
20
27
|
|
21
28
|
## Limitations
|
22
29
|
|
@@ -24,10 +31,6 @@ The DTR IG is a complex specification and these tests currently validate conform
|
|
24
31
|
a subset of IG requirements. Future versions of the test suite will test further
|
25
32
|
features.
|
26
33
|
|
27
|
-
Specific limitations include:
|
28
|
-
- *SMART Launch `fhirContext`*: Inferno does not currently verify the use of `fhirContext` to convey details
|
29
|
-
about the DTR SMART App launch.
|
30
|
-
|
31
34
|
## DTR 2.0.1 Corrections
|
32
35
|
|
33
36
|
The DTR 2.0.1 version of the [Light EHR CapabilityStatement](http://hl7.org/fhir/us/davinci-dtr/CapabilityStatement/light-dtr-ehr) includes two pieces of missing or misleading information that have been corrected:
|
@@ -1,5 +1,6 @@
|
|
1
|
-
require_relative 'client_groups/
|
2
|
-
require_relative 'client_groups/
|
1
|
+
require_relative 'client_groups/custom_static/dtr_full_ehr_custom_static_workflow_group'
|
2
|
+
require_relative 'client_groups/dinner_static/dtr_full_ehr_static_dinner_workflow_group'
|
3
|
+
require_relative 'client_groups/dinner_adaptive/dtr_full_ehr_adaptive_dinner_workflow_group'
|
3
4
|
require_relative 'auth_groups/oauth2_authentication_group'
|
4
5
|
require_relative 'endpoints/cors'
|
5
6
|
require_relative 'endpoints/mock_authorization/simple_token_endpoint'
|
@@ -15,8 +16,6 @@ module DaVinciDTRTestKit
|
|
15
16
|
title 'Da Vinci DTR Full EHR Test Suite'
|
16
17
|
description File.read(File.join(__dir__, 'docs', 'dtr_full_ehr_suite_description_v201.md'))
|
17
18
|
|
18
|
-
version VERSION
|
19
|
-
|
20
19
|
links [
|
21
20
|
{
|
22
21
|
label: 'Report Issue',
|
@@ -61,7 +60,21 @@ module DaVinciDTRTestKit
|
|
61
60
|
end
|
62
61
|
|
63
62
|
group from: :oauth2_authentication
|
64
|
-
group
|
65
|
-
|
63
|
+
group do
|
64
|
+
id :dtr_full_ehr_basic_workflows
|
65
|
+
title 'Basic Workflows'
|
66
|
+
|
67
|
+
group from: :dtr_full_ehr_custom_static_workflow
|
68
|
+
group from: :dtr_full_ehr_adaptive_dinner_workflow
|
69
|
+
end
|
70
|
+
group do
|
71
|
+
id :dtr_full_ehr_questionnaire_functionality
|
72
|
+
title 'Questionnaire Functionality Coverage'
|
73
|
+
description %(
|
74
|
+
Tests in this group validate that the client can complete additional DTR workflows
|
75
|
+
covering additional pre-population features of questionnaires.
|
76
|
+
)
|
77
|
+
group from: :dtr_full_ehr_static_dinner_workflow
|
78
|
+
end
|
66
79
|
end
|
67
80
|
end
|
@@ -12,6 +12,9 @@ require_relative 'profiles/nutrition_order_group'
|
|
12
12
|
require_relative 'profiles/service_request_group'
|
13
13
|
require_relative 'profiles/task_group'
|
14
14
|
require_relative 'profiles/vision_prescription_group'
|
15
|
+
require_relative 'client_groups/light_ehr/dtr_smart_ehr_launch'
|
16
|
+
require_relative 'endpoints/mock_payer/light_ehr_supported_payer_endpoint'
|
17
|
+
require_relative 'client_groups/light_ehr/dtr_light_ehr_supported_endpoints_group'
|
15
18
|
require 'smart_app_launch/smart_stu1_suite'
|
16
19
|
require 'smart_app_launch/smart_stu2_suite'
|
17
20
|
|
@@ -21,8 +24,6 @@ module DaVinciDTRTestKit
|
|
21
24
|
title 'Da Vinci DTR Light EHR Test Suite'
|
22
25
|
description File.read(File.join(__dir__, 'docs', 'dtr_light_ehr_suite_description_v201.md'))
|
23
26
|
|
24
|
-
version VERSION
|
25
|
-
|
26
27
|
links [
|
27
28
|
{
|
28
29
|
label: 'Report Issue',
|
@@ -42,10 +43,6 @@ module DaVinciDTRTestKit
|
|
42
43
|
}
|
43
44
|
]
|
44
45
|
|
45
|
-
input :url,
|
46
|
-
title: 'FHIR Server Base Url',
|
47
|
-
description: 'URL of the target DTR Light EHR'
|
48
|
-
|
49
46
|
# Hl7 Validator Wrapper:
|
50
47
|
fhir_resource_validator do
|
51
48
|
igs('hl7.fhir.us.davinci-dtr#2.0.1', 'hl7.fhir.us.davinci-pas#2.0.1', 'hl7.fhir.us.davinci-crd#2.0.1')
|
@@ -55,6 +52,16 @@ module DaVinciDTRTestKit
|
|
55
52
|
end
|
56
53
|
end
|
57
54
|
|
55
|
+
suite_endpoint :get, SUPPORTED_PAYER_PATH, LightEHRSupportedPayerEndpoint
|
56
|
+
|
57
|
+
resume_test_route :get, RESUME_PASS_PATH do |request|
|
58
|
+
request.query_parameters['token']
|
59
|
+
end
|
60
|
+
|
61
|
+
resume_test_route :get, RESUME_FAIL_PATH, result: 'fail' do |request|
|
62
|
+
request.query_parameters['token']
|
63
|
+
end
|
64
|
+
|
58
65
|
group do
|
59
66
|
title 'Authorization'
|
60
67
|
|
@@ -83,13 +90,18 @@ module DaVinciDTRTestKit
|
|
83
90
|
end
|
84
91
|
end
|
85
92
|
|
86
|
-
group from: :
|
87
|
-
required_suite_options: DTROptions::SMART_2_REQUIREMENT,
|
88
|
-
run_as_group: true
|
89
|
-
|
90
|
-
group from: :smart_standalone_launch_stu2,
|
93
|
+
group from: :dtr_smart_ehr_launch,
|
91
94
|
required_suite_options: DTROptions::SMART_2_REQUIREMENT,
|
92
|
-
run_as_group: true
|
95
|
+
run_as_group: true,
|
96
|
+
config: {
|
97
|
+
outputs: {
|
98
|
+
id_token: { name: :id_token },
|
99
|
+
client_id: { name: :client_id },
|
100
|
+
requested_scopes: { name: :requested_scopes },
|
101
|
+
access_token: { name: :access_token },
|
102
|
+
smart_credentials: { name: :smart_credentials }
|
103
|
+
}
|
104
|
+
}
|
93
105
|
end
|
94
106
|
|
95
107
|
group do
|
@@ -101,40 +113,48 @@ module DaVinciDTRTestKit
|
|
101
113
|
|
102
114
|
)
|
103
115
|
|
116
|
+
input :url,
|
117
|
+
title: 'FHIR Server Base Url',
|
118
|
+
description: 'URL of the target DTR Light EHR'
|
119
|
+
|
104
120
|
group from: :'us_core_v311-us_core_v311_fhir_api',
|
105
|
-
run_as_group: true
|
106
|
-
|
121
|
+
run_as_group: true,
|
122
|
+
verifies_requirements: ['hl7.fhir.us.davinci-dtr_2.0.1@2', 'hl7.fhir.us.davinci-dtr_2.0.1@281']
|
107
123
|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
124
|
+
group do
|
125
|
+
title 'DTR Light EHR Profiles'
|
126
|
+
description %(This test group tests system for their conformance to
|
127
|
+
the RESTful capabilities by specified Resources/Profiles as defined by
|
128
|
+
the DaVinci Documentation Templates and Rules (DTR) v2.0,1 Implementation
|
129
|
+
Guide Light DTR EHR Capability Statement.
|
114
130
|
|
115
|
-
|
131
|
+
)
|
132
|
+
run_as_group
|
116
133
|
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
134
|
+
input :smart_credentials,
|
135
|
+
title: 'OAuth Credentials',
|
136
|
+
type: :oauth_credentials,
|
137
|
+
optional: true
|
121
138
|
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
139
|
+
# All FHIR requests in this suite will use this FHIR client
|
140
|
+
fhir_client do
|
141
|
+
url :url
|
142
|
+
oauth_credentials :smart_credentials
|
143
|
+
end
|
127
144
|
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
145
|
+
group from: :questionnaire_response_group
|
146
|
+
group from: :coverage_group
|
147
|
+
group from: :communication_request_group
|
148
|
+
group from: :device_request_group
|
149
|
+
group from: :encounter_group
|
150
|
+
group from: :medication_request_group
|
151
|
+
group from: :nutrition_order_group
|
152
|
+
group from: :service_request_group
|
153
|
+
group from: :task_group
|
154
|
+
group from: :vision_prescription_group
|
155
|
+
end
|
138
156
|
end
|
157
|
+
|
158
|
+
group from: :dtr_light_ehr_supported_endpoints
|
139
159
|
end
|
140
160
|
end
|
@@ -1,13 +1,51 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require_relative 'cql_test'
|
3
2
|
module DaVinciDTRTestKit
|
4
3
|
module DTRQuestionnaireResponseValidation
|
4
|
+
include DaVinciDTRTestKit::CQLTest
|
5
|
+
|
5
6
|
CQL_EXPRESSION_EXTENSIONS = [
|
6
7
|
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression',
|
7
8
|
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-calculatedExpression',
|
8
9
|
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-candidateExpression'
|
9
10
|
].freeze
|
10
11
|
|
12
|
+
def validate_questionnaire_response_correctness(questionnaire_response_json, custom_response = nil)
|
13
|
+
check_is_questionnaire_response(questionnaire_response_json)
|
14
|
+
qr = FHIR.from_contents(questionnaire_response_json)
|
15
|
+
questionnaire = nil
|
16
|
+
expected_overrides = []
|
17
|
+
if custom_response.blank?
|
18
|
+
questionnaire = Fixtures.questionnaire_for_test(id)
|
19
|
+
expected_overrides = ['PBD.2']
|
20
|
+
else
|
21
|
+
assert_valid_json custom_response, 'Custom response provided is not a valid JSON'
|
22
|
+
|
23
|
+
# Find the questionnaire that is referenced in the QuestionnaireResponse
|
24
|
+
questionnaire = extract_questionnaire_from_questionnaire_package(
|
25
|
+
custom_response, qr.questionnaire
|
26
|
+
)
|
27
|
+
|
28
|
+
skip_if questionnaire.blank?,
|
29
|
+
"Couldn't find Questionnaire #{qr.questionnaire} in the provided custom questionnaire package
|
30
|
+
to validate the QuestionnaireResponse."
|
31
|
+
|
32
|
+
missing_origin_sources = ['auto', 'manual', 'override'] - extract_origin_sources(qr.item)
|
33
|
+
unless missing_origin_sources.empty?
|
34
|
+
add_message(
|
35
|
+
'error',
|
36
|
+
'All origin sources (auto, manual, override) must be present in the QuestionnaireResponse. ' \
|
37
|
+
"Missing #{missing_origin_sources.to_sentence}"
|
38
|
+
)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
check_origin_sources(questionnaire.item, qr.item, expected_overrides:)
|
43
|
+
|
44
|
+
required_link_ids = extract_required_link_ids(questionnaire.item)
|
45
|
+
check_answer_presence(qr.item, required_link_ids)
|
46
|
+
assert(messages.none? { |m| m[:type] == 'error' }, 'QuestionnaireResponse is not correct, see error message(s)')
|
47
|
+
end
|
48
|
+
|
11
49
|
def check_is_questionnaire_response(questionnaire_response_json)
|
12
50
|
assert_valid_json(questionnaire_response_json)
|
13
51
|
questionnaire_response = begin
|
@@ -55,6 +93,15 @@ module DaVinciDTRTestKit
|
|
55
93
|
end
|
56
94
|
end
|
57
95
|
|
96
|
+
def extract_origin_sources(items, origin_sources = [])
|
97
|
+
items&.each do |item|
|
98
|
+
extract_origin_sources(item&.item, origin_sources)
|
99
|
+
origin_sources << find_origin_source(item) if item&.answer&.any?
|
100
|
+
end
|
101
|
+
|
102
|
+
origin_sources
|
103
|
+
end
|
104
|
+
|
58
105
|
# Ensures that all required questions have been answered.
|
59
106
|
# If required_link_ids not provided, all questions are treated as optional.
|
60
107
|
def check_answer_presence(response_items, required_link_ids = [])
|
@@ -108,7 +155,6 @@ module DaVinciDTRTestKit
|
|
108
155
|
|
109
156
|
def validate_cql_executed(actual_items, questionnaire_cql_expression_link_ids, template_prepopulation_expectations,
|
110
157
|
template_override_expectations)
|
111
|
-
|
112
158
|
actual_items&.each do |item_to_validate|
|
113
159
|
link_id = item_to_validate.linkId
|
114
160
|
if questionnaire_cql_expression_link_ids.include?(link_id)
|
@@ -225,7 +271,7 @@ module DaVinciDTRTestKit
|
|
225
271
|
end
|
226
272
|
|
227
273
|
def item_is_cql_expression?(item)
|
228
|
-
item
|
274
|
+
item&.extension&.any? { |ext| CQL_EXPRESSION_EXTENSIONS.include?(ext.url) }
|
229
275
|
end
|
230
276
|
|
231
277
|
def answer_value_equal?(expected, actual)
|
@@ -1,7 +1,8 @@
|
|
1
1
|
require_relative 'auth_groups/oauth2_authentication_group'
|
2
|
-
require_relative 'client_groups/
|
3
|
-
require_relative 'client_groups/dinner_static/
|
4
|
-
require_relative 'client_groups/dinner_adaptive/
|
2
|
+
require_relative 'client_groups/respiratory/dtr_smart_app_respiratory_workflow_group'
|
3
|
+
require_relative 'client_groups/dinner_static/dtr_smart_app_static_dinner_workflow_group'
|
4
|
+
require_relative 'client_groups/dinner_adaptive/dtr_smart_app_adaptive_dinner_workflow_group'
|
5
|
+
require_relative 'client_groups/custom_static/dtr_smart_app_custom_static_workflow_group'
|
5
6
|
require_relative 'endpoints/cors'
|
6
7
|
require_relative 'endpoints/mock_authorization'
|
7
8
|
require_relative 'endpoints/mock_authorization/authorize_endpoint'
|
@@ -21,8 +22,6 @@ module DaVinciDTRTestKit
|
|
21
22
|
title 'Da Vinci DTR SMART App Test Suite'
|
22
23
|
description File.read(File.join(__dir__, 'docs', 'dtr_smart_app_suite_description_v201.md'))
|
23
24
|
|
24
|
-
version VERSION
|
25
|
-
|
26
25
|
links [
|
27
26
|
{
|
28
27
|
label: 'Report Issue',
|
@@ -67,7 +66,7 @@ module DaVinciDTRTestKit
|
|
67
66
|
suite_endpoint :post, NEXT_PATH, MockPayer::NextQuestionEndpoint
|
68
67
|
|
69
68
|
# EHR
|
70
|
-
route(:get,
|
69
|
+
route(:get, METADATA_PATH, MockEHR.method(:metadata))
|
71
70
|
suite_endpoint :post, QUESTIONNAIRE_RESPONSE_PATH, MockEHR::QuestionnaireResponseEndpoint
|
72
71
|
suite_endpoint :get, FHIR_RESOURCE_PATH, MockEHR::FHIRGetEndpoint
|
73
72
|
suite_endpoint :get, FHIR_SEARCH_PATH, MockEHR::FHIRGetEndpoint
|
@@ -90,8 +89,8 @@ module DaVinciDTRTestKit
|
|
90
89
|
Tests in this group validate that the client can complete basic DTR workflows
|
91
90
|
)
|
92
91
|
|
93
|
-
group from: :
|
94
|
-
group from: :
|
92
|
+
group from: :dtr_smart_app_custom_static_workflow
|
93
|
+
group from: :dtr_smart_app_adaptive_dinner_workflow
|
95
94
|
end
|
96
95
|
group do
|
97
96
|
id :dtr_smart_app_questionnaire_functionality
|
@@ -100,7 +99,8 @@ module DaVinciDTRTestKit
|
|
100
99
|
Tests in this group validate that the client can complete additional DTR workflows
|
101
100
|
covering additional must support features of questionnaires.
|
102
101
|
)
|
103
|
-
group from: :
|
102
|
+
group from: :dtr_smart_app_resp_workflow
|
103
|
+
group from: :dtr_smart_app_static_dinner_workflow
|
104
104
|
end
|
105
105
|
end
|
106
106
|
end
|
@@ -62,8 +62,8 @@ module DaVinciDTRTestKit
|
|
62
62
|
base_url = env_base_url(env, OPENID_CONFIG_PATH)
|
63
63
|
response_body = {
|
64
64
|
issuer: base_url + FHIR_BASE_PATH,
|
65
|
-
authorization_endpoint: base_url
|
66
|
-
token_endpoint: base_url
|
65
|
+
authorization_endpoint: authorization_endpoint(base_url),
|
66
|
+
token_endpoint: token_endpoint(base_url),
|
67
67
|
jwks_uri: base_url + JKWS_PATH,
|
68
68
|
response_types_supported: ['id_token'],
|
69
69
|
subject_types_supported: ['public'],
|
@@ -79,5 +79,13 @@ module DaVinciDTRTestKit
|
|
79
79
|
path.gsub!(%r{#{endpoint_path}(/)?}, '')
|
80
80
|
"#{protocol}://#{host + path}"
|
81
81
|
end
|
82
|
+
|
83
|
+
def authorization_endpoint(base_url)
|
84
|
+
base_url + EHR_AUTHORIZE_PATH
|
85
|
+
end
|
86
|
+
|
87
|
+
def token_endpoint(base_url)
|
88
|
+
base_url + EHR_TOKEN_PATH
|
89
|
+
end
|
82
90
|
end
|
83
91
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative '../endpoints/mock_authorization'
|
4
|
+
|
3
5
|
module DaVinciDTRTestKit
|
4
6
|
module MockEHR
|
5
7
|
RESOURCE_SERVER_BASE = ENV.fetch('FHIR_REFERENCE_SERVER')
|
@@ -13,9 +15,23 @@ module DaVinciDTRTestKit
|
|
13
15
|
client
|
14
16
|
end
|
15
17
|
|
16
|
-
def metadata(
|
18
|
+
def metadata(env)
|
17
19
|
cs = resource_server_client.capability_statement
|
18
20
|
if cs.present?
|
21
|
+
# Overwrite the OAuth URIs returned by the reference server to point to the suite endpoints instead
|
22
|
+
oauth_uris_url = 'http://fhir-registry.smarthealthit.org/StructureDefinition/oauth-uris'
|
23
|
+
base_url = MockAuthorization.env_base_url(env, METADATA_PATH)
|
24
|
+
sec_ext = cs.rest.first&.security&.extension&.delete_if { |e| e.url == oauth_uris_url }
|
25
|
+
sec_ext&.push(
|
26
|
+
FHIR::Extension.new(
|
27
|
+
url: oauth_uris_url,
|
28
|
+
extension: [
|
29
|
+
FHIR::Extension.new(url: 'authorize', valueUri: MockAuthorization.authorization_endpoint(base_url)),
|
30
|
+
FHIR::Extension.new(url: 'token', valueUri: MockAuthorization.token_endpoint(base_url))
|
31
|
+
]
|
32
|
+
)
|
33
|
+
)
|
34
|
+
|
19
35
|
[200, { 'Content-Type' => 'application/fhir+json', 'Access-Control-Allow-Origin' => '*' }, [cs.to_json]]
|
20
36
|
else
|
21
37
|
[500, { 'Access-Control-Allow-Origin' => '*' }, ['Unexpected error occurred while fetching metadata']]
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require_relative '../../tags'
|
2
|
+
|
3
|
+
module DaVinciDTRTestKit
|
4
|
+
class LightEHRSupportedPayerEndpoint < Inferno::DSL::SuiteEndpoint
|
5
|
+
def name
|
6
|
+
'light_ehr_supported_payer_endpoint'
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_run_identifier
|
10
|
+
request.params[:tester_url_id]
|
11
|
+
end
|
12
|
+
|
13
|
+
def tags
|
14
|
+
[SUPPORTED_PAYER_TAG]
|
15
|
+
end
|
16
|
+
|
17
|
+
def make_response
|
18
|
+
user_response = JSON.parse(result.input_json)&.find { |input| input['name'] == 'user_response' }&.dig('value')
|
19
|
+
|
20
|
+
response.body = if user_response.present?
|
21
|
+
user_response
|
22
|
+
else
|
23
|
+
default_response
|
24
|
+
end
|
25
|
+
response.status = 200
|
26
|
+
response.headers['Content-Type'] = 'application/json'
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def default_response
|
32
|
+
{
|
33
|
+
payers: [
|
34
|
+
{ id: 'payer1', name: 'Payer One' },
|
35
|
+
{ id: 'payer2', name: 'Payer Two' }
|
36
|
+
]
|
37
|
+
}.to_json
|
38
|
+
end
|
39
|
+
|
40
|
+
def update_result
|
41
|
+
results_repo.update_result(result.id, 'pass')
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -19,7 +19,13 @@ module DaVinciDTRTestKit
|
|
19
19
|
response.status = 200
|
20
20
|
response.format = 'application/fhir+json'
|
21
21
|
response.headers['Access-Control-Allow-Origin'] = '*'
|
22
|
-
response.body = build_questionnaire_package_response.to_json
|
22
|
+
response.body = custom_response.presence || build_questionnaire_package_response.to_json
|
23
|
+
end
|
24
|
+
|
25
|
+
def custom_response
|
26
|
+
@custom_response ||= JSON.parse(result.input_json)
|
27
|
+
.find { |input| input['name'].include?('custom_questionnaire_package_response') }
|
28
|
+
&.dig('value')
|
23
29
|
end
|
24
30
|
|
25
31
|
def update_result
|
@@ -8,7 +8,7 @@ module DaVinciDTRTestKit
|
|
8
8
|
FIXTURE_CONFIG = [
|
9
9
|
{
|
10
10
|
group_ids: [
|
11
|
-
'
|
11
|
+
'dtr_smart_app_resp_workflow',
|
12
12
|
'dtr_full_ehr_questionnaire_workflow'
|
13
13
|
],
|
14
14
|
questionnaire_package: File.join('respiratory_assist_device', 'questionnaire_package.json'),
|
@@ -16,23 +16,23 @@ module DaVinciDTRTestKit
|
|
16
16
|
},
|
17
17
|
{
|
18
18
|
group_ids: [
|
19
|
-
'
|
20
|
-
'
|
19
|
+
'dtr_smart_app_static_dinner_workflow',
|
20
|
+
'dtr_full_ehr_static_dinner_workflow'
|
21
21
|
],
|
22
22
|
questionnaire_package: File.join('dinner_static', 'questionnaire_dinner_order_static.json'),
|
23
23
|
questionnaire_response: File.join('dinner_static', 'questionnaire_response_dinner_order_static.json')
|
24
24
|
},
|
25
25
|
{
|
26
26
|
group_ids: [
|
27
|
-
'
|
28
|
-
'
|
27
|
+
'dtr_full_ehr_adaptive_retrieval',
|
28
|
+
'dtr_smart_app_adaptive_retrieval'
|
29
29
|
],
|
30
30
|
questionnaire_package: File.join('dinner_adaptive', 'questionnaire_dinner_order_adaptive.json'),
|
31
31
|
next_question: File.join('dinner_adaptive', 'dinner_order_adaptive_next_question_initial.json')
|
32
32
|
},
|
33
33
|
{
|
34
34
|
group_ids: [
|
35
|
-
'
|
35
|
+
'dtr_adaptive_followup_questions'
|
36
36
|
],
|
37
37
|
next_question: {
|
38
38
|
bean_burrito: File.join('dinner_adaptive', 'dinner_order_adaptive_next_question_burrito.json'),
|
Binary file
|