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
data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/interaction/adaptive_questionnaires_completed_test.rb
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
require_relative '../../../urls'
|
|
2
|
+
require_relative '../../../cross_suite/v2.2.0/multi_request_message_helper'
|
|
3
|
+
require_relative '../../short_circuit_interaction_verification'
|
|
4
|
+
require_relative '../../../cross_suite/v2.2.0/questionnaire_helper'
|
|
5
|
+
|
|
6
|
+
module DaVinciDTRTestKit
|
|
7
|
+
class DTRFullEHRV220AdaptiveQuestionnairesCompletedTest < Inferno::Test
|
|
8
|
+
include URLs
|
|
9
|
+
include MultiRequestMessageHelper
|
|
10
|
+
include ShortCircuitInteractionVerification
|
|
11
|
+
include QuestionnaireHelper
|
|
12
|
+
|
|
13
|
+
id :dtr_full_ehr_v220_adaptive_questionnaires_completed
|
|
14
|
+
title 'Adaptive Questionnaires Completed'
|
|
15
|
+
description %(
|
|
16
|
+
This test validates that all adaptive Questionnaires returned by Inferno during
|
|
17
|
+
this interaction were completed as shown by a $next-question request where Inferno
|
|
18
|
+
updated the status of the QuestionnaireResponse to `completed`.
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
def target_qp_tags
|
|
22
|
+
tags = [QUESTIONNAIRE_PACKAGE_TAG]
|
|
23
|
+
tags << config.options[:dtr_workflow_tag] if config.options[:dtr_workflow_tag].present?
|
|
24
|
+
|
|
25
|
+
tags
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def target_nq_tags
|
|
29
|
+
tags = [CLIENT_NEXT_TAG]
|
|
30
|
+
tags << config.options[:dtr_workflow_tag] if config.options[:dtr_workflow_tag].present?
|
|
31
|
+
|
|
32
|
+
tags
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def qp_requests_to_analyze
|
|
36
|
+
@qp_requests_to_analyze ||= load_tagged_requests(*target_qp_tags)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def nq_requests_to_analyze
|
|
40
|
+
@nq_requests_to_analyze ||= load_tagged_requests(*target_nq_tags)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def adaptive_questionnaire_canonicals
|
|
44
|
+
@adaptive_questionnaire_canonicals ||=
|
|
45
|
+
qp_requests_to_analyze.each_with_object([]) do |request, adaptive_questionnaires|
|
|
46
|
+
request_parameters = FHIR.from_contents(request.response_body)
|
|
47
|
+
next unless request_parameters.is_a?(FHIR::Parameters)
|
|
48
|
+
|
|
49
|
+
adaptive_questionnaires.concat(
|
|
50
|
+
questionnaires_from_questionnaire_package_output_parameters(request_parameters, include_standard: false)
|
|
51
|
+
.map { |questionnaire| questionnaire_canonical_url(questionnaire) }
|
|
52
|
+
)
|
|
53
|
+
rescue JSON::ParserError
|
|
54
|
+
next
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def completed_questionnaire_canonicals
|
|
59
|
+
@completed_questionnaire_canonicals ||=
|
|
60
|
+
nq_requests_to_analyze.each_with_object([]) do |request, completed_questionnaires|
|
|
61
|
+
contained_questionnaire = completed_contained_questionnaire(request)
|
|
62
|
+
next unless contained_questionnaire.present?
|
|
63
|
+
|
|
64
|
+
completed_questionnaires << questionnaire_canonical_url(contained_questionnaire)
|
|
65
|
+
rescue JSON::ParserError
|
|
66
|
+
next
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# Returns the contained Questionnaire from a $next-question response's QuestionnaireResponse,
|
|
71
|
+
# but only when Inferno marked that QuestionnaireResponse `completed` -- an in-progress adaptive
|
|
72
|
+
# workflow hasn't finished yet.
|
|
73
|
+
def completed_contained_questionnaire(request)
|
|
74
|
+
response_body = FHIR.from_contents(request.response_body)
|
|
75
|
+
response_questionnaire_response = questionnaire_response_from_next_question_response(response_body)
|
|
76
|
+
return nil unless response_questionnaire_response.present?
|
|
77
|
+
return nil unless response_questionnaire_response.status == 'completed'
|
|
78
|
+
|
|
79
|
+
contained_questionnaire_from_questionnaire_response(response_questionnaire_response)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
run do
|
|
83
|
+
check_for_short_circuit(ok_message: config.options[:short_circuit_pass_message])
|
|
84
|
+
skip_if no_questionnaires_returned?(qp_requests_to_analyze),
|
|
85
|
+
'No Questionnaire Package requests returned a Questionnaire.'
|
|
86
|
+
|
|
87
|
+
clear_adaptive_short_circuit_flag
|
|
88
|
+
if adaptive_questionnaire_canonicals.blank?
|
|
89
|
+
if config.options[:adaptive_questionnaires_optional]
|
|
90
|
+
short_circuit_adaptive_validation_tests
|
|
91
|
+
pass SHORT_CIRCUIT_ADAPTIVE_MESSAGE
|
|
92
|
+
else
|
|
93
|
+
skip 'Adaptive Questionnaires required to be demonstrated during this scenario but none were returned.'
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
adaptive_questionnaire_canonicals.each do |target_canonical|
|
|
98
|
+
next if completed_questionnaire_canonicals.include?(target_canonical)
|
|
99
|
+
|
|
100
|
+
add_message('error', "Adaptive Questionnaire with canonical url `#{target_canonical}` was never completed.")
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
assert_no_error_messages(
|
|
104
|
+
'Adaptive Questionnaires retrieved but not completed. See Messages for details.'
|
|
105
|
+
)
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
require_relative '../../descriptions'
|
|
2
|
+
require_relative '../../../urls'
|
|
3
|
+
require_relative '../next_question_template_questionnaires'
|
|
4
|
+
require_relative '../../short_circuit_interaction_verification'
|
|
5
|
+
|
|
6
|
+
module DaVinciDTRTestKit
|
|
7
|
+
class DTRFullEHRV220InteractionWaitTest < Inferno::Test
|
|
8
|
+
include URLs
|
|
9
|
+
include NextQuestionTemplateQuestionnaires
|
|
10
|
+
include ShortCircuitInteractionVerification
|
|
11
|
+
|
|
12
|
+
id :dtr_full_ehr_v220_interaction_wait
|
|
13
|
+
title 'Retrieve and complete Questionnaire(s)'
|
|
14
|
+
description %(
|
|
15
|
+
Inferno will act as a Payer DTR Server while the tester launches DTR and completes the questionnaire.
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
input :client_id,
|
|
19
|
+
title: 'Client Id',
|
|
20
|
+
type: 'text',
|
|
21
|
+
optional: false,
|
|
22
|
+
locked: true,
|
|
23
|
+
description: INPUT_CLIENT_ID_LOCKED
|
|
24
|
+
# input :questionaire_package_response_template,
|
|
25
|
+
# title: '$questionnaire-package Response Template',
|
|
26
|
+
# type: 'textarea',
|
|
27
|
+
# optional: true,
|
|
28
|
+
# description: %(
|
|
29
|
+
# Template used to generate responses to invocations of the $questionnaire-package
|
|
30
|
+
# operation. This will be a single Parameters resource in json form. Inferno will
|
|
31
|
+
# select the `parameter` entries within it to return based on selection criteria
|
|
32
|
+
# within the template evaluated against the request details.
|
|
33
|
+
# ),
|
|
34
|
+
# default: '{ "ResourceType": "Parameters" }'
|
|
35
|
+
# input :next_question_response_template,
|
|
36
|
+
# title: '$next-question Response Template',
|
|
37
|
+
# type: 'textarea',
|
|
38
|
+
# optional: true,
|
|
39
|
+
# description: %(
|
|
40
|
+
# Template used to generate responses to invocations of the $questionnaire-package
|
|
41
|
+
# operation. This will be a list of Questionnaire resources in json form. Inferno
|
|
42
|
+
# will select which Questionnaire to use based on the Questionnaire url indicated
|
|
43
|
+
# in the request and will select the `item` entries to add based on selection criteria
|
|
44
|
+
# within the template evaluated against the request details.
|
|
45
|
+
# ),
|
|
46
|
+
# default: '[]'
|
|
47
|
+
# input :value_set_expansions,
|
|
48
|
+
# title: 'ValueSet $expand Data',
|
|
49
|
+
# type: 'textarea',
|
|
50
|
+
# optional: true,
|
|
51
|
+
# description: %(
|
|
52
|
+
# Template used to generate responses to invocations of the ValueSet/$expand
|
|
53
|
+
# operation. This will be a list of ValueSet resources in json form. Inferno
|
|
54
|
+
# will select the entry to use by matching the `url` parameter against the
|
|
55
|
+
# ValueSet `url` element.
|
|
56
|
+
# ),
|
|
57
|
+
# default: '[]'
|
|
58
|
+
output :continuation_url
|
|
59
|
+
|
|
60
|
+
run do
|
|
61
|
+
clear_short_circuit_flag
|
|
62
|
+
unless run_tests?
|
|
63
|
+
short_circuit_validation_tests(:pass)
|
|
64
|
+
short_circuit_pass(message: config.options[:short_circuit_pass_message])
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
validate_response_template_inputs
|
|
68
|
+
|
|
69
|
+
continuation_url = "#{resume_pass_url}?token=#{client_id}"
|
|
70
|
+
output(continuation_url:)
|
|
71
|
+
|
|
72
|
+
wait(
|
|
73
|
+
identifier: client_id,
|
|
74
|
+
timeout: 1200,
|
|
75
|
+
message: %(
|
|
76
|
+
Inferno will wait while the tester uses the system to complete
|
|
77
|
+
one or more DTR Questionnaires retrieved from Inferno's simulated
|
|
78
|
+
payer server.
|
|
79
|
+
|
|
80
|
+
When all Questionnaire returned by Inferno during this period
|
|
81
|
+
have been completed and saved to the EHR [Click here](#{continuation_url})
|
|
82
|
+
to continue.
|
|
83
|
+
|
|
84
|
+
### Endpoints
|
|
85
|
+
|
|
86
|
+
Available endpoints on Inferno's simulated payer server include
|
|
87
|
+
|
|
88
|
+
- FHIR Base: `#{fhir_base_url}
|
|
89
|
+
- Questionnaire Package Operation: `#{questionnaire_package_url}`
|
|
90
|
+
- Next Question Operation: `#{next_url}`
|
|
91
|
+
|
|
92
|
+
### Authenticated and Identification
|
|
93
|
+
|
|
94
|
+
Requests must be authenticated by first obtaining an access token
|
|
95
|
+
for client `#{client_id}` from Inferno's token endpoint: `#{token_url}`.
|
|
96
|
+
Only requests including an obtained access token as a bearer token
|
|
97
|
+
in the `Authentication` header of the HTTP request will be recognized
|
|
98
|
+
as associated with this session and return successful responses.
|
|
99
|
+
)
|
|
100
|
+
)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
# other things that might go into the wait message
|
|
104
|
+
# - Whether multiple successful $questionnaire-package requests are allowed (options)
|
|
105
|
+
# - specific instructions for completion (TODO)
|
|
106
|
+
# - whether the Questionnaires are provided by Inferno or the tester (options)
|
|
107
|
+
|
|
108
|
+
private
|
|
109
|
+
|
|
110
|
+
def run_tests?
|
|
111
|
+
input_name = config.options[:short_circuit_pass_input]
|
|
112
|
+
return true if input_name.blank?
|
|
113
|
+
|
|
114
|
+
send(input_name) == 'true'
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def validate_response_template_inputs
|
|
118
|
+
validate_qp_response_template_input
|
|
119
|
+
validate_nq_questionnaire_template_input
|
|
120
|
+
rescue Inferno::Exceptions::AssertionException => e
|
|
121
|
+
short_circuit_validation_tests(:skip)
|
|
122
|
+
raise e
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def validate_qp_response_template_input
|
|
126
|
+
input_name = config.options[:qp_response_template_input]
|
|
127
|
+
return if input_name.blank?
|
|
128
|
+
|
|
129
|
+
title = input_title(input_name)
|
|
130
|
+
value = send(input_name)
|
|
131
|
+
assert value.present?, "No response template provided by the user in input '#{title}'."
|
|
132
|
+
|
|
133
|
+
parsed = parse_qp_template_value(value, title)
|
|
134
|
+
assert parsed.is_a?(FHIR::Parameters),
|
|
135
|
+
"Input '#{title}' must contain a Parameters resource for the $questionnaire-package " \
|
|
136
|
+
'response template.'
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def parse_qp_template_value(value, title)
|
|
140
|
+
FHIR.from_contents(value)
|
|
141
|
+
rescue StandardError
|
|
142
|
+
assert false, "Input '#{title}' does not contain valid JSON."
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
# Unlike the endpoint's own parsing (which silently discards array entries that aren't
|
|
146
|
+
# Questionnaires, since the tester may legitimately be mid-workflow when a request comes in),
|
|
147
|
+
# this pre-wait check fails on the first bad entry: there's no reason to let the tester start
|
|
148
|
+
# the interaction with a template that's already known to be broken.
|
|
149
|
+
def validate_nq_questionnaire_template_input
|
|
150
|
+
input_name = config.options[:nq_questionnaire_template_input]
|
|
151
|
+
return if input_name.blank?
|
|
152
|
+
|
|
153
|
+
title = input_title(input_name)
|
|
154
|
+
value = send(input_name)
|
|
155
|
+
assert value.present?, "No response template provided by the user in input '#{title}'."
|
|
156
|
+
|
|
157
|
+
parsed_json = JSON.parse(value)
|
|
158
|
+
is_array = parsed_json.is_a?(Array)
|
|
159
|
+
questionnaire_jsons = is_array ? parsed_json : [parsed_json]
|
|
160
|
+
|
|
161
|
+
questionnaire_jsons.each_with_index do |questionnaire_json, index|
|
|
162
|
+
next if parse_template_questionnaire(questionnaire_json).present?
|
|
163
|
+
|
|
164
|
+
location = is_array ? "at index #{index} of input '#{title}'" : "in input '#{title}'"
|
|
165
|
+
assert false, "Invalid $next-question response template: expected a Questionnaire #{location}."
|
|
166
|
+
end
|
|
167
|
+
rescue JSON::ParserError
|
|
168
|
+
assert false, "Input '#{title}' does not contain valid JSON."
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
# config.options input references are stored as input names (e.g. 'additional_ms_qp_responses');
|
|
172
|
+
# testers only ever see the input's title in the UI, so error messages should use that instead.
|
|
173
|
+
def input_title(input_name)
|
|
174
|
+
config.input(input_name.to_sym)&.title || input_name
|
|
175
|
+
end
|
|
176
|
+
end
|
|
177
|
+
end
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
require 'securerandom'
|
|
2
|
+
require_relative '../../../urls'
|
|
3
|
+
require_relative '../../short_circuit_interaction_verification'
|
|
4
|
+
require_relative '../../../cross_suite/v2.2.0/questionnaire_helper'
|
|
5
|
+
|
|
6
|
+
module DaVinciDTRTestKit
|
|
7
|
+
class DTRFullEHRV220UIDisplayAndInteractionAttestationTest < Inferno::Test
|
|
8
|
+
include URLs
|
|
9
|
+
include ShortCircuitInteractionVerification
|
|
10
|
+
include QuestionnaireHelper
|
|
11
|
+
|
|
12
|
+
id :dtr_full_ehr_v220_ui_display_and_interaction
|
|
13
|
+
title 'Client correctly displays and allows users to interact with the questionnaire(s)'
|
|
14
|
+
description %(
|
|
15
|
+
During this test, the tester will confirm that during the previous interaction
|
|
16
|
+
the client system was able to fully support the completion of the Questionnaires
|
|
17
|
+
returned by Inferno's simulated DTR payer server. Most details showing that the client
|
|
18
|
+
conformed to the DTR specification in its support for Questionnaires are not visible
|
|
19
|
+
to Inferno, so it is the responsibility of the tester to confirm that the Questionnaires
|
|
20
|
+
were faithfully computed, displayed, and saved per the DTR requirements.
|
|
21
|
+
|
|
22
|
+
Notable requirements that testers are expected to demonstrate and attest client conformance to
|
|
23
|
+
include:
|
|
24
|
+
- The ability to calculate, render, and allow users to fill out forms specified as Questionnaires as
|
|
25
|
+
directed by the Questionnaire's elements and extensions: Completing Questionnaires is a visual task
|
|
26
|
+
and DTR and the underlying Structured Data Capture specification contain many details about directives
|
|
27
|
+
that control the behavior of Questionnaires while users are completing them. Clients are required to
|
|
28
|
+
support the behavior of the Questionnaire items and extensions listed as must support, and they are
|
|
29
|
+
required to support or gracefully ignore non-must support items and extensions present on the differential
|
|
30
|
+
tabs of DTR Questionnaire profiles ([base](https://hl7.org/fhir/us/davinci-dtr/2.2.0/en/StructureDefinition-dtr-base-questionnaire.html),
|
|
31
|
+
[standard](https://hl7.org/fhir/us/davinci-dtr/2.2.0/en/StructureDefinition-dtr-std-questionnaire.html),
|
|
32
|
+
and [adaptive](https://hl7.org/fhir/us/davinci-dtr/2.2.0/en/StructureDefinition-dtr-questionnaire-adapt.html)).
|
|
33
|
+
By attesting **true** during this test, the tester confirms that each of the must support or differential
|
|
34
|
+
items observed within the Questionnaires returned during the previous interaction were exercised and
|
|
35
|
+
appropriately supported by the client and resulted in the correct behavior (or were ignored if allowed).
|
|
36
|
+
- The ability to complete standard Questionnaires: unlike adaptive Questionnaires, where Inferno
|
|
37
|
+
acting as the payer sees the QuestionnaireResponse on $next-question requests and determines
|
|
38
|
+
whether it is complete, Inferno has no access to QuestionnaireResponses for standard Questionnaires.
|
|
39
|
+
By attesting **true** during this test, the tester confirms that each unique Questionnaire returned
|
|
40
|
+
by Inferno during the previous interaction, including the standard Questionnaires, was completed at least once.
|
|
41
|
+
- The ability to store completed forms for use as a QuestionnaireResponse: Completed forms are generally
|
|
42
|
+
intended to be communicated to downstream systems for particularly uses, but DTR does not specify an
|
|
43
|
+
access mechanism or required communication API. Thus, Inferno does not have a way to see and confirm
|
|
44
|
+
that completed forms have been stored appropriately and made avaialble as QuestionnaireResponses. By
|
|
45
|
+
attesting **true** during this test, tester confirm that all completed Questionnaires were stored
|
|
46
|
+
in such a way as to allow downstream communication as QuestionnaireResponses.
|
|
47
|
+
|
|
48
|
+
To assist testers in making these determinations, the attestation dialog will include
|
|
49
|
+
- The list of unique Questionnaires returned during the previous interaction so that testers
|
|
50
|
+
can confirm that each unique Questionnaires was completed at least once and all completed forms were stored.
|
|
51
|
+
- The list of Questionnaire must support elements and extensions observed within the Questionnaires
|
|
52
|
+
returned during the previous interaction along with links to descriptions of them so that testers
|
|
53
|
+
can confirm that they were exercised, appropriately supported, and drove the correct form behavior.
|
|
54
|
+
- The list of Questionnaire non-must support differential elements and extensions observed within the
|
|
55
|
+
Questionnaires returned during the previous interaction along with links to descriptions of them so
|
|
56
|
+
that testers can confirm that they were exercised, appropriately supported, and drove the correct form behavior
|
|
57
|
+
or were gracefully ignored without hindering completion of the form.
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
output :attest_true_url
|
|
61
|
+
output :attest_false_url
|
|
62
|
+
|
|
63
|
+
def target_tags
|
|
64
|
+
tags = [QUESTIONNAIRE_PACKAGE_TAG]
|
|
65
|
+
tags << config.options[:dtr_workflow_tag] if config.options[:dtr_workflow_tag].present?
|
|
66
|
+
|
|
67
|
+
tags
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def requests_to_analyze
|
|
71
|
+
@requests_to_analyze ||= load_tagged_requests(*target_tags)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def returned_questionnaires_for_display
|
|
75
|
+
requests_to_analyze.each_with_object([]) do |request, questionnaires|
|
|
76
|
+
request_parameters = FHIR.from_contents(request.response_body)
|
|
77
|
+
next unless request_parameters.is_a?(FHIR::Parameters)
|
|
78
|
+
|
|
79
|
+
questionnaires.concat(
|
|
80
|
+
questionnaires_from_questionnaire_package_output_parameters(request_parameters)
|
|
81
|
+
.map { |questionnaire| questionnaire_display(questionnaire) }
|
|
82
|
+
)
|
|
83
|
+
rescue JSON::ParserError
|
|
84
|
+
next
|
|
85
|
+
end.uniq
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
LIST_ENTRY_PREFIX = "\n - ".freeze
|
|
89
|
+
|
|
90
|
+
run do
|
|
91
|
+
check_for_short_circuit(ok_message: config.options[:short_circuit_pass_message])
|
|
92
|
+
skip_if no_questionnaires_returned?(requests_to_analyze),
|
|
93
|
+
'No Questionnaire Package requests returned a Questionnaire.'
|
|
94
|
+
|
|
95
|
+
identifier = SecureRandom.hex(32)
|
|
96
|
+
attest_true_url = "#{resume_pass_url}?token=#{identifier}"
|
|
97
|
+
attest_false_url = "#{resume_fail_url}?token=#{identifier}"
|
|
98
|
+
output(attest_true_url:)
|
|
99
|
+
output(attest_false_url:)
|
|
100
|
+
|
|
101
|
+
wait(
|
|
102
|
+
identifier: identifier,
|
|
103
|
+
message: %(
|
|
104
|
+
I attest that the DTR client application supported the completion
|
|
105
|
+
of all unique Questionnaires returned by Inferno in response to client requests
|
|
106
|
+
during the previous interaction, including
|
|
107
|
+
- Rendering, pre-populating answers, and allowing users to fill out the form as
|
|
108
|
+
indicated by the items and directives in the Questionnaires (see list of
|
|
109
|
+
observed items and extensions below).
|
|
110
|
+
- Storage of each completed Questionnaires for later use as QuestionnaireResponses
|
|
111
|
+
(see list of returned Questionnaires below).
|
|
112
|
+
|
|
113
|
+
[Click here](#{attest_true_url}) if the above statement is **true**.
|
|
114
|
+
|
|
115
|
+
[Click here](#{attest_false_url}) if the above statement is **false**.
|
|
116
|
+
|
|
117
|
+
-------------
|
|
118
|
+
|
|
119
|
+
Questionnaires returned during the previous interaction for which a
|
|
120
|
+
response must have been completed and stored to attest **true**:
|
|
121
|
+
- #{returned_questionnaires_for_display.join(LIST_ENTRY_PREFIX)}
|
|
122
|
+
|
|
123
|
+
Must Support Questionnaire items and extensions that must have been followed
|
|
124
|
+
to attest **true**: TODO
|
|
125
|
+
|
|
126
|
+
Additional Questionnaire items and extensions that must have been followed or
|
|
127
|
+
gracefully ignored to attest **true**: TODO
|
|
128
|
+
)
|
|
129
|
+
)
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
require_relative '../dtr_full_ehr_abstract_adaptive_group'
|
|
2
|
+
|
|
3
|
+
module DaVinciDTRTestKit
|
|
4
|
+
class DTRFullEHRV220AdditionalQuestionnairesForMS < DTRFullEHRV220AbstractAdaptive
|
|
5
|
+
title 'Additional Questionnaires for Must Support Coverage'
|
|
6
|
+
id :dtr_full_ehr_v220_additional_qustionnaires_for_ms
|
|
7
|
+
description <<~DESCRIPTION
|
|
8
|
+
During this group, the DTR client will have the opportunity to
|
|
9
|
+
complete additional Questionnaires to demonstrate must support
|
|
10
|
+
element coverage.
|
|
11
|
+
DESCRIPTION
|
|
12
|
+
run_as_group
|
|
13
|
+
|
|
14
|
+
config(
|
|
15
|
+
options: {
|
|
16
|
+
qp_single_use: false,
|
|
17
|
+
dtr_workflow_tag: 'additional_must_support',
|
|
18
|
+
qp_response_template_input: 'additional_ms_qp_responses',
|
|
19
|
+
nq_questionnaire_template_input: 'additional_ms_nq_responses',
|
|
20
|
+
short_circuit_pass_input: 'complete_additional_questionnaires',
|
|
21
|
+
short_circuit_pass_message: 'Tester chose not to complete additional Questionnaires.',
|
|
22
|
+
adaptive_questionnaires_optional: true
|
|
23
|
+
}
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
input :complete_additional_questionnaires,
|
|
27
|
+
title: 'Complete additional Questionnaires?',
|
|
28
|
+
type: 'radio',
|
|
29
|
+
options: {
|
|
30
|
+
list_options: [
|
|
31
|
+
{
|
|
32
|
+
label: 'Yes, demonstrate more Questionnaires with additional must support elements now.',
|
|
33
|
+
value: 'true'
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
label: 'No, all must support elements were already demonstrated in previous tests.',
|
|
37
|
+
value: 'false'
|
|
38
|
+
}
|
|
39
|
+
]
|
|
40
|
+
},
|
|
41
|
+
optional: false,
|
|
42
|
+
description: %(
|
|
43
|
+
Must support evaluation will consider all Questionnaires completed during the most
|
|
44
|
+
recent execution of each scenario during this session. Select `Yes` to provide
|
|
45
|
+
additional Questionnaires for Inferno to respond with now so that the remaining must support
|
|
46
|
+
elements can be demonstrated. Otherwise, select `No` to evaluate must support requirements
|
|
47
|
+
without completing additional Questionnaires.
|
|
48
|
+
),
|
|
49
|
+
default: 'true'
|
|
50
|
+
input :additional_ms_qp_responses,
|
|
51
|
+
title: 'Additional Must Support $questionnaire-package Response Template',
|
|
52
|
+
type: 'textarea',
|
|
53
|
+
optional: false,
|
|
54
|
+
description: %(
|
|
55
|
+
Template for $questionnaire-package responses for Inferno to send back.
|
|
56
|
+
),
|
|
57
|
+
enable_when: { input_name: 'complete_additional_questionnaires', value: 'true' },
|
|
58
|
+
default: File.read(File.join(__dir__, '..', '..', 'fixtures', 'empty_templates',
|
|
59
|
+
'parameters_questionnaire_package_empty.json'))
|
|
60
|
+
input :additional_ms_nq_responses,
|
|
61
|
+
title: 'Additional Must Support $next-question Response Template',
|
|
62
|
+
type: 'textarea',
|
|
63
|
+
optional: false,
|
|
64
|
+
description: %(
|
|
65
|
+
Template for $next-question responses for Inferno to send back. May be a single
|
|
66
|
+
Questionnaire or a JSON array of Questionnaires; when an array is provided, Inferno
|
|
67
|
+
selects the first Questionnaire whose url (and version, if the request's contained
|
|
68
|
+
Questionnaire has one) matches the contained Questionnaire in the request.
|
|
69
|
+
),
|
|
70
|
+
enable_when: { input_name: 'complete_additional_questionnaires', value: 'true' },
|
|
71
|
+
default: File.read(File.join(__dir__, '..', '..', 'fixtures', 'empty_templates',
|
|
72
|
+
'next_question_template_empty.json'))
|
|
73
|
+
end
|
|
74
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
require_relative '../../../tags'
|
|
2
|
+
require_relative '../../../cross_suite/v2.2.0/questionnaire_helper'
|
|
3
|
+
require_relative '../../../cross_suite/generated_profile_metadata'
|
|
4
|
+
|
|
5
|
+
module DaVinciDTRTestKit
|
|
6
|
+
class DTRFullEHRV220QuestionnaireAdaptiveMustSupportTest < Inferno::Test
|
|
7
|
+
include QuestionnaireHelper
|
|
8
|
+
|
|
9
|
+
MUST_SUPPORT_METADATA = GeneratedProfileMetadata.for('v2.2.0', 'dtr_questionnaire_adapt')
|
|
10
|
+
|
|
11
|
+
id :dtr_full_ehr_v220_questionnaire_adaptive_must_support
|
|
12
|
+
title 'Client supports adaptive Questionnaire must support elements and extensions'
|
|
13
|
+
description %(
|
|
14
|
+
This test confirms that all must support elements added in the
|
|
15
|
+
[DTR Questionnaire for adaptive form](https://hl7.org/fhir/us/davinci-dtr/2.2.0/en/StructureDefinition-dtr-questionnaire-adapt.html)
|
|
16
|
+
ave been observed across all completed adaptive Questionnaires during previous tests.
|
|
17
|
+
This does not include must support elements flagged within the
|
|
18
|
+
[DTR Base Questionnaire](https://hl7.org/fhir/us/davinci-dtr/2.2.0/en/StructureDefinition-dtr-base-questionnaire.html)
|
|
19
|
+
profile. Note that adaptive Questionnaires from test scenarios where the Questionnaire
|
|
20
|
+
was not completed, e.g., due to errors within referenced CQL, are not included in this
|
|
21
|
+
analysis. During execution of those previous tests, testers attested to the correct
|
|
22
|
+
display of, interaction with, and population of the Questionnaires as controlled by
|
|
23
|
+
the elements aand extensions present in those Questionnaires.
|
|
24
|
+
|
|
25
|
+
This includes the following elements:
|
|
26
|
+
- #{MUST_SUPPORT_METADATA.must_support_strings.join("\n - ")}
|
|
27
|
+
)
|
|
28
|
+
simulation_verification
|
|
29
|
+
|
|
30
|
+
def target_tags
|
|
31
|
+
[CLIENT_QUESTIONNAIRE_MUST_SUPPORT, CLIENT_NEXT_TAG]
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
run do
|
|
35
|
+
requests = load_tagged_requests(*target_tags)
|
|
36
|
+
skip_if requests.blank?, 'Requests must be made prior to running this test.'
|
|
37
|
+
|
|
38
|
+
questionnaires = questionnaires_from_operation_responses(requests, include_standard: false)
|
|
39
|
+
skip_if questionnaires.blank?, 'No adaptive Questionnaires found to evaluate.'
|
|
40
|
+
|
|
41
|
+
assert_must_support_elements_present(questionnaires, MUST_SUPPORT_METADATA.profile_url,
|
|
42
|
+
metadata: MUST_SUPPORT_METADATA)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require_relative '../../../tags'
|
|
2
|
+
require_relative '../../../cross_suite/v2.2.0/questionnaire_helper'
|
|
3
|
+
require_relative '../../../cross_suite/generated_profile_metadata'
|
|
4
|
+
|
|
5
|
+
module DaVinciDTRTestKit
|
|
6
|
+
class DTRFullEHRV220QuestionnaireBaseMustSupportTest < Inferno::Test
|
|
7
|
+
include QuestionnaireHelper
|
|
8
|
+
|
|
9
|
+
MUST_SUPPORT_METADATA = GeneratedProfileMetadata.for('v2.2.0', 'dtr_base_questionnaire')
|
|
10
|
+
|
|
11
|
+
id :dtr_full_ehr_v220_questionnaire_base_must_support
|
|
12
|
+
title 'Client supports base Questionnaire must support elements and extensions'
|
|
13
|
+
description %(
|
|
14
|
+
This test confirms that all must support elements and extensions defined on 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 across all completed Questionnaires during
|
|
17
|
+
previous tests. Note that Questionnaires from test scenarios where the Questionnaire
|
|
18
|
+
was not completed, e.g., due to errors within referenced CQL, are not included in this
|
|
19
|
+
analysis. During execution of those previous tests, testers attested to the correct
|
|
20
|
+
display of, interaction with, and population of the Questionnaires as controlled by
|
|
21
|
+
the elements aand extensions present in those Questionnaires.
|
|
22
|
+
|
|
23
|
+
This includes the following elements:
|
|
24
|
+
- #{MUST_SUPPORT_METADATA.must_support_strings.join("\n - ")}
|
|
25
|
+
)
|
|
26
|
+
simulation_verification
|
|
27
|
+
|
|
28
|
+
def target_tags
|
|
29
|
+
[CLIENT_QUESTIONNAIRE_MUST_SUPPORT]
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
run do
|
|
33
|
+
requests = load_tagged_requests(*target_tags)
|
|
34
|
+
skip_if requests.blank?, 'Requests must be made prior to running this test'
|
|
35
|
+
|
|
36
|
+
questionnaires = questionnaires_from_operation_responses(requests)
|
|
37
|
+
skip_if questionnaires.blank?, 'No Questionnaires found to evaluate in operation responses.'
|
|
38
|
+
|
|
39
|
+
assert_must_support_elements_present(questionnaires.compact, MUST_SUPPORT_METADATA.profile_url,
|
|
40
|
+
metadata: MUST_SUPPORT_METADATA)
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
require_relative '../../../tags'
|
|
2
|
+
require_relative '../../../cross_suite/v2.2.0/questionnaire_helper'
|
|
3
|
+
require_relative '../../../cross_suite/generated_profile_metadata'
|
|
4
|
+
|
|
5
|
+
module DaVinciDTRTestKit
|
|
6
|
+
class DTRFullEHRV220QuestionnaireStandardMustSupportTest < Inferno::Test
|
|
7
|
+
include QuestionnaireHelper
|
|
8
|
+
|
|
9
|
+
MUST_SUPPORT_METADATA = GeneratedProfileMetadata.for('v2.2.0', 'dtr_std_questionnaire')
|
|
10
|
+
|
|
11
|
+
id :dtr_full_ehr_v220_questionnaire_standard_must_support
|
|
12
|
+
title 'Client supports standard Questionnaire must support elements and extensions'
|
|
13
|
+
description %(
|
|
14
|
+
This test confirms that all must support elements added in the
|
|
15
|
+
[DTR Standard Questionnaire](https://hl7.org/fhir/us/davinci-dtr/2.2.0/en/StructureDefinition-dtr-std-questionnaire.html)
|
|
16
|
+
ave been observed across all completed standard Questionnaires during previous tests.
|
|
17
|
+
This does not include must support elements flagged within the
|
|
18
|
+
[DTR Base Questionnaire](https://hl7.org/fhir/us/davinci-dtr/2.2.0/en/StructureDefinition-dtr-base-questionnaire.html)
|
|
19
|
+
profile. Note that standard Questionnaires from test scenarios where the Questionnaire
|
|
20
|
+
was not completed, e.g., due to errors within referenced CQL, are not included in this
|
|
21
|
+
analysis. During execution of those previous tests, testers attested to the correct
|
|
22
|
+
display of, interaction with, and population of the Questionnaires as controlled by
|
|
23
|
+
the elements aand extensions present in those Questionnaires.
|
|
24
|
+
|
|
25
|
+
This includes the following elements:
|
|
26
|
+
- #{MUST_SUPPORT_METADATA.must_support_strings.join("\n - ")}
|
|
27
|
+
)
|
|
28
|
+
simulation_verification
|
|
29
|
+
|
|
30
|
+
def target_tags
|
|
31
|
+
[CLIENT_QUESTIONNAIRE_MUST_SUPPORT, QUESTIONNAIRE_PACKAGE_TAG]
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
run do
|
|
35
|
+
requests = load_tagged_requests(*target_tags)
|
|
36
|
+
skip_if requests.blank?, 'Requests must be made prior to running this test.'
|
|
37
|
+
|
|
38
|
+
questionnaires = questionnaires_from_operation_responses(requests, include_adaptive: false)
|
|
39
|
+
skip_if questionnaires.blank?, 'No standard Questionnaires found to evaluate.'
|
|
40
|
+
|
|
41
|
+
assert_must_support_elements_present(questionnaires, MUST_SUPPORT_METADATA.profile_url,
|
|
42
|
+
metadata: MUST_SUPPORT_METADATA)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module DaVinciDTRTestKit
|
|
2
|
+
# Shared by the $next-question mock endpoint and the interaction wait test so that both agree
|
|
3
|
+
# on what counts as a usable $next-question response template: a single Questionnaire or a
|
|
4
|
+
# JSON array of Questionnaires. Entries that do not parse to a FHIR Questionnaire are silently
|
|
5
|
+
# discarded rather than treated as an error, since a template array may intentionally carry
|
|
6
|
+
# entries meant for other questionnaires in the workflow.
|
|
7
|
+
module NextQuestionTemplateQuestionnaires
|
|
8
|
+
def questionnaires_from_template_value(value)
|
|
9
|
+
parsed_json = JSON.parse(value)
|
|
10
|
+
questionnaire_jsons = parsed_json.is_a?(Array) ? parsed_json : [parsed_json]
|
|
11
|
+
questionnaire_jsons.filter_map { |questionnaire_json| parse_template_questionnaire(questionnaire_json) }
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def parse_template_questionnaire(questionnaire_json)
|
|
15
|
+
parsed = FHIR.from_contents(questionnaire_json.to_json)
|
|
16
|
+
parsed if parsed.is_a?(FHIR::Questionnaire)
|
|
17
|
+
rescue StandardError
|
|
18
|
+
nil
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|