davinci_crd_test_kit 0.12.2 → 0.14.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 (341) hide show
  1. checksums.yaml +4 -4
  2. data/config/presets/inferno_crd_client_suite.json.erb +20 -14
  3. data/config/presets/inferno_crd_client_suite_prefetch_subset_v221.json.erb +125 -0
  4. data/config/presets/inferno_crd_client_suite_v221.json.erb +124 -0
  5. data/config/presets/inferno_crd_server_suite.json.erb +59 -2
  6. data/config/presets/inferno_crd_server_suite_v221.json.erb +94 -0
  7. data/config/presets/ri_crd_request_generator.json_v221.json.erb +13 -0
  8. data/config/presets/ri_crd_server.json.erb +19 -19
  9. data/lib/davinci_crd_test_kit/client/client_base_urls.rb +80 -0
  10. data/lib/davinci_crd_test_kit/{client_hook_request_validation.rb → client/client_hook_request_validation.rb} +1 -1
  11. data/lib/davinci_crd_test_kit/client/crd_client_options.rb +30 -0
  12. data/lib/davinci_crd_test_kit/client/endpoints/cds_services_discovery_handler.rb +34 -0
  13. data/lib/davinci_crd_test_kit/client/endpoints/custom_service_response.rb +342 -0
  14. data/lib/davinci_crd_test_kit/client/endpoints/gather_response_generation_data.rb +410 -0
  15. data/lib/davinci_crd_test_kit/client/endpoints/hook_request_endpoint.rb +233 -0
  16. data/lib/davinci_crd_test_kit/{mock_service_response.rb → client/endpoints/mock_service_response.rb} +165 -59
  17. data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/companions_prerequisites.json +1 -0
  18. data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/create_update_coverage_information.json +3 -2
  19. data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/launch_smart_app.json +8 -1
  20. data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/propose_alternate_request.json +1 -0
  21. data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/request_form_completion.json +17 -16
  22. data/lib/davinci_crd_test_kit/client/multi_request_message_helper.rb +35 -0
  23. data/lib/davinci_crd_test_kit/client/tagged_request_load_helper.rb +38 -0
  24. data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_create_test.rb +43 -0
  25. data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_read_test.rb +43 -0
  26. data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_search_test.rb +234 -0
  27. data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_update_test.rb +43 -0
  28. data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_validation_test.rb +63 -0
  29. data/lib/davinci_crd_test_kit/client/v2.0.1/auth/decode_auth_token_test.rb +65 -0
  30. data/lib/davinci_crd_test_kit/client/v2.0.1/auth/retrieve_jwks_test.rb +109 -0
  31. data/lib/davinci_crd_test_kit/client/v2.0.1/auth/token_header_test.rb +70 -0
  32. data/lib/davinci_crd_test_kit/client/v2.0.1/auth/token_payload_test.rb +85 -0
  33. data/lib/davinci_crd_test_kit/{routes/cds-services.json → client/v2.0.1/cds-services-v201.json} +1 -1
  34. data/lib/davinci_crd_test_kit/client/v2.0.1/client_appointment_book_group.rb +108 -0
  35. data/lib/davinci_crd_test_kit/client/v2.0.1/client_card_must_support_group.rb +31 -0
  36. data/lib/davinci_crd_test_kit/client/v2.0.1/client_encounter_discharge_group.rb +105 -0
  37. data/lib/davinci_crd_test_kit/client/v2.0.1/client_encounter_start_group.rb +105 -0
  38. data/lib/davinci_crd_test_kit/client/v2.0.1/client_fhir_api_group.rb +790 -0
  39. data/lib/davinci_crd_test_kit/client/v2.0.1/client_hooks_group.rb +74 -0
  40. data/lib/davinci_crd_test_kit/client/v2.0.1/client_order_dispatch_group.rb +111 -0
  41. data/lib/davinci_crd_test_kit/client/v2.0.1/client_order_select_group.rb +116 -0
  42. data/lib/davinci_crd_test_kit/client/v2.0.1/client_order_sign_group.rb +113 -0
  43. data/lib/davinci_crd_test_kit/{client_registration_group.rb → client/v2.0.1/client_registration_group.rb} +12 -8
  44. data/lib/davinci_crd_test_kit/client/v2.0.1/client_urls.rb +13 -0
  45. data/lib/davinci_crd_test_kit/client/v2.0.1/crd_client_suite.rb +134 -0
  46. data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/appointment_book_receive_request_test.rb +129 -0
  47. data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/encounter_discharge_receive_request_test.rb +126 -0
  48. data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/encounter_start_receive_request_test.rb +126 -0
  49. data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/order_dispatch_receive_request_test.rb +138 -0
  50. data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/order_select_receive_request_test.rb +134 -0
  51. data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/order_sign_receive_request_test.rb +136 -0
  52. data/lib/davinci_crd_test_kit/client/v2.0.1/must_support/client_card_must_support_coverage_information.rb +93 -0
  53. data/lib/davinci_crd_test_kit/client/v2.0.1/must_support/client_card_must_support_external_reference.rb +62 -0
  54. data/lib/davinci_crd_test_kit/client/v2.0.1/must_support/client_card_must_support_instructions.rb +62 -0
  55. data/lib/davinci_crd_test_kit/client/v2.0.1/registration/client_registration_verification_test.rb +94 -0
  56. data/lib/davinci_crd_test_kit/client/v2.0.1/registration/client_service_registration_attestation_test.rb +40 -0
  57. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_fetched_data_test.rb +86 -0
  58. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_optional_fields_test.rb +63 -0
  59. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_prefetch_equals_queried_test.rb +96 -0
  60. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_required_fields_test.rb +55 -0
  61. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_valid_context_test.rb +70 -0
  62. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_valid_prefetch_test.rb +62 -0
  63. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_response/client_display_cards_attest.rb +83 -0
  64. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_response/inferno_response_validation.rb +79 -0
  65. data/lib/davinci_crd_test_kit/client/v2.2.1/api/client_coverage_info_update_test.rb +212 -0
  66. data/lib/davinci_crd_test_kit/client/v2.2.1/api/client_crd_update_verification_group.rb +18 -0
  67. data/lib/davinci_crd_test_kit/client/v2.2.1/auth/decode_auth_token_test.rb +69 -0
  68. data/lib/davinci_crd_test_kit/client/v2.2.1/auth/retrieve_jwks_test.rb +120 -0
  69. data/lib/davinci_crd_test_kit/client/v2.2.1/auth/token_header_test.rb +92 -0
  70. data/lib/davinci_crd_test_kit/client/v2.2.1/auth/token_payload_test.rb +93 -0
  71. data/lib/davinci_crd_test_kit/client/v2.2.1/cds-services-prefetch-subset-v221.json +198 -0
  72. data/lib/davinci_crd_test_kit/client/v2.2.1/cds-services-v221.json +202 -0
  73. data/lib/davinci_crd_test_kit/client/v2.2.1/client_appointment_book_group.rb +102 -0
  74. data/lib/davinci_crd_test_kit/client/v2.2.1/client_cross_hook_group.rb +28 -0
  75. data/lib/davinci_crd_test_kit/client/v2.2.1/client_encounter_discharge_group.rb +96 -0
  76. data/lib/davinci_crd_test_kit/client/v2.2.1/client_encounter_start_group.rb +95 -0
  77. data/lib/davinci_crd_test_kit/client/v2.2.1/client_fhir_api_group.rb +88 -0
  78. data/lib/davinci_crd_test_kit/client/v2.2.1/client_hooks_group.rb +64 -0
  79. data/lib/davinci_crd_test_kit/client/v2.2.1/client_long_running_hook_group.rb +32 -0
  80. data/lib/davinci_crd_test_kit/client/v2.2.1/client_order_dispatch_group.rb +101 -0
  81. data/lib/davinci_crd_test_kit/client/v2.2.1/client_order_select_group.rb +102 -0
  82. data/lib/davinci_crd_test_kit/client/v2.2.1/client_order_sign_group.rb +107 -0
  83. data/lib/davinci_crd_test_kit/client/v2.2.1/client_registration_group.rb +27 -0
  84. data/lib/davinci_crd_test_kit/client/v2.2.1/client_urls.rb +27 -0
  85. data/lib/davinci_crd_test_kit/client/v2.2.1/crd_client_suite.rb +229 -0
  86. data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_card_must_support_coverage_information_test.rb +63 -0
  87. data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_fhirpath_collection_as_comma_delimited_string_test.rb +60 -0
  88. data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_hook_instances_unique_test.rb +45 -0
  89. data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_location_address_propagation_test.rb +135 -0
  90. data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_prefetch_complete_and_subset_test.rb +103 -0
  91. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/appointment_book_receive_request_test.rb +156 -0
  92. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/encounter_discharge_receive_request_test.rb +157 -0
  93. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/encounter_start_receive_request_test.rb +157 -0
  94. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/order_dispatch_receive_request_test.rb +165 -0
  95. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/order_select_receive_request_test.rb +165 -0
  96. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/order_sign_receive_request_test.rb +165 -0
  97. data/lib/davinci_crd_test_kit/client/v2.2.1/long_running/client_long_running_receive_request_test.rb +64 -0
  98. data/lib/davinci_crd_test_kit/client/v2.2.1/long_running/client_skip_long_running_attestation_test.rb +49 -0
  99. data/lib/davinci_crd_test_kit/client/v2.2.1/registration/client_registration_verification_test.rb +161 -0
  100. data/lib/davinci_crd_test_kit/client/v2.2.1/registration/client_service_registration_attestation_test.rb +107 -0
  101. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_conformance_test.rb +47 -0
  102. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_coverage_verification_test.rb +152 -0
  103. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_data_fetch_verification_test.rb +55 -0
  104. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_granted_scopes_test.rb +123 -0
  105. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_prefetch_complete_test.rb +127 -0
  106. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_prefetch_profiles_test.rb +55 -0
  107. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_requested_version_test.rb +54 -0
  108. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_secured_transport_test.rb +48 -0
  109. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_response/client_display_cards_attest.rb +74 -0
  110. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_response/hook_response_support_coverage_information_test.rb +30 -0
  111. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_response/inferno_response_validation.rb +77 -0
  112. data/lib/davinci_crd_test_kit/cross_suite/base_urls.rb +20 -0
  113. data/lib/davinci_crd_test_kit/cross_suite/cards_identification.rb +312 -0
  114. data/lib/davinci_crd_test_kit/{cards_validation.rb → cross_suite/cards_validation.rb} +104 -47
  115. data/lib/davinci_crd_test_kit/cross_suite/coverage-information_stu201_metadata.yml +27 -0
  116. data/lib/davinci_crd_test_kit/cross_suite/coverage-information_stu221_metadata.yml +60 -0
  117. data/lib/davinci_crd_test_kit/cross_suite/fhirpath_on_cds_request.rb +177 -0
  118. data/lib/davinci_crd_test_kit/{hook_request_field_validation.rb → cross_suite/hook_request_field_validation.rb} +282 -203
  119. data/lib/davinci_crd_test_kit/cross_suite/logical_models_override_helper.rb +220 -0
  120. data/lib/davinci_crd_test_kit/cross_suite/prefetch_completeness_checker.rb +462 -0
  121. data/lib/davinci_crd_test_kit/cross_suite/prefetch_contents_validation.rb +81 -0
  122. data/lib/davinci_crd_test_kit/cross_suite/prefetch_profile_validation.rb +48 -0
  123. data/lib/davinci_crd_test_kit/cross_suite/profiles_and_resource_types.rb +63 -0
  124. data/lib/davinci_crd_test_kit/cross_suite/replace_tokens.rb +38 -0
  125. data/lib/davinci_crd_test_kit/cross_suite/requests_logical_model_validation.rb +202 -0
  126. data/lib/davinci_crd_test_kit/cross_suite/response_logical_model_validation.rb +274 -0
  127. data/lib/davinci_crd_test_kit/{suggestion_actions_validation.rb → cross_suite/suggestion_actions_validation.rb} +70 -50
  128. data/lib/davinci_crd_test_kit/cross_suite/tags.rb +42 -0
  129. data/lib/davinci_crd_test_kit/metadata.rb +10 -44
  130. data/lib/davinci_crd_test_kit/requirements/cds-hooks-library_1.0.1_requirements.xlsx +0 -0
  131. data/lib/davinci_crd_test_kit/requirements/cds-hooks_2.0_requirements.xlsx +0 -0
  132. data/lib/davinci_crd_test_kit/requirements/cds-hooks_3.0.0-ballot_requirements.xlsx +0 -0
  133. data/lib/davinci_crd_test_kit/requirements/davinci_crd_test_kit_requirements.csv +742 -65
  134. data/lib/davinci_crd_test_kit/requirements/generated/crd_client_requirements_coverage.csv +279 -54
  135. data/lib/davinci_crd_test_kit/requirements/generated/crd_client_v221_requirements_coverage.csv +1430 -0
  136. data/lib/davinci_crd_test_kit/requirements/generated/crd_server_requirements_coverage.csv +36 -45
  137. data/lib/davinci_crd_test_kit/requirements/generated/crd_server_v221_requirements_coverage.csv +143 -0
  138. data/lib/davinci_crd_test_kit/requirements/hl7.fhir.us.davinci-crd_2.0.1_requirements.xlsx +0 -0
  139. data/lib/davinci_crd_test_kit/requirements/hl7.fhir.us.davinci-crd_2.2.1_requirements.xlsx +0 -0
  140. data/lib/davinci_crd_test_kit/server/endpoints/jwk_set_endpoint_handler.rb +13 -0
  141. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_create_endpoint.rb +23 -0
  142. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_delete_endpoint.rb +30 -0
  143. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_metadata_endpoint.rb +112 -0
  144. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_read_endpoint.rb +21 -0
  145. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_request_handler.rb +261 -0
  146. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_search_endpoint.rb +561 -0
  147. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_update_endpoint.rb +24 -0
  148. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/stress-test-Bundle.json +54687 -0
  149. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr_endpoints.rb +95 -0
  150. data/lib/davinci_crd_test_kit/server/jobs/invoke_hook.rb +225 -0
  151. data/lib/davinci_crd_test_kit/{jwt_helper.rb → server/jwt_helper.rb} +1 -12
  152. data/lib/davinci_crd_test_kit/server/resource_extractor.rb +68 -0
  153. data/lib/davinci_crd_test_kit/server/server_abstract_invoke_hook_test.rb +165 -0
  154. data/lib/davinci_crd_test_kit/server/server_base_urls.rb +30 -0
  155. data/lib/davinci_crd_test_kit/{server_hook_helper.rb → server/server_hook_helper.rb} +1 -1
  156. data/lib/davinci_crd_test_kit/{server_hook_request_validation.rb → server/server_hook_request_validation.rb} +1 -1
  157. data/lib/davinci_crd_test_kit/{test_helper.rb → server/server_test_helper.rb} +7 -3
  158. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Appointment.yml +5 -0
  159. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/ClaimResponse.yml +5 -0
  160. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/CommunicationRequest.yml +5 -0
  161. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Coverage.yml +21 -0
  162. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Device.yml +5 -0
  163. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/DeviceRequest.yml +5 -0
  164. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Encounter.yml +7 -0
  165. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Location.yml +5 -0
  166. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/MedicationRequest.yml +5 -0
  167. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/NutritionOrder.yml +5 -0
  168. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Organization.yml +5 -0
  169. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Patient.yml +5 -0
  170. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Practitioner.yml +5 -0
  171. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/PractitionerRole.yml +40 -0
  172. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/ServiceRequest.yml +5 -0
  173. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Task.yml +5 -0
  174. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/VisionPrescription.yml +5 -0
  175. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_server_suite.rb +99 -0
  176. data/lib/davinci_crd_test_kit/server/v2.0.1/discovery/discovery_endpoint_test.rb +90 -0
  177. data/lib/davinci_crd_test_kit/server/v2.0.1/discovery/discovery_services_validation_test.rb +67 -0
  178. data/lib/davinci_crd_test_kit/server/v2.0.1/interaction/server_invoke_hook_test.rb +12 -0
  179. data/lib/davinci_crd_test_kit/server/v2.0.1/must_support/coverage_information_system_action_across_hooks_validation_test.rb +34 -0
  180. data/lib/davinci_crd_test_kit/server/v2.0.1/must_support/external_reference_card_across_hooks_validation_test.rb +30 -0
  181. data/lib/davinci_crd_test_kit/server/v2.0.1/must_support/instructions_card_received_across_hooks_test.rb +27 -0
  182. data/lib/davinci_crd_test_kit/server/v2.0.1/server_appointment_book_group.rb +191 -0
  183. data/lib/davinci_crd_test_kit/server/v2.0.1/server_demonstrate_hook_response_group.rb +93 -0
  184. data/lib/davinci_crd_test_kit/server/v2.0.1/server_discovery_group.rb +62 -0
  185. data/lib/davinci_crd_test_kit/server/v2.0.1/server_encounter_discharge_group.rb +186 -0
  186. data/lib/davinci_crd_test_kit/server/v2.0.1/server_encounter_start_group.rb +186 -0
  187. data/lib/davinci_crd_test_kit/server/v2.0.1/server_hooks_group.rb +73 -0
  188. data/lib/davinci_crd_test_kit/server/v2.0.1/server_order_dispatch_group.rb +191 -0
  189. data/lib/davinci_crd_test_kit/server/v2.0.1/server_order_select_group.rb +211 -0
  190. data/lib/davinci_crd_test_kit/server/v2.0.1/server_order_sign_group.rb +216 -0
  191. data/lib/davinci_crd_test_kit/server/v2.0.1/server_required_card_response_validation_group.rb +28 -0
  192. data/lib/davinci_crd_test_kit/server/v2.0.1/server_urls.rb +13 -0
  193. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_request/service_request_context_validation_test.rb +30 -0
  194. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_request/service_request_optional_fields_validation_test.rb +39 -0
  195. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_request/service_request_required_fields_validation_test.rb +40 -0
  196. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/additional_orders_validation_test.rb +59 -0
  197. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/card_optional_fields_validation_test.rb +51 -0
  198. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/coverage_information_system_action_received_test.rb +65 -0
  199. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/coverage_information_system_action_validation_test.rb +120 -0
  200. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/create_or_update_coverage_info_response_validation_test.rb +70 -0
  201. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/external_reference_card_validation_test.rb +37 -0
  202. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/form_completion_response_validation_test.rb +67 -0
  203. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/instructions_card_received_test.rb +30 -0
  204. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/launch_smart_app_card_validation_test.rb +39 -0
  205. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/propose_alternate_request_card_validation_test.rb +46 -0
  206. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/service_response_validation_test.rb +83 -0
  207. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Appointment_withorder.yml +5 -0
  208. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Appointment_withoutorder.yml +5 -0
  209. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/CommunicationRequest.yml +5 -0
  210. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Coverage.yml +5 -0
  211. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Device.yml +5 -0
  212. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/DeviceRequest.yml +5 -0
  213. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Encounter.yml +5 -0
  214. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Location.yml +5 -0
  215. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/MedicationRequest.yml +5 -0
  216. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/NutritionOrder.yml +5 -0
  217. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Organization.yml +5 -0
  218. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Patient.yml +5 -0
  219. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/PractitionerRole.yml +5 -0
  220. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/ServiceRequest.yml +5 -0
  221. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/VisionPrescription.yml +5 -0
  222. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_server_suite.rb +115 -0
  223. data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_configuration_test.rb +159 -0
  224. data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_endpoint_test.rb +90 -0
  225. data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_prefetch_support_test.rb +43 -0
  226. data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_services_validation_test.rb +121 -0
  227. data/lib/davinci_crd_test_kit/server/v2.2.1/interaction/server_invoke_hook_test.rb +17 -0
  228. data/lib/davinci_crd_test_kit/server/v2.2.1/must_support/coverage_information_must_support_test.rb +71 -0
  229. data/lib/davinci_crd_test_kit/server/v2.2.1/must_support/coverage_information_system_action_across_hooks_validation_test.rb +36 -0
  230. data/lib/davinci_crd_test_kit/server/v2.2.1/must_support/supported_us_core_versions_test.rb +118 -0
  231. data/lib/davinci_crd_test_kit/server/v2.2.1/server_appointment_book_group.rb +213 -0
  232. data/lib/davinci_crd_test_kit/server/v2.2.1/server_demonstrate_hook_response_group.rb +93 -0
  233. data/lib/davinci_crd_test_kit/server/v2.2.1/server_discovery_group.rb +69 -0
  234. data/lib/davinci_crd_test_kit/server/v2.2.1/server_encounter_discharge_group.rb +194 -0
  235. data/lib/davinci_crd_test_kit/server/v2.2.1/server_encounter_start_group.rb +194 -0
  236. data/lib/davinci_crd_test_kit/server/v2.2.1/server_hooks_group.rb +73 -0
  237. data/lib/davinci_crd_test_kit/server/v2.2.1/server_order_dispatch_group.rb +214 -0
  238. data/lib/davinci_crd_test_kit/server/v2.2.1/server_order_select_group.rb +219 -0
  239. data/lib/davinci_crd_test_kit/server/v2.2.1/server_order_sign_group.rb +241 -0
  240. data/lib/davinci_crd_test_kit/server/v2.2.1/server_required_card_response_validation_group.rb +30 -0
  241. data/lib/davinci_crd_test_kit/server/v2.2.1/server_urls.rb +13 -0
  242. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_context_validation_test.rb +30 -0
  243. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_no_custom_extensions_test.rb +120 -0
  244. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_optional_fields_validation_test.rb +39 -0
  245. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_required_fields_validation_test.rb +40 -0
  246. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/additional_orders_validation_test.rb +66 -0
  247. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/all_responses_include_coverage_information_test.rb +123 -0
  248. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/card_optional_fields_validation_test.rb +57 -0
  249. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/coverage_info_configuration_test.rb +83 -0
  250. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/coverage_information_system_action_received_test.rb +65 -0
  251. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/coverage_information_system_action_validation_test.rb +184 -0
  252. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/create_or_update_coverage_info_response_validation_test.rb +75 -0
  253. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/external_reference_card_validation_test.rb +47 -0
  254. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/form_completion_response_validation_test.rb +91 -0
  255. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/hook_request_resource_resolution.rb +137 -0
  256. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/instructions_card_received_test.rb +32 -0
  257. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/launch_smart_app_card_validation_test.rb +49 -0
  258. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/order_dispatch_coverage_information_test.rb +38 -0
  259. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/propose_alternate_request_card_validation_test.rb +54 -0
  260. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/service_response_validation_test.rb +97 -0
  261. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/unknown_cds_hooks_elements_test.rb +78 -0
  262. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/unknown_configuration_test.rb +78 -0
  263. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/unknown_context_test.rb +78 -0
  264. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/verify_response_without_billing_options_test.rb +43 -0
  265. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/verify_response_without_configuration_test.rb +44 -0
  266. data/lib/davinci_crd_test_kit/version.rb +2 -2
  267. data/lib/davinci_crd_test_kit.rb +4 -2
  268. metadata +308 -101
  269. data/lib/davinci_crd_test_kit/client_fhir_api_group.rb +0 -785
  270. data/lib/davinci_crd_test_kit/client_hooks_group.rb +0 -75
  271. data/lib/davinci_crd_test_kit/client_tests/appointment_book_receive_request_test.rb +0 -93
  272. data/lib/davinci_crd_test_kit/client_tests/client_appointment_book_group.rb +0 -75
  273. data/lib/davinci_crd_test_kit/client_tests/client_display_cards_attest.rb +0 -48
  274. data/lib/davinci_crd_test_kit/client_tests/client_encounter_discharge_group.rb +0 -73
  275. data/lib/davinci_crd_test_kit/client_tests/client_encounter_start_group.rb +0 -73
  276. data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_create_test.rb +0 -41
  277. data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_read_test.rb +0 -39
  278. data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_search_test.rb +0 -232
  279. data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_update_test.rb +0 -41
  280. data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_validation_test.rb +0 -60
  281. data/lib/davinci_crd_test_kit/client_tests/client_order_dispatch_group.rb +0 -79
  282. data/lib/davinci_crd_test_kit/client_tests/client_order_select_group.rb +0 -82
  283. data/lib/davinci_crd_test_kit/client_tests/client_order_sign_group.rb +0 -81
  284. data/lib/davinci_crd_test_kit/client_tests/client_registration_verification_test.rb +0 -88
  285. data/lib/davinci_crd_test_kit/client_tests/decode_auth_token_test.rb +0 -60
  286. data/lib/davinci_crd_test_kit/client_tests/encounter_discharge_receive_request_test.rb +0 -90
  287. data/lib/davinci_crd_test_kit/client_tests/encounter_start_receive_request_test.rb +0 -90
  288. data/lib/davinci_crd_test_kit/client_tests/hook_request_optional_fields_test.rb +0 -57
  289. data/lib/davinci_crd_test_kit/client_tests/hook_request_required_fields_test.rb +0 -49
  290. data/lib/davinci_crd_test_kit/client_tests/hook_request_valid_context_test.rb +0 -68
  291. data/lib/davinci_crd_test_kit/client_tests/hook_request_valid_prefetch_test.rb +0 -69
  292. data/lib/davinci_crd_test_kit/client_tests/order_dispatch_receive_request_test.rb +0 -102
  293. data/lib/davinci_crd_test_kit/client_tests/order_select_receive_request_test.rb +0 -98
  294. data/lib/davinci_crd_test_kit/client_tests/order_sign_receive_request_test.rb +0 -101
  295. data/lib/davinci_crd_test_kit/client_tests/retrieve_jwks_test.rb +0 -105
  296. data/lib/davinci_crd_test_kit/client_tests/submitted_response_validation.rb +0 -44
  297. data/lib/davinci_crd_test_kit/client_tests/token_header_test.rb +0 -65
  298. data/lib/davinci_crd_test_kit/client_tests/token_payload_test.rb +0 -78
  299. data/lib/davinci_crd_test_kit/crd_client_suite.rb +0 -185
  300. data/lib/davinci_crd_test_kit/crd_options.rb +0 -9
  301. data/lib/davinci_crd_test_kit/crd_server_suite.rb +0 -125
  302. data/lib/davinci_crd_test_kit/igs/davinci-crd-2.0.1.tgz +0 -0
  303. data/lib/davinci_crd_test_kit/routes/cds_services_discovery_handler.rb +0 -18
  304. data/lib/davinci_crd_test_kit/routes/hook_request_endpoint.rb +0 -77
  305. data/lib/davinci_crd_test_kit/routes/jwk_set_endpoint_handler.rb +0 -15
  306. data/lib/davinci_crd_test_kit/server_appointment_book_group.rb +0 -176
  307. data/lib/davinci_crd_test_kit/server_demonstrate_hook_response_group.rb +0 -77
  308. data/lib/davinci_crd_test_kit/server_discovery_group.rb +0 -60
  309. data/lib/davinci_crd_test_kit/server_encounter_discharge_group.rb +0 -170
  310. data/lib/davinci_crd_test_kit/server_encounter_start_group.rb +0 -170
  311. data/lib/davinci_crd_test_kit/server_hooks_group.rb +0 -71
  312. data/lib/davinci_crd_test_kit/server_order_dispatch_group.rb +0 -176
  313. data/lib/davinci_crd_test_kit/server_order_select_group.rb +0 -195
  314. data/lib/davinci_crd_test_kit/server_order_sign_group.rb +0 -201
  315. data/lib/davinci_crd_test_kit/server_required_card_response_validation_group.rb +0 -26
  316. data/lib/davinci_crd_test_kit/server_tests/additional_orders_validation_test.rb +0 -68
  317. data/lib/davinci_crd_test_kit/server_tests/card_optional_fields_validation_test.rb +0 -47
  318. data/lib/davinci_crd_test_kit/server_tests/coverage_information_system_action_across_hooks_validation_test.rb +0 -32
  319. data/lib/davinci_crd_test_kit/server_tests/coverage_information_system_action_received_test.rb +0 -63
  320. data/lib/davinci_crd_test_kit/server_tests/coverage_information_system_action_validation_test.rb +0 -118
  321. data/lib/davinci_crd_test_kit/server_tests/create_or_update_coverage_info_response_validation_test.rb +0 -71
  322. data/lib/davinci_crd_test_kit/server_tests/discovery_endpoint_test.rb +0 -88
  323. data/lib/davinci_crd_test_kit/server_tests/discovery_services_validation_test.rb +0 -65
  324. data/lib/davinci_crd_test_kit/server_tests/external_reference_card_across_hooks_validation_test.rb +0 -28
  325. data/lib/davinci_crd_test_kit/server_tests/external_reference_card_validation_test.rb +0 -36
  326. data/lib/davinci_crd_test_kit/server_tests/form_completion_response_validation_test.rb +0 -78
  327. data/lib/davinci_crd_test_kit/server_tests/instructions_card_received_across_hooks_test.rb +0 -25
  328. data/lib/davinci_crd_test_kit/server_tests/instructions_card_received_test.rb +0 -26
  329. data/lib/davinci_crd_test_kit/server_tests/launch_smart_app_card_validation_test.rb +0 -38
  330. data/lib/davinci_crd_test_kit/server_tests/propose_alternate_request_card_validation_test.rb +0 -63
  331. data/lib/davinci_crd_test_kit/server_tests/service_call_test.rb +0 -101
  332. data/lib/davinci_crd_test_kit/server_tests/service_request_context_validation_test.rb +0 -28
  333. data/lib/davinci_crd_test_kit/server_tests/service_request_optional_fields_validation_test.rb +0 -37
  334. data/lib/davinci_crd_test_kit/server_tests/service_request_required_fields_validation_test.rb +0 -38
  335. data/lib/davinci_crd_test_kit/server_tests/service_response_validation_test.rb +0 -81
  336. data/lib/davinci_crd_test_kit/tags.rb +0 -10
  337. data/lib/davinci_crd_test_kit/urls.rb +0 -52
  338. /data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/external_reference.json +0 -0
  339. /data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/instructions.json +0 -0
  340. /data/lib/davinci_crd_test_kit/{crd_jwks.json → server/endpoints/crd_jwks.json} +0 -0
  341. /data/lib/davinci_crd_test_kit/{jwks.rb → server/endpoints/jwks.rb} +0 -0
