davinci_dtr_test_kit 0.14.2 → 0.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. checksums.yaml +4 -4
  2. data/config/presets/full_ehr_postman_dinner_order_example_postman.json +19 -0
  3. data/config/presets/full_ehr_postman_respiratory_device_example.json +15 -0
  4. data/config/presets/light_ehr_ref_server_local.json +105 -0
  5. data/config/presets/light_ehr_ref_server_prod.json +85 -0
  6. data/config/presets/payer_server_adaptive_client_flow.json +37 -0
  7. data/config/presets/payer_server_adaptive_manual_flow.json +44 -0
  8. data/config/presets/payer_server_run_against_smart_app_tests.json +35 -0
  9. data/config/presets/smart_app_postman_dinner_order_example.json +44 -0
  10. data/config/presets/smart_app_postman_respiratory_device_example.json +43 -0
  11. data/lib/davinci_dtr_test_kit/auth_groups/token_validation_test.rb +1 -1
  12. data/lib/davinci_dtr_test_kit/client_groups/custom_static/dtr_custom_questionnaire_expressions_test.rb +22 -0
  13. data/lib/davinci_dtr_test_kit/client_groups/custom_static/dtr_custom_questionnaire_extensions_test.rb +19 -0
  14. data/lib/davinci_dtr_test_kit/client_groups/custom_static/dtr_custom_questionnaire_libraries_test.rb +21 -0
  15. data/lib/davinci_dtr_test_kit/client_groups/custom_static/dtr_custom_questionnaire_package_validation_test.rb +39 -0
  16. data/lib/davinci_dtr_test_kit/client_groups/custom_static/dtr_full_ehr_custom_static_workflow_group.rb +122 -0
  17. data/lib/davinci_dtr_test_kit/client_groups/custom_static/dtr_smart_app_custom_static_workflow_group.rb +91 -0
  18. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_adaptive_questionnaire_completion_group.rb → dtr_adaptive_completion_group.rb} +4 -4
  19. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_adaptive_questionnaire_followup_questions_group.rb → dtr_adaptive_followup_questions_group.rb} +4 -4
  20. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_adaptive_questionnaire_next_question_request_test.rb → dtr_adaptive_next_question_request_test.rb} +3 -2
  21. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_adaptive_questionnaire_next_question_request_validation_test.rb → dtr_adaptive_next_question_request_validation_test.rb} +3 -2
  22. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_adaptive_questionnaire_next_question_retrieval_group.rb → dtr_adaptive_next_question_retrieval_group.rb} +8 -8
  23. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_adaptive_questionnaire_response_validation_test.rb → dtr_adaptive_response_validation_test.rb} +6 -4
  24. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_full_ehr_adaptive_dinner_questionnaire_workflow_group.rb → dtr_full_ehr_adaptive_dinner_workflow_group.rb} +14 -12
  25. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_full_ehr_adaptive_questionnaire_initial_retrieval_group.rb → dtr_full_ehr_adaptive_initial_retrieval_group.rb} +10 -10
  26. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_full_ehr_adaptive_questionnaire_request_test.rb → dtr_full_ehr_adaptive_request_test.rb} +4 -2
  27. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_smart_app_questionnaire_workflow_group.rb → dtr_smart_app_adaptive_dinner_workflow_group.rb} +25 -19
  28. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_smart_app_adaptive_initial_retrieval_group.rb +24 -0
  29. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/{dtr_smart_app_adaptive_questionnaire_request_test.rb → dtr_smart_app_adaptive_request_test.rb} +2 -2
  30. data/lib/davinci_dtr_test_kit/client_groups/dinner_static/{dtr_full_ehr_questionnaire_workflow_group.rb → dtr_full_ehr_static_dinner_workflow_group.rb} +15 -14
  31. data/lib/davinci_dtr_test_kit/client_groups/dinner_static/{dtr_smart_app_questionnaire_workflow_group.rb → dtr_smart_app_static_dinner_workflow_group.rb} +18 -13
  32. data/lib/davinci_dtr_test_kit/client_groups/{full_ehr/dtr_full_ehr_rendering_enabled_questions_attestation_test.rb → dinner_static/dtr_static_dinner_enabled_questions_attestation_test.rb} +2 -2
  33. data/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_launch_attestation_test.rb +8 -3
  34. data/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_prepopulation_attestation_test.rb +3 -1
  35. data/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_prepopulation_override_attestation_test.rb +2 -1
  36. data/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_questionnaire_package_request_test.rb +2 -1
  37. data/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_questionnaire_response_conformance_test.rb +6 -1
  38. data/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_questionnaire_response_correctness_test.rb +11 -22
  39. data/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_saving_questionnaire_response_group.rb +4 -4
  40. data/lib/davinci_dtr_test_kit/client_groups/full_ehr/dtr_full_ehr_store_attestation_test.rb +2 -1
  41. data/lib/davinci_dtr_test_kit/client_groups/light_ehr/dtr_light_ehr_supported_endpoints_group.rb +22 -0
  42. data/lib/davinci_dtr_test_kit/client_groups/light_ehr/dtr_light_ehr_supported_payers_accept_header_test.rb +26 -0
  43. data/lib/davinci_dtr_test_kit/client_groups/light_ehr/dtr_light_ehr_supported_payers_config_test.rb +34 -0
  44. data/lib/davinci_dtr_test_kit/client_groups/light_ehr/dtr_light_ehr_supported_payers_endpoint_test.rb +44 -0
  45. data/lib/davinci_dtr_test_kit/client_groups/light_ehr/dtr_light_ehr_supported_payers_use_test.rb +32 -0
  46. data/lib/davinci_dtr_test_kit/client_groups/light_ehr/dtr_light_ehr_supported_payers_user_response_test.rb +70 -0
  47. data/lib/davinci_dtr_test_kit/client_groups/light_ehr/dtr_smart_ehr_launch.rb +18 -0
  48. data/lib/davinci_dtr_test_kit/client_groups/light_ehr/fhir_context_coverage_test.rb +42 -0
  49. data/lib/davinci_dtr_test_kit/client_groups/light_ehr/fhir_context_references_test.rb +59 -0
  50. data/lib/davinci_dtr_test_kit/client_groups/light_ehr/fhir_launch_context_test.rb +23 -0
  51. data/lib/davinci_dtr_test_kit/client_groups/{resp_assist_device/dtr_questionnaire_package_group.rb → respiratory/dtr_respiratory_questionnaire_package_group.rb} +5 -5
  52. data/lib/davinci_dtr_test_kit/client_groups/{resp_assist_device/dtr_resp_questionnaire_package_request_test.rb → respiratory/dtr_respiratory_questionnaire_package_request_test.rb} +2 -2
  53. data/lib/davinci_dtr_test_kit/client_groups/{resp_assist_device/dtr_questionnaire_response_group.rb → respiratory/dtr_respiratory_questionnaire_response_group.rb} +7 -7
  54. data/lib/davinci_dtr_test_kit/client_groups/{resp_assist_device/dtr_questionnaire_response_save_test.rb → respiratory/dtr_respiratory_questionnaire_response_save_test.rb} +2 -2
  55. data/lib/davinci_dtr_test_kit/client_groups/{resp_assist_device/dtr_questionnaire_rendering_attestation_test.rb → respiratory/dtr_respiratory_rendering_attestation_test.rb} +2 -2
  56. data/lib/davinci_dtr_test_kit/client_groups/respiratory/dtr_respiratory_rendering_group.rb +14 -0
  57. data/lib/davinci_dtr_test_kit/client_groups/{resp_assist_device/dtr_smart_app_questionnaire_workflow_group.rb → respiratory/dtr_smart_app_respiratory_workflow_group.rb} +8 -8
  58. data/lib/davinci_dtr_test_kit/client_groups/shared/dtr_prepopulation_attestation_test.rb +33 -0
  59. data/lib/davinci_dtr_test_kit/client_groups/shared/dtr_prepopulation_override_attestation_test.rb +36 -0
  60. data/lib/davinci_dtr_test_kit/client_groups/shared/dtr_questionnaire_package_request_validation_test.rb +3 -1
  61. data/lib/davinci_dtr_test_kit/client_groups/shared/dtr_questionnaire_response_basic_conformance_test.rb +8 -4
  62. data/lib/davinci_dtr_test_kit/client_groups/shared/{dtr_questionnaire_response_pre_population_test.rb → dtr_questionnaire_response_prepopulation_test.rb} +5 -2
  63. data/lib/davinci_dtr_test_kit/client_groups/shared/dtr_rendering_attestation_test.rb +32 -0
  64. data/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_prepopulation_attestation_test.rb +3 -1
  65. data/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_prepopulation_override_attestation_test.rb +1 -1
  66. data/lib/davinci_dtr_test_kit/client_groups/{dinner_static/dtr_smart_app_dinner_questionnaire_package_request_test.rb → smart_app/dtr_smart_app_questionnaire_package_request_test.rb} +6 -6
  67. data/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_questionnaire_response_correctness_test.rb +30 -0
  68. data/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_questionnaire_response_save_test.rb +2 -2
  69. data/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_saving_questionnaire_response_group.rb +3 -7
  70. data/lib/davinci_dtr_test_kit/cql_test.rb +58 -0
  71. data/lib/davinci_dtr_test_kit/docs/dtr_light_ehr_suite_description_v201.md +9 -6
  72. data/lib/davinci_dtr_test_kit/dtr_full_ehr_suite.rb +19 -6
  73. data/lib/davinci_dtr_test_kit/dtr_light_ehr_suite.rb +60 -40
  74. data/lib/davinci_dtr_test_kit/dtr_payer_server_suite.rb +0 -2
  75. data/lib/davinci_dtr_test_kit/dtr_questionnaire_response_validation.rb +50 -4
  76. data/lib/davinci_dtr_test_kit/dtr_smart_app_suite.rb +9 -9
  77. data/lib/davinci_dtr_test_kit/endpoints/mock_authorization.rb +10 -2
  78. data/lib/davinci_dtr_test_kit/endpoints/mock_ehr.rb +17 -1
  79. data/lib/davinci_dtr_test_kit/endpoints/mock_payer/light_ehr_supported_payer_endpoint.rb +44 -0
  80. data/lib/davinci_dtr_test_kit/endpoints/mock_payer/questionnaire_package_endpoint.rb +7 -1
  81. data/lib/davinci_dtr_test_kit/fixtures.rb +6 -6
  82. data/lib/davinci_dtr_test_kit/igs/davinci_dtr_2.0.1.tgz +0 -0
  83. data/lib/davinci_dtr_test_kit/metadata.rb +104 -0
  84. data/lib/davinci_dtr_test_kit/payer_server_groups/adaptive_form_libraries_test.rb +4 -1
  85. data/lib/davinci_dtr_test_kit/payer_server_groups/adaptive_form_questionnaire_expressions_test.rb +2 -1
  86. data/lib/davinci_dtr_test_kit/payer_server_groups/adaptive_form_questionnaire_extensions_test.rb +4 -1
  87. data/lib/davinci_dtr_test_kit/payer_server_groups/adaptive_next_questionnaire_expressions_test.rb +1 -0
  88. data/lib/davinci_dtr_test_kit/payer_server_groups/adaptive_next_questionnaire_extensions_test.rb +4 -1
  89. data/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_adaptive_request_test.rb +2 -0
  90. data/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_adaptive_response_bundles_validation_test.rb +3 -2
  91. data/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_adaptive_response_search_validation_test.rb +8 -3
  92. data/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_adaptive_response_validation_test.rb +6 -15
  93. data/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_next_response_complete_test.rb +1 -0
  94. data/lib/davinci_dtr_test_kit/payer_server_groups/payer_server_static_group.rb +1 -1
  95. data/lib/davinci_dtr_test_kit/payer_server_groups/static_form_libraries_test.rb +4 -1
  96. data/lib/davinci_dtr_test_kit/payer_server_groups/static_form_questionnaire_expressions_test.rb +2 -1
  97. data/lib/davinci_dtr_test_kit/payer_server_groups/static_form_questionnaire_extensions_test.rb +4 -1
  98. data/lib/davinci_dtr_test_kit/payer_server_groups/static_form_request_test.rb +3 -1
  99. data/lib/davinci_dtr_test_kit/payer_server_groups/static_form_response_validation_test.rb +6 -15
  100. data/lib/davinci_dtr_test_kit/profiles/communication_request/communication_request_must_support_test.rb +46 -0
  101. data/lib/davinci_dtr_test_kit/profiles/communication_request/communication_request_read.rb +6 -3
  102. data/lib/davinci_dtr_test_kit/profiles/communication_request/communication_request_validation.rb +9 -8
  103. data/lib/davinci_dtr_test_kit/profiles/communication_request/metadata.yml +135 -0
  104. data/lib/davinci_dtr_test_kit/profiles/communication_request_group.rb +9 -0
  105. data/lib/davinci_dtr_test_kit/profiles/coverage/coverage_must_support_test.rb +54 -0
  106. data/lib/davinci_dtr_test_kit/profiles/coverage/coverage_read.rb +5 -3
  107. data/lib/davinci_dtr_test_kit/profiles/coverage/coverage_validation.rb +9 -8
  108. data/lib/davinci_dtr_test_kit/profiles/coverage/metadata.yml +133 -0
  109. data/lib/davinci_dtr_test_kit/profiles/coverage_group.rb +8 -0
  110. data/lib/davinci_dtr_test_kit/profiles/device_request/device_request_must_support_test.rb +45 -0
  111. data/lib/davinci_dtr_test_kit/profiles/device_request/device_request_read.rb +6 -3
  112. data/lib/davinci_dtr_test_kit/profiles/device_request/device_request_validation.rb +9 -8
  113. data/lib/davinci_dtr_test_kit/profiles/device_request/metadata.yml +130 -0
  114. data/lib/davinci_dtr_test_kit/profiles/device_request_group.rb +9 -0
  115. data/lib/davinci_dtr_test_kit/profiles/encounter/encounter_must_support_test.rb +58 -0
  116. data/lib/davinci_dtr_test_kit/profiles/encounter/encounter_read.rb +6 -3
  117. data/lib/davinci_dtr_test_kit/profiles/encounter/encounter_validation.rb +9 -8
  118. data/lib/davinci_dtr_test_kit/profiles/encounter/metadata.yml +169 -0
  119. data/lib/davinci_dtr_test_kit/profiles/encounter_group.rb +9 -0
  120. data/lib/davinci_dtr_test_kit/profiles/medication_request/medication_request_must_support_test.rb +50 -0
  121. data/lib/davinci_dtr_test_kit/profiles/medication_request/medication_request_read.rb +6 -3
  122. data/lib/davinci_dtr_test_kit/profiles/medication_request/medication_request_validation.rb +9 -8
  123. data/lib/davinci_dtr_test_kit/profiles/medication_request/metadata.yml +159 -0
  124. data/lib/davinci_dtr_test_kit/profiles/medication_request_group.rb +9 -0
  125. data/lib/davinci_dtr_test_kit/profiles/nutrition_order/metadata.yml +94 -0
  126. data/lib/davinci_dtr_test_kit/profiles/nutrition_order/nutrition_order_must_support_test.rb +45 -0
  127. data/lib/davinci_dtr_test_kit/profiles/nutrition_order/nutrition_order_read.rb +6 -3
  128. data/lib/davinci_dtr_test_kit/profiles/nutrition_order/nutrition_order_validation.rb +9 -8
  129. data/lib/davinci_dtr_test_kit/profiles/nutrition_order_group.rb +9 -0
  130. data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_context_search.rb +3 -1
  131. data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_create.rb +1 -0
  132. data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_must_support_test.rb +54 -0
  133. data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_patient_search.rb +3 -1
  134. data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_read.rb +2 -1
  135. data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_update.rb +1 -0
  136. data/lib/davinci_dtr_test_kit/profiles/questionnaire_response/questionnaire_response_validation.rb +1 -1
  137. data/lib/davinci_dtr_test_kit/profiles/questionnaire_response_group.rb +11 -1
  138. data/lib/davinci_dtr_test_kit/profiles/service_request/metadata.yml +140 -0
  139. data/lib/davinci_dtr_test_kit/profiles/service_request/service_request_must_support_test.rb +47 -0
  140. data/lib/davinci_dtr_test_kit/profiles/service_request/service_request_read.rb +6 -3
  141. data/lib/davinci_dtr_test_kit/profiles/service_request/service_request_validation.rb +9 -8
  142. data/lib/davinci_dtr_test_kit/profiles/service_request_group.rb +9 -0
  143. data/lib/davinci_dtr_test_kit/profiles/task/metadata.yml +165 -0
  144. data/lib/davinci_dtr_test_kit/profiles/task/task_create.rb +1 -0
  145. data/lib/davinci_dtr_test_kit/profiles/task/task_must_support_test.rb +46 -0
  146. data/lib/davinci_dtr_test_kit/profiles/task/task_read.rb +6 -3
  147. data/lib/davinci_dtr_test_kit/profiles/task/task_update.rb +1 -0
  148. data/lib/davinci_dtr_test_kit/profiles/task/task_validation.rb +9 -8
  149. data/lib/davinci_dtr_test_kit/profiles/task_group.rb +11 -1
  150. data/lib/davinci_dtr_test_kit/profiles/vision_prescription/metadata.yml +107 -0
  151. data/lib/davinci_dtr_test_kit/profiles/vision_prescription/vision_prescription_must_support_test.rb +54 -0
  152. data/lib/davinci_dtr_test_kit/profiles/vision_prescription/vision_prescription_read.rb +6 -3
  153. data/lib/davinci_dtr_test_kit/profiles/vision_prescription/vision_prescription_validation.rb +9 -8
  154. data/lib/davinci_dtr_test_kit/profiles/vision_prescription_group.rb +9 -0
  155. data/lib/davinci_dtr_test_kit/read_test.rb +5 -0
  156. data/lib/davinci_dtr_test_kit/requirements/davinci-dtr-test-kit_out_of_scope_requirements.csv +13 -0
  157. data/lib/davinci_dtr_test_kit/requirements/davinci-dtr-test-kit_requirements.csv +374 -0
  158. data/lib/davinci_dtr_test_kit/requirements/generated/davinci-dtr-test-kit_requirements_coverage.csv +372 -0
  159. data/lib/davinci_dtr_test_kit/tags.rb +1 -0
  160. data/lib/davinci_dtr_test_kit/urls.rb +6 -0
  161. data/lib/davinci_dtr_test_kit/version.rb +2 -1
  162. data/lib/davinci_dtr_test_kit.rb +2 -0
  163. data/lib/inferno_requirements_tools/ext/inferno_core/runnable.rb +22 -0
  164. data/lib/inferno_requirements_tools/rake/rakefile_template +31 -0
  165. data/lib/inferno_requirements_tools/tasks/requirements_coverage.rb +284 -0
  166. data/lib/requirements_config.yaml +25 -0
  167. metadata +95 -37
  168. data/lib/davinci_dtr_test_kit/client_groups/dinner_adaptive/dtr_smart_app_adaptive_questionnaire_initial_retrieval_group.rb +0 -24
  169. data/lib/davinci_dtr_test_kit/client_groups/resp_assist_device/dtr_questionnaire_rendering_group.rb +0 -14
  170. data/lib/davinci_dtr_test_kit/client_groups/smart_app/dtr_smart_app_rendering_enabled_questions_attestation_test.rb +0 -30
