davinci_dtr_test_kit 0.17.0 → 0.18.0
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/v220_full_ehr_suite_run_against_payer_suite.json.erb +19 -0
- data/config/presets/v220_payer_suite_run_against_full_ehr_suite.json.erb +76 -0
- data/lib/davinci_dtr_test_kit/cross_suite/fhirpath_utils.rb +52 -0
- data/lib/davinci_dtr_test_kit/cross_suite/generated/v2.2.0/dtr_base_questionnaire/metadata.yml +212 -0
- data/lib/davinci_dtr_test_kit/cross_suite/generated/v2.2.0/dtr_q_package_bundle/metadata.yml +39 -0
- data/lib/davinci_dtr_test_kit/cross_suite/generated/v2.2.0/dtr_qpackage_output_parameters/metadata.yml +30 -0
- data/lib/davinci_dtr_test_kit/cross_suite/generated/v2.2.0/dtr_questionnaire_adapt/metadata.yml +17 -0
- data/lib/davinci_dtr_test_kit/cross_suite/generated/v2.2.0/dtr_questionnaire_adapt_search/metadata.yml +91 -0
- data/lib/davinci_dtr_test_kit/cross_suite/generated/v2.2.0/dtr_std_questionnaire/metadata.yml +17 -0
- data/lib/davinci_dtr_test_kit/cross_suite/generated/v2.2.0/metadata.yml +403 -0
- data/lib/davinci_dtr_test_kit/cross_suite/generated_profile_metadata.rb +22 -0
- data/lib/davinci_dtr_test_kit/cross_suite/response_selection_utils.rb +85 -0
- data/lib/davinci_dtr_test_kit/{cql_test.rb → cross_suite/v2.0.1/cql_test.rb} +3 -3
- data/lib/davinci_dtr_test_kit/cross_suite/v2.2.0/dtr_conformance_verification.rb +21 -0
- data/lib/davinci_dtr_test_kit/cross_suite/v2.2.0/multi_request_message_helper.rb +35 -0
- data/lib/davinci_dtr_test_kit/cross_suite/v2.2.0/questionnaire_helper.rb +162 -0
- data/lib/davinci_dtr_test_kit/{dtr_client_options.rb → full_ehr/dtr_full_ehr_options.rb} +1 -1
- data/lib/davinci_dtr_test_kit/{endpoints → full_ehr/endpoints}/mock_payer.rb +9 -3
- data/lib/davinci_dtr_test_kit/{endpoints → full_ehr/endpoints}/mock_udap_smart_server/token_endpoint.rb +2 -2
- data/lib/davinci_dtr_test_kit/full_ehr/fixture_loader.rb +37 -0
- data/lib/davinci_dtr_test_kit/full_ehr/fixtures/dinner_adaptive/dinner_order_adaptive_next_question_template.json +243 -0
- data/lib/davinci_dtr_test_kit/full_ehr/fixtures/dinner_adaptive/parameters_questionnaire_dinner_order_adaptive.json +104 -0
- data/lib/davinci_dtr_test_kit/full_ehr/fixtures/dinner_static/parameters_questionnaire_dinner_order_static.json +291 -0
- data/lib/davinci_dtr_test_kit/full_ehr/fixtures/empty_templates/next_question_template_empty.json +1 -0
- data/lib/davinci_dtr_test_kit/full_ehr/fixtures/empty_templates/parameters_questionnaire_package_empty.json +9 -0
- data/lib/davinci_dtr_test_kit/full_ehr/short_circuit_interaction_verification.rb +73 -0
- data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire/custom → full_ehr/v2.0.1/adaptive_custom}/dtr_custom_next_question_response_validation_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire/custom → full_ehr/v2.0.1/adaptive_custom}/dtr_full_ehr_custom_adaptive_request_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire/dinner_order → full_ehr/v2.0.1/adaptive_dinner}/dtr_adaptive_next_question_retrieval_group.rb +3 -3
- data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire/dinner_order → full_ehr/v2.0.1/adaptive_dinner}/dtr_full_ehr_adaptive_initial_retrieval_group.rb +5 -5
- data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire → full_ehr/v2.0.1/adaptive_interaction}/dtr_adaptive_next_question_request_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire → full_ehr/v2.0.1/adaptive_interaction}/dtr_adaptive_next_question_request_validation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire → full_ehr/v2.0.1/adaptive_interaction}/dtr_adaptive_response_validation_test.rb +2 -2
- data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire/dinner_order → full_ehr/v2.0.1}/dtr_full_ehr_adaptive_dinner_workflow_group.rb +7 -7
- data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire/custom → full_ehr/v2.0.1}/dtr_full_ehr_custom_adaptive_workflow_group.rb +18 -16
- data/lib/davinci_dtr_test_kit/{client_groups/custom_static → full_ehr/v2.0.1}/dtr_full_ehr_custom_static_workflow_group.rb +11 -11
- data/lib/davinci_dtr_test_kit/{client_groups/must_support → full_ehr/v2.0.1}/dtr_full_ehr_questionnaire_must_support_group.rb +8 -7
- data/lib/davinci_dtr_test_kit/{client_groups/dinner_static → full_ehr/v2.0.1}/dtr_full_ehr_static_dinner_workflow_group.rb +7 -7
- data/lib/davinci_dtr_test_kit/{dtr_full_ehr_suite.rb → full_ehr/v2.0.1/dtr_full_ehr_suite.rb} +23 -20
- data/lib/davinci_dtr_test_kit/{client_groups/payer_registration/dtr_client_registration_group.rb → full_ehr/v2.0.1/dtr_payer_registration_group.rb} +8 -8
- data/lib/davinci_dtr_test_kit/{endpoints/mock_payer/next_question_endpoint.rb → full_ehr/v2.0.1/full_ehr_next_question_endpoint.rb} +18 -7
- data/lib/davinci_dtr_test_kit/{endpoints/mock_payer/questionnaire_package_endpoint.rb → full_ehr/v2.0.1/full_ehr_questionnaire_package_endpoint.rb} +22 -7
- data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/must_support/dtr_full_ehr_ms_questionnaire_package_request_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/must_support/dtr_must_support_attestation_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/must_support/dtr_questionnaire_must_support_test.rb +3 -2
- data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/payer_registration/configuration_display_smart_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/payer_registration/configuration_display_udap_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_custom_questionnaire_expressions_test.rb +3 -2
- data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_custom_questionnaire_extensions_test.rb +3 -2
- data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_custom_questionnaire_libraries_test.rb +3 -2
- data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_custom_questionnaire_package_validation_test.rb +3 -2
- data/lib/davinci_dtr_test_kit/{client_groups/full_ehr → full_ehr/v2.0.1/shared}/dtr_full_ehr_adaptive_request_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/full_ehr → full_ehr/v2.0.1/shared}/dtr_full_ehr_launch_attestation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/full_ehr → full_ehr/v2.0.1/shared}/dtr_full_ehr_prepopulation_attestation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/full_ehr → full_ehr/v2.0.1/shared}/dtr_full_ehr_prepopulation_override_attestation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/full_ehr → full_ehr/v2.0.1/shared}/dtr_full_ehr_questionnaire_package_request_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/full_ehr → full_ehr/v2.0.1/shared}/dtr_full_ehr_questionnaire_response_conformance_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/full_ehr → full_ehr/v2.0.1/shared}/dtr_full_ehr_questionnaire_response_correctness_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/full_ehr → full_ehr/v2.0.1/shared}/dtr_full_ehr_store_attestation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_prepopulation_attestation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_prepopulation_override_attestation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_questionnaire_package_request_validation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_questionnaire_response_basic_conformance_test.rb +2 -2
- data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_questionnaire_response_prepopulation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_rendering_attestation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/dinner_static → full_ehr/v2.0.1/static_dinner}/dtr_static_dinner_enabled_questions_attestation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/dtr_full_ehr_abstract_adaptive_group.rb +87 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/dtr_full_ehr_abstract_standard_group.rb +59 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/dtr_full_ehr_suite.rb +145 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/dtr_full_ehr_suite_description_v220.md +254 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/full_ehr_next_question_endpoint.rb +391 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/full_ehr_questionnaire_package_endpoint.rb +206 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/interaction/adaptive_questionnaires_completed_test.rb +108 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/interaction/interaction_wait_test.rb +177 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/interaction/ui_display_and_interaction_attestation_test.rb +132 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/must_support/dtr_additional_questionnaires_interaction_group.rb +74 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/must_support/dtr_questionnaire_adaptive_must_support_test.rb +45 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/must_support/dtr_questionnaire_base_must_support_test.rb +43 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/must_support/dtr_questionnaire_standard_must_support_test.rb +45 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/next_question_template_questionnaires.rb +21 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/request/dtr_next_question_request_validation_test.rb +85 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/request/dtr_questionnaire_package_request_validation_test.rb +89 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/response/dtr_next_question_response_validation_test.rb +85 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/response/dtr_questionnaire_package_response_validation_test.rb +77 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/workflows/dtr_full_ehr_workflow_adaptive_group.rb +24 -0
- data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/workflows/dtr_full_ehr_workflow_standard_group.rb +21 -0
- data/lib/davinci_dtr_test_kit/generator/ig_metadata.rb +21 -0
- data/lib/davinci_dtr_test_kit/generator/profile_metadata_extractor.rb +57 -0
- data/lib/davinci_dtr_test_kit/generator.rb +117 -0
- data/lib/davinci_dtr_test_kit/igs/davinci_dtr_2.2.0.tgz +0 -0
- data/lib/davinci_dtr_test_kit/{dtr_options.rb → light_ehr/dtr_light_ehr_options.rb} +1 -1
- data/lib/davinci_dtr_test_kit/{dtr_light_ehr_suite.rb → light_ehr/v2.0.1/dtr_light_ehr_suite.rb} +21 -10
- data/lib/davinci_dtr_test_kit/{client_groups/light_ehr → light_ehr/v2.0.1}/dtr_light_ehr_supported_endpoints_group.rb +5 -5
- data/lib/davinci_dtr_test_kit/{client_groups/light_ehr → light_ehr/v2.0.1}/dtr_smart_ehr_launch.rb +3 -3
- data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/communication_request/communication_request_read.rb +1 -1
- data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/coverage/coverage_read.rb +1 -1
- data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/device_request/device_request_read.rb +1 -1
- data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/encounter/encounter_read.rb +1 -1
- data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/medication_request/medication_request_read.rb +1 -1
- data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/nutrition_order/nutrition_order_read.rb +1 -1
- data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_create.rb +1 -1
- data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_update.rb +1 -1
- data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/service_request/service_request_read.rb +1 -1
- data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task/task_create.rb +1 -1
- data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task/task_read.rb +1 -1
- data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task/task_update.rb +1 -1
- data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/vision_prescription/vision_prescription_read.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/light_ehr → light_ehr/v2.0.1/supported_endpoints}/dtr_light_ehr_supported_payers_accept_header_test.rb +3 -2
- data/lib/davinci_dtr_test_kit/{client_groups/light_ehr → light_ehr/v2.0.1/supported_endpoints}/dtr_light_ehr_supported_payers_config_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/{client_groups/light_ehr → light_ehr/v2.0.1/supported_endpoints}/dtr_light_ehr_supported_payers_endpoint_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/{client_groups/light_ehr → light_ehr/v2.0.1/supported_endpoints}/dtr_light_ehr_supported_payers_use_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/{client_groups/light_ehr → light_ehr/v2.0.1/supported_endpoints}/dtr_light_ehr_supported_payers_user_response_test.rb +5 -3
- data/lib/davinci_dtr_test_kit/metadata.rb +13 -68
- data/lib/davinci_dtr_test_kit/requirements/davinci_dtr_test_kit_requirements.csv +216 -0
- data/lib/davinci_dtr_test_kit/requirements/generated/dtr_full_ehr_requirements_coverage.csv +1 -1
- data/lib/davinci_dtr_test_kit/requirements/generated/dtr_full_ehr_v220_requirements_coverage.csv +1 -0
- data/lib/davinci_dtr_test_kit/requirements/generated/dtr_light_ehr_requirements_coverage.csv +1 -1
- data/lib/davinci_dtr_test_kit/requirements/generated/dtr_payer_server_requirements_coverage.csv +1 -1
- data/lib/davinci_dtr_test_kit/requirements/generated/dtr_payer_server_v220_requirements_coverage.csv +114 -0
- data/lib/davinci_dtr_test_kit/requirements/generated/dtr_smart_app_requirements_coverage.csv +1 -1
- data/lib/davinci_dtr_test_kit/requirements/hl7.fhir.us.davinci-dtr_2.2.0_requirements.xlsx +0 -0
- data/lib/davinci_dtr_test_kit/{endpoints/mock_payer → server/endpoints}/next_question_proxy_endpoint.rb +2 -0
- data/lib/davinci_dtr_test_kit/{endpoints/mock_payer → server/endpoints}/questionnaire_package_proxy_endpoint.rb +2 -0
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/adaptive_form_libraries_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/adaptive_form_questionnaire_expressions_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/adaptive_form_questionnaire_extensions_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/adaptive_next_questionnaire_expressions_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/adaptive_next_questionnaire_extensions_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_adaptive_request_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_adaptive_request_validation_test.rb +3 -1
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_adaptive_response_bundles_validation_test.rb +3 -1
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_adaptive_response_search_validation_test.rb +3 -1
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_adaptive_response_validation_test.rb +4 -2
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_next_request_validation_test.rb +3 -1
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_next_response_validation_test.rb +3 -1
- data/lib/davinci_dtr_test_kit/{dtr_payer_server_suite.rb → server/v2.0.1/dtr_payer_server_suite.rb} +13 -10
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1}/payer_server_adaptive_group.rb +13 -13
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1}/payer_server_static_group.rb +6 -6
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/static_forms}/static_form_libraries_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/static_forms}/static_form_questionnaire_expressions_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/static_forms}/static_form_questionnaire_extensions_test.rb +2 -1
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/static_forms}/static_form_request_test.rb +4 -2
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/static_forms}/static_form_request_validation_test.rb +3 -2
- data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/static_forms}/static_form_response_validation_test.rb +5 -3
- data/lib/davinci_dtr_test_kit/server/v2.2.0/client_simulation.rb +297 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/dtr_payer_server_capability_statement_test.rb +73 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/dtr_payer_server_suite.rb +322 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/dtr_payer_server_suite_description_v220.md +37 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/interaction_test.rb +97 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/log_questionnaire_errors_support_test.rb +57 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_adaptive_must_support_test.rb +47 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_adaptive_search_must_support_test.rb +40 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_base_must_support_test.rb +40 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_package_bundle_must_support_test.rb +38 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_package_output_parameters_must_support_test.rb +37 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_standard_must_support_test.rb +39 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/next_question_request_validation_test.rb +45 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/next_question_support/adaptive_questionnaire_endpoint_test.rb +98 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/next_question_support/invalid_questionnaire_response_test.rb +43 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/next_question_support/next_contained_questionnaire_response_references_test.rb +46 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/next_question_support/next_question_response_references_test.rb +56 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/next_question_support/next_question_response_validation_test.rb +67 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/contained_binary_test.rb +58 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/contained_binary_validation.rb +128 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/cql_library_validation_test.rb +58 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/questionnaire_design_support.rb +65 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/questionnaire_expression_elm_test.rb +81 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/questionnaire_expression_language_test.rb +63 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/questionnaire_prepopulation_test.rb +42 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/questionnaire_relevance_logic_test.rb +40 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_operation_validation.rb +440 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_request_validation_test.rb +42 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/adaptive_questionnaire_response_contained_questionnaire_test.rb +127 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/adaptive_questionnaire_response_validation_test.rb +61 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/contained_questionnaire_response_references_test.rb +42 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/dtr_server_no_custom_extension_test.rb +184 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/dtr_server_questionnaire_not_found_test.rb +76 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/dtr_server_questionnaire_package_contents_test.rb +89 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/initial_questionnaire_response_test.rb +132 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/questionnaire_package_input_type_test.rb +110 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/questionnaire_references_version_specific_test.rb +79 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/questionnaire_response_questionnaire_canonical_test.rb +89 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/questionnaire_response_references_test.rb +51 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/questionnaire_response_validation_test.rb +63 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/source_data_error_test.rb +43 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/value_set_validation_test.rb +90 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_response_reference_validation.rb +133 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/value_set_expand_support/small_value_set_expansion_test.rb +120 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/value_set_expand_support/value_set_expansion_test.rb +51 -0
- data/lib/davinci_dtr_test_kit/server/v2.2.0/value_set_expand_support/value_set_expansion_validation.rb +58 -0
- data/lib/davinci_dtr_test_kit/{endpoints → smart_app/endpoints}/mock_authorization/token_endpoint.rb +1 -1
- data/lib/davinci_dtr_test_kit/{endpoints → smart_app/endpoints}/mock_ehr/fhir_get_endpoint.rb +1 -1
- data/lib/davinci_dtr_test_kit/smart_app/endpoints/mock_payer/smart_app_next_question_endpoint.rb +12 -0
- data/lib/davinci_dtr_test_kit/smart_app/endpoints/mock_payer/smart_app_questionnaire_package_endpoint.rb +12 -0
- data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire/custom → smart_app/v2.0.1/adaptive_custom}/dtr_smart_app_custom_adaptive_workflow_group.rb +17 -15
- data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire/dinner_order → smart_app/v2.0.1/adaptive_dinner}/dtr_smart_app_adaptive_dinner_workflow_group.rb +5 -5
- data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire/dinner_order → smart_app/v2.0.1/adaptive_dinner}/dtr_smart_app_adaptive_initial_retrieval_group.rb +4 -4
- data/lib/davinci_dtr_test_kit/{auth_groups → smart_app/v2.0.1/auth}/token_request_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/custom_static → smart_app/v2.0.1}/dtr_smart_app_custom_static_workflow_group.rb +11 -11
- data/lib/davinci_dtr_test_kit/{client_groups/must_support → smart_app/v2.0.1}/dtr_smart_app_questionnaire_must_support_group.rb +8 -7
- data/lib/davinci_dtr_test_kit/{client_groups/respiratory → smart_app/v2.0.1}/dtr_smart_app_respiratory_workflow_group.rb +3 -3
- data/lib/davinci_dtr_test_kit/{client_groups/dinner_static → smart_app/v2.0.1}/dtr_smart_app_static_dinner_workflow_group.rb +7 -7
- data/lib/davinci_dtr_test_kit/{dtr_smart_app_suite.rb → smart_app/v2.0.1/dtr_smart_app_suite.rb} +25 -21
- data/lib/davinci_dtr_test_kit/{docs → smart_app/v2.0.1}/dtr_smart_app_suite_description_v201.md +8 -0
- data/lib/davinci_dtr_test_kit/{client_groups → smart_app/v2.0.1}/must_support/dtr_smart_app_ms_questionnaire_package_request_test.rb +2 -2
- data/lib/davinci_dtr_test_kit/{auth_groups → smart_app/v2.0.1}/oauth2_authentication_group.rb +2 -2
- data/lib/davinci_dtr_test_kit/{client_groups/respiratory → smart_app/v2.0.1/static_respiratory}/dtr_respiratory_questionnaire_package_group.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/respiratory → smart_app/v2.0.1/static_respiratory}/dtr_respiratory_questionnaire_package_request_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/respiratory → smart_app/v2.0.1/static_respiratory}/dtr_respiratory_questionnaire_response_group.rb +2 -2
- data/lib/davinci_dtr_test_kit/{client_groups/respiratory → smart_app/v2.0.1/static_respiratory}/dtr_respiratory_questionnaire_response_save_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/respiratory → smart_app/v2.0.1/static_respiratory}/dtr_respiratory_rendering_attestation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/smart_app → smart_app/v2.0.1/tests}/dtr_smart_app_adaptive_request_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/smart_app → smart_app/v2.0.1/tests}/dtr_smart_app_prepopulation_attestation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/smart_app → smart_app/v2.0.1/tests}/dtr_smart_app_prepopulation_override_attestation_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/smart_app → smart_app/v2.0.1/tests}/dtr_smart_app_questionnaire_package_request_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/smart_app → smart_app/v2.0.1/tests}/dtr_smart_app_questionnaire_response_correctness_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/smart_app → smart_app/v2.0.1/tests}/dtr_smart_app_questionnaire_response_save_test.rb +1 -1
- data/lib/davinci_dtr_test_kit/{client_groups/smart_app → smart_app/v2.0.1/tests}/dtr_smart_app_saving_questionnaire_response_group.rb +1 -1
- data/lib/davinci_dtr_test_kit/tags.rb +2 -0
- data/lib/davinci_dtr_test_kit/version.rb +2 -2
- data/lib/davinci_dtr_test_kit.rb +6 -4
- metadata +329 -215
- data/lib/davinci_dtr_test_kit/certs/InfernoCA.key +0 -52
- data/lib/davinci_dtr_test_kit/certs/InfernoCA.pem +0 -35
- data/lib/davinci_dtr_test_kit/certs/TestKit.pem +0 -32
- data/lib/davinci_dtr_test_kit/certs/TestKitPrivateKey.key +0 -28
- data/lib/davinci_dtr_test_kit/endpoints/mock_payer/full_ehr_next_question_endpoint.rb +0 -30
- data/lib/davinci_dtr_test_kit/endpoints/mock_payer/full_ehr_questionnaire_package_endpoint.rb +0 -31
- data/lib/davinci_dtr_test_kit/fixture_loader.rb +0 -21
- /data/lib/davinci_dtr_test_kit/{endpoints → cross_suite}/cors.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{dtr_questionnaire_response_validation.rb → cross_suite/v2.0.1/dtr_questionnaire_response_validation.rb} +0 -0
- /data/lib/davinci_dtr_test_kit/{descriptions.rb → full_ehr/descriptions.rb} +0 -0
- /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/dinner_adaptive/dinner_order_adaptive_next_question_burrito.json +0 -0
- /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/dinner_adaptive/dinner_order_adaptive_next_question_hamburger.json +0 -0
- /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/dinner_adaptive/dinner_order_adaptive_next_question_initial.json +0 -0
- /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/dinner_adaptive/questionnaire_dinner_order_adaptive.json +0 -0
- /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/dinner_static/questionnaire_dinner_order_static.json +0 -0
- /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/dinner_static/questionnaire_response_dinner_order_static.json +0 -0
- /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/respiratory_assist_device/pre_populated_questionnaire_response.json +0 -0
- /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/respiratory_assist_device/questionnaire_package.json +0 -0
- /data/lib/davinci_dtr_test_kit/{fixtures.rb → full_ehr/fixtures.rb} +0 -0
- /data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire/dinner_order → full_ehr/v2.0.1/adaptive_dinner}/dtr_adaptive_completion_group.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire/dinner_order → full_ehr/v2.0.1/adaptive_dinner}/dtr_adaptive_followup_questions_group.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{client_groups/auth → full_ehr/v2.0.1}/dtr_client_payer_auth_smart_group.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{client_groups/auth → full_ehr/v2.0.1}/dtr_client_payer_auth_udap_group.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{docs → full_ehr/v2.0.1}/dtr_full_ehr_suite_description_v201.md +0 -0
- /data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/must_support/questionnaire_must_support_elements.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{client_groups/full_ehr → full_ehr/v2.0.1/shared}/dtr_full_ehr_saving_questionnaire_response_group.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{create_test.rb → light_ehr/create_test.rb} +0 -0
- /data/lib/davinci_dtr_test_kit/{endpoints/mock_payer → light_ehr/endpoints}/light_ehr_supported_payer_endpoint.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{read_test.rb → light_ehr/read_test.rb} +0 -0
- /data/lib/davinci_dtr_test_kit/{update_test.rb → light_ehr/update_test.rb} +0 -0
- /data/lib/davinci_dtr_test_kit/{docs → light_ehr/v2.0.1}/dtr_light_ehr_suite_description_v201.md +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/communication_request/communication_request_must_support_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/communication_request/communication_request_validation.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/communication_request/metadata.yml +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/communication_request_group.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/coverage/coverage_must_support_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/coverage/coverage_validation.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/coverage/metadata.yml +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/coverage_group.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/device_request/device_request_must_support_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/device_request/device_request_validation.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/device_request/metadata.yml +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/device_request_group.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/encounter/encounter_must_support_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/encounter/encounter_validation.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/encounter/metadata.yml +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/encounter_group.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/medication_request/medication_request_must_support_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/medication_request/medication_request_validation.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/medication_request/metadata.yml +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/medication_request_group.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/nutrition_order/metadata.yml +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/nutrition_order/nutrition_order_must_support_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/nutrition_order/nutrition_order_validation.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/nutrition_order_group.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/metadata.yml +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_context_search.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_must_support_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_patient_search.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_read.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_validation.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response_group.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/service_request/metadata.yml +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/service_request/service_request_must_support_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/service_request/service_request_validation.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/service_request_group.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task/metadata.yml +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task/task_must_support_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task/task_validation.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task_group.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/vision_prescription/metadata.yml +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/vision_prescription/vision_prescription_must_support_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/vision_prescription/vision_prescription_validation.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/vision_prescription_group.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{client_groups/light_ehr → light_ehr/v2.0.1/smart_ehr_launch}/fhir_context_coverage_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{client_groups/light_ehr → light_ehr/v2.0.1/smart_ehr_launch}/fhir_context_references_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{client_groups/light_ehr → light_ehr/v2.0.1/smart_ehr_launch}/fhir_launch_context_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{endpoints/mock_authorization → server/endpoints}/simple_token_endpoint.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_next_response_complete_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{docs → server/v2.0.1}/dtr_payer_server_suite_description_v201.md +0 -0
- /data/lib/davinci_dtr_test_kit/{validation_test.rb → server/validation_test.rb} +0 -0
- /data/lib/davinci_dtr_test_kit/{endpoints → smart_app/endpoints}/mock_authorization/authorize_endpoint.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{endpoints → smart_app/endpoints}/mock_authorization.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{endpoints → smart_app/endpoints}/mock_ehr/questionnaire_response_endpoint.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{endpoints → smart_app/endpoints}/mock_ehr.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{client_groups/adaptive_questionnaire/custom → smart_app/v2.0.1/adaptive_custom}/dtr_smart_app_custom_adaptive_request_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{auth_groups → smart_app/v2.0.1/auth}/token_validation_test.rb +0 -0
- /data/lib/davinci_dtr_test_kit/{client_groups/respiratory → smart_app/v2.0.1/static_respiratory}/dtr_respiratory_rendering_group.rb +0 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
The Da Vinci DTR Test Kit Payer Server Suite validates the conformance of payer
|
|
2
|
+
server systems to the STU 2.2.0 version of the HL7® FHIR® [Da Vinci
|
|
3
|
+
Documentation Templates and Rules (DTR) Implementation
|
|
4
|
+
Guide](https://hl7.org/fhir/us/davinci-dtr/2.2.0/).
|
|
5
|
+
|
|
6
|
+
These tests are a **DRAFT** intended to allow payer implementers to perform
|
|
7
|
+
preliminary checks of their systems against DTR IG requirements and [provide
|
|
8
|
+
feedback](https://github.com/inferno-framework/davinci-dtr-test-kit/issues)
|
|
9
|
+
on the tests. Future versions of these tests may validate other
|
|
10
|
+
requirements and may change the test validation logic.
|
|
11
|
+
|
|
12
|
+
The best place to get started is the [Server Testing
|
|
13
|
+
Instructions](https://github.com/inferno-framework/davinci-dtr-test-kit/wiki/Server-Instructions-v2.2.0),
|
|
14
|
+
which provides a step-by-step guide for running the tests. Visit the [Server
|
|
15
|
+
Testing
|
|
16
|
+
Details](https://github.com/inferno-framework/davinci-dtr-test-kit/wiki/Server-Details)
|
|
17
|
+
documentation for information about technical implementation and known
|
|
18
|
+
limitations of these tests.
|
|
19
|
+
|
|
20
|
+
Inferno will simulate a DTR client and make a series of requests to the system
|
|
21
|
+
under test. Because the business logic that determines Questionnaire design and
|
|
22
|
+
which Questionnaires will be returned is outside of the scope of the DTR
|
|
23
|
+
specification and will vary between implementers, testers are required to
|
|
24
|
+
provide the requests that Inferno will make to the server. These requests must
|
|
25
|
+
cause the server to return Questionnaires which demonstrate support for DTR
|
|
26
|
+
requirements, including
|
|
27
|
+
- Advertising support for DTR operations in the CapabilityStatement
|
|
28
|
+
- Support for SMART backend services authorization
|
|
29
|
+
- Responding to the `$questionnaire-package`, `$next-question` (optional),
|
|
30
|
+
`ValueSet/$expand`, and `$log-questionnaire-errors` operations
|
|
31
|
+
- Populating all Must Support elements in the responses
|
|
32
|
+
- Correctly handling errors
|
|
33
|
+
|
|
34
|
+
All requests and responses will be checked for conformance to the DTR IG
|
|
35
|
+
requirements individually and used in aggregate to determine whether required
|
|
36
|
+
features and functionality are present. HL7® FHIR® resources are validated with
|
|
37
|
+
the Java validator using tx.fhir.org as the terminology server.
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
require_relative 'client_simulation'
|
|
2
|
+
|
|
3
|
+
module DaVinciDTRTestKit
|
|
4
|
+
module DTRPayerServerV220
|
|
5
|
+
class InteractionTest < Inferno::Test
|
|
6
|
+
include ClientSimulation
|
|
7
|
+
|
|
8
|
+
id :dtr_v220_payer_interaction
|
|
9
|
+
title 'Request Questionnaires'
|
|
10
|
+
description %(
|
|
11
|
+
During this test, Inferno will simulate a DTR Client and make requests against
|
|
12
|
+
the payer endpoint to retrieve and complete questionnaires, including
|
|
13
|
+
- the `Questionnaire/$questionnaire-package` operation
|
|
14
|
+
- the `Questionnaire/$next-question` operation
|
|
15
|
+
- the `ValueSet/$expand` operation
|
|
16
|
+
|
|
17
|
+
The tester will provide the details of the requests for Inferno to use, including
|
|
18
|
+
- A list of `$questionnaire-package` request parameters: Inferno will invoke the
|
|
19
|
+
`$questionnaire-package` once per provided request body. Inferno will look
|
|
20
|
+
for the following entries withing package bundles for follow-up requests:
|
|
21
|
+
- Unexpanded ValueSets: Inferno will issue a `ValueSet/$expand` request for each.
|
|
22
|
+
- Adaptive Questionnaires: Inferno will attempt to complete the form using the
|
|
23
|
+
`Questionnaire/$next-question` operation using answers from tester-provided
|
|
24
|
+
QuestionnaireResponse templates.
|
|
25
|
+
- A list of QuestionnaireResponse templates: When an adaptive form is returned in
|
|
26
|
+
a `$questionnaire-package` response, Inferno will find a matching template from
|
|
27
|
+
this list based on the Questionnaire and use the answers to construct a sequence
|
|
28
|
+
of `$next-question` calls.
|
|
29
|
+
|
|
30
|
+
Requests made during this test are tagged for analysis in subsequent tests.
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
input :url,
|
|
34
|
+
title: 'Payer FHIR Server Base Url',
|
|
35
|
+
description: 'Base FHIR URL implementing the DTR server operations.'
|
|
36
|
+
input :questionnaire_package_request_parameters,
|
|
37
|
+
title: '$questionnaire-package Request Parameters',
|
|
38
|
+
description: %(
|
|
39
|
+
Tester-provided list of one or more $questionnaire-package requests each
|
|
40
|
+
as a Parameters resource in json format. Inferno will call the
|
|
41
|
+
`Questionnaire/$questionnaire-package` operation once for each
|
|
42
|
+
with the request as the body of the invocation.
|
|
43
|
+
),
|
|
44
|
+
type: 'textarea'
|
|
45
|
+
input :questionnaire_response_templates,
|
|
46
|
+
title: 'QuestionnaireResponse Templates for $next-question requests',
|
|
47
|
+
description: %(
|
|
48
|
+
Tester-provided list of one or more QuestionnaireResponse resources in json format
|
|
49
|
+
that Inferno will use to populate answers for adaptive forms for the purpose
|
|
50
|
+
of building `Questionnaire/$next-question` requests to complete these forms.
|
|
51
|
+
If not provided, no `$next-question` requests will be performed.
|
|
52
|
+
),
|
|
53
|
+
type: 'textarea',
|
|
54
|
+
optional: true
|
|
55
|
+
input :backend_services_smart_auth_info
|
|
56
|
+
|
|
57
|
+
run do
|
|
58
|
+
parameters = extract_fhir_parameters(questionnaire_package_request_parameters)
|
|
59
|
+
templates = extract_fhir_questionnaire_response_templates(questionnaire_response_templates)
|
|
60
|
+
parameters.each { |parameter| questionnaire_interaction(url, parameter, templates) }
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def extract_fhir_parameters(questionnaire_package_request_parameters)
|
|
64
|
+
parameters_list = Array.wrap(parsed_json_if_valid(questionnaire_package_request_parameters,
|
|
65
|
+
'Provided well-formed $questionnaire-package bodies.',
|
|
66
|
+
continue: false))
|
|
67
|
+
parameters_list.map.with_index do |entry, index|
|
|
68
|
+
if entry['resourceType'] == 'Parameters'
|
|
69
|
+
FHIR::Parameters.new(entry)
|
|
70
|
+
else
|
|
71
|
+
add_message('warning', "skipping **$questionnaire-package Parameters** input entry #{index + 1}: " \
|
|
72
|
+
'not a FHIR Parameters resource')
|
|
73
|
+
nil
|
|
74
|
+
end
|
|
75
|
+
end.compact
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def extract_fhir_questionnaire_response_templates(questionnaire_response_templates)
|
|
79
|
+
return nil unless questionnaire_response_templates.present?
|
|
80
|
+
|
|
81
|
+
questionnaire_response_list =
|
|
82
|
+
Array.wrap(parsed_json_if_valid(questionnaire_response_templates,
|
|
83
|
+
'Provided well-formed QuestionnaireResponse templates.',
|
|
84
|
+
continue: false))
|
|
85
|
+
questionnaire_response_list.map.with_index do |entry, index|
|
|
86
|
+
if entry['resourceType'] == 'QuestionnaireResponse'
|
|
87
|
+
FHIR::QuestionnaireResponse.new(entry)
|
|
88
|
+
else
|
|
89
|
+
add_message('warning', 'skipping **QuestionnaireResponse Templates for $next-question requests** ' \
|
|
90
|
+
"input entry #{index + 1}: not a FHIR QuestionnaireResponse resource")
|
|
91
|
+
nil
|
|
92
|
+
end
|
|
93
|
+
end.compact
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
module DaVinciDTRTestKit
|
|
2
|
+
module DTRPayerServerV220
|
|
3
|
+
class LogQuestionnaireErrorsSupportTest < Inferno::Test
|
|
4
|
+
id :dtr_v220_payer_log_questionnaire_errors_support
|
|
5
|
+
title 'Verify $log-questionnaire-errors operation support'
|
|
6
|
+
description %(
|
|
7
|
+
This test verifies that the payer supports the
|
|
8
|
+
[`Questionnaire/$log-questionnaire-errors` operation](https://hl7.org/fhir/us/davinci-dtr/2.2.0/en/OperationDefinition-log-questionnaire-errors.html).
|
|
9
|
+
|
|
10
|
+
Inferno submits a representative, non-PHI error report containing a
|
|
11
|
+
Questionnaire canonical and an OperationOutcome. The payer must respond
|
|
12
|
+
with a successful HTTP response.
|
|
13
|
+
)
|
|
14
|
+
verifies_requirements 'hl7.fhir.us.davinci-dtr_2.2.0@oper-1'
|
|
15
|
+
|
|
16
|
+
input :url
|
|
17
|
+
input :questionnaire_canonical,
|
|
18
|
+
title: 'Questionnaire Canonical URL',
|
|
19
|
+
description: 'Canonical URL of a Questionnaire supported by the payer.'
|
|
20
|
+
|
|
21
|
+
def log_questionnaire_errors_parameters
|
|
22
|
+
FHIR::Parameters.new(
|
|
23
|
+
parameter: [
|
|
24
|
+
FHIR::Parameters::Parameter.new(
|
|
25
|
+
name: 'questionnaire',
|
|
26
|
+
valueCanonical: questionnaire_canonical
|
|
27
|
+
),
|
|
28
|
+
FHIR::Parameters::Parameter.new(
|
|
29
|
+
name: 'operationOutcome',
|
|
30
|
+
resource: FHIR::OperationOutcome.new(
|
|
31
|
+
issue: [
|
|
32
|
+
FHIR::OperationOutcome::Issue.new(
|
|
33
|
+
severity: 'error',
|
|
34
|
+
code: 'processing',
|
|
35
|
+
diagnostics: 'Unable to evaluate a Questionnaire expression.'
|
|
36
|
+
)
|
|
37
|
+
]
|
|
38
|
+
)
|
|
39
|
+
)
|
|
40
|
+
]
|
|
41
|
+
)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
run do
|
|
45
|
+
fhir_operation(
|
|
46
|
+
"#{url.chomp('/')}/Questionnaire/$log-questionnaire-errors",
|
|
47
|
+
body: log_questionnaire_errors_parameters,
|
|
48
|
+
headers: { 'Content-Type': 'application/fhir+json' }
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
status = request.status.to_s
|
|
52
|
+
assert status.start_with?('2'),
|
|
53
|
+
"Expected a successful 2xx response to $log-questionnaire-errors, but received HTTP #{status}."
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_adaptive_must_support_test.rb
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require_relative '../../../cross_suite/generated_profile_metadata'
|
|
2
|
+
require_relative '../../../cross_suite/v2.2.0/questionnaire_helper'
|
|
3
|
+
require_relative '../../../tags'
|
|
4
|
+
|
|
5
|
+
module DaVinciDTRTestKit
|
|
6
|
+
module DTRPayerServerV220
|
|
7
|
+
class QuestionnaireAdaptiveMustSupportTest < Inferno::Test
|
|
8
|
+
include QuestionnaireHelper
|
|
9
|
+
|
|
10
|
+
MUST_SUPPORT_METADATA = GeneratedProfileMetadata.for('v2.2.0', 'dtr_questionnaire_adapt')
|
|
11
|
+
|
|
12
|
+
id :dtr_v220_payer_questionnaire_adaptive_must_support
|
|
13
|
+
title 'Server provides adaptive Questionnaire must support elements and extensions'
|
|
14
|
+
description %(
|
|
15
|
+
This test confirms that all must support elements added in the
|
|
16
|
+
[DTR Questionnaire for Adaptive Form](https://hl7.org/fhir/us/davinci-dtr/2.2.0/en/StructureDefinition-dtr-questionnaire-adapt.html)
|
|
17
|
+
profile have been observed cumulatively across adaptive Questionnaires returned
|
|
18
|
+
during previous `$next-question` tests. Common inherited Questionnaire elements
|
|
19
|
+
are evaluated separately.
|
|
20
|
+
|
|
21
|
+
This includes the following elements:
|
|
22
|
+
- #{MUST_SUPPORT_METADATA.must_support_strings.join("\n - ")}
|
|
23
|
+
)
|
|
24
|
+
verifies_requirements 'hl7.fhir.us.davinci-dtr_2.2.0@conf-2'
|
|
25
|
+
|
|
26
|
+
run do
|
|
27
|
+
load_tagged_requests(NEXT_TAG)
|
|
28
|
+
questionnaires = questionnaires_from_operation_responses(requests)
|
|
29
|
+
|
|
30
|
+
if questionnaires.blank?
|
|
31
|
+
load_tagged_requests(QUESTIONNAIRE_TAG)
|
|
32
|
+
questionnaire_package_questionnaires = questionnaires_from_operation_responses(requests)
|
|
33
|
+
adaptive_search_questionnaires = questionnaire_package_questionnaires.select do |questionnaire|
|
|
34
|
+
adaptive_questionnaire?(questionnaire)
|
|
35
|
+
end
|
|
36
|
+
omit_if questionnaire_package_questionnaires.present? && adaptive_search_questionnaires.blank?,
|
|
37
|
+
'The server did not return any adaptive-search Questionnaires.'
|
|
38
|
+
|
|
39
|
+
skip 'No adaptive Questionnaires were found in $next-question responses.'
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
assert_must_support_elements_present(questionnaires, MUST_SUPPORT_METADATA.profile_url,
|
|
43
|
+
metadata: MUST_SUPPORT_METADATA)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require_relative '../../../cross_suite/generated_profile_metadata'
|
|
2
|
+
require_relative '../../../cross_suite/v2.2.0/questionnaire_helper'
|
|
3
|
+
require_relative '../../../tags'
|
|
4
|
+
|
|
5
|
+
module DaVinciDTRTestKit
|
|
6
|
+
module DTRPayerServerV220
|
|
7
|
+
class QuestionnaireAdaptiveSearchMustSupportTest < Inferno::Test
|
|
8
|
+
include QuestionnaireHelper
|
|
9
|
+
|
|
10
|
+
MUST_SUPPORT_METADATA = GeneratedProfileMetadata.for('v2.2.0', 'dtr_questionnaire_adapt_search')
|
|
11
|
+
|
|
12
|
+
id :dtr_v220_payer_questionnaire_adaptive_search_must_support
|
|
13
|
+
title 'Server provides adaptive-search Questionnaire must support elements and extensions'
|
|
14
|
+
description %(
|
|
15
|
+
This test confirms that all must support elements and extensions defined in the
|
|
16
|
+
[DTR Adaptive Questionnaire Search](https://hl7.org/fhir/us/davinci-dtr/2.2.0/en/StructureDefinition-dtr-questionnaire-adapt-search.html)
|
|
17
|
+
profile have been observed cumulatively across adaptive-search Questionnaires
|
|
18
|
+
returned during previous `$questionnaire-package` tests.
|
|
19
|
+
|
|
20
|
+
This includes the following elements:
|
|
21
|
+
- #{MUST_SUPPORT_METADATA.must_support_strings.join("\n - ")}
|
|
22
|
+
)
|
|
23
|
+
verifies_requirements 'hl7.fhir.us.davinci-dtr_2.2.0@conf-2'
|
|
24
|
+
|
|
25
|
+
run do
|
|
26
|
+
load_tagged_requests(QUESTIONNAIRE_TAG)
|
|
27
|
+
questionnaires = questionnaires_from_operation_responses(requests)
|
|
28
|
+
skip_if questionnaires.blank?, 'No Questionnaires were found in $questionnaire-package responses.'
|
|
29
|
+
|
|
30
|
+
adaptive_search_questionnaires = questionnaires.select do |questionnaire|
|
|
31
|
+
adaptive_questionnaire?(questionnaire)
|
|
32
|
+
end
|
|
33
|
+
omit_if adaptive_search_questionnaires.blank?, 'The server did not return any adaptive-search Questionnaires.'
|
|
34
|
+
|
|
35
|
+
assert_must_support_elements_present(adaptive_search_questionnaires, MUST_SUPPORT_METADATA.profile_url,
|
|
36
|
+
metadata: MUST_SUPPORT_METADATA)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_base_must_support_test.rb
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
require_relative '../../../cross_suite/generated_profile_metadata'
|
|
2
|
+
require_relative '../../../cross_suite/v2.2.0/questionnaire_helper'
|
|
3
|
+
|
|
4
|
+
module DaVinciDTRTestKit
|
|
5
|
+
module DTRPayerServerV220
|
|
6
|
+
class QuestionnaireBaseMustSupportTest < Inferno::Test
|
|
7
|
+
include QuestionnaireHelper
|
|
8
|
+
|
|
9
|
+
MUST_SUPPORT_METADATA = GeneratedProfileMetadata.for('v2.2.0', 'dtr_base_questionnaire')
|
|
10
|
+
|
|
11
|
+
id :dtr_v220_payer_questionnaire_base_must_support
|
|
12
|
+
title 'Server provides common DTR Questionnaire must support elements and extensions'
|
|
13
|
+
description %(
|
|
14
|
+
This test confirms that all must support elements and extensions defined in the
|
|
15
|
+
[DTR Base Questionnaire](https://hl7.org/fhir/us/davinci-dtr/2.2.0/en/StructureDefinition-dtr-base-questionnaire.html)
|
|
16
|
+
profile and its parents have been observed cumulatively across standard
|
|
17
|
+
and adaptive Questionnaires returned during previous tests.
|
|
18
|
+
|
|
19
|
+
This includes the following elements:
|
|
20
|
+
- #{MUST_SUPPORT_METADATA.must_support_strings.join("\n - ")}
|
|
21
|
+
)
|
|
22
|
+
verifies_requirements 'hl7.fhir.us.davinci-dtr_2.2.0@conf-2'
|
|
23
|
+
|
|
24
|
+
run do
|
|
25
|
+
questionnaire_package_requests = load_tagged_requests(QUESTIONNAIRE_TAG)
|
|
26
|
+
next_question_requests = load_tagged_requests(NEXT_TAG)
|
|
27
|
+
skip_if requests.blank?, 'Requests must be made prior to running this test.'
|
|
28
|
+
|
|
29
|
+
questionnaires = questionnaires_from_operation_responses(
|
|
30
|
+
questionnaire_package_requests,
|
|
31
|
+
include_adaptive: false
|
|
32
|
+
) + questionnaires_from_operation_responses(next_question_requests)
|
|
33
|
+
skip_if questionnaires.blank?, 'No standard or adaptive Questionnaires were found to evaluate.'
|
|
34
|
+
|
|
35
|
+
assert_must_support_elements_present(questionnaires, MUST_SUPPORT_METADATA.profile_url,
|
|
36
|
+
metadata: MUST_SUPPORT_METADATA)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require_relative '../../../cross_suite/generated_profile_metadata'
|
|
2
|
+
require_relative '../../../cross_suite/v2.2.0/questionnaire_helper'
|
|
3
|
+
require_relative '../../../tags'
|
|
4
|
+
|
|
5
|
+
module DaVinciDTRTestKit
|
|
6
|
+
module DTRPayerServerV220
|
|
7
|
+
class QuestionnairePackageBundleMustSupportTest < Inferno::Test
|
|
8
|
+
include QuestionnaireHelper
|
|
9
|
+
|
|
10
|
+
MUST_SUPPORT_METADATA = GeneratedProfileMetadata.for('v2.2.0', 'dtr_q_package_bundle')
|
|
11
|
+
|
|
12
|
+
id :dtr_v220_payer_questionnaire_package_bundle_must_support
|
|
13
|
+
title 'Server provides Questionnaire Package Bundle must support elements'
|
|
14
|
+
description %(
|
|
15
|
+
This test confirms that all must support entries defined in the
|
|
16
|
+
[DTR Questionnaire Package Bundle](https://hl7.org/fhir/us/davinci-dtr/2.2.0/en/StructureDefinition-DTR-QPackageBundle.html)
|
|
17
|
+
profile have been observed cumulatively across package Bundles returned during
|
|
18
|
+
previous `$questionnaire-package` tests.
|
|
19
|
+
|
|
20
|
+
This includes the following elements:
|
|
21
|
+
- #{MUST_SUPPORT_METADATA.must_support_strings.join("\n - ")}
|
|
22
|
+
)
|
|
23
|
+
verifies_requirements 'hl7.fhir.us.davinci-dtr_2.2.0@conf-2'
|
|
24
|
+
|
|
25
|
+
run do
|
|
26
|
+
load_tagged_requests(QUESTIONNAIRE_TAG)
|
|
27
|
+
skip_if requests.blank?, 'Requests must be made prior to running this test.'
|
|
28
|
+
|
|
29
|
+
bundles = questionnaire_package_output_parameters_from_operation_responses(requests)
|
|
30
|
+
.flat_map { |parameters| questionnaire_package_bundles(parameters) }
|
|
31
|
+
skip_if bundles.blank?, 'No Questionnaire Package Bundle resources were found to evaluate.'
|
|
32
|
+
|
|
33
|
+
assert_must_support_elements_present(bundles, MUST_SUPPORT_METADATA.profile_url,
|
|
34
|
+
metadata: MUST_SUPPORT_METADATA)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require_relative '../../../cross_suite/generated_profile_metadata'
|
|
2
|
+
require_relative '../../../cross_suite/v2.2.0/questionnaire_helper'
|
|
3
|
+
require_relative '../../../tags'
|
|
4
|
+
|
|
5
|
+
module DaVinciDTRTestKit
|
|
6
|
+
module DTRPayerServerV220
|
|
7
|
+
class QuestionnairePackageOutputParametersMustSupportTest < Inferno::Test
|
|
8
|
+
include QuestionnaireHelper
|
|
9
|
+
|
|
10
|
+
MUST_SUPPORT_METADATA = GeneratedProfileMetadata.for('v2.2.0', 'dtr_qpackage_output_parameters')
|
|
11
|
+
|
|
12
|
+
id :dtr_v220_payer_questionnaire_package_output_parameters_must_support
|
|
13
|
+
title 'Server provides Questionnaire Package Output Parameters must support elements'
|
|
14
|
+
description %(
|
|
15
|
+
This test confirms that all must support elements defined in the
|
|
16
|
+
[DTR Questionnaire Package Output Parameters](https://hl7.org/fhir/us/davinci-dtr/2.2.0/en/StructureDefinition-dtr-qpackage-output-parameters.html)
|
|
17
|
+
profile have been observed cumulatively across `$questionnaire-package` responses
|
|
18
|
+
returned during previous tests.
|
|
19
|
+
|
|
20
|
+
This includes the following elements:
|
|
21
|
+
- #{MUST_SUPPORT_METADATA.must_support_strings.join("\n - ")}
|
|
22
|
+
)
|
|
23
|
+
verifies_requirements 'hl7.fhir.us.davinci-dtr_2.2.0@conf-2'
|
|
24
|
+
|
|
25
|
+
run do
|
|
26
|
+
load_tagged_requests(QUESTIONNAIRE_TAG)
|
|
27
|
+
skip_if requests.blank?, 'Requests must be made prior to running this test.'
|
|
28
|
+
|
|
29
|
+
parameters = questionnaire_package_output_parameters_from_operation_responses(requests)
|
|
30
|
+
skip_if parameters.blank?, 'No Questionnaire Package Output Parameters resources were found to evaluate.'
|
|
31
|
+
|
|
32
|
+
assert_must_support_elements_present(parameters, MUST_SUPPORT_METADATA.profile_url,
|
|
33
|
+
metadata: MUST_SUPPORT_METADATA)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_standard_must_support_test.rb
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require_relative '../../../cross_suite/generated_profile_metadata'
|
|
2
|
+
require_relative '../../../cross_suite/v2.2.0/questionnaire_helper'
|
|
3
|
+
require_relative '../../../tags'
|
|
4
|
+
|
|
5
|
+
module DaVinciDTRTestKit
|
|
6
|
+
module DTRPayerServerV220
|
|
7
|
+
class QuestionnaireStandardMustSupportTest < Inferno::Test
|
|
8
|
+
include QuestionnaireHelper
|
|
9
|
+
|
|
10
|
+
MUST_SUPPORT_METADATA = GeneratedProfileMetadata.for('v2.2.0', 'dtr_std_questionnaire')
|
|
11
|
+
|
|
12
|
+
id :dtr_v220_payer_questionnaire_standard_must_support
|
|
13
|
+
title 'Server provides standard Questionnaire must support elements and extensions'
|
|
14
|
+
description %(
|
|
15
|
+
This test confirms that all must support elements added in the
|
|
16
|
+
[DTR Standard Questionnaire](https://hl7.org/fhir/us/davinci-dtr/2.2.0/en/StructureDefinition-dtr-std-questionnaire.html)
|
|
17
|
+
profile have been observed cumulatively across standard Questionnaires returned
|
|
18
|
+
during previous `$questionnaire-package` tests. Common inherited Questionnaire
|
|
19
|
+
elements are evaluated separately.
|
|
20
|
+
|
|
21
|
+
This includes the following elements:
|
|
22
|
+
- #{MUST_SUPPORT_METADATA.must_support_strings.join("\n - ")}
|
|
23
|
+
)
|
|
24
|
+
verifies_requirements 'hl7.fhir.us.davinci-dtr_2.2.0@conf-2'
|
|
25
|
+
|
|
26
|
+
run do
|
|
27
|
+
load_tagged_requests(QUESTIONNAIRE_TAG)
|
|
28
|
+
questionnaires = questionnaires_from_operation_responses(requests)
|
|
29
|
+
skip_if questionnaires.blank?, 'No Questionnaires were found in $questionnaire-package responses.'
|
|
30
|
+
|
|
31
|
+
standard_questionnaires = questionnaires.reject { |questionnaire| adaptive_questionnaire?(questionnaire) }
|
|
32
|
+
omit_if standard_questionnaires.blank?, 'The server did not return any standard Questionnaires.'
|
|
33
|
+
|
|
34
|
+
assert_must_support_elements_present(standard_questionnaires, MUST_SUPPORT_METADATA.profile_url,
|
|
35
|
+
metadata: MUST_SUPPORT_METADATA)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
require_relative '../validation_test'
|
|
2
|
+
require_relative '../../tags'
|
|
3
|
+
|
|
4
|
+
module DaVinciDTRTestKit
|
|
5
|
+
module DTRPayerServerV220
|
|
6
|
+
class NextQuestionRequestValidationTest < Inferno::Test
|
|
7
|
+
include DaVinciDTRTestKit::ValidationTest
|
|
8
|
+
|
|
9
|
+
id :dtr_v220_payer_next_question_request_validation
|
|
10
|
+
title '$next-question QuestionnaireResponse request is valid'
|
|
11
|
+
description %(
|
|
12
|
+
This test validates that each outgoing QuestionnaireResponse request to the
|
|
13
|
+
`$next-question` operation
|
|
14
|
+
conforms to the [DTR Questionnaire Response for adaptive form profile](https://hl7.org/fhir/us/davinci-dtr/2.2.0/en/StructureDefinition-dtr-questionnaireresponse-adapt.html).
|
|
15
|
+
Inferno generates these request bodies from the provided test input.
|
|
16
|
+
)
|
|
17
|
+
simulation_verification
|
|
18
|
+
|
|
19
|
+
run do
|
|
20
|
+
load_tagged_requests(NEXT_TAG)
|
|
21
|
+
|
|
22
|
+
omit_if requests.empty?, 'No $next-question requests were made.'
|
|
23
|
+
|
|
24
|
+
requests.each_with_index do |request, index|
|
|
25
|
+
fhir_obj = begin
|
|
26
|
+
FHIR.from_contents(request.request_body)
|
|
27
|
+
rescue StandardError
|
|
28
|
+
nil
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
validate_resource(
|
|
32
|
+
fhir_obj,
|
|
33
|
+
:questionnaire_response,
|
|
34
|
+
'http://hl7.org/fhir/us/davinci-dtr/StructureDefinition/dtr-questionnaireresponse-adapt|2.2.0',
|
|
35
|
+
index
|
|
36
|
+
)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
assert_no_error_messages(
|
|
40
|
+
'Non-conformant $next-question QuestionnaireResponse request. See Messages for details.'
|
|
41
|
+
)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../../../tags'
|
|
4
|
+
require_relative '../questionnaire_operation_validation'
|
|
5
|
+
|
|
6
|
+
module DaVinciDTRTestKit
|
|
7
|
+
module DTRPayerServerV220
|
|
8
|
+
class AdaptiveQuestionnaireEndpointTest < Inferno::Test
|
|
9
|
+
include QuestionnaireOperationValidation
|
|
10
|
+
|
|
11
|
+
ADAPTIVE_QUESTIONNAIRE_EXTENSION_URL =
|
|
12
|
+
'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive'
|
|
13
|
+
|
|
14
|
+
id :dtr_v220_payer_adaptive_questionnaire_endpoint
|
|
15
|
+
title 'Adaptive Questionnaire endpoints are payer sub-URLs accessible with the configured credentials'
|
|
16
|
+
description %(
|
|
17
|
+
This test verifies that every URL provided by a `questionnaireAdaptive`
|
|
18
|
+
extension is a sub-URL of the payer FHIR base. It also verifies that the
|
|
19
|
+
DTR client's `$next-question` request to that endpoint succeeds. The
|
|
20
|
+
request is made by the same configured FHIR client used for the
|
|
21
|
+
`$questionnaire-package` operation.
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
verifies_requirements 'hl7.fhir.us.davinci-dtr_2.2.0@spec-24'
|
|
25
|
+
|
|
26
|
+
input :url
|
|
27
|
+
|
|
28
|
+
run do
|
|
29
|
+
questionnaire_requests = load_tagged_requests(QUESTIONNAIRE_TAG)
|
|
30
|
+
successful_questionnaire_requests = questionnaire_requests.select do |request|
|
|
31
|
+
request.status.to_s.start_with?('2')
|
|
32
|
+
end
|
|
33
|
+
skip_if successful_questionnaire_requests.blank?, 'No successful $questionnaire-package requests were made.'
|
|
34
|
+
|
|
35
|
+
adaptive_urls = successful_questionnaire_requests.flat_map do |request|
|
|
36
|
+
adaptive_questionnaire_urls(request)
|
|
37
|
+
end.uniq
|
|
38
|
+
omit_if adaptive_urls.blank?, 'No adaptive Questionnaire URLs were returned.'
|
|
39
|
+
|
|
40
|
+
next_question_requests = load_tagged_requests(NEXT_TAG)
|
|
41
|
+
adaptive_urls.each do |adaptive_url|
|
|
42
|
+
payer_base_url = url.chomp('/')
|
|
43
|
+
unless adaptive_url.chomp('/') == payer_base_url || adaptive_url.start_with?("#{payer_base_url}/")
|
|
44
|
+
add_message(
|
|
45
|
+
'error',
|
|
46
|
+
"`questionnaireAdaptive` extension URL `#{adaptive_url}` is not a sub-URL of payer base `#{url}`."
|
|
47
|
+
)
|
|
48
|
+
next
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
expected_next_question_url = "#{adaptive_url.chomp('/')}/Questionnaire/$next-question"
|
|
52
|
+
matching_request = next_question_requests.find { |request| request.url == expected_next_question_url }
|
|
53
|
+
|
|
54
|
+
if matching_request.nil?
|
|
55
|
+
add_message(
|
|
56
|
+
'error',
|
|
57
|
+
"No $next-question request was made to `questionnaireAdaptive` extension URL `#{adaptive_url}`."
|
|
58
|
+
)
|
|
59
|
+
elsif !matching_request.status.to_s.start_with?('2')
|
|
60
|
+
add_message(
|
|
61
|
+
'error',
|
|
62
|
+
"$next-question request to `questionnaireAdaptive` extension URL `#{adaptive_url}` did not succeed " \
|
|
63
|
+
"(received HTTP #{matching_request.status})."
|
|
64
|
+
)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
assert_no_error_messages(
|
|
69
|
+
'`questionnaireAdaptive` extension URLs must be payer sub-URLs and accessible with ' \
|
|
70
|
+
'the configured credentials.'
|
|
71
|
+
)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
private
|
|
75
|
+
|
|
76
|
+
def adaptive_questionnaire_urls(request)
|
|
77
|
+
resource = FHIR.from_contents(request.response_body)
|
|
78
|
+
extract_questionnaire_bundles(resource).flat_map do |bundle|
|
|
79
|
+
adaptive_questionnaire_urls_from_bundle(bundle)
|
|
80
|
+
end
|
|
81
|
+
rescue JSON::ParserError, NoMethodError
|
|
82
|
+
[]
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def adaptive_questionnaire_urls_from_bundle(bundle)
|
|
86
|
+
extract_questionnaires_from_bundles([bundle]).filter_map do |questionnaire|
|
|
87
|
+
adaptive_questionnaire_url(questionnaire)
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def adaptive_questionnaire_url(questionnaire)
|
|
92
|
+
questionnaire.extension&.find do |extension|
|
|
93
|
+
extension.url == ADAPTIVE_QUESTIONNAIRE_EXTENSION_URL && extension.valueUrl.present?
|
|
94
|
+
end&.valueUrl
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module DaVinciDTRTestKit
|
|
4
|
+
module DTRPayerServerV220
|
|
5
|
+
class InvalidQuestionnaireResponseTest < Inferno::Test
|
|
6
|
+
id :dtr_v220_payer_invalid_questionnaire_response
|
|
7
|
+
title 'Invalid QuestionnaireResponses return 400 with an OperationOutcome'
|
|
8
|
+
description %(
|
|
9
|
+
Inferno invokes `Questionnaire/$next-question` using a tester-provided
|
|
10
|
+
QuestionnaireResponse that the DTR server considers invalid based on the
|
|
11
|
+
rules in its contained Questionnaire. Inferno verifies that the server
|
|
12
|
+
returns HTTP 400 with an OperationOutcome describing the error.
|
|
13
|
+
)
|
|
14
|
+
verifies_requirements 'hl7.fhir.us.davinci-dtr_2.2.0@spec-147'
|
|
15
|
+
|
|
16
|
+
input :invalid_questionnaire_response,
|
|
17
|
+
title: 'Invalid QuestionnaireResponse',
|
|
18
|
+
description: %(
|
|
19
|
+
Provide a `QuestionnaireResponse` resource in JSON format that the DTR
|
|
20
|
+
server will determine is invalid based on the rules in its contained
|
|
21
|
+
Questionnaire.
|
|
22
|
+
),
|
|
23
|
+
type: 'textarea'
|
|
24
|
+
|
|
25
|
+
run do
|
|
26
|
+
assert_valid_json invalid_questionnaire_response, 'The provided QuestionnaireResponse is not valid JSON.'
|
|
27
|
+
questionnaire_response = FHIR.from_contents(invalid_questionnaire_response)
|
|
28
|
+
assert_resource_type(:questionnaire_response, resource: questionnaire_response)
|
|
29
|
+
|
|
30
|
+
fhir_operation(
|
|
31
|
+
'/Questionnaire/$next-question',
|
|
32
|
+
body: questionnaire_response,
|
|
33
|
+
headers: { 'Content-Type': 'application/fhir+json' }
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
assert_response_status(400)
|
|
37
|
+
assert_resource_type(:operation_outcome)
|
|
38
|
+
assert resource.issue.present?,
|
|
39
|
+
'The OperationOutcome did not include an issue describing why the QuestionnaireResponse was invalid.'
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|