@@ -0,0 +1,156 @@
1
+ require_relative '../client_urls'
2
+
3
+ module DaVinciCRDTestKit
4
+ module V221
5
+ class AppointmentBookReceiveRequestTest < Inferno::Test
6
+ include ClientURLs
7
+
8
+ id :crd_v221_appointment_book_request
9
+ title 'Client invokes the appointment-book hook'
10
+ description %(
11
+ During this test, Inferno will wait while the client makes one or more [appointment-book](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/hooks.html#appointment-book)
12
+ hook requests against Inferno's simulated CRD servers. Inferno will respond
13
+ based on the response configuration provided when running the test.
14
+ For more details on how Inferno's simulated CRD servers behave during
15
+ hook invocation see the [simulated CRD server](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Client-Details#crd-server-simulation)
16
+ documentation.
17
+
18
+ Inferno will pause and wait for inbound requests until told explicitly to continue
19
+ by the tester by clicking on the link in the "User Action Required" dialog (NOTE: after
20
+ 5 minutes the test will become inactive and unresponsive to anything except cancelation).
21
+ )
22
+ config options: { accepts_multiple_requests: true }
23
+
24
+ input :cds_jwt_iss,
25
+ title: 'CRD JWT Issuer',
26
+ description: %(
27
+ Value of the `iss` claim that must be present in the JWT used to authorize the client's hook
28
+ request sent as the Bearer token in the `Authorization` header.
29
+ Run or re-run the "Registration" group to set or change this value.
30
+ ),
31
+ locked: true
32
+ input :appointment_book_response_approach,
33
+ title: 'Response generation approach for appointment-book',
34
+ description: %(
35
+ Determines how Inferno will generate response for appoontment-book
36
+ hook invocations.
37
+ ),
38
+ type: 'radio',
39
+ default: 'mocked',
40
+ options: {
41
+ list_options: [
42
+ {
43
+ label: 'Create simple mocks based on selected response types',
44
+ value: 'mocked'
45
+ },
46
+ {
47
+ label: 'Generate responses based on a tester-provided template',
48
+ value: 'custom'
49
+ }
50
+ ]
51
+ }
52
+ input :appointment_book_selected_response_types,
53
+ title: 'Response types to return from appointment-book hook requests',
54
+ description: %(
55
+ Select the CRD response types that the simulated Inferno CRD server will [mock](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Controlling-Simulated-Responses#mocked-responses)
56
+ when responding to hook invocations. If no types are selected, Inferno will mock and return
57
+ a [Coverage Information](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/cards.html#coverage-information-response-type)
58
+ response for this primary hook.
59
+ ),
60
+ type: 'checkbox',
61
+ default: ['coverage_information', 'external_reference', 'instructions'],
62
+ optional: true,
63
+ options: {
64
+ list_options: [
65
+ {
66
+ label: 'External Reference',
67
+ value: 'external_reference'
68
+ },
69
+ {
70
+ label: 'Instructions',
71
+ value: 'instructions'
72
+ },
73
+ {
74
+ label: 'Coverage Information',
75
+ value: 'coverage_information'
76
+ },
77
+ {
78
+ label: 'Request Form Completion',
79
+ value: 'request_form_completion'
80
+ },
81
+ {
82
+ label: 'Create/Update Coverage Information',
83
+ value: 'create_update_coverage_info'
84
+ },
85
+ {
86
+ label: 'Launch SMART Application',
87
+ value: 'launch_smart_app'
88
+ }
89
+ ]
90
+ },
91
+ enable_when: { input_name: 'appointment_book_response_approach', value: 'mocked' }
92
+ input :appointment_book_custom_response_template,
93
+ title: 'Custom response template for appointment-book hook requests',
94
+ description: %(
95
+ Provide a [custom response template](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Controlling-Simulated-Responses#tester-directed-custom-responses)
96
+ in JSON form for Inferno to use when responding to hook invocations.
97
+ ),
98
+ type: 'textarea',
99
+ optional: true,
100
+ enable_when: { input_name: 'appointment_book_response_approach', value: 'custom' }
101
+ output :continuation_url
102
+
103
+ def configured_response_details
104
+ if appointment_book_response_approach == 'custom'
105
+ # rubocop:disable Layout/LineLength
106
+ 'When responding, Inferno will evaluate the provided [custom response template](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Controlling-Simulated-Responses#tester-directed-custom-responses) ' \
107
+ 'from the **Custom response template for appointment-book hook requests** input ' \
108
+ 'against the incoming request to create a response.'
109
+ # rubocop:enable Layout/LineLength
110
+
111
+ else
112
+ # rubocop:disable Layout/LineLength
113
+ 'When responding, Inferno will [mock](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Controlling-Simulated-Responses#mocked-responses) ' \
114
+ 'the following response types using the incoming request: ' \
115
+ "\n - #{selected_response_types_string}"
116
+ # rubocop:enable Layout/LineLength
117
+ end
118
+ end
119
+
120
+ def selected_response_types_string
121
+ if appointment_book_selected_response_types.present?
122
+ appointment_book_selected_response_types.join("\n - ")
123
+ else
124
+ 'Coverage Information' # primary hook default
125
+ end
126
+ end
127
+
128
+ run do
129
+ identifier = cds_jwt_iss
130
+ continuation_url = "#{resume_pass_url}?token=#{identifier}"
131
+ output(continuation_url:)
132
+
133
+ wait(
134
+ identifier:,
135
+ message: %(
136
+ **Invoke the `appointment-book` hook**:
137
+
138
+ Invoke the appointment-book hook by sending requests to
139
+ one or both of the two Inferno simulated CRD servers:
140
+
141
+ - Complete Prefetch: `#{appointment_book_url}`
142
+ - Subset Prefetch: `#{appointment_book_prefetch_subset_url}`
143
+
144
+ For Inferno to recognize these requests and associate them with this session,
145
+ the authentication JWT sent as a Bearer token in the Authorization header
146
+ must have `#{cds_jwt_iss}` as the `iss` claim in the JWT payload.
147
+
148
+ #{configured_response_details}
149
+
150
+ [Click here](#{continuation_url}) when you have finished submitting requests.
151
+ )
152
+ )
153
+ end
154
+ end
155
+ end
156
+ end
@@ -0,0 +1,157 @@
1
+ require_relative '../client_urls'
2
+
3
+ module DaVinciCRDTestKit
4
+ module V221
5
+ class EncounterDischargeReceiveRequestTest < Inferno::Test
6
+ include ClientURLs
7
+
8
+ id :crd_v221_encounter_discharge_request
9
+ title 'Client invokes the encounter-discharge hook'
10
+ description %(
11
+ During this test, Inferno will wait while the client makes one or more [encounter-discharge](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/hooks.html#encounter-discharge)
12
+ hook requests against Inferno's simulated CRD servers. Inferno will respond
13
+ based on the response configuration provided when running the test.
14
+ For more details on how Inferno's simulated CRD servers behave during
15
+ hook invocation see the [simulated CRD server](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Client-Details#crd-server-simulation)
16
+ documentation.
17
+
18
+ Inferno will pause and wait for inbound requests until told explicitly to continue
19
+ by the tester by clicking on the link in the "User Action Required" dialog (NOTE: after
20
+ 5 minutes the test will become inactive and unresponsive to anything except cancelation).
21
+ )
22
+
23
+ config options: { accepts_multiple_requests: true }
24
+
25
+ input :cds_jwt_iss,
26
+ title: 'CRD JWT Issuer',
27
+ description: %(
28
+ Value of the `iss` claim that must be present in the JWT used to authorize the client's hook
29
+ request sent as the Bearer token in the `Authorization` header.
30
+ Run or re-run the "Registration" group to set or change this value.
31
+ ),
32
+ locked: true
33
+ input :encounter_discharge_response_approach,
34
+ title: 'Response generation approach for encounter-discharge',
35
+ description: %(
36
+ Determines how Inferno will generate response for encounter-discharge
37
+ hook invocations.
38
+ ),
39
+ type: 'radio',
40
+ default: 'mocked',
41
+ options: {
42
+ list_options: [
43
+ {
44
+ label: 'Create simple mocks based on selected response types',
45
+ value: 'mocked'
46
+ },
47
+ {
48
+ label: 'Generate responses based on a tester-provided template',
49
+ value: 'custom'
50
+ }
51
+ ]
52
+ }
53
+ input :encounter_discharge_selected_response_types,
54
+ title: 'Response types to return from encounter-discharge hook requests',
55
+ description: %(
56
+ Select the CRD response types that the simulated Inferno CRD server will [mock](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Controlling-Simulated-Responses#mocked-responses)
57
+ when responding to hook invocations. If no types are selected, Inferno will mock and return
58
+ an [Instructions](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/cards.html#instructions-response-type)
59
+ response for this secondary hook.
60
+ ),
61
+ type: 'checkbox',
62
+ default: ['coverage_information', 'external_reference', 'instructions'],
63
+ optional: true,
64
+ options: {
65
+ list_options: [
66
+ {
67
+ label: 'External Reference',
68
+ value: 'external_reference'
69
+ },
70
+ {
71
+ label: 'Instructions',
72
+ value: 'instructions'
73
+ },
74
+ {
75
+ label: 'Coverage Information',
76
+ value: 'coverage_information'
77
+ },
78
+ {
79
+ label: 'Request Form Completion',
80
+ value: 'request_form_completion'
81
+ },
82
+ {
83
+ label: 'Create/Update Coverage Information',
84
+ value: 'create_update_coverage_info'
85
+ },
86
+ {
87
+ label: 'Launch SMART Application',
88
+ value: 'launch_smart_app'
89
+ }
90
+ ]
91
+ },
92
+ enable_when: { input_name: 'encounter_discharge_response_approach', value: 'mocked' }
93
+ input :encounter_discharge_custom_response_template,
94
+ title: 'Custom response template for encounter-discharge hook requests',
95
+ description: %(
96
+ Provide a [custom response template](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Controlling-Simulated-Responses#tester-directed-custom-responses)
97
+ in JSON form for Inferno to use when responding to hook invocations.
98
+ ),
99
+ type: 'textarea',
100
+ optional: true,
101
+ enable_when: { input_name: 'encounter_discharge_response_approach', value: 'custom' }
102
+ output :continuation_url
103
+
104
+ def configured_response_details
105
+ if encounter_discharge_response_approach == 'custom'
106
+ # rubocop:disable Layout/LineLength
107
+ 'When responding, Inferno will evaluate the provided [custom response template](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Controlling-Simulated-Responses#tester-directed-custom-responses) ' \
108
+ 'from the **Custom response template for encounter-discharge hook requests** input ' \
109
+ 'against the incoming request to create a response.'
110
+ # rubocop:enable Layout/LineLength
111
+
112
+ else
113
+ # rubocop:disable Layout/LineLength
114
+ 'When responding, Inferno will [mock](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Controlling-Simulated-Responses#mocked-responses) ' \
115
+ 'the following response types using the incoming request: ' \
116
+ "\n - #{selected_response_types_string}"
117
+ # rubocop:enable Layout/LineLength
118
+ end
119
+ end
120
+
121
+ def selected_response_types_string
122
+ if encounter_discharge_selected_response_types.present?
123
+ encounter_discharge_selected_response_types.join("\n - ")
124
+ else
125
+ 'Instructions' # secondary hook default
126
+ end
127
+ end
128
+
129
+ run do
130
+ identifier = cds_jwt_iss
131
+ continuation_url = "#{resume_pass_url}?token=#{identifier}"
132
+ output(continuation_url:)
133
+
134
+ wait(
135
+ identifier:,
136
+ message: %(
137
+ **Invoke the `encounter-discharge` hook**:
138
+
139
+ Invoke the encounter-discharge hook by sending requests to
140
+ one or both of the two Inferno simulated CRD servers:
141
+
142
+ - Complete Prefetch: `#{encounter_discharge_url}`
143
+ - Subset Prefetch: `#{encounter_discharge_prefetch_subset_url}`
144
+
145
+ For Inferno to recognize these requests and associate them with this session,
146
+ the authentication JWT sent as a Bearer token in the Authorization header
147
+ must have `#{cds_jwt_iss}` as the `iss` claim in the JWT payload.
148
+
149
+ #{configured_response_details}
150
+
151
+ [Click here](#{continuation_url}) when you have finished submitting requests.
152
+ )
153
+ )
154
+ end
155
+ end
156
+ end
157
+ end
@@ -0,0 +1,157 @@
1
+ require_relative '../client_urls'
2
+
3
+ module DaVinciCRDTestKit
4
+ module V221
5
+ class EncounterStartReceiveRequestTest < Inferno::Test
6
+ include ClientURLs
7
+
8
+ id :crd_v221_encounter_start_request
9
+ title 'Client invokes the encounter-start hook'
10
+ description %(
11
+ During this test, Inferno will wait while the client makes one or more [encounter-start](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/hooks.html#encounter-start)
12
+ hook requests against Inferno's simulated CRD servers. Inferno will respond
13
+ based on the response configuration provided when running the test.
14
+ For more details on how Inferno's simulated CRD servers behave during
15
+ hook invocation see the [simulated CRD server](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Client-Details#crd-server-simulation)
16
+ documentation.
17
+
18
+ Inferno will pause and wait for inbound requests until told explicitly to continue
19
+ by the tester by clicking on the link in the "User Action Required" dialog (NOTE: after
20
+ 5 minutes the test will become inactive and unresponsive to anything except cancelation).
21
+ )
22
+
23
+ config options: { accepts_multiple_requests: true }
24
+
25
+ input :cds_jwt_iss,
26
+ title: 'CRD JWT Issuer',
27
+ description: %(
28
+ Value of the `iss` claim that must be present in the JWT used to authorize the client's hook
29
+ request sent as the Bearer token in the `Authorization` header.
30
+ Run or re-run the "Registration" group to set or change this value.
31
+ ),
32
+ locked: true
33
+ input :encounter_start_response_approach,
34
+ title: 'Response generation approach for encounter-start',
35
+ description: %(
36
+ Determines how Inferno will generate response for encounter-start
37
+ hook invocations.
38
+ ),
39
+ type: 'radio',
40
+ default: 'mocked',
41
+ options: {
42
+ list_options: [
43
+ {
44
+ label: 'Create simple mocks based on selected response types',
45
+ value: 'mocked'
46
+ },
47
+ {
48
+ label: 'Generate responses based on a tester-provided template',
49
+ value: 'custom'
50
+ }
51
+ ]
52
+ }
53
+ input :encounter_start_selected_response_types,
54
+ title: 'Response types to return from encounter-start hook requests',
55
+ description: %(
56
+ Select the CRD response types that the simulated Inferno CRD server will [mock](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Controlling-Simulated-Responses#mocked-responses)
57
+ when responding to hook invocations. If no types are selected, Inferno will mock and return
58
+ an [Instructions](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/cards.html#instructions-response-type)
59
+ response for this secondary hook.
60
+ ),
61
+ type: 'checkbox',
62
+ default: ['coverage_information', 'external_reference', 'instructions'],
63
+ optional: true,
64
+ options: {
65
+ list_options: [
66
+ {
67
+ label: 'External Reference',
68
+ value: 'external_reference'
69
+ },
70
+ {
71
+ label: 'Instructions',
72
+ value: 'instructions'
73
+ },
74
+ {
75
+ label: 'Coverage Information',
76
+ value: 'coverage_information'
77
+ },
78
+ {
79
+ label: 'Request Form Completion',
80
+ value: 'request_form_completion'
81
+ },
82
+ {
83
+ label: 'Create/Update Coverage Information',
84
+ value: 'create_update_coverage_info'
85
+ },
86
+ {
87
+ label: 'Launch SMART Application',
88
+ value: 'launch_smart_app'
89
+ }
90
+ ]
91
+ },
92
+ enable_when: { input_name: 'encounter_start_response_approach', value: 'mocked' }
93
+ input :encounter_start_custom_response_template,
94
+ title: 'Custom response template for encounter-start hook requests',
95
+ description: %(
96
+ Provide a [custom response template](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Controlling-Simulated-Responses#tester-directed-custom-responses)
97
+ in JSON form for Inferno to use when responding to hook invocations.
98
+ ),
99
+ type: 'textarea',
100
+ optional: true,
101
+ enable_when: { input_name: 'encounter_start_response_approach', value: 'custom' }
102
+ output :continuation_url
103
+
104
+ def configured_response_details
105
+ if encounter_start_response_approach == 'custom'
106
+ # rubocop:disable Layout/LineLength
107
+ 'When responding, Inferno will evaluate the provided [custom response template](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Controlling-Simulated-Responses#tester-directed-custom-responses) ' \
108
+ 'from the **Custom response template for encounter-start hook requests** input ' \
109
+ 'against the incoming request to create a response.'
110
+ # rubocop:enable Layout/LineLength
111
+
112
+ else
113
+ # rubocop:disable Layout/LineLength
114
+ 'When responding, Inferno will [mock](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Controlling-Simulated-Responses#mocked-responses) ' \
115
+ 'the following response types using the incoming request: ' \
116
+ "\n - #{selected_response_types_string}"
117
+ # rubocop:enable Layout/LineLength
118
+ end
119
+ end
120
+
121
+ def selected_response_types_string
122
+ if encounter_start_selected_response_types.present?
123
+ encounter_start_selected_response_types.join("\n - ")
124
+ else
125
+ 'Instructions' # secondary hook default
126
+ end
127
+ end
128
+
129
+ run do
130
+ identifier = cds_jwt_iss
131
+ continuation_url = "#{resume_pass_url}?token=#{identifier}"
132
+ output(continuation_url:)
133
+
134
+ wait(
135
+ identifier:,
136
+ message: %(
137
+ **Invoke the `encounter-start` hook**:
138
+
139
+ Invoke the encounter-start hook by sending requests to
140
+ one or both of the two Inferno simulated CRD servers:
141
+
142
+ - Complete Prefetch: `#{encounter_start_url}`
143
+ - Subset Prefetch: `#{encounter_start_prefetch_subset_url}`
144
+
145
+ For Inferno to recognize these requests and associate them with this session,
146
+ the authentication JWT sent as a Bearer token in the Authorization header
147
+ must have `#{cds_jwt_iss}` as the `iss` claim in the JWT payload.
148
+
149
+ #{configured_response_details}
150
+
151
+ [Click here](#{continuation_url}) when you have finished submitting requests.
152
+ )
153
+ )
154
+ end
155
+ end
156
+ end
157
+ end
@@ -0,0 +1,165 @@
1
+ require_relative '../client_urls'
2
+
3
+ module DaVinciCRDTestKit
4
+ module V221
5
+ class OrderDispatchReceiveRequestTest < Inferno::Test
6
+ include ClientURLs
7
+
8
+ id :crd_v221_order_dispatch_request
9
+ title 'Client invokes the order-dispatch hook'
10
+ description %(
11
+ During this test, Inferno will wait while the client makes one or more [order-dispatch](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/hooks.html#order-dispatch)
12
+ hook requests against Inferno's simulated CRD servers. Inferno will respond
13
+ based on the response configuration provided when running the test.
14
+ For more details on how Inferno's simulated CRD servers behave during
15
+ hook invocation see the [simulated CRD server](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Client-Details#crd-server-simulation)
16
+ documentation.
17
+
18
+ Inferno will pause and wait for inbound requests until told explicitly to continue
19
+ by the tester by clicking on the link in the "User Action Required" dialog (NOTE: after
20
+ 5 minutes the test will become inactive and unresponsive to anything except cancelation).
21
+ )
22
+
23
+ config options: { accepts_multiple_requests: true }
24
+
25
+ input :cds_jwt_iss,
26
+ title: 'CRD JWT Issuer',
27
+ description: %(
28
+ Value of the `iss` claim that must be present in the JWT used to authorize the client's hook
29
+ request sent as the Bearer token in the `Authorization` header.
30
+ Run or re-run the "Registration" group to set or change this value.
31
+ ),
32
+ locked: true
33
+ input :order_dispatch_response_approach,
34
+ title: 'Response generation approach for order-dispatch',
35
+ description: %(
36
+ Determines how Inferno will generate response for order-dispatch
37
+ hook invocations.
38
+ ),
39
+ type: 'radio',
40
+ default: 'mocked',
41
+ options: {
42
+ list_options: [
43
+ {
44
+ label: 'Create simple mocks based on selected response types',
45
+ value: 'mocked'
46
+ },
47
+ {
48
+ label: 'Generate responses based on a tester-provided template',
49
+ value: 'custom'
50
+ }
51
+ ]
52
+ }
53
+ input :order_dispatch_selected_response_types,
54
+ title: 'Response types to return from order-dispatch hook requests',
55
+ description: %(
56
+ Select the CRD response types that the simulated Inferno CRD server will [mock](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Controlling-Simulated-Responses#mocked-responses)
57
+ when responding to hook invocations. If no types are selected, Inferno will mock and return
58
+ a [Coverage Information](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/cards.html#coverage-information-response-type)
59
+ response for this primary hook.
60
+ ),
61
+ type: 'checkbox',
62
+ default: ['coverage_information', 'external_reference', 'instructions'],
63
+ optional: true,
64
+ options: {
65
+ list_options: [
66
+ {
67
+ label: 'External Reference',
68
+ value: 'external_reference'
69
+ },
70
+ {
71
+ label: 'Instructions',
72
+ value: 'instructions'
73
+ },
74
+ {
75
+ label: 'Coverage Information',
76
+ value: 'coverage_information'
77
+ },
78
+ {
79
+ label: 'Request Form Completion',
80
+ value: 'request_form_completion'
81
+ },
82
+ {
83
+ label: 'Create/Update Coverage Information',
84
+ value: 'create_update_coverage_info'
85
+ },
86
+ {
87
+ label: 'Launch SMART Application',
88
+ value: 'launch_smart_app'
89
+ },
90
+ {
91
+ label: 'Propose Alternate Request',
92
+ value: 'propose_alternate_request'
93
+ },
94
+ {
95
+ label: 'Additional Orders as Companions/Prerequisites',
96
+ value: 'companions_prerequisites'
97
+ }
98
+ ]
99
+ },
100
+ enable_when: { input_name: 'order_dispatch_response_approach', value: 'mocked' }
101
+ input :order_dispatch_custom_response_template,
102
+ title: 'Custom response template for order-dispatch hook requests',
103
+ description: %(
104
+ Provide a [custom response template](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Controlling-Simulated-Responses#tester-directed-custom-responses)
105
+ in JSON form for Inferno to use when responding to hook invocations.
106
+ ),
107
+ type: 'textarea',
108
+ optional: true,
109
+ enable_when: { input_name: 'order_dispatch_response_approach', value: 'custom' }
110
+ output :continuation_url
111
+
112
+ def configured_response_details
113
+ if order_dispatch_response_approach == 'custom'
114
+ # rubocop:disable Layout/LineLength
115
+ 'When responding, Inferno will evaluate the provided [custom response template](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Controlling-Simulated-Responses#tester-directed-custom-responses) ' \
116
+ 'from the **Custom response template for order-dispatch hook requests** input ' \
117
+ 'against the incoming request to create a response.'
118
+ # rubocop:enable Layout/LineLength
119
+
120
+ else
121
+ # rubocop:disable Layout/LineLength
122
+ 'When responding, Inferno will [mock](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Controlling-Simulated-Responses#mocked-responses) ' \
123
+ 'the following response types using the incoming request: ' \
124
+ "\n - #{selected_response_types_string}"
125
+ # rubocop:enable Layout/LineLength
126
+ end
127
+ end
128
+
129
+ def selected_response_types_string
130
+ if order_dispatch_selected_response_types.present?
131
+ order_dispatch_selected_response_types.join("\n - ")
132
+ else
133
+ 'Coverage Information' # primary hook default
134
+ end
135
+ end
136
+
137
+ run do
138
+ identifier = cds_jwt_iss
139
+ continuation_url = "#{resume_pass_url}?token=#{identifier}"
140
+ output(continuation_url:)
141
+
142
+ wait(
143
+ identifier:,
144
+ message: %(
145
+ **Invoke the `order-dispatch` hook**:
146
+
147
+ Invoke the order-dispatch hook by sending requests to
148
+ one or both of the two Inferno simulated CRD servers:
149
+
150
+ - Complete Prefetch: `#{order_dispatch_url}`
151
+ - Subset Prefetch: `#{order_dispatch_prefetch_subset_url}`
152
+
153
+ For Inferno to recognize these requests and associate them with this session,
154
+ the authentication JWT sent as a Bearer token in the Authorization header
155
+ must have `#{cds_jwt_iss}` as the `iss` claim in the JWT payload.
156
+
157
+ #{configured_response_details}
158
+
159
+ [Click here](#{continuation_url}) when you have finished submitting requests.
160
+ )
161
+ )
162
+ end
163
+ end
164
+ end
165
+ end