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
@@ -1,60 +0,0 @@
1
- require_relative '../client_hook_request_validation'
2
-
3
- module DaVinciCRDTestKit
4
- class DecodeAuthTokenTest < Inferno::Test
5
- include ClientHookRequestValidation
6
- id :crd_decode_auth_token
7
- title 'Bearer token can be decoded'
8
- description %(
9
- Verify that the Bearer token is a properly constructed JWT. As per the [CDS hooks specification](https://cds-hooks.hl7.org/2.0#trusting-cds-clients),
10
- each time a CDS Client transmits a request to a CDS Service which requires authentication, the request MUST
11
- include an Authorization header presenting the JWT as a "Bearer" token.
12
- )
13
-
14
- output :auth_tokens, :auth_token_payloads_json, :auth_token_headers_json
15
-
16
- def hook_name
17
- config.options[:hook_name]
18
- end
19
-
20
- run do
21
- load_tagged_requests(hook_name)
22
- skip_if requests.empty?, "No #{hook_name} requests were made in a previous test as expected."
23
- auth_tokens = []
24
- auth_token_payloads_json = []
25
- auth_token_headers_json = []
26
-
27
- requests.each_with_index do |request, index|
28
- @request_number = index + 1
29
-
30
- authorization_header = request.request_header('Authorization')&.value
31
-
32
- unless authorization_header.start_with?('Bearer ')
33
- add_message('error', "#{request_number}Authorization token must be a JWT presented as a `Bearer` token")
34
- end
35
-
36
- auth_token = authorization_header.delete_prefix('Bearer ')
37
- auth_tokens << auth_token
38
-
39
- begin
40
- payload, header =
41
- JWT.decode(
42
- auth_token,
43
- nil,
44
- false
45
- )
46
-
47
- auth_token_payloads_json << payload.to_json
48
- auth_token_headers_json << header.to_json
49
- rescue StandardError => e
50
- add_message('error', "#{request_number}Token is not a properly constructed JWT: #{e.message}")
51
- end
52
- end
53
- output auth_tokens: auth_tokens.to_json,
54
- auth_token_payloads_json: auth_token_payloads_json.to_json,
55
- auth_token_headers_json: auth_token_headers_json.to_json
56
-
57
- no_error_validation('Decoding Authorization header Bearer tokens failed.')
58
- end
59
- end
60
- end
@@ -1,90 +0,0 @@
1
- require_relative '../urls'
2
-
3
- module DaVinciCRDTestKit
4
- class EncounterDischargeReceiveRequestTest < Inferno::Test
5
- include URLs
6
-
7
- id :crd_encounter_discharge_request
8
- title 'Request received for encounter-discharge hook'
9
- description %(
10
- This test waits for multiple incoming [encounter-discharge](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#encounter-discharge)
11
- hook requests and responds to the client with the response types selected as an input.
12
- )
13
- verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@197', 'hl7.fhir.us.davinci-crd_2.0.1@243',
14
- 'hl7.fhir.us.davinci-crd_2.0.1@244', 'hl7.fhir.us.davinci-crd_2.0.1@245'
15
-
16
- config options: { accepts_multiple_requests: true }
17
-
18
- input :cds_jwt_iss,
19
- title: 'CRD JWT Issuer',
20
- description: %(
21
- Value of the `iss` claim that must be sent on the Bearer token in the `Authorization`
22
- header of all requests. Run or re-run the **Client Registration** group to set or
23
- change this value.
24
- ),
25
- locked: true
26
- input :encounter_discharge_selected_response_types,
27
- title: 'Response types to return from encounter-discharge hook requests',
28
- description: %(
29
- Select the cards/action response types that the Inferno hook request endpoints will return. The default
30
- response type that will be returned for this hook is the `Instructions` card type.
31
- ),
32
- type: 'checkbox',
33
- default: ['coverage_information', 'external_reference', 'instructions'],
34
- optional: true,
35
- options: {
36
- list_options: [
37
- {
38
- label: 'External Reference',
39
- value: 'external_reference'
40
- },
41
- {
42
- label: 'Instructions',
43
- value: 'instructions'
44
- },
45
- {
46
- label: 'Coverage Information',
47
- value: 'coverage_information'
48
- },
49
- {
50
- label: 'Request Form Completion',
51
- value: 'request_form_completion'
52
- },
53
- {
54
- label: 'Create/Update Coverage Information',
55
- value: 'create_update_coverage_info'
56
- },
57
- {
58
- label: 'Launch SMART Application',
59
- value: 'launch_smart_app'
60
- }
61
- ]
62
- }
63
- input :encounter_discharge_custom_response,
64
- title: 'Custom response for encounter-discharge hook requests',
65
- description: %(
66
- A JSON string may be provided here to replace the normal response
67
- from the hook request endpoint
68
- ),
69
- type: 'textarea',
70
- optional: true
71
-
72
- run do
73
- wait(
74
- identifier: "encounter-discharge #{cds_jwt_iss}",
75
- message: %(
76
- **Encounter Discharge CDS Service Test**:
77
-
78
- Invoke the encounter-discharge hook and send requests to:
79
-
80
- `#{encounter_discharge_url}`
81
-
82
- Inferno will process the requests and return CDS cards if successful.
83
-
84
- [Click here](#{resume_pass_url}?token=encounter-discharge%20#{cds_jwt_iss}) when you have finished submitting
85
- requests.
86
- )
87
- )
88
- end
89
- end
90
- end
@@ -1,90 +0,0 @@
1
- require_relative '../urls'
2
-
3
- module DaVinciCRDTestKit
4
- class EncounterStartReceiveRequestTest < Inferno::Test
5
- include URLs
6
-
7
- id :crd_encounter_start_request
8
- title 'Request received for encounter-start hook'
9
- description %(
10
- This test waits for multiple incoming [encounter-start](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#encounter-start)
11
- hook requests and responds to the client with the response types selected as an input.
12
- )
13
- verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@186', 'hl7.fhir.us.davinci-crd_2.0.1@243',
14
- 'hl7.fhir.us.davinci-crd_2.0.1@244', 'hl7.fhir.us.davinci-crd_2.0.1@245'
15
-
16
- config options: { accepts_multiple_requests: true }
17
-
18
- input :cds_jwt_iss,
19
- title: 'CRD JWT Issuer',
20
- description: %(
21
- Value of the `iss` claim that must be sent on the Bearer token in the `Authorization`
22
- header of all requests. Run or re-run the **Client Registration** group to set or
23
- change this value.
24
- ),
25
- locked: true
26
- input :encounter_start_selected_response_types,
27
- title: 'Response types to return from encounter-start hook requests',
28
- description: %(
29
- Select the cards/action response types that the Inferno hook request endpoints will return. The default
30
- response type that will be returned for this hook is the `Instructions` card type.
31
- ),
32
- type: 'checkbox',
33
- default: ['coverage_information', 'external_reference', 'instructions'],
34
- optional: true,
35
- options: {
36
- list_options: [
37
- {
38
- label: 'External Reference',
39
- value: 'external_reference'
40
- },
41
- {
42
- label: 'Instructions',
43
- value: 'instructions'
44
- },
45
- {
46
- label: 'Coverage Information',
47
- value: 'coverage_information'
48
- },
49
- {
50
- label: 'Request Form Completion',
51
- value: 'request_form_completion'
52
- },
53
- {
54
- label: 'Create/Update Coverage Information',
55
- value: 'create_update_coverage_info'
56
- },
57
- {
58
- label: 'Launch SMART Application',
59
- value: 'launch_smart_app'
60
- }
61
- ]
62
- }
63
- input :encounter_start_custom_response,
64
- title: 'Custom response for encounter-start hook requests',
65
- description: %(
66
- A JSON string may be provided here to replace the normal response
67
- from the hook request endpoint
68
- ),
69
- type: 'textarea',
70
- optional: true
71
-
72
- run do
73
- wait(
74
- identifier: "encounter-start #{cds_jwt_iss}",
75
- message: %(
76
- **Encounter Start CDS Service Test**:
77
-
78
- Invoke the encounter-start hook and send requests to:
79
-
80
- `#{encounter_start_url}`
81
-
82
- Inferno will process the requests and return CDS cards if successful.
83
-
84
- [Click here](#{resume_pass_url}?token=enounter-start%20#{cds_jwt_iss}) when you have finished submitting
85
- requests.
86
- )
87
- )
88
- end
89
- end
90
- end
@@ -1,57 +0,0 @@
1
- require_relative '../client_hook_request_validation'
2
-
3
- module DaVinciCRDTestKit
4
- class HookRequestOptionalFieldsTest < Inferno::Test
5
- include ClientHookRequestValidation
6
- include URLs
7
-
8
- id :crd_hook_request_optional_fields
9
- title 'Hook request contains optional fields'
10
- description %(
11
- Under the [CDS hooks HTTP Request section](https://cds-hooks.hl7.org/2.0/#http-request_1), the specification
12
- requires that a CDS service request SHALL include a JSON POST body which MAY contain the following optional input
13
- fields:
14
- * `fhirServer` - *URL*
15
- * `fhirAuthorization` - *object*
16
- * `prefetch` - *object*
17
-
18
- This test checks for the presence of these fields and if they are of the correct type. This test is optional and
19
- will not fail if the hook request does not contain an optional field, it only produces an informational message.
20
- If the client provides its FHIR server URL in the `fhirServer` field, and it's authorization token in the
21
- `fhirAuthorization` field object, they will be produced as an output from this test to be used in
22
- subsequent tests.
23
- )
24
- optional
25
-
26
- def hook_name
27
- config.options[:hook_name]
28
- end
29
-
30
- output :client_fhir_server
31
- output :client_access_token,
32
- optional: true
33
-
34
- run do
35
- load_tagged_requests(hook_name)
36
- skip_if requests.empty?, "No #{hook_name} requests were made in a previous test as expected."
37
- client_fhir_server = nil
38
- requests.each_with_index do |request, index|
39
- @request_number = index + 1
40
- request_body = json_parse(request.request_body)
41
- if request_body.blank?
42
- add_message('error', "#{request_number}Hook request body cannot be empty.")
43
- next
44
- end
45
-
46
- fhir_server_info = hook_request_optional_fields_check(request_body)
47
- client_fhir_server ||= fhir_server_info
48
- end
49
-
50
- unless client_fhir_server.nil?
51
- output client_fhir_server: client_fhir_server[:fhir_server_uri],
52
- client_access_token: client_fhir_server[:fhir_access_token]
53
- end
54
- no_error_validation('Some service requests contain invalid optional fields.')
55
- end
56
- end
57
- end
@@ -1,49 +0,0 @@
1
- require_relative '../client_hook_request_validation'
2
-
3
- module DaVinciCRDTestKit
4
- class HookRequestRequiredFieldsTest < Inferno::Test
5
- include ClientHookRequestValidation
6
- include URLs
7
-
8
- id :crd_hook_request_required_fields
9
- title 'Hook request contains required fields'
10
- description %(
11
- Under the [CDS hooks HTTP Request section](https://cds-hooks.hl7.org/2.0/#http-request_1), the specification
12
- requires that a CDS service request SHALL include a JSON POST body with the following input fields:
13
- * `hook` - *string*
14
- * `hookInstance` - *string*
15
- * `context` - *object*
16
-
17
- Additionally, if the optional `fhirAuthorization` field is present, then the `fhirServer` field is required.
18
-
19
- This test also checks that the `hook` field contains the correct CDS service name that the CDS client is sending
20
- a request for
21
- )
22
-
23
- def hook_name
24
- config.options[:hook_name]
25
- end
26
-
27
- output :contexts, :prefetches
28
-
29
- run do
30
- load_tagged_requests(hook_name)
31
- skip_if requests.empty?, "No #{hook_name} requests were made in a previous test as expected."
32
- contexts = []
33
- prefetches = []
34
- requests.each_with_index do |request, index|
35
- @request_number = index + 1
36
- request_body = json_parse(request.request_body)
37
- next if request_body.blank?
38
-
39
- contexts << request_body['context'] if request_body['context'].is_a?(Hash)
40
- prefetches << request_body['prefetch'] if request_body['prefetch'].is_a?(Hash)
41
- hook_request_required_fields_check(request_body, hook_name)
42
- end
43
-
44
- output contexts: contexts.to_json,
45
- prefetches: prefetches.to_json
46
- no_error_validation('Some service requests made are not valid.')
47
- end
48
- end
49
- end
@@ -1,68 +0,0 @@
1
- require_relative '../client_hook_request_validation'
2
-
3
- module DaVinciCRDTestKit
4
- class HookRequestValidContextTest < Inferno::Test
5
- include URLs
6
- include ClientHookRequestValidation
7
-
8
- id :crd_hook_request_valid_context
9
- title 'Hook contains valid context'
10
- description %(
11
- As stated in the [CDS hooks specification](https://cds-hooks.hl7.org/2.0#http-request), a CDS service request's
12
- `context` field contains hook-specific contextual data that the CDS service will need. The context is specified
13
- in the hook definition to guide developers on the information available at the point in the workflow when the hook
14
- is triggered.
15
-
16
- The `context` requirements for each [hook specified in the CRD IG](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html)
17
- can be found below:
18
- * [appointment-book](https://cds-hooks.hl7.org/hooks/appointment-book/2023SepSTU1Ballot/appointment-book/)
19
- * [encounter-start](https://cds-hooks.hl7.org/hooks/encounter-start/2023SepSTU1Ballot/encounter-start/)
20
- * [encounter-discharge](https://cds-hooks.hl7.org/hooks/encounter-discharge/2023SepSTU1Ballot/encounter-discharge/)
21
- * [order-select](https://cds-hooks.hl7.org/hooks/order-select/2023SepSTU1Ballot/order-select/)
22
- * [order-dispatch](https://cds-hooks.hl7.org/hooks/order-dispatch/2023SepSTU1Ballot/order-dispatch/)
23
- * [order-sign](https://cds-hooks.org/hooks/order-sign/)
24
-
25
- This test performs the following:
26
- * Verifies that the incoming hook request's `context` field contains the fields required by each hook and
27
- that they are in the correct format
28
- * Checks the optional fields and ensures they are in the correct format
29
- * Validates any resources contained in a `context` field that contains a Bundle or FHIR resource
30
- * Makes FHIR requests for any `context` fields that contain an id or reference and validates each resource
31
- response against its corresponding CRD resource profile
32
- * Check some specific `context` requirements for hooks that have special requirements for certain fields
33
-
34
- The client must provide its FHIR server URL and access token in the hook request in order to run
35
- this test.
36
- )
37
- verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@254'
38
-
39
- input :contexts, :client_fhir_server
40
- input :client_access_token,
41
- optional: true
42
-
43
- fhir_client do
44
- url :client_fhir_server
45
- bearer_token :client_access_token
46
- end
47
-
48
- def hook_name
49
- config.options[:hook_name]
50
- end
51
-
52
- run do
53
- hook_contexts = json_parse(contexts)
54
- if hook_contexts
55
- skip_if(hook_contexts.none?(&:present?), "No #{hook_name} requests contained the `context` field.")
56
- hook_contexts.each_with_index do |context, index|
57
- @request_number = index + 1
58
- if context.blank?
59
- add_message('error', "#{request_number}Missing required context field.")
60
- next
61
- end
62
- hook_request_context_check(context, hook_name)
63
- end
64
- end
65
- no_error_validation('Context is not valid.')
66
- end
67
- end
68
- end
@@ -1,69 +0,0 @@
1
- require_relative '../client_hook_request_validation'
2
-
3
- module DaVinciCRDTestKit
4
- class HookRequestValidPrefetchTest < Inferno::Test
5
- include ClientHookRequestValidation
6
- include URLs
7
-
8
- id :crd_hook_request_valid_prefetch
9
- title 'Hook contains valid prefetch response'
10
- description %(
11
- As stated in the [CDS hooks specification](https://cds-hooks.hl7.org/2.0#http-request), a CDS service request's
12
- `prefetch` field is an optional field that contains key/value pairs of FHIR queries that the service is requesting
13
- the CDS Client to perform and provide on each service call. The key is a string that describes the type of data
14
- being requested and the value is a string representing the FHIR query. See [Prefetch Template](https://cds-hooks.hl7.org/2.0#prefetch-template)
15
- for more information about how the `prefetch` formatting works.
16
-
17
- This test verifies that the incoming hook request's `prefetch` field is in a valid JSON format and validates each
18
- contained resource against its corresponding CRD resource profile. This test is optional and will be skipped if no
19
- `prefetch` field is contained in the hook request.
20
- )
21
- verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@43'
22
- optional
23
-
24
- input :contexts, :prefetches
25
-
26
- def hook_name
27
- config.options[:hook_name]
28
- end
29
-
30
- def cds_services_json
31
- JSON.parse(File.read(File.join(
32
- __dir__, '..', 'routes', 'cds-services.json'
33
- )))['services']
34
- end
35
-
36
- def advertised_prefetch_fields
37
- advertised_hook_service = cds_services_json.find { |service| service['hook'] == hook_name }
38
- advertised_hook_service['prefetch']
39
- end
40
-
41
- run do
42
- hook_contexts = json_parse(contexts)
43
- hook_prefetches = json_parse(prefetches)
44
-
45
- if hook_contexts && hook_prefetches
46
- skip_if(hook_prefetches.none? do |prefetch|
47
- prefetch_index = hook_prefetches.find_index(prefetch)
48
- prefetch.present? && hook_contexts[prefetch_index].present?
49
- end, "No #{hook_name} requests contained both the `context` and `prefetch` field.")
50
-
51
- hook_prefetches.each_with_index do |prefetch, index|
52
- @request_number = index + 1
53
- context = hook_contexts[index]
54
-
55
- info "#{request_number}Received hook request does not contain the `prefetch` field." if prefetch.blank?
56
- if context.blank?
57
- info %(#{request_number}Received hook request does not contain the `context` field
58
- which is needed to validate the `prefetch` field)
59
- end
60
-
61
- next if prefetch.blank? || context.blank?
62
-
63
- hook_request_prefetch_check(advertised_prefetch_fields, prefetch, context)
64
- end
65
- end
66
- no_error_validation('Prefetch is not valid.')
67
- end
68
- end
69
- end
@@ -1,102 +0,0 @@
1
- require_relative '../urls'
2
-
3
- module DaVinciCRDTestKit
4
- class OrderDispatchReceiveRequestTest < Inferno::Test
5
- include URLs
6
-
7
- id :crd_order_dispatch_request
8
- title 'Request received for order-dispatch hook'
9
- description %(
10
- This test waits for multiple incoming [order-dispatch](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#order-dispatch)
11
- hook requests and responds to the client with the response types selected as an input. This hook is a 'primary'
12
- hook, meaning that CRD Servers SHALL, at minimum, return a [Coverage Information](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-ext-coverage-information.html)
13
- system action for these hooks, even if the response indicates that further information is needed or that the
14
- level of detail provided is insufficient to determine coverage.
15
- )
16
- verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@205',
17
- 'hl7.fhir.us.davinci-crd_2.0.1@207', 'hl7.fhir.us.davinci-crd_2.0.1@243',
18
- 'hl7.fhir.us.davinci-crd_2.0.1@244', 'hl7.fhir.us.davinci-crd_2.0.1@245'
19
-
20
- config options: { accepts_multiple_requests: true }
21
-
22
- input :cds_jwt_iss,
23
- title: 'CRD JWT Issuer',
24
- description: %(
25
- Value of the `iss` claim that must be sent on the Bearer token in the `Authorization`
26
- header of all requests. Run or re-run the **Client Registration** group to set or
27
- change this value.
28
- ),
29
- locked: true
30
- input :order_dispatch_selected_response_types,
31
- title: 'Response types to return from order-dispatch hook requests',
32
- description: %(
33
- Select the cards/action response types that the Inferno hook request endpoints will return. The default
34
- response type that will be returned for this hook is the `Coverage Information` card type.
35
- ),
36
- type: 'checkbox',
37
- default: ['coverage_information', 'external_reference', 'instructions'],
38
- optional: true,
39
- options: {
40
- list_options: [
41
- {
42
- label: 'External Reference',
43
- value: 'external_reference'
44
- },
45
- {
46
- label: 'Instructions',
47
- value: 'instructions'
48
- },
49
- {
50
- label: 'Coverage Information',
51
- value: 'coverage_information'
52
- },
53
- {
54
- label: 'Request Form Completion',
55
- value: 'request_form_completion'
56
- },
57
- {
58
- label: 'Create/Update Coverage Information',
59
- value: 'create_update_coverage_info'
60
- },
61
- {
62
- label: 'Launch SMART Application',
63
- value: 'launch_smart_app'
64
- },
65
- {
66
- label: 'Propose Alternate Request',
67
- value: 'propose_alternate_request'
68
- },
69
- {
70
- label: 'Additional Orders as Companions/Prerequisites',
71
- value: 'companions_prerequisites'
72
- }
73
- ]
74
- }
75
- input :order_dispatch_custom_response,
76
- title: 'Custom response for order-dispatch hook requests',
77
- description: %(
78
- A JSON string may be provided here to replace the normal response
79
- from the hook request endpoint
80
- ),
81
- type: 'textarea',
82
- optional: true
83
-
84
- run do
85
- wait(
86
- identifier: "order-dispatch #{cds_jwt_iss}",
87
- message: %(
88
- **Order Dispatch CDS Service Test**:
89
-
90
- Invoke the order-dispatch hook and send requests to:
91
-
92
- `#{order_dispatch_url}`
93
-
94
- Inferno will process the requests and return CDS cards if successful.
95
-
96
- [Click here](#{resume_pass_url}?token=order-dispatch%20#{cds_jwt_iss}) when you have finished submitting
97
- requests.
98
- )
99
- )
100
- end
101
- end
102
- end