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,74 @@
1
+ require_relative 'client_appointment_book_group'
2
+ require_relative 'client_encounter_discharge_group'
3
+ require_relative 'client_encounter_start_group'
4
+ require_relative 'client_order_dispatch_group'
5
+ require_relative 'client_order_select_group'
6
+ require_relative 'client_order_sign_group'
7
+
8
+ module DaVinciCRDTestKit
9
+ module V201
10
+ class ClientHooksGroup < Inferno::TestGroup
11
+ title 'Hooks'
12
+ description <<~DESCRIPTION
13
+ This Group contains tests which verify that valid hook requests can be made for each of the following
14
+ [six hooks contained in the implementation guide](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html):
15
+ * [appointment-book](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#appointment-book)
16
+ * [encounter-start](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#encounter-start)
17
+ * [encounter-discharge](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#encounter-discharge)
18
+ * [order-select](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#order-select)
19
+ * [order-dispatch](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#order-dispatch)
20
+ * [order-sign](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#order-sign)
21
+
22
+ Each hook group contains a test which waits for incoming hook requests from the CRD client, and tests which
23
+ verify the incoming hook requests conform to the specific hook requirements specified the
24
+ CRD IG and the [CDS hooks spec](https://cds-hooks.hl7.org/2.0/).
25
+
26
+ Each hook group tests the following:
27
+ * If the CRD client can invoke the specific hook service request
28
+ * If the incoming hook request is properly authorized with a JWT Bearer token according to the [CDS Hooks authorization requirements](https://cds-hooks.hl7.org/2.0/#trusting-cds-clients)
29
+ * If the incoming hook request contains valid required fields listed in the [CDS Hooks HTTP request requirements](https://cds-hooks.hl7.org/2.0/#http-request_1)
30
+ * If the incoming hook request contains valid optional fields listed in the [CDS Hooks HTTP request requirements](https://cds-hooks.hl7.org/2.0/#http-request_1)
31
+ * If the hook request's `context` field is valid according to the specific `context` requirements defined for
32
+ each hook type
33
+ * If the incoming hook request contains the optional `prefetch` field with valid resources
34
+ * If the hook response generated by Inferno is conformant.
35
+ * If the client can properly display the cards returned as a result of the hook request
36
+
37
+ Note: In order to successfully return a conformant `Coverage Information` system action, a Coverage resource must either be
38
+ provided in the service request's `prefetch` field, or must be fetchable from the client's FHIR server for
39
+ the patient provided in the service request.
40
+ DESCRIPTION
41
+ id :crd_v201_client_hooks
42
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@149'
43
+
44
+ input :cds_jwt_iss,
45
+ title: 'CRD JWT Issuer',
46
+ description: %(
47
+ Value of the `iss` claim that must be sent on the Bearer token in the `Authorization`
48
+ header of all requests. Run or re-run the **Client Registration** group to set or
49
+ change this value.
50
+ ),
51
+ locked: true
52
+
53
+ input_order :cds_jwt_iss, :cds_jwk_set
54
+
55
+ group from: :crd_v201_client_appointment_book,
56
+ optional: true
57
+
58
+ group from: :crd_v201_client_encounter_start,
59
+ optional: true
60
+
61
+ group from: :crd_v201_client_encounter_discharge,
62
+ optional: true
63
+
64
+ group from: :crd_v201_client_order_select,
65
+ optional: true
66
+
67
+ group from: :crd_v201_client_order_dispatch,
68
+ optional: true
69
+
70
+ group from: :crd_v201_client_order_sign,
71
+ optional: true
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,111 @@
1
+ require_relative 'invocation/order_dispatch_receive_request_test'
2
+ require_relative 'auth/decode_auth_token_test'
3
+ require_relative 'auth/retrieve_jwks_test'
4
+ require_relative 'auth/token_header_test'
5
+ require_relative 'auth/token_payload_test'
6
+ require_relative 'verify_request/hook_request_optional_fields_test'
7
+ require_relative 'verify_request/hook_request_required_fields_test'
8
+ require_relative 'verify_request/hook_request_valid_context_test'
9
+ require_relative 'verify_request/hook_request_valid_prefetch_test'
10
+ require_relative 'verify_request/hook_request_fetched_data_test'
11
+ require_relative 'verify_request/hook_request_prefetch_equals_queried_test'
12
+ require_relative 'verify_response/inferno_response_validation'
13
+ require_relative 'verify_response/client_display_cards_attest'
14
+
15
+ module DaVinciCRDTestKit
16
+ module V201
17
+ class ClientOrderDispatchGroup < Inferno::TestGroup
18
+ title 'order-dispatch'
19
+ id :crd_v201_client_order_dispatch
20
+ description <<~DESCRIPTION
21
+ The order-dispatch hook fires when a practitioner is selecting a candidate performer for a pre-existing order
22
+ that was not tied to a specific performer. These tests are based on the following criteria:
23
+ * [CRD IG requirements for this hook](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#order-dispatch),
24
+ which includes the profiles that are expected to be used for the resources resolved to by `context`
25
+ FHIR ID fields
26
+ * Specific [order-dispatch `context` requirements](https://cds-hooks.hl7.org/hooks/order-dispatch/2023SepSTU1Ballot/order-dispatch/)
27
+ defined in the CDS Hooks specification
28
+
29
+ This version of the CRD implementation guide refers to version 1.0 of the hook.
30
+ DESCRIPTION
31
+
32
+ run_as_group
33
+
34
+ input_order :cds_jwt_iss, :cds_jwk_set
35
+
36
+ config(
37
+ inputs: {
38
+ auth_token_headers_json: { name: :order_dispatch_auth_token_headers_json },
39
+ auth_tokens: { name: :order_dispatch_auth_tokens },
40
+ auth_tokens_jwk_json: { name: :order_dispatch_auth_tokens_jwk_json },
41
+ client_access_token: { name: :order_dispatch_client_access_token },
42
+ override_access_token: { name: :order_dispatch_override_access_token,
43
+ title: 'order-dispatch Prefetch Validation Override Bearer Token' },
44
+ client_fhir_server: { name: :order_dispatch_client_fhir_server },
45
+ crd_jwks_keys_json: { name: :order_dispatch_crd_jwks_keys_json },
46
+ custom_response_template: { name: :order_dispatch_custom_response_template },
47
+ selected_response_types: { name: :order_dispatch_selected_response_types }
48
+ },
49
+ outputs: {
50
+ auth_token_headers_json: { name: :order_dispatch_auth_token_headers_json },
51
+ auth_token_payloads_json: { name: :order_dispatch_auth_token_payloads_json },
52
+ auth_tokens: { name: :order_dispatch_auth_tokens },
53
+ auth_tokens_jwk_json: { name: :order_dispatch_auth_tokens_jwk_json },
54
+ client_access_token: { name: :order_dispatch_client_access_token },
55
+ client_fhir_server: { name: :order_dispatch_client_fhir_server },
56
+ crd_jwks_json: { name: :order_dispatch_crd_jwks_json },
57
+ crd_jwks_keys_json: { name: :order_dispatch_crd_jwks_keys_json }
58
+ },
59
+ options: {
60
+ hook_name: 'order-dispatch',
61
+ hook_path: ORDER_DISPATCH_PATH
62
+ }
63
+ )
64
+
65
+ group do
66
+ title 'Make Hook Requests'
67
+ test from: :crd_v201_order_dispatch_request
68
+ end
69
+
70
+ group do
71
+ title 'Verify Authorization'
72
+ test from: :crd_v201_decode_auth_token
73
+ test from: :crd_v201_retrieve_jwks
74
+ test from: :crd_v201_token_header
75
+ test from: :crd_v201_token_payload
76
+ end
77
+
78
+ group do
79
+ title 'Verify Requests'
80
+ test from: :crd_v201_hook_request_required_fields
81
+ test from: :crd_v201_hook_request_optional_fields
82
+ test from: :crd_v201_hook_request_valid_context do
83
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@150',
84
+ 'hl7.fhir.us.davinci-crd_2.0.1@284', 'hl7.fhir.us.davinci-crd_2.0.1@285',
85
+ 'hl7.fhir.us.davinci-crd_2.0.1@286', 'hl7.fhir.us.davinci-crd_2.0.1@287',
86
+ 'hl7.fhir.us.davinci-crd_2.0.1@288', 'hl7.fhir.us.davinci-crd_2.0.1@289',
87
+ 'hl7.fhir.us.davinci-crd_2.0.1@290', 'hl7.fhir.us.davinci-crd_2.0.1@291',
88
+ 'hl7.fhir.us.davinci-crd_2.0.1@292', 'hl7.fhir.us.davinci-crd_2.0.1@293',
89
+ 'hl7.fhir.us.davinci-crd_2.0.1@294', 'hl7.fhir.us.davinci-crd_2.0.1@295',
90
+ 'cds-hooks-library_1.0.1@57', 'cds-hooks-library_1.0.1@58',
91
+ 'cds-hooks-library_1.0.1@59', 'cds-hooks-library_1.0.1@61',
92
+ 'cds-hooks-library_1.0.1@62', 'cds-hooks-library_1.0.1@63',
93
+ 'cds-hooks-library_1.0.1@65', 'cds-hooks-library_1.0.1@66',
94
+ 'cds-hooks-library_1.0.1@67', 'cds-hooks-library_1.0.1@69',
95
+ 'cds-hooks-library_1.0.1@70', 'cds-hooks-library_1.0.1@71',
96
+ 'cds-hooks-library_1.0.1@72'
97
+ end
98
+ test from: :crd_v201_hook_request_valid_prefetch
99
+ test from: :crd_v201_hook_request_fetched_data
100
+ test from: :crd_v201_hook_request_prefetch_equals_queried
101
+ end
102
+
103
+ group do
104
+ title 'Verify Response Handling'
105
+
106
+ test from: :crd_v201_inferno_response_validation
107
+ test from: :crd_v201_card_display_attest_test
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,116 @@
1
+ require_relative 'invocation/order_select_receive_request_test'
2
+ require_relative 'auth/decode_auth_token_test'
3
+ require_relative 'auth/retrieve_jwks_test'
4
+ require_relative 'auth/token_header_test'
5
+ require_relative 'auth/token_payload_test'
6
+ require_relative 'verify_request/hook_request_optional_fields_test'
7
+ require_relative 'verify_request/hook_request_required_fields_test'
8
+ require_relative 'verify_request/hook_request_valid_context_test'
9
+ require_relative 'verify_request/hook_request_valid_prefetch_test'
10
+ require_relative 'verify_request/hook_request_fetched_data_test'
11
+ require_relative 'verify_request/hook_request_prefetch_equals_queried_test'
12
+ require_relative 'verify_response/inferno_response_validation'
13
+ require_relative 'verify_response/client_display_cards_attest'
14
+
15
+ module DaVinciCRDTestKit
16
+ module V201
17
+ class ClientOrderSelectGroup < Inferno::TestGroup
18
+ title 'order-select'
19
+ id :crd_v201_client_order_select
20
+ description <<~DESCRIPTION
21
+ The order-select hook fires when a clinician selects one or more orders to place for a patient,
22
+ (including orders for medications, procedures, labs and other orders). If supported by the CDS client, this
23
+ hook may also be invoked each time the clinician selects a detail regarding the order. These tests are based on
24
+ the following criteria:
25
+ * [CRD IG requirements for this hook](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#order-selecte),
26
+ which includes the profiles that are expected to be used for the resources resolved to by `context`
27
+ FHIR ID fields
28
+ * Specific [order-select `context` requirements](https://cds-hooks.hl7.org/hooks/order-select/2023SepSTU1Ballot/order-select/)
29
+ defined in the CDS Hooks specification
30
+
31
+ This version of the CRD implementation guide refers to version 1.0 of the hook.
32
+ DESCRIPTION
33
+
34
+ run_as_group
35
+
36
+ input_order :cds_jwt_iss, :cds_jwk_set
37
+
38
+ config(
39
+ inputs: {
40
+ auth_token_headers_json: { name: :order_select_auth_token_headers_json },
41
+ auth_tokens: { name: :order_select_auth_tokens },
42
+ auth_tokens_jwk_json: { name: :order_select_auth_tokens_jwk_json },
43
+ client_access_token: { name: :order_select_client_access_token },
44
+ override_access_token: { name: :order_select_override_access_token,
45
+ title: 'order-select Prefetch Validation Override Bearer Token' },
46
+ client_fhir_server: { name: :order_select_client_fhir_server },
47
+ crd_jwks_keys_json: { name: :order_select_crd_jwks_keys_json },
48
+ custom_response_template: { name: :order_select_custom_response_template },
49
+ selected_response_types: { name: :order_select_selected_response_types }
50
+ },
51
+ outputs: {
52
+ auth_token_headers_json: { name: :order_select_auth_token_headers_json },
53
+ auth_token_payloads_json: { name: :order_select_auth_token_payloads_json },
54
+ auth_tokens: { name: :order_select_auth_tokens },
55
+ auth_tokens_jwk_json: { name: :order_select_auth_tokens_jwk_json },
56
+ client_access_token: { name: :order_select_client_access_token },
57
+ client_fhir_server: { name: :order_select_client_fhir_server },
58
+ crd_jwks_json: { name: :order_select_crd_jwks_json },
59
+ crd_jwks_keys_json: { name: :order_select_crd_jwks_keys_json }
60
+ },
61
+ options: {
62
+ hook_name: 'order-select',
63
+ hook_path: ORDER_SELECT_PATH
64
+ }
65
+ )
66
+
67
+ group do
68
+ title 'Make Hook Requests'
69
+ test from: :crd_v201_order_select_request
70
+ end
71
+
72
+ group do
73
+ title 'Verify Authorization'
74
+ test from: :crd_v201_decode_auth_token
75
+ test from: :crd_v201_retrieve_jwks
76
+ test from: :crd_v201_token_header
77
+ test from: :crd_v201_token_payload
78
+ end
79
+
80
+ group do
81
+ title 'Verify Requests'
82
+ test from: :crd_v201_hook_request_required_fields
83
+ test from: :crd_v201_hook_request_optional_fields
84
+ test from: :crd_v201_hook_request_valid_context do
85
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@71', 'hl7.fhir.us.davinci-crd_2.0.1@150',
86
+ 'hl7.fhir.us.davinci-crd_2.0.1@212', 'hl7.fhir.us.davinci-crd_2.0.1@213',
87
+ 'hl7.fhir.us.davinci-crd_2.0.1@214', 'hl7.fhir.us.davinci-crd_2.0.1@215',
88
+ 'hl7.fhir.us.davinci-crd_2.0.1@284', 'hl7.fhir.us.davinci-crd_2.0.1@285',
89
+ 'hl7.fhir.us.davinci-crd_2.0.1@286', 'hl7.fhir.us.davinci-crd_2.0.1@287',
90
+ 'hl7.fhir.us.davinci-crd_2.0.1@288', 'hl7.fhir.us.davinci-crd_2.0.1@289',
91
+ 'hl7.fhir.us.davinci-crd_2.0.1@290', 'hl7.fhir.us.davinci-crd_2.0.1@291',
92
+ 'hl7.fhir.us.davinci-crd_2.0.1@292', 'hl7.fhir.us.davinci-crd_2.0.1@293',
93
+ 'hl7.fhir.us.davinci-crd_2.0.1@294', 'hl7.fhir.us.davinci-crd_2.0.1@295',
94
+ 'cds-hooks-library_1.0.1@74', 'cds-hooks-library_1.0.1@75',
95
+ 'cds-hooks-library_1.0.1@76', 'cds-hooks-library_1.0.1@78',
96
+ 'cds-hooks-library_1.0.1@79', 'cds-hooks-library_1.0.1@80',
97
+ 'cds-hooks-library_1.0.1@82', 'cds-hooks-library_1.0.1@83',
98
+ 'cds-hooks-library_1.0.1@84', 'cds-hooks-library_1.0.1@86',
99
+ 'cds-hooks-library_1.0.1@87', 'cds-hooks-library_1.0.1@88',
100
+ 'cds-hooks-library_1.0.1@90', 'cds-hooks-library_1.0.1@91',
101
+ 'cds-hooks-library_1.0.1@92'
102
+ end
103
+ test from: :crd_v201_hook_request_valid_prefetch
104
+ test from: :crd_v201_hook_request_fetched_data
105
+ test from: :crd_v201_hook_request_prefetch_equals_queried
106
+ end
107
+
108
+ group do
109
+ title 'Verify Response Handling'
110
+
111
+ test from: :crd_v201_inferno_response_validation
112
+ test from: :crd_v201_card_display_attest_test
113
+ end
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,113 @@
1
+ require_relative 'invocation/order_sign_receive_request_test'
2
+ require_relative 'auth/decode_auth_token_test'
3
+ require_relative 'auth/retrieve_jwks_test'
4
+ require_relative 'auth/token_header_test'
5
+ require_relative 'auth/token_payload_test'
6
+ require_relative 'verify_request/hook_request_optional_fields_test'
7
+ require_relative 'verify_request/hook_request_required_fields_test'
8
+ require_relative 'verify_request/hook_request_valid_context_test'
9
+ require_relative 'verify_request/hook_request_valid_prefetch_test'
10
+ require_relative 'verify_request/hook_request_fetched_data_test'
11
+ require_relative 'verify_request/hook_request_prefetch_equals_queried_test'
12
+ require_relative 'verify_response/inferno_response_validation'
13
+ require_relative 'verify_response/client_display_cards_attest'
14
+
15
+ module DaVinciCRDTestKit
16
+ module V201
17
+ class ClientOrderSignGroup < Inferno::TestGroup
18
+ title 'order-sign'
19
+ id :crd_v201_client_order_sign
20
+ description <<~DESCRIPTION
21
+ The order-sign hook fires when a clinician is ready to sign one or more orders for a patient, (including orders
22
+ for medications, procedures, labs and other orders). These tests are based on the following criteria:
23
+ * [CRD IG requirements for this hook](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#order-sign),
24
+ which includes the profiles that are expected to be used for the resources resolved to by `context`
25
+ FHIR ID fields
26
+ * Specific [order-sign `context` requirements](https://cds-hooks.org/hooks/order-sign/)
27
+ defined in the CDS Hooks specification
28
+
29
+ This version of the CRD implementation guide refers to version 1.1 of the hook which, at the time of publication,
30
+ was not available as a snapshot. Therefore the preceding link refers to the CDS hooks current build.
31
+ DESCRIPTION
32
+
33
+ run_as_group
34
+
35
+ input_order :cds_jwt_iss, :cds_jwk_set
36
+
37
+ config(
38
+ inputs: {
39
+ auth_token_headers_json: { name: :order_sign_auth_token_headers_json },
40
+ auth_tokens: { name: :order_sign_auth_tokens },
41
+ auth_tokens_jwk_json: { name: :order_sign_auth_tokens_jwk_json },
42
+ client_access_token: { name: :order_sign_client_access_token },
43
+ override_access_token: { name: :order_sign_override_access_token,
44
+ title: 'order-sign Prefetch Validation Override Bearer Token' },
45
+ client_fhir_server: { name: :order_sign_client_fhir_server },
46
+ crd_jwks_keys_json: { name: :order_sign_crd_jwks_keys_json },
47
+ custom_response_template: { name: :order_sign_custom_response_template },
48
+ selected_response_types: { name: :order_sign_selected_response_types }
49
+ },
50
+ outputs: {
51
+ auth_token_headers_json: { name: :order_sign_auth_token_headers_json },
52
+ auth_token_payloads_json: { name: :order_sign_auth_token_payloads_json },
53
+ auth_tokens: { name: :order_sign_auth_tokens },
54
+ auth_tokens_jwk_json: { name: :order_sign_auth_tokens_jwk_json },
55
+ client_access_token: { name: :order_sign_client_access_token },
56
+ client_fhir_server: { name: :order_sign_client_fhir_server },
57
+ crd_jwks_json: { name: :order_sign_crd_jwks_json },
58
+ crd_jwks_keys_json: { name: :order_sign_crd_jwks_keys_json }
59
+ },
60
+ options: {
61
+ hook_name: 'order-sign',
62
+ hook_path: ORDER_SIGN_PATH
63
+ }
64
+ )
65
+
66
+ group do
67
+ title 'Make Hook Requests'
68
+ test from: :crd_v201_order_sign_request
69
+ end
70
+
71
+ group do
72
+ title 'Verify Authorization'
73
+ test from: :crd_v201_decode_auth_token
74
+ test from: :crd_v201_retrieve_jwks
75
+ test from: :crd_v201_token_header
76
+ test from: :crd_v201_token_payload
77
+ end
78
+
79
+ group do
80
+ title 'Verify Requests'
81
+ test from: :crd_v201_hook_request_required_fields
82
+ test from: :crd_v201_hook_request_optional_fields
83
+ test from: :crd_v201_hook_request_valid_context do
84
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@71', 'hl7.fhir.us.davinci-crd_2.0.1@150',
85
+ 'hl7.fhir.us.davinci-crd_2.0.1@220', 'hl7.fhir.us.davinci-crd_2.0.1@221',
86
+ 'hl7.fhir.us.davinci-crd_2.0.1@222', 'hl7.fhir.us.davinci-crd_2.0.1@223',
87
+ 'hl7.fhir.us.davinci-crd_2.0.1@284', 'hl7.fhir.us.davinci-crd_2.0.1@285',
88
+ 'hl7.fhir.us.davinci-crd_2.0.1@286', 'hl7.fhir.us.davinci-crd_2.0.1@287',
89
+ 'hl7.fhir.us.davinci-crd_2.0.1@288', 'hl7.fhir.us.davinci-crd_2.0.1@289',
90
+ 'hl7.fhir.us.davinci-crd_2.0.1@290', 'hl7.fhir.us.davinci-crd_2.0.1@291',
91
+ 'hl7.fhir.us.davinci-crd_2.0.1@292', 'hl7.fhir.us.davinci-crd_2.0.1@293',
92
+ 'hl7.fhir.us.davinci-crd_2.0.1@294', 'hl7.fhir.us.davinci-crd_2.0.1@295',
93
+ 'cds-hooks-library_1.0.1@1', 'cds-hooks-library_1.0.1@2',
94
+ 'cds-hooks-library_1.0.1@3', 'cds-hooks-library_1.0.1@5',
95
+ 'cds-hooks-library_1.0.1@6', 'cds-hooks-library_1.0.1@7',
96
+ 'cds-hooks-library_1.0.1@9', 'cds-hooks-library_1.0.1@10',
97
+ 'cds-hooks-library_1.0.1@11', 'cds-hooks-library_1.0.1@13',
98
+ 'cds-hooks-library_1.0.1@14', 'cds-hooks-library_1.0.1@15'
99
+ end
100
+ test from: :crd_v201_hook_request_valid_prefetch
101
+ test from: :crd_v201_hook_request_fetched_data
102
+ test from: :crd_v201_hook_request_prefetch_equals_queried
103
+ end
104
+
105
+ group do
106
+ title 'Verify Response Handling'
107
+
108
+ test from: :crd_v201_inferno_response_validation
109
+ test from: :crd_v201_card_display_attest_test
110
+ end
111
+ end
112
+ end
113
+ end
@@ -1,11 +1,13 @@
1
- require_relative 'client_tests/client_registration_verification_test'
1
+ require_relative 'registration/client_registration_verification_test'
2
+ require_relative 'registration/client_service_registration_attestation_test'
2
3
 
3
4
  module DaVinciCRDTestKit
4
- class PASClientRegistrationGroup < Inferno::TestGroup
5
- id :crd_client_registration
6
- title 'Client Registration'
7
- description %(
8
- Register the CRD client under test with Inferno's simulated CRD Server by
5
+ module V201
6
+ class PASClientRegistrationGroup < Inferno::TestGroup
7
+ id :crd_v201_client_registration
8
+ title 'Client Registration'
9
+ description %(
10
+ Register the CRD client under test with Inferno's simulated CRD server by
9
11
  providing required information for Inferno to use in identifying and verify
10
12
  hook requests.
11
13
 
@@ -19,8 +21,10 @@ module DaVinciCRDTestKit
19
21
  of the client under test with the Inferno service. If the client needs to make a
20
22
  change to its registered values during execution, this test will need to be re-run.
21
23
  )
22
- run_as_group
24
+ run_as_group
23
25
 
24
- test from: :crd_client_registration_verification
26
+ test from: :crd_v201_client_registration_verification
27
+ test from: :crd_v201_client_service_registration_attestation
28
+ end
25
29
  end
26
30
  end
@@ -0,0 +1,13 @@
1
+ require_relative '../client_base_urls'
2
+
3
+ module DaVinciCRDTestKit
4
+ module V201
5
+ module ClientURLs
6
+ include ClientBaseURLs
7
+
8
+ def suite_id
9
+ DaVinciCRDTestKit::V201::CRDClientSuite.id
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,134 @@
1
+ require_relative 'client_fhir_api_group'
2
+ require_relative 'client_hooks_group'
3
+ require_relative 'client_card_must_support_group'
4
+ require_relative 'client_registration_group'
5
+ require_relative '../endpoints/cds_services_discovery_handler'
6
+ require_relative '../../cross_suite/tags'
7
+ require_relative 'client_urls'
8
+ require_relative '../crd_client_options'
9
+ require_relative '../endpoints/hook_request_endpoint'
10
+ require_relative '../../ext/inferno_core/runnable'
11
+
12
+ module DaVinciCRDTestKit
13
+ module V201
14
+ class CRDClientSuite < Inferno::TestSuite
15
+ id :crd_client
16
+ title 'Da Vinci CRD Client v2.0.1 Test Suite'
17
+ description <<~DESCRIPTION
18
+ The Da Vinci CRD Client Test Suite tests the conformance of client systems
19
+ to [version 2.0.1 of the Da Vinci Coverage Requirements Discovery (CRD)
20
+ Implementation Guide](https://hl7.org/fhir/us/davinci-crd/STU2).
21
+
22
+ For details on the design and use of these tests, see the wiki including
23
+ - [Suite Details](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Client-Details)
24
+ for a high-level description of the test
25
+ organization, including its components and limitations.
26
+ - [Testing Instructions](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Client-Instructions)
27
+ for a step-by-step guide to execution of these
28
+ tests against a CRD client, including [instructions for a demonstration execution](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Client-Instructions#demonstration-execution)
29
+ against the [public reference implementation](https://crd-request-generator.davinci.hl7.org/).
30
+ DESCRIPTION
31
+
32
+ suite_summary <<~SUMMARY
33
+ The Da Vinci CRD Client Test Suite tests the conformance of client systems
34
+ to [version 2.0.1 of the Da Vinci Coverage Requirements Discovery (CRD)
35
+ Implementation Guide](https://hl7.org/fhir/us/davinci-crd/STU2).
36
+ SUMMARY
37
+
38
+ links [
39
+ {
40
+ label: 'Report Issue',
41
+ url: 'https://github.com/inferno-framework/davinci-crd-test-kit/issues'
42
+ },
43
+ {
44
+ label: 'Open Source',
45
+ url: 'https://github.com/inferno-framework/davinci-crd-test-kit'
46
+ },
47
+ {
48
+ label: 'Download',
49
+ url: 'https://github.com/inferno-framework/davinci-crd-test-kit/releases'
50
+ }
51
+ ]
52
+
53
+ requirement_sets(
54
+ {
55
+ identifier: 'hl7.fhir.us.davinci-crd_2.0.1',
56
+ title: 'Da Vinci Coverage Requirements Discovery (CRD) v2.0.1',
57
+ actor: 'Client'
58
+ },
59
+ {
60
+ identifier: 'cds-hooks_2.0',
61
+ title: 'CDS Hooks',
62
+ actor: 'Client'
63
+ },
64
+ {
65
+ identifier: 'cds-hooks-library_1.0.1',
66
+ title: 'CDS Hooks Library',
67
+ actor: 'Client',
68
+ requirements: 'referenced'
69
+ }
70
+ )
71
+
72
+ fhir_resource_validator do
73
+ igs('hl7.fhir.us.davinci-crd#2.0.1')
74
+
75
+ validation_context do
76
+ snomedCT '731000124108' # explicit snomedCT expansion parameter
77
+ end
78
+
79
+ exclude_message do |message|
80
+ message.message.match?(/\A\S+: \S+: URL value '.*' does not resolve/)
81
+ end
82
+ end
83
+
84
+ suite_option :smart_app_launch_version,
85
+ title: 'SMART App Launch Version',
86
+ list_options: [
87
+ {
88
+ label: 'SMART App Launch 1.0.0',
89
+ value: CRDClientOptions::SMART_1
90
+ },
91
+ {
92
+ label: 'SMART App Launch 2.0.0',
93
+ value: CRDClientOptions::SMART_2
94
+ }
95
+ ]
96
+
97
+ def self.extract_token_from_query_params(request)
98
+ request.query_parameters['token']
99
+ end
100
+
101
+ route :get, '/cds-services', CDSServicesDiscoveryHandler
102
+ allow_cors APPOINTMENT_BOOK_PATH, ENCOUNTER_START_PATH, ENCOUNTER_DISCHARGE_PATH, ORDER_DISPATCH_PATH,
103
+ ORDER_SELECT_PATH, ORDER_SIGN_PATH, '/cds-services'
104
+ suite_endpoint :post, APPOINTMENT_BOOK_PATH, HookRequestEndpoint
105
+ suite_endpoint :post, ENCOUNTER_START_PATH, HookRequestEndpoint
106
+ suite_endpoint :post, ENCOUNTER_DISCHARGE_PATH, HookRequestEndpoint
107
+ suite_endpoint :post, ORDER_DISPATCH_PATH, HookRequestEndpoint
108
+ suite_endpoint :post, ORDER_SELECT_PATH, HookRequestEndpoint
109
+ suite_endpoint :post, ORDER_SIGN_PATH, HookRequestEndpoint
110
+
111
+ resume_test_route :get, RESUME_PASS_PATH do |request|
112
+ CRDClientSuite.extract_token_from_query_params(request)
113
+ end
114
+ resume_test_route :get, RESUME_FAIL_PATH, result: 'fail' do |request|
115
+ CRDClientSuite.extract_token_from_query_params(request)
116
+ end
117
+
118
+ group do
119
+ id :crd_v201_client_hook_invocation
120
+ title 'Hook Invocation'
121
+ description %(
122
+ This group checks that the system can register as a CDS client with
123
+ Inferno's simulated CRD server and make hook invocations.
124
+ )
125
+
126
+ group from: :crd_v201_client_registration
127
+ group from: :crd_v201_client_hooks
128
+ group from: :crd_v201_client_card_must_support
129
+ end
130
+
131
+ group from: :crd_v201_client_fhir_api
132
+ end
133
+ end
134
+ end