davinci_crd_test_kit 0.13.0 → 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 +58 -1
  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 +297 -93
  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 -74
  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 -42
  277. data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_read_test.rb +0 -40
  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 -42
  280. data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_validation_test.rb +0 -61
  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 -48
  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 -193
  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,85 @@
1
+ require_relative '../../client_hook_request_validation'
2
+
3
+ module DaVinciCRDTestKit
4
+ module V201
5
+ class TokenPayloadTest < Inferno::Test
6
+ include ClientHookRequestValidation
7
+ include ClientURLs
8
+
9
+ id :crd_v201_token_payload
10
+ title 'Authorization token payload has required claims and a valid signature'
11
+ description %(
12
+ Verify that the JWT payload contains the payload fields required by the
13
+ [CDS hooks spec](https://cds-hooks.hl7.org/2.0#trusting-cds-clients).
14
+ The `iss`, `aud`, `exp`, `iat`, and `jti` claims are required.
15
+ Additionally:
16
+
17
+ - `iss` must match the `issuer` from the **CRD JWT Issuer** input
18
+ - `aud` must match the URL of the CDS Service endpoint being invoked
19
+ - `exp` must represent a time in the future
20
+ - `jti` must be a non-blank string that uniquely identifies this authentication JWT
21
+ )
22
+
23
+ verifies_requirements 'cds-hooks_2.0@180', 'cds-hooks_2.0@181', 'cds-hooks_2.0@187', 'cds-hooks_2.0@189',
24
+ 'cds-hooks_2.0@190', 'cds-hooks_2.0@191', 'cds-hooks_2.0@192', 'cds-hooks_2.0@196',
25
+ 'cds-hooks_2.0@203'
26
+
27
+ REQUIRED_CLAIMS = ['iss', 'aud', 'exp', 'iat', 'jti'].freeze
28
+
29
+ def required_claims
30
+ REQUIRED_CLAIMS.dup
31
+ end
32
+
33
+ def hook_url
34
+ inferno_base_url + config.options[:hook_path]
35
+ end
36
+
37
+ input :auth_tokens,
38
+ :auth_tokens_jwk_json,
39
+ :cds_jwt_iss
40
+
41
+ run do
42
+ auth_tokens_list = JSON.parse(auth_tokens)
43
+ auth_tokens_jwk = JSON.parse(auth_tokens_jwk_json)
44
+ skip_if auth_tokens_list.empty?, 'No Authorization tokens produced from the previous tests.'
45
+ skip_if auth_tokens_jwk.empty?, 'No Authorization token JWK produced from the previous test.'
46
+
47
+ auth_tokens_jwk.each_with_index do |auth_token_jwk, index|
48
+ @request_number = index + 1
49
+
50
+ begin
51
+ jwk = JSON.parse(auth_token_jwk).deep_symbolize_keys
52
+
53
+ payload, =
54
+ JWT.decode(
55
+ auth_tokens_list[index],
56
+ JWT::JWK.import(jwk).public_key,
57
+ true,
58
+ algorithms: [jwk[:alg]],
59
+ exp_leeway: 60,
60
+ iss: cds_jwt_iss,
61
+ aud: hook_url,
62
+ verify_not_before: false,
63
+ verify_iat: false,
64
+ verify_jti: true,
65
+ verify_iss: true,
66
+ verify_aud: true
67
+ )
68
+ rescue StandardError => e
69
+ add_message('error', "#{request_number}Token validation error: #{e.message}")
70
+ next
71
+ end
72
+
73
+ missing_claims = required_claims - payload.keys
74
+ missing_claims_string = missing_claims.map { |claim| "`#{claim}`" }.join(', ')
75
+
76
+ unless missing_claims.empty?
77
+ add_message('error', "#{request_number}JWT payload missing required claims: #{missing_claims_string}")
78
+ next
79
+ end
80
+ end
81
+ no_error_validation('Token payload is missing required claims or does not have a valid signature.')
82
+ end
83
+ end
84
+ end
85
+ end
@@ -4,7 +4,7 @@
4
4
  {
5
5
  "hook": "appointment-book",
6
6
  "title": "Appointment Booking CDS Service",
7
- "description": "An example of a CDS Service that is invoked when user of a CRD Client books a future appointment for a patient",
7
+ "description": "An example of a CDS Service that is invoked when user of a CRD client books a future appointment for a patient",
8
8
  "id": "appointment-book-service",
9
9
  "prefetch": {
10
10
  "user": "{{context.userId}}",
@@ -0,0 +1,108 @@
1
+ require_relative 'invocation/appointment_book_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 ClientAppointmentBookGroup < Inferno::TestGroup
18
+ title 'appointment-book'
19
+ id :crd_v201_client_appointment_book
20
+ description <<~DESCRIPTION
21
+ The appointment-book hook is invoked when the user is scheduling one or more future encounters/visits for the
22
+ patient. 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#appointment-book),
24
+ which include the profiles that are expected to be used for the resources resolved to by `context` FHIR ID
25
+ fields
26
+ * Specific [appointment-book `context` requirements](https://cds-hooks.hl7.org/hooks/appointment-book/2023SepSTU1Ballot/appointment-book/)
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
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@172'
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: :appointment_book_auth_token_headers_json },
40
+ auth_tokens: { name: :appointment_book_auth_tokens },
41
+ auth_tokens_jwk_json: { name: :appointment_book_auth_tokens_jwk_json },
42
+ client_access_token: { name: :appointment_book_client_access_token },
43
+ override_access_token: { name: :appointment_book_override_access_token,
44
+ title: 'appointment-book Prefetch Validation Override Bearer Token' },
45
+ client_fhir_server: { name: :appointment_book_client_fhir_server },
46
+ crd_jwks_keys_json: { name: :appointment_book_crd_jwks_keys_json },
47
+ custom_response_template: { name: :appointment_book_custom_response_template },
48
+ selected_response_types: { name: :appointment_book_selected_response_types }
49
+ },
50
+ outputs: {
51
+ auth_token_headers_json: { name: :appointment_book_auth_token_headers_json },
52
+ auth_token_payloads_json: { name: :appointment_book_auth_token_payloads_json },
53
+ auth_tokens: { name: :appointment_book_auth_tokens },
54
+ auth_tokens_jwk_json: { name: :appointment_book_auth_tokens_jwk_json },
55
+ client_access_token: { name: :appointment_book_client_access_token },
56
+ client_fhir_server: { name: :appointment_book_client_fhir_server },
57
+ crd_jwks_json: { name: :appointment_book_crd_jwks_json },
58
+ crd_jwks_keys_json: { name: :appointment_book_crd_jwks_keys_json }
59
+ },
60
+ options: {
61
+ hook_name: 'appointment-book',
62
+ hook_path: APPOINTMENT_BOOK_PATH
63
+ }
64
+ )
65
+
66
+ group do
67
+ title 'Make Hook Requests'
68
+ test from: :crd_v201_appointment_book_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',
85
+ 'hl7.fhir.us.davinci-crd_2.0.1@177', 'hl7.fhir.us.davinci-crd_2.0.1@178',
86
+ 'hl7.fhir.us.davinci-crd_2.0.1@179', 'hl7.fhir.us.davinci-crd_2.0.1@180',
87
+ 'hl7.fhir.us.davinci-crd_2.0.1@286',
88
+ 'cds-hooks-library_1.0.1@17', 'cds-hooks-library_1.0.1@18',
89
+ 'cds-hooks-library_1.0.1@19', 'cds-hooks-library_1.0.1@21',
90
+ 'cds-hooks-library_1.0.1@22', 'cds-hooks-library_1.0.1@23',
91
+ 'cds-hooks-library_1.0.1@25', 'cds-hooks-library_1.0.1@26',
92
+ 'cds-hooks-library_1.0.1@27', 'cds-hooks-library_1.0.1@29',
93
+ 'cds-hooks-library_1.0.1@30', 'cds-hooks-library_1.0.1@31'
94
+ end
95
+ test from: :crd_v201_hook_request_valid_prefetch
96
+ test from: :crd_v201_hook_request_fetched_data
97
+ test from: :crd_v201_hook_request_prefetch_equals_queried
98
+ end
99
+
100
+ group do
101
+ title 'Verify Response Handling'
102
+
103
+ test from: :crd_v201_inferno_response_validation
104
+ test from: :crd_v201_card_display_attest_test
105
+ end
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,31 @@
1
+ require_relative 'must_support/client_card_must_support_coverage_information'
2
+ require_relative 'must_support/client_card_must_support_external_reference'
3
+ require_relative 'must_support/client_card_must_support_instructions'
4
+
5
+ module DaVinciCRDTestKit
6
+ module V201
7
+ class ClientCardMustSupportGroup < Inferno::TestGroup
8
+ title 'Card Must Support'
9
+ id :crd_v201_client_card_must_support
10
+ description <<~DESCRIPTION
11
+ CRD clients are required to support the following card types
12
+ - [External Reference](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#external-reference)
13
+ - [Instructions](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#instructions)
14
+ - [Coverage Information](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#coverage-information)
15
+
16
+ This group checks that instances of each of these card types were observed across all hook calls
17
+ made by the client as a part of this test session. In the case of the Coverage Information card type,
18
+ all must support elements defined in the [coverage-information extension](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-ext-coverage-information.html)
19
+ must be demonstrated.
20
+
21
+ These tests must be run after the tests in the "Hooks" group are run.
22
+ DESCRIPTION
23
+
24
+ run_as_group
25
+
26
+ test from: :crd_v201_client_card_must_support_coverage_information
27
+ test from: :crd_v201_client_card_must_support_external_reference
28
+ test from: :crd_v201_client_card_must_support_instructions
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,105 @@
1
+ require_relative 'invocation/encounter_discharge_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 ClientEncounterDischargeGroup < Inferno::TestGroup
18
+ title 'encounter-discharge'
19
+ id :crd_v201_client_encounter_discharge
20
+ description <<~DESCRIPTION
21
+ The encounter-discharge hook is invoked when the user is performing the discharge process for an encounter where
22
+ the notion of 'discharge' is relevant - typically an inpatient encounter. These tests are based on the
23
+ following criteria:
24
+ * [CRD IG requirements for this hook](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#encounter-discharge),
25
+ which includes the profiles that are expected to be used for the resources resolved to by `context`
26
+ FHIR ID fields
27
+ * Specific [encounter-discharge `context` requirements](https://cds-hooks.hl7.org/hooks/encounter-discharge/2023SepSTU1Ballot/encounter-discharge/)
28
+ defined in the CDS Hooks specification
29
+
30
+ This version of the CRD implementation guide refers to version 1.0 of the hook.
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: :encounter_discharge_auth_token_headers_json },
40
+ auth_tokens: { name: :encounter_discharge_auth_tokens },
41
+ auth_tokens_jwk_json: { name: :encounter_discharge_auth_tokens_jwk_json },
42
+ client_access_token: { name: :encounter_discharge_client_access_token },
43
+ override_access_token: { name: :encounter_discharge_override_access_token,
44
+ title: 'encounter-discharge Prefetch Validation Override Bearer Token' },
45
+ client_fhir_server: { name: :encounter_discharge_client_fhir_server },
46
+ crd_jwks_keys_json: { name: :encounter_discharge_crd_jwks_keys_json },
47
+ custom_response_template: { name: :encounter_discharge_custom_response_template },
48
+ selected_response_types: { name: :encounter_discharge_selected_response_types }
49
+ },
50
+ outputs: {
51
+ auth_token_headers_json: { name: :encounter_discharge_auth_token_headers_json },
52
+ auth_token_payloads_json: { name: :encounter_discharge_auth_token_payloads_json },
53
+ auth_tokens: { name: :encounter_discharge_auth_tokens },
54
+ auth_tokens_jwk_json: { name: :encounter_discharge_auth_tokens_jwk_json },
55
+ client_access_token: { name: :encounter_discharge_client_access_token },
56
+ client_fhir_server: { name: :encounter_discharge_client_fhir_server },
57
+ crd_jwks_json: { name: :encounter_discharge_crd_jwks_json },
58
+ crd_jwks_keys_json: { name: :encounter_discharge_crd_jwks_keys_json }
59
+ },
60
+ options: {
61
+ hook_name: 'encounter-discharge',
62
+ hook_path: ENCOUNTER_DISCHARGE_PATH
63
+ }
64
+ )
65
+
66
+ group do
67
+ title 'Make Hook Requests'
68
+ test from: :crd_v201_encounter_discharge_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@201', 'hl7.fhir.us.davinci-crd_2.0.1@202',
85
+ 'hl7.fhir.us.davinci-crd_2.0.1@203',
86
+ 'cds-hooks-library_1.0.1@45', 'cds-hooks-library_1.0.1@46',
87
+ 'cds-hooks-library_1.0.1@47', 'cds-hooks-library_1.0.1@49',
88
+ 'cds-hooks-library_1.0.1@50', 'cds-hooks-library_1.0.1@51',
89
+ 'cds-hooks-library_1.0.1@53', 'cds-hooks-library_1.0.1@54',
90
+ 'cds-hooks-library_1.0.1@55'
91
+ end
92
+ test from: :crd_v201_hook_request_valid_prefetch
93
+ test from: :crd_v201_hook_request_fetched_data
94
+ test from: :crd_v201_hook_request_prefetch_equals_queried
95
+ end
96
+
97
+ group do
98
+ title 'Verify Response Handling'
99
+
100
+ test from: :crd_v201_inferno_response_validation
101
+ test from: :crd_v201_card_display_attest_test
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,105 @@
1
+ require_relative 'invocation/encounter_start_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 ClientEncounterStartGroup < Inferno::TestGroup
18
+ title 'encounter-start'
19
+ id :crd_v201_client_encounter_start
20
+ description <<~DESCRIPTION
21
+ The encounter-start hook is invoked when the user is initiating a new encounter. These tests are based on the
22
+ following criteria:
23
+ * [CRD IG requirements for this hook](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#encounter-start),
24
+ which include the profiles that are expected to be used for the resources resolved to by `context` FHIR ID
25
+ fields
26
+ * Specific [encounter-start `context` requirements](https://cds-hooks.hl7.org/hooks/encounter-start/2023SepSTU1Ballot/encounter-start/)
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
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@187'
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: :encounter_start_auth_token_headers_json },
40
+ auth_tokens: { name: :encounter_start_auth_tokens },
41
+ auth_tokens_jwk_json: { name: :encounter_start_auth_tokens_jwk_json },
42
+ client_access_token: { name: :encounter_start_client_access_token },
43
+ override_access_token: { name: :encounter_start_override_access_token,
44
+ title: 'encounter-start Prefetch Validation Override Bearer Token' },
45
+ client_fhir_server: { name: :encounter_start_client_fhir_server },
46
+ crd_jwks_keys_json: { name: :encounter_start_crd_jwks_keys_json },
47
+ custom_response_template: { name: :encounter_start_custom_response_template },
48
+ selected_response_types: { name: :encounter_start_selected_response_types }
49
+ },
50
+ outputs: {
51
+ auth_token_headers_json: { name: :encounter_start_auth_token_headers_json },
52
+ auth_token_payloads_json: { name: :encounter_start_auth_token_payloads_json },
53
+ auth_tokens: { name: :encounter_start_auth_tokens },
54
+ auth_tokens_jwk_json: { name: :encounter_start_auth_tokens_jwk_json },
55
+ client_access_token: { name: :encounter_start_client_access_token },
56
+ client_fhir_server: { name: :encounter_start_client_fhir_server },
57
+ crd_jwks_json: { name: :encounter_start_crd_jwks_json },
58
+ crd_jwks_keys_json: { name: :encounter_start_crd_jwks_keys_json }
59
+ },
60
+ options: {
61
+ hook_name: 'encounter-start',
62
+ hook_path: ENCOUNTER_START_PATH
63
+ }
64
+ )
65
+
66
+ group do
67
+ title 'Make Hook Requests'
68
+ test from: :crd_v201_encounter_start_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@192', 'hl7.fhir.us.davinci-crd_2.0.1@193',
85
+ 'hl7.fhir.us.davinci-crd_2.0.1@194',
86
+ 'cds-hooks-library_1.0.1@33', 'cds-hooks-library_1.0.1@34',
87
+ 'cds-hooks-library_1.0.1@35', 'cds-hooks-library_1.0.1@37',
88
+ 'cds-hooks-library_1.0.1@38', 'cds-hooks-library_1.0.1@39',
89
+ 'cds-hooks-library_1.0.1@41', 'cds-hooks-library_1.0.1@42',
90
+ 'cds-hooks-library_1.0.1@43'
91
+ end
92
+ test from: :crd_v201_hook_request_valid_prefetch
93
+ test from: :crd_v201_hook_request_fetched_data
94
+ test from: :crd_v201_hook_request_prefetch_equals_queried
95
+ end
96
+
97
+ group do
98
+ title 'Verify Response Handling'
99
+
100
+ test from: :crd_v201_inferno_response_validation
101
+ test from: :crd_v201_card_display_attest_test
102
+ end
103
+ end
104
+ end
105
+ end