@@ -0,0 +1,70 @@
1
+ require_relative '../../urls'
2
+ require_relative '../../tags'
3
+
4
+ module DaVinciDTRTestKit
5
+ class DTRLightEHRSupportedPayersUserResponseTest < Inferno::Test
6
+ include URLs
7
+ id :dtr_light_ehr_sp_user_response
8
+ title %(
9
+ [USER INPUT VERIFICATION] Tester-provided supported payers response is conformant
10
+ )
11
+ description %(
12
+ This test verifies that the user-provided response conforms
13
+ to the requirements for a supported payers response. The test will
14
+ be omitted if the tester does not provide a custom response in the
15
+ **Custom Supported Payers Response** input.
16
+ )
17
+
18
+ input :user_response, type: :textarea, optional: true
19
+
20
+ def validate_response(parsed_response)
21
+ assert parsed_response.present?, 'User provided response is nil.'
22
+
23
+ unless parsed_response.is_a?(Hash)
24
+ add_message('error', 'Response is not a valid JSON object (Hash expected).')
25
+ return
26
+ end
27
+
28
+ unless parsed_response['payers'].is_a?(Array)
29
+ add_message('error', 'The "payers" field is not an array.')
30
+ return
31
+ end
32
+
33
+ add_message('error', 'Response does not contain the required "payers" key.') unless parsed_response.key?('payers')
34
+ add_message('error', 'The "payers" field is an empty array.') if parsed_response['payers'].empty?
35
+
36
+ parsed_response['payers'].each_with_index do |payer, index|
37
+ validate_payer(payer, index)
38
+ end
39
+ end
40
+
41
+ def validate_payer(payer, index)
42
+ unless payer.is_a?(Hash)
43
+ add_message('error', "Payer at index #{index} is not a valid JSON object (Hash expected).")
44
+ return
45
+ end
46
+
47
+ add_message('error', "Payer at index #{index} does not contain the required 'id' key.") unless payer.key?('id')
48
+ add_message('error', "Payer at index #{index} does not contain the required 'name' key.") unless payer['name']
49
+ end
50
+
51
+ run do
52
+ omit_if user_response.nil?, 'No user response provided, default response returned.'
53
+
54
+ load_tagged_requests(SUPPORTED_PAYER_TAG)
55
+ request_record = requests.first
56
+
57
+ assert request_record.present?, 'No requests made to the supported payers endpoint.'
58
+
59
+ begin
60
+ parsed_response = JSON.parse(request_record.response_body)
61
+ rescue JSON::ParserError
62
+ assert false, 'User response is not valid JSON.'
63
+ end
64
+
65
+ validate_response(parsed_response)
66
+ assert messages.none? { |msg| msg[:type] == 'error' }, 'User response is invalid.'
67
+ pass 'User response is present and valid.'
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,18 @@
1
+ require_relative 'fhir_launch_context_test'
2
+ require_relative 'fhir_context_coverage_test'
3
+ require_relative 'fhir_context_references_test'
4
+ require 'smart_app_launch/ehr_launch_group_stu2'
5
+
6
+ module DaVinciDTRTestKit
7
+ class DTRSMARTEHRLaunch < SMARTAppLaunch::EHRLaunchGroupSTU2
8
+ title 'DTR SMART EHR Launch'
9
+ verifies_requirements 'hl7.fhir.us.davinci-dtr_2.0.1@117'
10
+
11
+ id :dtr_smart_ehr_launch
12
+ run_as_group
13
+
14
+ test from: :fhir_launch_context
15
+ test from: :fhir_context_coverage
16
+ test from: :fhir_context_references
17
+ end
18
+ end
@@ -0,0 +1,42 @@
1
+ module DaVinciDTRTestKit
2
+ class FhirContextCoverageTest < Inferno::Test
3
+ include DaVinciDTRTestKit::ReadTest
4
+
5
+ id :fhir_context_coverage
6
+ title 'fhirContext Coverage Reference Test'
7
+ description %(
8
+ This test validates that when the light EHR launches a DTR SMART App, the launch context includes
9
+ a `fhirContext` with one active Coverage resource and that the referenced Coverage can be read from
10
+ the light DTR EHR. See the [Launching DTR](https://hl7.org/fhir/us/davinci-dtr/STU2/specification.html#launching-dtr)
11
+ section of the DTR IG for details.
12
+ )
13
+ verifies_requirements 'hl7.fhir.us.davinci-dtr_2.0.1@126'
14
+ optional
15
+
16
+ uses_request :token
17
+
18
+ fhir_client do
19
+ url :url
20
+ bearer_token JSON.parse(request.response_body)['access_token']
21
+ end
22
+
23
+ def scratch_resources
24
+ scratch[:coverage_references] ||= {}
25
+ end
26
+
27
+ run do
28
+ token_response_params = JSON.parse(request.response_body)
29
+
30
+ skip_if(!token_response_params['fhirContext'].present?,
31
+ %(fhirContext not present on the passed launch context, skipping test.'))
32
+
33
+ coverage = token_response_params['fhirContext'].find { |c| c.split('/')[0] == 'Coverage' }
34
+ assert coverage.present?, 'Coverage resource not present on fhirContext'
35
+
36
+ coverage_array = [coverage.split('/')[1]]
37
+ assert coverage_array.present?, 'Coverage resource not present on fhirContext in proper format'
38
+
39
+ perform_read_test(coverage_array, 'Coverage')
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,59 @@
1
+ module DaVinciDTRTestKit
2
+ class FhirContextReferencesTest < Inferno::Test
3
+ include DaVinciDTRTestKit::ReadTest
4
+
5
+ id :fhir_context_references
6
+ title 'fhirContext Request, QuestionnaireResponse, or Task References Test'
7
+ description %(
8
+ This test validates that when the light EHR launches a DTR SMART App, the launch context includes
9
+ a `fhirContext` with exactly one of the following references and that the referenced resource can be read from
10
+ the light DTR EHR:
11
+ - A CRD-type Request or Encounter resource
12
+ - An existing incomplete QuestionnaireResponse previously created with DTR
13
+ - A Questionnaire Task
14
+
15
+ See the [Launching DTR](https://hl7.org/fhir/us/davinci-dtr/STU2/specification.html#launching-dtr)
16
+ section of the DTR IG for details.
17
+ )
18
+ verifies_requirements 'hl7.fhir.us.davinci-dtr_2.0.1@127', 'hl7.fhir.us.davinci-dtr_2.0.1@128',
19
+ 'hl7.fhir.us.davinci-dtr_2.0.1@129'
20
+ optional
21
+
22
+ uses_request :token
23
+
24
+ fhir_client do
25
+ url :url
26
+ bearer_token JSON.parse(request.response_body)['access_token']
27
+ end
28
+
29
+ def scratch_resources
30
+ scratch[:crd_request_resources] ||= {}
31
+ end
32
+
33
+ run do
34
+ token_response_params = JSON.parse(request.response_body)
35
+
36
+ skip_if(!token_response_params['fhirContext'].present?,
37
+ %(fhirContext not present on the passed launch context, skipping test.))
38
+
39
+ context_reference = token_response_params['fhirContext'].filter do |c|
40
+ c.split('/')[0] == 'DeviceRequest' || c.split('/')[0] == 'ServiceRequest' ||
41
+ c.split('/')[0] == 'CommunicationRequest' || c.split('/')[0] == 'MedicationRequest' ||
42
+ c.split('/')[0] == 'Encounter' || c.split('/')[0] == 'Task' || c.split('/')[0] == 'QuestionnaireResponse'
43
+ end
44
+
45
+ assert context_reference.present?,
46
+ 'fhirContext does not contain a CRD-type request, QuestionnaireResponse, or Task resource'
47
+
48
+ context_reference_amount = context_reference.length
49
+ assert context_reference_amount == 1,
50
+ 'fhirContext should only contain one CRD-type request, QuestionnaireResponse, or Task'
51
+
52
+ crd_request_array = [(context_reference[0]).split('/')[1]]
53
+ assert crd_request_array.present?,
54
+ 'fhirContext does not contain a CRD-type request, QuestionnaireResponse, or Task resource in proper format'
55
+
56
+ perform_read_test(crd_request_array, (context_reference[0]).split('/')[0])
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,23 @@
1
+ module DaVinciDTRTestKit
2
+ class FhirLaunchContextTest < Inferno::Test
3
+ include SMARTAppLaunch::TokenPayloadValidation
4
+
5
+ id :fhir_launch_context
6
+ title 'Token exchange response body contains fhirContext'
7
+ description %(
8
+ This test validates that when the light EHR launches a DTR SMART App, the launch context
9
+ includes a `fhirContext`. See the [Launching DTR](https://hl7.org/fhir/us/davinci-dtr/STU2/specification.html#launching-dtr)
10
+ section of the DTR IG for details.
11
+ )
12
+ optional
13
+
14
+ uses_request :token
15
+
16
+ run do
17
+ token_response_params = JSON.parse(request.response_body)
18
+ assert token_response_params['fhirContext'].present?, 'fhirContext not present on the passed launch context'
19
+
20
+ validate_fhir_context(token_response_params['fhirContext'])
21
+ end
22
+ end
23
+ end
@@ -1,16 +1,16 @@
1
- require_relative 'dtr_resp_questionnaire_package_request_test'
1
+ require_relative 'dtr_respiratory_questionnaire_package_request_test'
2
2
  require_relative '../shared/dtr_questionnaire_package_request_validation_test'
3
3
 
4
4
  module DaVinciDTRTestKit
5
- class DTRQuestionnairePackageGroup < Inferno::TestGroup
6
- id :dtr_questionnaire_package
5
+ class DTRRespiratoryQuestionnairePackageGroup < Inferno::TestGroup
6
+ id :dtr_resp_qp
7
7
  title 'Questionnaire Package Retrieval'
8
8
  description %(
9
9
  Demonstrate the ability to request the Respiratory Assist Device Questionnaire Package from the payer.
10
10
  )
11
11
  run_as_group
12
12
 
13
- test from: :dtr_resp_questionnaire_package_request
14
- test from: :dtr_questionnaire_package_request_validation
13
+ test from: :dtr_resp_qp_request
14
+ test from: :dtr_qp_request_validation
15
15
  end
16
16
  end
@@ -1,10 +1,10 @@
1
1
  require_relative '../../urls'
2
2
 
3
3
  module DaVinciDTRTestKit
4
- class DTRRespQuestionnairePackageRequestTest < Inferno::Test
4
+ class DTRRespiratoryQuestionnairePackageRequestTest < Inferno::Test
5
5
  include URLs
6
6
 
7
- id :dtr_resp_questionnaire_package_request
7
+ id :dtr_resp_qp_request
8
8
  title 'Invoke the DTR Questionnaire Package operation'
9
9
  description %(
10
10
  Inferno will wait for a DTR questionnaire package request from the client. Upon receipt, Inferno will generate and
@@ -1,23 +1,23 @@
1
- require_relative 'dtr_questionnaire_response_save_test'
1
+ require_relative 'dtr_respiratory_questionnaire_response_save_test'
2
2
  require_relative '../shared/dtr_questionnaire_response_basic_conformance_test'
3
- require_relative '../shared/dtr_questionnaire_response_pre_population_test'
3
+ require_relative '../shared/dtr_questionnaire_response_prepopulation_test'
4
4
 
5
5
  module DaVinciDTRTestKit
6
- class DTRQuestionnaireResponseGroup < Inferno::TestGroup
7
- id :dtr_questionnaire_response
6
+ class DTRRespiratoryQuestionnaireResponseGroup < Inferno::TestGroup
7
+ id :dtr_resp_qr
8
8
  title 'Questionnaire Response'
9
9
  description %(
10
10
  Demonstrate the ability to pre-populate and respond to the Respiratory Assist Device Questionnaire.
11
11
  )
12
12
  run_as_group
13
13
 
14
- test from: :dtr_resp_assist_questionnaire_response_save,
14
+ test from: :dtr_resp_qr_save,
15
15
  receives_request: :questionnaire_response_save
16
16
 
17
- test from: :dtr_questionnaire_response_basic_conformance,
17
+ test from: :dtr_qr_basic_conformance,
18
18
  uses_request: :questionnaire_response_save
19
19
 
20
- test from: :dtr_questionnaire_response_pre_population,
20
+ test from: :dtr_qr_prepopulation,
21
21
  uses_request: :questionnaire_response_save
22
22
  end
23
23
  end
@@ -1,10 +1,10 @@
1
1
  require_relative '../../urls'
2
2
 
3
3
  module DaVinciDTRTestKit
4
- class DTRRespAssistQuestionnaireResponseSaveTest < Inferno::Test
4
+ class DTRRespiratoryQuestionnaireResponseSaveTest < Inferno::Test
5
5
  include URLs
6
6
 
7
- id :dtr_resp_assist_questionnaire_response_save
7
+ id :dtr_resp_qr_save
8
8
  title 'Save the QuestionnaireResponse after completing it'
9
9
  description %(
10
10
  Inferno, acting as the EHR, will wait for a request to save the QuestionnaireResponse from the client.
@@ -2,10 +2,10 @@ require 'securerandom'
2
2
  require_relative '../../urls'
3
3
 
4
4
  module DaVinciDTRTestKit
5
- class DTRQuestionnaireRenderingAttestationTest < Inferno::Test
5
+ class DTRRespiratoryRenderingAttestationTest < Inferno::Test
6
6
  include URLs
7
7
 
8
- id :dtr_questionnaire_rendering_attestation
8
+ id :dtr_resp_rendering_attest
9
9
  title 'Check that the client renders the questionnaire (Attestation)'
10
10
  description %(
11
11
  This test provides the tester an opportunity to observe their client application following the receipt of the
@@ -0,0 +1,14 @@
1
+ require_relative 'dtr_respiratory_rendering_attestation_test'
2
+
3
+ module DaVinciDTRTestKit
4
+ class DTRRespiratoryRenderingGroup < Inferno::TestGroup
5
+ id :dtr_resp_rendering
6
+ title 'Questionnaire Rendering'
7
+ description %(
8
+ Demonstrate the ability to render the Respiratory Assist Device Questionnaire.
9
+ )
10
+ run_as_group
11
+
12
+ test from: :dtr_resp_rendering_attest
13
+ end
14
+ end
@@ -1,10 +1,10 @@
1
- require_relative 'dtr_questionnaire_package_group'
2
- require_relative 'dtr_questionnaire_rendering_group'
3
- require_relative 'dtr_questionnaire_response_group'
1
+ require_relative 'dtr_respiratory_questionnaire_package_group'
2
+ require_relative 'dtr_respiratory_rendering_group'
3
+ require_relative 'dtr_respiratory_questionnaire_response_group'
4
4
 
5
5
  module DaVinciDTRTestKit
6
- class DTRSmartAppQuestionnaireWorkflowGroup < Inferno::TestGroup
7
- id :dtr_smart_app_questionnaire_workflow
6
+ class DTRSmartAppRespiratoryWorkflowGroup < Inferno::TestGroup
7
+ id :dtr_smart_app_resp_workflow
8
8
  title 'Respiratory Assist Device Questionnaire Workflow'
9
9
  description %(
10
10
  This workflow validates that a DTR SMART App can perform a full DTR
@@ -16,8 +16,8 @@ module DaVinciDTRTestKit
16
16
  3. Pre-populate the questionnaire response
17
17
  )
18
18
 
19
- group from: :dtr_questionnaire_package
20
- group from: :dtr_questionnaire_rendering
21
- group from: :dtr_questionnaire_response
19
+ group from: :dtr_resp_qp
20
+ group from: :dtr_resp_rendering
21
+ group from: :dtr_resp_qr
22
22
  end
23
23
  end
@@ -0,0 +1,33 @@
1
+ require 'securerandom'
2
+ require_relative '../../urls'
3
+
4
+ module DaVinciDTRTestKit
5
+ class DTRPrepopulationAttestationTest < Inferno::Test
6
+ include URLs
7
+
8
+ id :dtr_prepopulation_attest
9
+ title 'Check that the client pre-populates the Questionnaire (Attestation)'
10
+ description %(
11
+ Validate that pre-population of patient's information occurs as expected.
12
+
13
+ Note that the test requires that two questions be pre-populated so that both a pre-populated
14
+ and an overridden answer can be demonstrated when the QuestionnaireResponse is generated.
15
+ )
16
+ verifies_requirements 'hl7.fhir.us.davinci-dtr_2.0.1@207'
17
+
18
+ run do
19
+ random_id = SecureRandom.uuid
20
+ wait(
21
+ identifier: random_id,
22
+ message: %(
23
+ I attest that the DTR application has automatically filled in at least two questions with
24
+ values determined by the questionnaire's pre-population logic executed on data in the EHR.
25
+
26
+ [Click here](#{resume_pass_url}?token=#{random_id}) if the above statement is **true**.
27
+
28
+ [Click here](#{resume_fail_url}?token=#{random_id}) if the above statement is **false**.
29
+ )
30
+ )
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,36 @@
1
+ require 'securerandom'
2
+ require_relative '../../urls'
3
+
4
+ module DaVinciDTRTestKit
5
+ class DTRPrepopulationOverrideAttestationTest < Inferno::Test
6
+ include URLs
7
+
8
+ id :dtr_prepopulation_override_attest
9
+ title 'Check that the user can manually populate answers in the Questionnaire (Attestation)'
10
+ description %(
11
+ Validate that the user can edit the rendered form to provide answers, including
12
+ - Providing an answer for an unanswered question.
13
+ - Overriding a pre-populated answer with a manual answer.
14
+
15
+ Note that at least one pre-populated answer must remain un-altered to demonstrate
16
+ its representation in the resulting QuestionnaireResponse.
17
+ )
18
+
19
+ run do
20
+ random_id = SecureRandom.uuid
21
+ wait(
22
+ identifier: random_id,
23
+ message: %(
24
+ I attest that the user has done the following while filling out the form:
25
+ - Changed a pre-populated answer to a new value.
26
+ - Provided an answer to a question that was not pre-populated.
27
+ - Left a pre-populated answer unchanged.
28
+
29
+ [Click here](#{resume_pass_url}?token=#{random_id}) if the above statement is **true**.
30
+
31
+ [Click here](#{resume_fail_url}?token=#{random_id}) if the above statement is **false**.
32
+ )
33
+ )
34
+ end
35
+ end
36
+ end
@@ -4,7 +4,7 @@ module DaVinciDTRTestKit
4
4
  class DTRQuestionnairePackageValidationTest < Inferno::Test
5
5
  include URLs
6
6
 
7
- id :dtr_questionnaire_package_request_validation
7
+ id :dtr_qp_request_validation
8
8
  title 'Questionnaire Package request is valid'
9
9
  description %(
10
10
  This test validates the conformance of the client's request to the
@@ -16,6 +16,8 @@ module DaVinciDTRTestKit
16
16
  to the bound ValueSet. Quantity, Coding, and code element bindings will fail if their code/system are not found in
17
17
  the valueset.
18
18
  )
19
+ verifies_requirements 'hl7.fhir.us.davinci-dtr_2.0.1@168', 'hl7.fhir.us.davinci-dtr_2.0.1@293',
20
+ 'hl7.fhir.us.davinci-dtr_2.0.1@295'
19
21
 
20
22
  run do
21
23
  load_tagged_requests QUESTIONNAIRE_PACKAGE_TAG
@@ -6,12 +6,16 @@ module DaVinciDTRTestKit
6
6
  include URLs
7
7
  include DTRQuestionnaireResponseValidation
8
8
 
9
- id :dtr_questionnaire_response_basic_conformance
9
+ id :dtr_qr_basic_conformance
10
10
  title 'QuestionnaireResponse is conformant'
11
11
  description %(
12
- This test validates the conformance of QuestionnaireResponse representing the
13
- completed questionnaire. It verifies that the QuestionnaireResponse conforms
14
- to the DTR Questionnaire Response resource profile.
12
+ This test validates the conformance of a `QuestionnaireResponse` representing a completed questionnaire.
13
+ It ensures that the `QuestionnaireResponse` adheres to the appropriate profile based on its type:
14
+
15
+ - **Static QuestionnaireResponse:** Must conform to the [DTR Questionnaire Response](https://hl7.org/fhir/us/davinci-dtr/STU2/StructureDefinition-dtr-questionnaireresponse.html)
16
+ profile.
17
+ - **Adaptive QuestionnaireResponse:** Must conform to the [Adaptive Questionnaire Response](http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaireresponse-adapt)
18
+ profile.
15
19
  )
16
20
 
17
21
  def profile_url
@@ -2,10 +2,10 @@ require_relative '../../dtr_questionnaire_response_validation'
2
2
  require_relative '../../fixtures'
3
3
 
4
4
  module DaVinciDTRTestKit
5
- class DTRQuestionnaireResponsePrePopulationTest < Inferno::Test
5
+ class DTRQuestionnaireResponsePrepopulationTest < Inferno::Test
6
6
  include DTRQuestionnaireResponseValidation
7
7
 
8
- id :dtr_questionnaire_response_pre_population
8
+ id :dtr_qr_prepopulation
9
9
  title 'QuestionnaireResponse pre-population and user overrides are conformant'
10
10
  description %(
11
11
  This test validates the conformance of the client's pre-population of the QuestionnaireResponse.
@@ -20,6 +20,9 @@ module DaVinciDTRTestKit
20
20
  the origin.source extension set to 'override' and an answer different
21
21
  from the expected result from execution of the CQL on Inferno's data.
22
22
  )
23
+ verifies_requirements 'hl7.fhir.us.davinci-dtr_2.0.1@173', 'hl7.fhir.us.davinci-dtr_2.0.1@174',
24
+ 'hl7.fhir.us.davinci-dtr_2.0.1@176', 'hl7.fhir.us.davinci-dtr_2.0.1@178',
25
+ 'hl7.fhir.us.davinci-dtr_2.0.1@207'
23
26
 
24
27
  run do
25
28
  questionnaire_response_json = request.request_body
@@ -0,0 +1,32 @@
1
+ require 'securerandom'
2
+ require_relative '../../urls'
3
+
4
+ module DaVinciDTRTestKit
5
+ class DTRRenderingAttestationTest < Inferno::Test
6
+ include URLs
7
+
8
+ id :dtr_rendering_attest
9
+ title 'Check that the client renders the Questionnaire (Attestation)'
10
+ description %(
11
+ The tester will attest to the ability of the client to appropriately render the
12
+ Questionnaire and allow user interaction.
13
+ )
14
+ verifies_requirements 'hl7.fhir.us.davinci-dtr_2.0.1@4'
15
+
16
+ run do
17
+ random_id = SecureRandom.uuid
18
+ wait(
19
+ identifier: random_id,
20
+ message: %(
21
+ I attest that the DTR client application has displayed the tester-provided Questionnaire
22
+ appropriately, following all rendering and formatting directives within the Questionnaire
23
+ and allowing the user to interact with the questions in the form.
24
+
25
+ [Click here](#{resume_pass_url}?token=#{random_id}) if the above statement is **true**.
26
+
27
+ [Click here](#{resume_fail_url}?token=#{random_id}) if the above statement is **false**.
28
+ )
29
+ )
30
+ end
31
+ end
32
+ end
@@ -5,11 +5,13 @@ module DaVinciDTRTestKit
5
5
  class DTRSmartAppPrepopulationAttestationTest < Inferno::Test
6
6
  include URLs
7
7
 
8
- id :dtr_smart_app_prepopulation_attestation
8
+ id :dtr_smart_app_prepopulation_attest
9
9
  title 'Check that the client pre-populates the questionnaire (Attestation)'
10
10
  description %(
11
11
  Validate that pre-population of patient name information occurs as expected.
12
12
  )
13
+ verifies_requirements 'hl7.fhir.us.davinci-dtr_2.0.1@207'
14
+
13
15
  run do
14
16
  random_id = SecureRandom.uuid
15
17
  wait(
@@ -5,7 +5,7 @@ module DaVinciDTRTestKit
5
5
  class DTRSmartAppPrepopulationOverrideAttestationTest < Inferno::Test
6
6
  include URLs
7
7
 
8
- id :dtr_smart_app_prepopulation_override_attestation
8
+ id :dtr_smart_app_prepopulation_override_attest
9
9
  title 'Validate the user can override pre-populated data (Attestation)'
10
10
  description %(
11
11
  Validate that the user can edit a pre-populated item and replace it with another value.
@@ -2,10 +2,10 @@ require 'base64'
2
2
  require_relative '../../urls'
3
3
 
4
4
  module DaVinciDTRTestKit
5
- class DTRSmartAppDinnerQuestionnairePackageRequestTest < Inferno::Test
5
+ class DTRSmartAppQuestionnairePackageRequestTest < Inferno::Test
6
6
  include URLs
7
7
 
8
- id :dtr_smart_app_dinner_questionnaire_package_request
8
+ id :dtr_smart_app_qp_request
9
9
  title 'Invoke the DTR Questionnaire Package operation'
10
10
  description %(
11
11
  Inferno will wait for a DTR questionnaire package request from the client. Upon receipt, Inferno will generate and
@@ -24,7 +24,7 @@ module DaVinciDTRTestKit
24
24
  description: 'Required if "Launch from Inferno" is selected'
25
25
  input :static_smart_patient_id,
26
26
  optional: true,
27
- title: 'SMART App Launch Patient ID (Dinner Static)',
27
+ title: 'SMART App Launch Patient ID',
28
28
  type: 'text',
29
29
  description: %(
30
30
  Patient instance ID to be provided by Inferno as the patient as a part of the SMART App Launch.
@@ -32,7 +32,7 @@ module DaVinciDTRTestKit
32
32
  default: 'pat015'
33
33
  input :static_smart_fhir_context,
34
34
  optional: true,
35
- title: 'SMART App Launch fhirContext (Dinner Static)',
35
+ title: 'SMART App Launch fhirContext',
36
36
  type: 'textarea',
37
37
  description: %(
38
38
  References to be provided by Inferno as the fhirContext as a part of the SMART App
@@ -43,10 +43,10 @@ module DaVinciDTRTestKit
43
43
  { reference: 'DeviceRequest/devreqe0470' }])
44
44
  input :static_ehr_bundle,
45
45
  optional: true,
46
- title: 'EHR-available resources (Dinner Static)',
46
+ title: 'EHR-available resources',
47
47
  type: 'textarea',
48
48
  description: %(
49
- Resources available from the EHR needed to drive the dinner static workflow.
49
+ Resources available from the EHR needed to drive this workflow.
50
50
  Formatted as a FHIR bundle that contains resources, each with an ID property populated. Each
51
51
  instance present will be available for retrieval from Inferno at the endpoint:
52
52
  <fhir-base>/<resource type>/<instance id>
@@ -0,0 +1,30 @@
1
+ require_relative '../../dtr_questionnaire_response_validation'
2
+
3
+ module DaVinciDTRTestKit
4
+ class DTRSmartAppQuestionnaireResponseCorrectnessTest < Inferno::Test
5
+ include DTRQuestionnaireResponseValidation
6
+
7
+ id :dtr_smart_app_qr_correctness
8
+ title 'QuestionnaireResponse is correct for the workflow'
9
+ description %(
10
+ Verify that the QuestionnaireResponse
11
+ - Is for the Questionnaire provided by the tester.
12
+ - Has source extensions demonstrating answers that are manually entered,
13
+ automatically pre-populated, and manually overridden.
14
+ - Contains answers for all required items.
15
+ )
16
+ verifies_requirements 'hl7.fhir.us.davinci-dtr_2.0.1@209', 'hl7.fhir.us.davinci-dtr_2.0.1@210'
17
+
18
+ input :custom_questionnaire_package_response,
19
+ title: 'Custom Questionnaire Package Response JSON',
20
+ description: %(
21
+ A JSON PackageBundle may be provided here to replace Inferno's response to the
22
+ $questionnaire-package request.
23
+ ),
24
+ type: 'textarea'
25
+
26
+ run do
27
+ validate_questionnaire_response_correctness(request.request_body, custom_questionnaire_package_response)
28
+ end
29
+ end
30
+ end
@@ -4,7 +4,7 @@ module DaVinciDTRTestKit
4
4
  class DTRSmartAppQuestionnaireResponseSaveTest < Inferno::Test
5
5
  include URLs
6
6
 
7
- id :dtr_smart_app_questionnaire_response_save
7
+ id :dtr_smart_app_qr_save
8
8
  title 'Save the QuestionnaireResponse after completing it'
9
9
  description %(
10
10
  Inferno, acting as the EHR, will wait for a request to save the QuestionnaireResponse from the client.
@@ -12,7 +12,7 @@ module DaVinciDTRTestKit
12
12
  input :client_id
13
13
 
14
14
  def prompt
15
- if config.options[:adaptive]
15
+ if config.options[:adaptive] || config.options[:custom]
16
16
  'Store the completed questionnaire back into the EHR.'
17
17
  else
18
18
  <<~DESCRIPTION