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.
Files changed (311) hide show
  1. checksums.yaml +4 -4
  2. data/config/presets/v220_full_ehr_suite_run_against_payer_suite.json.erb +19 -0
  3. data/config/presets/v220_payer_suite_run_against_full_ehr_suite.json.erb +76 -0
  4. data/lib/davinci_dtr_test_kit/cross_suite/fhirpath_utils.rb +52 -0
  5. data/lib/davinci_dtr_test_kit/cross_suite/generated/v2.2.0/dtr_base_questionnaire/metadata.yml +212 -0
  6. data/lib/davinci_dtr_test_kit/cross_suite/generated/v2.2.0/dtr_q_package_bundle/metadata.yml +39 -0
  7. data/lib/davinci_dtr_test_kit/cross_suite/generated/v2.2.0/dtr_qpackage_output_parameters/metadata.yml +30 -0
  8. data/lib/davinci_dtr_test_kit/cross_suite/generated/v2.2.0/dtr_questionnaire_adapt/metadata.yml +17 -0
  9. data/lib/davinci_dtr_test_kit/cross_suite/generated/v2.2.0/dtr_questionnaire_adapt_search/metadata.yml +91 -0
  10. data/lib/davinci_dtr_test_kit/cross_suite/generated/v2.2.0/dtr_std_questionnaire/metadata.yml +17 -0
  11. data/lib/davinci_dtr_test_kit/cross_suite/generated/v2.2.0/metadata.yml +403 -0
  12. data/lib/davinci_dtr_test_kit/cross_suite/generated_profile_metadata.rb +22 -0
  13. data/lib/davinci_dtr_test_kit/cross_suite/response_selection_utils.rb +85 -0
  14. data/lib/davinci_dtr_test_kit/{cql_test.rb → cross_suite/v2.0.1/cql_test.rb} +3 -3
  15. data/lib/davinci_dtr_test_kit/cross_suite/v2.2.0/dtr_conformance_verification.rb +21 -0
  16. data/lib/davinci_dtr_test_kit/cross_suite/v2.2.0/multi_request_message_helper.rb +35 -0
  17. data/lib/davinci_dtr_test_kit/cross_suite/v2.2.0/questionnaire_helper.rb +162 -0
  18. data/lib/davinci_dtr_test_kit/{dtr_client_options.rb → full_ehr/dtr_full_ehr_options.rb} +1 -1
  19. data/lib/davinci_dtr_test_kit/{endpoints → full_ehr/endpoints}/mock_payer.rb +9 -3
  20. data/lib/davinci_dtr_test_kit/{endpoints → full_ehr/endpoints}/mock_udap_smart_server/token_endpoint.rb +2 -2
  21. data/lib/davinci_dtr_test_kit/full_ehr/fixture_loader.rb +37 -0
  22. data/lib/davinci_dtr_test_kit/full_ehr/fixtures/dinner_adaptive/dinner_order_adaptive_next_question_template.json +243 -0
  23. data/lib/davinci_dtr_test_kit/full_ehr/fixtures/dinner_adaptive/parameters_questionnaire_dinner_order_adaptive.json +104 -0
  24. data/lib/davinci_dtr_test_kit/full_ehr/fixtures/dinner_static/parameters_questionnaire_dinner_order_static.json +291 -0
  25. data/lib/davinci_dtr_test_kit/full_ehr/fixtures/empty_templates/next_question_template_empty.json +1 -0
  26. data/lib/davinci_dtr_test_kit/full_ehr/fixtures/empty_templates/parameters_questionnaire_package_empty.json +9 -0
  27. data/lib/davinci_dtr_test_kit/full_ehr/short_circuit_interaction_verification.rb +73 -0
  28. 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
  29. 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
  30. 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
  31. 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
  32. 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
  33. 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
  34. 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
  35. 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
  36. 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
  37. 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
  38. 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
  39. 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
  40. data/lib/davinci_dtr_test_kit/{dtr_full_ehr_suite.rb → full_ehr/v2.0.1/dtr_full_ehr_suite.rb} +23 -20
  41. 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
  42. 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
  43. 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
  44. 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
  45. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/must_support/dtr_must_support_attestation_test.rb +2 -1
  46. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/must_support/dtr_questionnaire_must_support_test.rb +3 -2
  47. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/payer_registration/configuration_display_smart_test.rb +1 -1
  48. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/payer_registration/configuration_display_udap_test.rb +1 -1
  49. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_custom_questionnaire_expressions_test.rb +3 -2
  50. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_custom_questionnaire_extensions_test.rb +3 -2
  51. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_custom_questionnaire_libraries_test.rb +3 -2
  52. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_custom_questionnaire_package_validation_test.rb +3 -2
  53. 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
  54. 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
  55. 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
  56. 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
  57. 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
  58. 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
  59. 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
  60. 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
  61. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_prepopulation_attestation_test.rb +1 -1
  62. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_prepopulation_override_attestation_test.rb +1 -1
  63. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_questionnaire_package_request_validation_test.rb +1 -1
  64. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_questionnaire_response_basic_conformance_test.rb +2 -2
  65. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_questionnaire_response_prepopulation_test.rb +1 -1
  66. data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/shared/dtr_rendering_attestation_test.rb +1 -1
  67. 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
  68. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/dtr_full_ehr_abstract_adaptive_group.rb +87 -0
  69. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/dtr_full_ehr_abstract_standard_group.rb +59 -0
  70. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/dtr_full_ehr_suite.rb +145 -0
  71. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/dtr_full_ehr_suite_description_v220.md +254 -0
  72. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/full_ehr_next_question_endpoint.rb +391 -0
  73. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/full_ehr_questionnaire_package_endpoint.rb +206 -0
  74. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/interaction/adaptive_questionnaires_completed_test.rb +108 -0
  75. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/interaction/interaction_wait_test.rb +177 -0
  76. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/interaction/ui_display_and_interaction_attestation_test.rb +132 -0
  77. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/must_support/dtr_additional_questionnaires_interaction_group.rb +74 -0
  78. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/must_support/dtr_questionnaire_adaptive_must_support_test.rb +45 -0
  79. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/must_support/dtr_questionnaire_base_must_support_test.rb +43 -0
  80. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/must_support/dtr_questionnaire_standard_must_support_test.rb +45 -0
  81. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/next_question_template_questionnaires.rb +21 -0
  82. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/request/dtr_next_question_request_validation_test.rb +85 -0
  83. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/request/dtr_questionnaire_package_request_validation_test.rb +89 -0
  84. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/response/dtr_next_question_response_validation_test.rb +85 -0
  85. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/response/dtr_questionnaire_package_response_validation_test.rb +77 -0
  86. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/workflows/dtr_full_ehr_workflow_adaptive_group.rb +24 -0
  87. data/lib/davinci_dtr_test_kit/full_ehr/v2.2.0/workflows/dtr_full_ehr_workflow_standard_group.rb +21 -0
  88. data/lib/davinci_dtr_test_kit/generator/ig_metadata.rb +21 -0
  89. data/lib/davinci_dtr_test_kit/generator/profile_metadata_extractor.rb +57 -0
  90. data/lib/davinci_dtr_test_kit/generator.rb +117 -0
  91. data/lib/davinci_dtr_test_kit/igs/davinci_dtr_2.2.0.tgz +0 -0
  92. data/lib/davinci_dtr_test_kit/{dtr_options.rb → light_ehr/dtr_light_ehr_options.rb} +1 -1
  93. data/lib/davinci_dtr_test_kit/{dtr_light_ehr_suite.rb → light_ehr/v2.0.1/dtr_light_ehr_suite.rb} +21 -10
  94. data/lib/davinci_dtr_test_kit/{client_groups/light_ehr → light_ehr/v2.0.1}/dtr_light_ehr_supported_endpoints_group.rb +5 -5
  95. data/lib/davinci_dtr_test_kit/{client_groups/light_ehr → light_ehr/v2.0.1}/dtr_smart_ehr_launch.rb +3 -3
  96. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/communication_request/communication_request_read.rb +1 -1
  97. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/coverage/coverage_read.rb +1 -1
  98. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/device_request/device_request_read.rb +1 -1
  99. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/encounter/encounter_read.rb +1 -1
  100. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/medication_request/medication_request_read.rb +1 -1
  101. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/nutrition_order/nutrition_order_read.rb +1 -1
  102. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_create.rb +1 -1
  103. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_update.rb +1 -1
  104. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/service_request/service_request_read.rb +1 -1
  105. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task/task_create.rb +1 -1
  106. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task/task_read.rb +1 -1
  107. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task/task_update.rb +1 -1
  108. data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/vision_prescription/vision_prescription_read.rb +1 -1
  109. 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
  110. 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
  111. 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
  112. 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
  113. 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
  114. data/lib/davinci_dtr_test_kit/metadata.rb +13 -68
  115. data/lib/davinci_dtr_test_kit/requirements/davinci_dtr_test_kit_requirements.csv +216 -0
  116. data/lib/davinci_dtr_test_kit/requirements/generated/dtr_full_ehr_requirements_coverage.csv +1 -1
  117. data/lib/davinci_dtr_test_kit/requirements/generated/dtr_full_ehr_v220_requirements_coverage.csv +1 -0
  118. data/lib/davinci_dtr_test_kit/requirements/generated/dtr_light_ehr_requirements_coverage.csv +1 -1
  119. data/lib/davinci_dtr_test_kit/requirements/generated/dtr_payer_server_requirements_coverage.csv +1 -1
  120. data/lib/davinci_dtr_test_kit/requirements/generated/dtr_payer_server_v220_requirements_coverage.csv +114 -0
  121. data/lib/davinci_dtr_test_kit/requirements/generated/dtr_smart_app_requirements_coverage.csv +1 -1
  122. data/lib/davinci_dtr_test_kit/requirements/hl7.fhir.us.davinci-dtr_2.2.0_requirements.xlsx +0 -0
  123. data/lib/davinci_dtr_test_kit/{endpoints/mock_payer → server/endpoints}/next_question_proxy_endpoint.rb +2 -0
  124. data/lib/davinci_dtr_test_kit/{endpoints/mock_payer → server/endpoints}/questionnaire_package_proxy_endpoint.rb +2 -0
  125. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/adaptive_form_libraries_test.rb +2 -1
  126. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/adaptive_form_questionnaire_expressions_test.rb +2 -1
  127. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/adaptive_form_questionnaire_extensions_test.rb +2 -1
  128. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/adaptive_next_questionnaire_expressions_test.rb +2 -1
  129. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/adaptive_next_questionnaire_extensions_test.rb +2 -1
  130. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_adaptive_request_test.rb +2 -1
  131. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_adaptive_request_validation_test.rb +3 -1
  132. 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
  133. 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
  134. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_adaptive_response_validation_test.rb +4 -2
  135. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_next_request_validation_test.rb +3 -1
  136. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_next_response_validation_test.rb +3 -1
  137. data/lib/davinci_dtr_test_kit/{dtr_payer_server_suite.rb → server/v2.0.1/dtr_payer_server_suite.rb} +13 -10
  138. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1}/payer_server_adaptive_group.rb +13 -13
  139. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1}/payer_server_static_group.rb +6 -6
  140. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/static_forms}/static_form_libraries_test.rb +2 -1
  141. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/static_forms}/static_form_questionnaire_expressions_test.rb +2 -1
  142. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/static_forms}/static_form_questionnaire_extensions_test.rb +2 -1
  143. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/static_forms}/static_form_request_test.rb +4 -2
  144. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/static_forms}/static_form_request_validation_test.rb +3 -2
  145. data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/static_forms}/static_form_response_validation_test.rb +5 -3
  146. data/lib/davinci_dtr_test_kit/server/v2.2.0/client_simulation.rb +297 -0
  147. data/lib/davinci_dtr_test_kit/server/v2.2.0/dtr_payer_server_capability_statement_test.rb +73 -0
  148. data/lib/davinci_dtr_test_kit/server/v2.2.0/dtr_payer_server_suite.rb +322 -0
  149. data/lib/davinci_dtr_test_kit/server/v2.2.0/dtr_payer_server_suite_description_v220.md +37 -0
  150. data/lib/davinci_dtr_test_kit/server/v2.2.0/interaction_test.rb +97 -0
  151. data/lib/davinci_dtr_test_kit/server/v2.2.0/log_questionnaire_errors_support_test.rb +57 -0
  152. data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_adaptive_must_support_test.rb +47 -0
  153. data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_adaptive_search_must_support_test.rb +40 -0
  154. data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_base_must_support_test.rb +40 -0
  155. data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_package_bundle_must_support_test.rb +38 -0
  156. data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_package_output_parameters_must_support_test.rb +37 -0
  157. data/lib/davinci_dtr_test_kit/server/v2.2.0/must_support/questionnaire_standard_must_support_test.rb +39 -0
  158. data/lib/davinci_dtr_test_kit/server/v2.2.0/next_question_request_validation_test.rb +45 -0
  159. data/lib/davinci_dtr_test_kit/server/v2.2.0/next_question_support/adaptive_questionnaire_endpoint_test.rb +98 -0
  160. data/lib/davinci_dtr_test_kit/server/v2.2.0/next_question_support/invalid_questionnaire_response_test.rb +43 -0
  161. data/lib/davinci_dtr_test_kit/server/v2.2.0/next_question_support/next_contained_questionnaire_response_references_test.rb +46 -0
  162. data/lib/davinci_dtr_test_kit/server/v2.2.0/next_question_support/next_question_response_references_test.rb +56 -0
  163. data/lib/davinci_dtr_test_kit/server/v2.2.0/next_question_support/next_question_response_validation_test.rb +67 -0
  164. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/contained_binary_test.rb +58 -0
  165. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/contained_binary_validation.rb +128 -0
  166. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/cql_library_validation_test.rb +58 -0
  167. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/questionnaire_design_support.rb +65 -0
  168. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/questionnaire_expression_elm_test.rb +81 -0
  169. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/questionnaire_expression_language_test.rb +63 -0
  170. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/questionnaire_prepopulation_test.rb +42 -0
  171. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_design/questionnaire_relevance_logic_test.rb +40 -0
  172. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_operation_validation.rb +440 -0
  173. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_request_validation_test.rb +42 -0
  174. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/adaptive_questionnaire_response_contained_questionnaire_test.rb +127 -0
  175. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/adaptive_questionnaire_response_validation_test.rb +61 -0
  176. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/contained_questionnaire_response_references_test.rb +42 -0
  177. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/dtr_server_no_custom_extension_test.rb +184 -0
  178. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/dtr_server_questionnaire_not_found_test.rb +76 -0
  179. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/dtr_server_questionnaire_package_contents_test.rb +89 -0
  180. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/initial_questionnaire_response_test.rb +132 -0
  181. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/questionnaire_package_input_type_test.rb +110 -0
  182. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/questionnaire_references_version_specific_test.rb +79 -0
  183. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/questionnaire_response_questionnaire_canonical_test.rb +89 -0
  184. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/questionnaire_response_references_test.rb +51 -0
  185. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/questionnaire_response_validation_test.rb +63 -0
  186. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/source_data_error_test.rb +43 -0
  187. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_package_support/value_set_validation_test.rb +90 -0
  188. data/lib/davinci_dtr_test_kit/server/v2.2.0/questionnaire_response_reference_validation.rb +133 -0
  189. data/lib/davinci_dtr_test_kit/server/v2.2.0/value_set_expand_support/small_value_set_expansion_test.rb +120 -0
  190. data/lib/davinci_dtr_test_kit/server/v2.2.0/value_set_expand_support/value_set_expansion_test.rb +51 -0
  191. data/lib/davinci_dtr_test_kit/server/v2.2.0/value_set_expand_support/value_set_expansion_validation.rb +58 -0
  192. data/lib/davinci_dtr_test_kit/{endpoints → smart_app/endpoints}/mock_authorization/token_endpoint.rb +1 -1
  193. data/lib/davinci_dtr_test_kit/{endpoints → smart_app/endpoints}/mock_ehr/fhir_get_endpoint.rb +1 -1
  194. data/lib/davinci_dtr_test_kit/smart_app/endpoints/mock_payer/smart_app_next_question_endpoint.rb +12 -0
  195. data/lib/davinci_dtr_test_kit/smart_app/endpoints/mock_payer/smart_app_questionnaire_package_endpoint.rb +12 -0
  196. 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
  197. 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
  198. 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
  199. data/lib/davinci_dtr_test_kit/{auth_groups → smart_app/v2.0.1/auth}/token_request_test.rb +1 -1
  200. 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
  201. 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
  202. data/lib/davinci_dtr_test_kit/{client_groups/respiratory → smart_app/v2.0.1}/dtr_smart_app_respiratory_workflow_group.rb +3 -3
  203. 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
  204. data/lib/davinci_dtr_test_kit/{dtr_smart_app_suite.rb → smart_app/v2.0.1/dtr_smart_app_suite.rb} +25 -21
  205. data/lib/davinci_dtr_test_kit/{docs → smart_app/v2.0.1}/dtr_smart_app_suite_description_v201.md +8 -0
  206. 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
  207. data/lib/davinci_dtr_test_kit/{auth_groups → smart_app/v2.0.1}/oauth2_authentication_group.rb +2 -2
  208. data/lib/davinci_dtr_test_kit/{client_groups/respiratory → smart_app/v2.0.1/static_respiratory}/dtr_respiratory_questionnaire_package_group.rb +1 -1
  209. 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
  210. data/lib/davinci_dtr_test_kit/{client_groups/respiratory → smart_app/v2.0.1/static_respiratory}/dtr_respiratory_questionnaire_response_group.rb +2 -2
  211. 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
  212. data/lib/davinci_dtr_test_kit/{client_groups/respiratory → smart_app/v2.0.1/static_respiratory}/dtr_respiratory_rendering_attestation_test.rb +1 -1
  213. 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
  214. 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
  215. 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
  216. 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
  217. 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
  218. 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
  219. 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
  220. data/lib/davinci_dtr_test_kit/tags.rb +2 -0
  221. data/lib/davinci_dtr_test_kit/version.rb +2 -2
  222. data/lib/davinci_dtr_test_kit.rb +6 -4
  223. metadata +329 -215
  224. data/lib/davinci_dtr_test_kit/certs/InfernoCA.key +0 -52
  225. data/lib/davinci_dtr_test_kit/certs/InfernoCA.pem +0 -35
  226. data/lib/davinci_dtr_test_kit/certs/TestKit.pem +0 -32
  227. data/lib/davinci_dtr_test_kit/certs/TestKitPrivateKey.key +0 -28
  228. data/lib/davinci_dtr_test_kit/endpoints/mock_payer/full_ehr_next_question_endpoint.rb +0 -30
  229. data/lib/davinci_dtr_test_kit/endpoints/mock_payer/full_ehr_questionnaire_package_endpoint.rb +0 -31
  230. data/lib/davinci_dtr_test_kit/fixture_loader.rb +0 -21
  231. /data/lib/davinci_dtr_test_kit/{endpoints → cross_suite}/cors.rb +0 -0
  232. /data/lib/davinci_dtr_test_kit/{dtr_questionnaire_response_validation.rb → cross_suite/v2.0.1/dtr_questionnaire_response_validation.rb} +0 -0
  233. /data/lib/davinci_dtr_test_kit/{descriptions.rb → full_ehr/descriptions.rb} +0 -0
  234. /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/dinner_adaptive/dinner_order_adaptive_next_question_burrito.json +0 -0
  235. /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/dinner_adaptive/dinner_order_adaptive_next_question_hamburger.json +0 -0
  236. /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/dinner_adaptive/dinner_order_adaptive_next_question_initial.json +0 -0
  237. /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/dinner_adaptive/questionnaire_dinner_order_adaptive.json +0 -0
  238. /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/dinner_static/questionnaire_dinner_order_static.json +0 -0
  239. /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/dinner_static/questionnaire_response_dinner_order_static.json +0 -0
  240. /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/respiratory_assist_device/pre_populated_questionnaire_response.json +0 -0
  241. /data/lib/davinci_dtr_test_kit/{fixtures → full_ehr/fixtures}/respiratory_assist_device/questionnaire_package.json +0 -0
  242. /data/lib/davinci_dtr_test_kit/{fixtures.rb → full_ehr/fixtures.rb} +0 -0
  243. /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
  244. /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
  245. /data/lib/davinci_dtr_test_kit/{client_groups/auth → full_ehr/v2.0.1}/dtr_client_payer_auth_smart_group.rb +0 -0
  246. /data/lib/davinci_dtr_test_kit/{client_groups/auth → full_ehr/v2.0.1}/dtr_client_payer_auth_udap_group.rb +0 -0
  247. /data/lib/davinci_dtr_test_kit/{docs → full_ehr/v2.0.1}/dtr_full_ehr_suite_description_v201.md +0 -0
  248. /data/lib/davinci_dtr_test_kit/{client_groups → full_ehr/v2.0.1}/must_support/questionnaire_must_support_elements.rb +0 -0
  249. /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
  250. /data/lib/davinci_dtr_test_kit/{create_test.rb → light_ehr/create_test.rb} +0 -0
  251. /data/lib/davinci_dtr_test_kit/{endpoints/mock_payer → light_ehr/endpoints}/light_ehr_supported_payer_endpoint.rb +0 -0
  252. /data/lib/davinci_dtr_test_kit/{read_test.rb → light_ehr/read_test.rb} +0 -0
  253. /data/lib/davinci_dtr_test_kit/{update_test.rb → light_ehr/update_test.rb} +0 -0
  254. /data/lib/davinci_dtr_test_kit/{docs → light_ehr/v2.0.1}/dtr_light_ehr_suite_description_v201.md +0 -0
  255. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/communication_request/communication_request_must_support_test.rb +0 -0
  256. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/communication_request/communication_request_validation.rb +0 -0
  257. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/communication_request/metadata.yml +0 -0
  258. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/communication_request_group.rb +0 -0
  259. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/coverage/coverage_must_support_test.rb +0 -0
  260. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/coverage/coverage_validation.rb +0 -0
  261. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/coverage/metadata.yml +0 -0
  262. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/coverage_group.rb +0 -0
  263. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/device_request/device_request_must_support_test.rb +0 -0
  264. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/device_request/device_request_validation.rb +0 -0
  265. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/device_request/metadata.yml +0 -0
  266. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/device_request_group.rb +0 -0
  267. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/encounter/encounter_must_support_test.rb +0 -0
  268. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/encounter/encounter_validation.rb +0 -0
  269. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/encounter/metadata.yml +0 -0
  270. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/encounter_group.rb +0 -0
  271. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/medication_request/medication_request_must_support_test.rb +0 -0
  272. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/medication_request/medication_request_validation.rb +0 -0
  273. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/medication_request/metadata.yml +0 -0
  274. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/medication_request_group.rb +0 -0
  275. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/nutrition_order/metadata.yml +0 -0
  276. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/nutrition_order/nutrition_order_must_support_test.rb +0 -0
  277. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/nutrition_order/nutrition_order_validation.rb +0 -0
  278. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/nutrition_order_group.rb +0 -0
  279. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/metadata.yml +0 -0
  280. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_context_search.rb +0 -0
  281. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_must_support_test.rb +0 -0
  282. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_patient_search.rb +0 -0
  283. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_read.rb +0 -0
  284. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response/questionnaire_response_validation.rb +0 -0
  285. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/questionnaire_response_group.rb +0 -0
  286. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/service_request/metadata.yml +0 -0
  287. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/service_request/service_request_must_support_test.rb +0 -0
  288. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/service_request/service_request_validation.rb +0 -0
  289. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/service_request_group.rb +0 -0
  290. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task/metadata.yml +0 -0
  291. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task/task_must_support_test.rb +0 -0
  292. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task/task_validation.rb +0 -0
  293. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/task_group.rb +0 -0
  294. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/vision_prescription/metadata.yml +0 -0
  295. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/vision_prescription/vision_prescription_must_support_test.rb +0 -0
  296. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/vision_prescription/vision_prescription_validation.rb +0 -0
  297. /data/lib/davinci_dtr_test_kit/{profiles → light_ehr/v2.0.1/profiles}/vision_prescription_group.rb +0 -0
  298. /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
  299. /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
  300. /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
  301. /data/lib/davinci_dtr_test_kit/{endpoints/mock_authorization → server/endpoints}/simple_token_endpoint.rb +0 -0
  302. /data/lib/davinci_dtr_test_kit/{payer_server_groups → server/v2.0.1/adaptive_forms}/payer_server_next_response_complete_test.rb +0 -0
  303. /data/lib/davinci_dtr_test_kit/{docs → server/v2.0.1}/dtr_payer_server_suite_description_v201.md +0 -0
  304. /data/lib/davinci_dtr_test_kit/{validation_test.rb → server/validation_test.rb} +0 -0
  305. /data/lib/davinci_dtr_test_kit/{endpoints → smart_app/endpoints}/mock_authorization/authorize_endpoint.rb +0 -0
  306. /data/lib/davinci_dtr_test_kit/{endpoints → smart_app/endpoints}/mock_authorization.rb +0 -0
  307. /data/lib/davinci_dtr_test_kit/{endpoints → smart_app/endpoints}/mock_ehr/questionnaire_response_endpoint.rb +0 -0
  308. /data/lib/davinci_dtr_test_kit/{endpoints → smart_app/endpoints}/mock_ehr.rb +0 -0
  309. /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
  310. /data/lib/davinci_dtr_test_kit/{auth_groups → smart_app/v2.0.1/auth}/token_validation_test.rb +0 -0
  311. /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,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