davinci_crd_test_kit 0.13.0 → 0.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (351) 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 +188 -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 +239 -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}/external_reference.json +1 -1
  20. data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/launch_smart_app.json +1 -1
  21. data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/propose_alternate_request.json +1 -0
  22. data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/request_form_completion.json +17 -16
  23. data/lib/davinci_crd_test_kit/client/multi_request_message_helper.rb +35 -0
  24. data/lib/davinci_crd_test_kit/client/tagged_request_load_helper.rb +38 -0
  25. data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_create_test.rb +43 -0
  26. data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_read_test.rb +43 -0
  27. data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_search_test.rb +234 -0
  28. data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_update_test.rb +43 -0
  29. data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_validation_test.rb +63 -0
  30. data/lib/davinci_crd_test_kit/client/v2.0.1/auth/decode_auth_token_test.rb +65 -0
  31. data/lib/davinci_crd_test_kit/client/v2.0.1/auth/retrieve_jwks_test.rb +109 -0
  32. data/lib/davinci_crd_test_kit/client/v2.0.1/auth/token_header_test.rb +70 -0
  33. data/lib/davinci_crd_test_kit/client/v2.0.1/auth/token_payload_test.rb +85 -0
  34. data/lib/davinci_crd_test_kit/{routes/cds-services.json → client/v2.0.1/cds-services-v201.json} +1 -1
  35. data/lib/davinci_crd_test_kit/client/v2.0.1/client_appointment_book_group.rb +108 -0
  36. data/lib/davinci_crd_test_kit/client/v2.0.1/client_card_must_support_group.rb +31 -0
  37. data/lib/davinci_crd_test_kit/client/v2.0.1/client_encounter_discharge_group.rb +105 -0
  38. data/lib/davinci_crd_test_kit/client/v2.0.1/client_encounter_start_group.rb +105 -0
  39. data/lib/davinci_crd_test_kit/client/v2.0.1/client_fhir_api_group.rb +790 -0
  40. data/lib/davinci_crd_test_kit/client/v2.0.1/client_hooks_group.rb +74 -0
  41. data/lib/davinci_crd_test_kit/client/v2.0.1/client_order_dispatch_group.rb +111 -0
  42. data/lib/davinci_crd_test_kit/client/v2.0.1/client_order_select_group.rb +116 -0
  43. data/lib/davinci_crd_test_kit/client/v2.0.1/client_order_sign_group.rb +113 -0
  44. data/lib/davinci_crd_test_kit/{client_registration_group.rb → client/v2.0.1/client_registration_group.rb} +12 -8
  45. data/lib/davinci_crd_test_kit/client/v2.0.1/client_urls.rb +13 -0
  46. data/lib/davinci_crd_test_kit/client/v2.0.1/crd_client_suite.rb +134 -0
  47. data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/appointment_book_receive_request_test.rb +129 -0
  48. data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/encounter_discharge_receive_request_test.rb +126 -0
  49. data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/encounter_start_receive_request_test.rb +126 -0
  50. data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/order_dispatch_receive_request_test.rb +138 -0
  51. data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/order_select_receive_request_test.rb +134 -0
  52. data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/order_sign_receive_request_test.rb +136 -0
  53. data/lib/davinci_crd_test_kit/client/v2.0.1/must_support/client_card_must_support_coverage_information.rb +93 -0
  54. data/lib/davinci_crd_test_kit/client/v2.0.1/must_support/client_card_must_support_external_reference.rb +62 -0
  55. data/lib/davinci_crd_test_kit/client/v2.0.1/must_support/client_card_must_support_instructions.rb +62 -0
  56. data/lib/davinci_crd_test_kit/client/v2.0.1/registration/client_registration_verification_test.rb +94 -0
  57. data/lib/davinci_crd_test_kit/client/v2.0.1/registration/client_service_registration_attestation_test.rb +40 -0
  58. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_fetched_data_test.rb +86 -0
  59. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_optional_fields_test.rb +63 -0
  60. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_prefetch_equals_queried_test.rb +96 -0
  61. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_required_fields_test.rb +55 -0
  62. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_valid_context_test.rb +70 -0
  63. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_valid_prefetch_test.rb +62 -0
  64. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_response/client_display_cards_attest.rb +83 -0
  65. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_response/inferno_response_validation.rb +79 -0
  66. data/lib/davinci_crd_test_kit/client/v2.2.1/api/client_coverage_info_update_test.rb +212 -0
  67. data/lib/davinci_crd_test_kit/client/v2.2.1/api/client_crd_update_verification_group.rb +18 -0
  68. data/lib/davinci_crd_test_kit/client/v2.2.1/auth/decode_auth_token_test.rb +69 -0
  69. data/lib/davinci_crd_test_kit/client/v2.2.1/auth/retrieve_jwks_test.rb +120 -0
  70. data/lib/davinci_crd_test_kit/client/v2.2.1/auth/token_header_test.rb +92 -0
  71. data/lib/davinci_crd_test_kit/client/v2.2.1/auth/token_payload_test.rb +93 -0
  72. data/lib/davinci_crd_test_kit/client/v2.2.1/cds-services-prefetch-subset-v221.json +198 -0
  73. data/lib/davinci_crd_test_kit/client/v2.2.1/cds-services-v221.json +202 -0
  74. data/lib/davinci_crd_test_kit/client/v2.2.1/client_appointment_book_group.rb +109 -0
  75. data/lib/davinci_crd_test_kit/client/v2.2.1/client_cross_hook_group.rb +28 -0
  76. data/lib/davinci_crd_test_kit/client/v2.2.1/client_encounter_discharge_group.rb +102 -0
  77. data/lib/davinci_crd_test_kit/client/v2.2.1/client_encounter_start_group.rb +101 -0
  78. data/lib/davinci_crd_test_kit/client/v2.2.1/client_fhir_api_group.rb +88 -0
  79. data/lib/davinci_crd_test_kit/client/v2.2.1/client_hooks_group.rb +84 -0
  80. data/lib/davinci_crd_test_kit/client/v2.2.1/client_long_running_hook_group.rb +32 -0
  81. data/lib/davinci_crd_test_kit/client/v2.2.1/client_order_dispatch_group.rb +107 -0
  82. data/lib/davinci_crd_test_kit/client/v2.2.1/client_order_select_group.rb +108 -0
  83. data/lib/davinci_crd_test_kit/client/v2.2.1/client_order_sign_group.rb +113 -0
  84. data/lib/davinci_crd_test_kit/client/v2.2.1/client_registration_group.rb +33 -0
  85. data/lib/davinci_crd_test_kit/client/v2.2.1/client_urls.rb +27 -0
  86. data/lib/davinci_crd_test_kit/client/v2.2.1/crd_client_suite.rb +234 -0
  87. data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_card_must_support_coverage_information_test.rb +63 -0
  88. data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_fhirpath_collection_as_comma_delimited_string_test.rb +60 -0
  89. data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_hook_instances_unique_test.rb +45 -0
  90. data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_location_address_propagation_test.rb +135 -0
  91. data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_prefetch_complete_and_subset_test.rb +103 -0
  92. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/appointment_book_receive_request_test.rb +156 -0
  93. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/encounter_discharge_receive_request_test.rb +157 -0
  94. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/encounter_start_receive_request_test.rb +157 -0
  95. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/order_dispatch_receive_request_test.rb +165 -0
  96. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/order_select_receive_request_test.rb +165 -0
  97. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/order_sign_receive_request_test.rb +165 -0
  98. data/lib/davinci_crd_test_kit/client/v2.2.1/long_running/client_long_running_receive_request_test.rb +64 -0
  99. data/lib/davinci_crd_test_kit/client/v2.2.1/long_running/client_skip_long_running_attestation_test.rb +54 -0
  100. data/lib/davinci_crd_test_kit/client/v2.2.1/registration/client_registration_verification_test.rb +161 -0
  101. data/lib/davinci_crd_test_kit/client/v2.2.1/registration/client_service_registration_attestation_test.rb +108 -0
  102. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_conformance_test.rb +47 -0
  103. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_coverage_verification_test.rb +152 -0
  104. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_data_fetch_verification_test.rb +55 -0
  105. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_granted_scopes_test.rb +123 -0
  106. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_prefetch_complete_test.rb +133 -0
  107. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_prefetch_profiles_test.rb +55 -0
  108. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_requested_version_test.rb +54 -0
  109. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_secured_transport_test.rb +48 -0
  110. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_response/client_display_cards_attest.rb +75 -0
  111. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_response/hook_response_support_coverage_information_test.rb +30 -0
  112. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_response/inferno_response_validation.rb +77 -0
  113. data/lib/davinci_crd_test_kit/cross_suite/base_urls.rb +20 -0
  114. data/lib/davinci_crd_test_kit/cross_suite/cards_identification.rb +321 -0
  115. data/lib/davinci_crd_test_kit/{cards_validation.rb → cross_suite/cards_validation.rb} +104 -47
  116. data/lib/davinci_crd_test_kit/cross_suite/coverage-information_stu201_metadata.yml +27 -0
  117. data/lib/davinci_crd_test_kit/cross_suite/coverage-information_stu221_metadata.yml +60 -0
  118. data/lib/davinci_crd_test_kit/cross_suite/fhirpath_on_cds_request.rb +177 -0
  119. data/lib/davinci_crd_test_kit/{hook_request_field_validation.rb → cross_suite/hook_request_field_validation.rb} +282 -203
  120. data/lib/davinci_crd_test_kit/cross_suite/logical_models_override_helper.rb +220 -0
  121. data/lib/davinci_crd_test_kit/cross_suite/prefetch_completeness_checker.rb +476 -0
  122. data/lib/davinci_crd_test_kit/cross_suite/prefetch_contents_validation.rb +81 -0
  123. data/lib/davinci_crd_test_kit/cross_suite/prefetch_profile_validation.rb +48 -0
  124. data/lib/davinci_crd_test_kit/cross_suite/profiles_and_resource_types.rb +63 -0
  125. data/lib/davinci_crd_test_kit/cross_suite/replace_tokens.rb +38 -0
  126. data/lib/davinci_crd_test_kit/cross_suite/requests_logical_model_validation.rb +203 -0
  127. data/lib/davinci_crd_test_kit/cross_suite/response_logical_model_validation.rb +435 -0
  128. data/lib/davinci_crd_test_kit/{suggestion_actions_validation.rb → cross_suite/suggestion_actions_validation.rb} +70 -50
  129. data/lib/davinci_crd_test_kit/cross_suite/tags.rb +46 -0
  130. data/lib/davinci_crd_test_kit/metadata.rb +10 -44
  131. data/lib/davinci_crd_test_kit/requirements/cds-hooks-library_1.0.1_requirements.xlsx +0 -0
  132. data/lib/davinci_crd_test_kit/requirements/cds-hooks_2.0_requirements.xlsx +0 -0
  133. data/lib/davinci_crd_test_kit/requirements/cds-hooks_3.0.0-ballot_requirements.xlsx +0 -0
  134. data/lib/davinci_crd_test_kit/requirements/davinci_crd_test_kit_requirements.csv +742 -65
  135. data/lib/davinci_crd_test_kit/requirements/generated/crd_client_requirements_coverage.csv +279 -54
  136. data/lib/davinci_crd_test_kit/requirements/generated/crd_client_v221_requirements_coverage.csv +1430 -0
  137. data/lib/davinci_crd_test_kit/requirements/generated/crd_server_requirements_coverage.csv +36 -45
  138. data/lib/davinci_crd_test_kit/requirements/generated/crd_server_v221_requirements_coverage.csv +143 -0
  139. data/lib/davinci_crd_test_kit/requirements/hl7.fhir.us.davinci-crd_2.0.1_requirements.xlsx +0 -0
  140. data/lib/davinci_crd_test_kit/requirements/hl7.fhir.us.davinci-crd_2.2.1_requirements.xlsx +0 -0
  141. data/lib/davinci_crd_test_kit/server/endpoints/jwk_set_endpoint_handler.rb +13 -0
  142. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_create_endpoint.rb +23 -0
  143. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_delete_endpoint.rb +30 -0
  144. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_metadata_endpoint.rb +112 -0
  145. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_read_endpoint.rb +21 -0
  146. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_request_handler.rb +261 -0
  147. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_search_endpoint.rb +561 -0
  148. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_update_endpoint.rb +24 -0
  149. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/stress-test-Bundle.json +54687 -0
  150. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr_endpoints.rb +95 -0
  151. data/lib/davinci_crd_test_kit/server/jobs/invoke_hook.rb +225 -0
  152. data/lib/davinci_crd_test_kit/server/jobs/invoke_hook_no_special_requests.rb +17 -0
  153. data/lib/davinci_crd_test_kit/server/jobs/invoke_hook_with_bad_auth.rb +14 -0
  154. data/lib/davinci_crd_test_kit/{jwt_helper.rb → server/jwt_helper.rb} +1 -12
  155. data/lib/davinci_crd_test_kit/server/resource_extractor.rb +68 -0
  156. data/lib/davinci_crd_test_kit/server/server_abstract_invoke_hook_test.rb +183 -0
  157. data/lib/davinci_crd_test_kit/server/server_base_urls.rb +30 -0
  158. data/lib/davinci_crd_test_kit/{server_hook_helper.rb → server/server_hook_helper.rb} +3 -3
  159. data/lib/davinci_crd_test_kit/{server_hook_request_validation.rb → server/server_hook_request_validation.rb} +1 -1
  160. data/lib/davinci_crd_test_kit/{test_helper.rb → server/server_test_helper.rb} +7 -3
  161. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Appointment.yml +5 -0
  162. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/ClaimResponse.yml +5 -0
  163. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/CommunicationRequest.yml +5 -0
  164. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Coverage.yml +21 -0
  165. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Device.yml +5 -0
  166. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/DeviceRequest.yml +5 -0
  167. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Encounter.yml +7 -0
  168. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Location.yml +5 -0
  169. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/MedicationRequest.yml +5 -0
  170. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/NutritionOrder.yml +5 -0
  171. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Organization.yml +5 -0
  172. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Patient.yml +5 -0
  173. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Practitioner.yml +5 -0
  174. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/PractitionerRole.yml +40 -0
  175. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/ServiceRequest.yml +5 -0
  176. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Task.yml +5 -0
  177. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/VisionPrescription.yml +5 -0
  178. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_server_suite.rb +99 -0
  179. data/lib/davinci_crd_test_kit/server/v2.0.1/discovery/discovery_endpoint_test.rb +90 -0
  180. data/lib/davinci_crd_test_kit/server/v2.0.1/discovery/discovery_services_validation_test.rb +67 -0
  181. data/lib/davinci_crd_test_kit/server/v2.0.1/interaction/server_invoke_hook_test.rb +12 -0
  182. data/lib/davinci_crd_test_kit/server/v2.0.1/must_support/coverage_information_system_action_across_hooks_validation_test.rb +34 -0
  183. data/lib/davinci_crd_test_kit/server/v2.0.1/must_support/external_reference_card_across_hooks_validation_test.rb +30 -0
  184. data/lib/davinci_crd_test_kit/server/v2.0.1/must_support/instructions_card_received_across_hooks_test.rb +27 -0
  185. data/lib/davinci_crd_test_kit/server/v2.0.1/server_appointment_book_group.rb +191 -0
  186. data/lib/davinci_crd_test_kit/server/v2.0.1/server_demonstrate_hook_response_group.rb +93 -0
  187. data/lib/davinci_crd_test_kit/server/v2.0.1/server_discovery_group.rb +62 -0
  188. data/lib/davinci_crd_test_kit/server/v2.0.1/server_encounter_discharge_group.rb +186 -0
  189. data/lib/davinci_crd_test_kit/server/v2.0.1/server_encounter_start_group.rb +186 -0
  190. data/lib/davinci_crd_test_kit/server/v2.0.1/server_hooks_group.rb +73 -0
  191. data/lib/davinci_crd_test_kit/server/v2.0.1/server_order_dispatch_group.rb +191 -0
  192. data/lib/davinci_crd_test_kit/server/v2.0.1/server_order_select_group.rb +211 -0
  193. data/lib/davinci_crd_test_kit/server/v2.0.1/server_order_sign_group.rb +216 -0
  194. data/lib/davinci_crd_test_kit/server/v2.0.1/server_required_card_response_validation_group.rb +28 -0
  195. data/lib/davinci_crd_test_kit/server/v2.0.1/server_urls.rb +13 -0
  196. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_request/service_request_context_validation_test.rb +30 -0
  197. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_request/service_request_optional_fields_validation_test.rb +39 -0
  198. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_request/service_request_required_fields_validation_test.rb +40 -0
  199. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/additional_orders_validation_test.rb +59 -0
  200. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/card_optional_fields_validation_test.rb +51 -0
  201. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/coverage_information_system_action_received_test.rb +65 -0
  202. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/coverage_information_system_action_validation_test.rb +120 -0
  203. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/create_or_update_coverage_info_response_validation_test.rb +70 -0
  204. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/external_reference_card_validation_test.rb +37 -0
  205. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/form_completion_response_validation_test.rb +67 -0
  206. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/instructions_card_received_test.rb +30 -0
  207. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/launch_smart_app_card_validation_test.rb +39 -0
  208. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/propose_alternate_request_card_validation_test.rb +46 -0
  209. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/service_response_validation_test.rb +83 -0
  210. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Appointment_withorder.yml +5 -0
  211. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Appointment_withoutorder.yml +5 -0
  212. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/CommunicationRequest.yml +5 -0
  213. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Coverage.yml +5 -0
  214. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Device.yml +5 -0
  215. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/DeviceRequest.yml +5 -0
  216. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Encounter.yml +5 -0
  217. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Location.yml +5 -0
  218. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/MedicationRequest.yml +5 -0
  219. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/NutritionOrder.yml +5 -0
  220. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Organization.yml +5 -0
  221. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Patient.yml +5 -0
  222. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/PractitionerRole.yml +5 -0
  223. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/ServiceRequest.yml +5 -0
  224. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/VisionPrescription.yml +5 -0
  225. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_server_suite.rb +118 -0
  226. data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_configuration_test.rb +159 -0
  227. data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_endpoint_test.rb +90 -0
  228. data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_prefetch_support_test.rb +43 -0
  229. data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_services_validation_test.rb +121 -0
  230. data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_standard_prefetch_expressions_test.rb +166 -0
  231. data/lib/davinci_crd_test_kit/server/v2.2.1/interaction/server_invoke_hook_single_request_test.rb +22 -0
  232. data/lib/davinci_crd_test_kit/server/v2.2.1/interaction/server_invoke_hook_test.rb +17 -0
  233. data/lib/davinci_crd_test_kit/server/v2.2.1/must_support/coverage_information_must_support_test.rb +71 -0
  234. data/lib/davinci_crd_test_kit/server/v2.2.1/must_support/coverage_information_system_action_across_hooks_validation_test.rb +36 -0
  235. data/lib/davinci_crd_test_kit/server/v2.2.1/must_support/supported_us_core_versions_test.rb +118 -0
  236. data/lib/davinci_crd_test_kit/server/v2.2.1/server_appointment_book_group.rb +121 -0
  237. data/lib/davinci_crd_test_kit/server/v2.2.1/server_demonstrate_hook_response_group.rb +94 -0
  238. data/lib/davinci_crd_test_kit/server/v2.2.1/server_discovery_group.rb +71 -0
  239. data/lib/davinci_crd_test_kit/server/v2.2.1/server_encounter_discharge_group.rb +107 -0
  240. data/lib/davinci_crd_test_kit/server/v2.2.1/server_encounter_start_group.rb +107 -0
  241. data/lib/davinci_crd_test_kit/server/v2.2.1/server_hooks_group.rb +73 -0
  242. data/lib/davinci_crd_test_kit/server/v2.2.1/server_order_dispatch_group.rb +121 -0
  243. data/lib/davinci_crd_test_kit/server/v2.2.1/server_order_select_group.rb +115 -0
  244. data/lib/davinci_crd_test_kit/server/v2.2.1/server_order_sign_group.rb +132 -0
  245. data/lib/davinci_crd_test_kit/server/v2.2.1/server_required_card_response_validation_group.rb +30 -0
  246. data/lib/davinci_crd_test_kit/server/v2.2.1/server_urls.rb +13 -0
  247. data/lib/davinci_crd_test_kit/server/v2.2.1/specific_coverage_response_group.rb +23 -0
  248. data/lib/davinci_crd_test_kit/server/v2.2.1/specific_coverage_responses/coverage_info_reason_test.rb +108 -0
  249. data/lib/davinci_crd_test_kit/server/v2.2.1/specific_coverage_responses/coverage_not_found_group.rb +116 -0
  250. data/lib/davinci_crd_test_kit/server/v2.2.1/specific_coverage_responses/no_active_coverage_group.rb +115 -0
  251. data/lib/davinci_crd_test_kit/server/v2.2.1/specific_coverage_responses/no_member_found_group.rb +117 -0
  252. data/lib/davinci_crd_test_kit/server/v2.2.1/specific_coverage_responses/technical_issues_group.rb +121 -0
  253. data/lib/davinci_crd_test_kit/server/v2.2.1/specific_coverage_responses/technical_issues_invoke_test.rb +22 -0
  254. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_context_validation_test.rb +31 -0
  255. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_no_custom_extensions_test.rb +120 -0
  256. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_optional_fields_validation_test.rb +40 -0
  257. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_required_fields_validation_test.rb +41 -0
  258. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/additional_orders_validation_test.rb +109 -0
  259. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/all_responses_include_coverage_information_test.rb +123 -0
  260. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/coverage_info_configuration_test.rb +83 -0
  261. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/coverage_information_card_absence_test.rb +76 -0
  262. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/coverage_information_system_action_validation_test.rb +130 -0
  263. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/create_or_update_coverage_info_response_validation_test.rb +119 -0
  264. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/external_reference_card_validation_test.rb +89 -0
  265. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/form_completion_response_validation_test.rb +126 -0
  266. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/hook_request_resource_resolution.rb +174 -0
  267. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/instructions_card_received_test.rb +83 -0
  268. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/launch_smart_app_card_validation_test.rb +88 -0
  269. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/order_dispatch_coverage_information_test.rb +38 -0
  270. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/propose_alternate_request_card_validation_test.rb +81 -0
  271. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/service_response_validation_test.rb +63 -0
  272. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/unknown_cds_hooks_elements_test.rb +78 -0
  273. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/unknown_configuration_test.rb +78 -0
  274. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/unknown_context_test.rb +78 -0
  275. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/verify_response_without_billing_options_test.rb +43 -0
  276. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/verify_response_without_configuration_test.rb +44 -0
  277. data/lib/davinci_crd_test_kit/version.rb +2 -2
  278. data/lib/davinci_crd_test_kit.rb +4 -2
  279. metadata +307 -93
  280. data/lib/davinci_crd_test_kit/client_fhir_api_group.rb +0 -785
  281. data/lib/davinci_crd_test_kit/client_hooks_group.rb +0 -74
  282. data/lib/davinci_crd_test_kit/client_tests/appointment_book_receive_request_test.rb +0 -93
  283. data/lib/davinci_crd_test_kit/client_tests/client_appointment_book_group.rb +0 -75
  284. data/lib/davinci_crd_test_kit/client_tests/client_display_cards_attest.rb +0 -48
  285. data/lib/davinci_crd_test_kit/client_tests/client_encounter_discharge_group.rb +0 -73
  286. data/lib/davinci_crd_test_kit/client_tests/client_encounter_start_group.rb +0 -73
  287. data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_create_test.rb +0 -42
  288. data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_read_test.rb +0 -40
  289. data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_search_test.rb +0 -232
  290. data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_update_test.rb +0 -42
  291. data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_validation_test.rb +0 -61
  292. data/lib/davinci_crd_test_kit/client_tests/client_order_dispatch_group.rb +0 -79
  293. data/lib/davinci_crd_test_kit/client_tests/client_order_select_group.rb +0 -82
  294. data/lib/davinci_crd_test_kit/client_tests/client_order_sign_group.rb +0 -81
  295. data/lib/davinci_crd_test_kit/client_tests/client_registration_verification_test.rb +0 -88
  296. data/lib/davinci_crd_test_kit/client_tests/decode_auth_token_test.rb +0 -60
  297. data/lib/davinci_crd_test_kit/client_tests/encounter_discharge_receive_request_test.rb +0 -90
  298. data/lib/davinci_crd_test_kit/client_tests/encounter_start_receive_request_test.rb +0 -90
  299. data/lib/davinci_crd_test_kit/client_tests/hook_request_optional_fields_test.rb +0 -57
  300. data/lib/davinci_crd_test_kit/client_tests/hook_request_required_fields_test.rb +0 -49
  301. data/lib/davinci_crd_test_kit/client_tests/hook_request_valid_context_test.rb +0 -68
  302. data/lib/davinci_crd_test_kit/client_tests/hook_request_valid_prefetch_test.rb +0 -69
  303. data/lib/davinci_crd_test_kit/client_tests/order_dispatch_receive_request_test.rb +0 -102
  304. data/lib/davinci_crd_test_kit/client_tests/order_select_receive_request_test.rb +0 -98
  305. data/lib/davinci_crd_test_kit/client_tests/order_sign_receive_request_test.rb +0 -101
  306. data/lib/davinci_crd_test_kit/client_tests/retrieve_jwks_test.rb +0 -105
  307. data/lib/davinci_crd_test_kit/client_tests/submitted_response_validation.rb +0 -48
  308. data/lib/davinci_crd_test_kit/client_tests/token_header_test.rb +0 -65
  309. data/lib/davinci_crd_test_kit/client_tests/token_payload_test.rb +0 -78
  310. data/lib/davinci_crd_test_kit/crd_client_suite.rb +0 -193
  311. data/lib/davinci_crd_test_kit/crd_options.rb +0 -9
  312. data/lib/davinci_crd_test_kit/crd_server_suite.rb +0 -125
  313. data/lib/davinci_crd_test_kit/igs/davinci-crd-2.0.1.tgz +0 -0
  314. data/lib/davinci_crd_test_kit/routes/cds_services_discovery_handler.rb +0 -18
  315. data/lib/davinci_crd_test_kit/routes/hook_request_endpoint.rb +0 -77
  316. data/lib/davinci_crd_test_kit/routes/jwk_set_endpoint_handler.rb +0 -15
  317. data/lib/davinci_crd_test_kit/server_appointment_book_group.rb +0 -176
  318. data/lib/davinci_crd_test_kit/server_demonstrate_hook_response_group.rb +0 -77
  319. data/lib/davinci_crd_test_kit/server_discovery_group.rb +0 -60
  320. data/lib/davinci_crd_test_kit/server_encounter_discharge_group.rb +0 -170
  321. data/lib/davinci_crd_test_kit/server_encounter_start_group.rb +0 -170
  322. data/lib/davinci_crd_test_kit/server_hooks_group.rb +0 -71
  323. data/lib/davinci_crd_test_kit/server_order_dispatch_group.rb +0 -176
  324. data/lib/davinci_crd_test_kit/server_order_select_group.rb +0 -195
  325. data/lib/davinci_crd_test_kit/server_order_sign_group.rb +0 -201
  326. data/lib/davinci_crd_test_kit/server_required_card_response_validation_group.rb +0 -26
  327. data/lib/davinci_crd_test_kit/server_tests/additional_orders_validation_test.rb +0 -68
  328. data/lib/davinci_crd_test_kit/server_tests/card_optional_fields_validation_test.rb +0 -47
  329. data/lib/davinci_crd_test_kit/server_tests/coverage_information_system_action_across_hooks_validation_test.rb +0 -32
  330. data/lib/davinci_crd_test_kit/server_tests/coverage_information_system_action_received_test.rb +0 -63
  331. data/lib/davinci_crd_test_kit/server_tests/coverage_information_system_action_validation_test.rb +0 -118
  332. data/lib/davinci_crd_test_kit/server_tests/create_or_update_coverage_info_response_validation_test.rb +0 -71
  333. data/lib/davinci_crd_test_kit/server_tests/discovery_endpoint_test.rb +0 -88
  334. data/lib/davinci_crd_test_kit/server_tests/discovery_services_validation_test.rb +0 -65
  335. data/lib/davinci_crd_test_kit/server_tests/external_reference_card_across_hooks_validation_test.rb +0 -28
  336. data/lib/davinci_crd_test_kit/server_tests/external_reference_card_validation_test.rb +0 -36
  337. data/lib/davinci_crd_test_kit/server_tests/form_completion_response_validation_test.rb +0 -78
  338. data/lib/davinci_crd_test_kit/server_tests/instructions_card_received_across_hooks_test.rb +0 -25
  339. data/lib/davinci_crd_test_kit/server_tests/instructions_card_received_test.rb +0 -26
  340. data/lib/davinci_crd_test_kit/server_tests/launch_smart_app_card_validation_test.rb +0 -38
  341. data/lib/davinci_crd_test_kit/server_tests/propose_alternate_request_card_validation_test.rb +0 -63
  342. data/lib/davinci_crd_test_kit/server_tests/service_call_test.rb +0 -101
  343. data/lib/davinci_crd_test_kit/server_tests/service_request_context_validation_test.rb +0 -28
  344. data/lib/davinci_crd_test_kit/server_tests/service_request_optional_fields_validation_test.rb +0 -37
  345. data/lib/davinci_crd_test_kit/server_tests/service_request_required_fields_validation_test.rb +0 -38
  346. data/lib/davinci_crd_test_kit/server_tests/service_response_validation_test.rb +0 -81
  347. data/lib/davinci_crd_test_kit/tags.rb +0 -10
  348. data/lib/davinci_crd_test_kit/urls.rb +0 -52
  349. /data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/instructions.json +0 -0
  350. /data/lib/davinci_crd_test_kit/{crd_jwks.json → server/endpoints/crd_jwks.json} +0 -0
  351. /data/lib/davinci_crd_test_kit/{jwks.rb → server/endpoints/jwks.rb} +0 -0
@@ -0,0 +1,84 @@
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
+ require_relative 'client_urls'
8
+
9
+ module DaVinciCRDTestKit
10
+ module V221
11
+ class ClientHooksGroup < Inferno::TestGroup
12
+ title 'Hooks'
13
+ description <<~DESCRIPTION
14
+ This group contains sub-groups which each verify the ability of the client to make and react to responses from
15
+ one of the [six hooks described in the CRD IG](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/hooks.html):
16
+ * [appointment-book](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/hooks.html#appointment-book)
17
+ * [encounter-start](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/hooks.html#encounter-start)
18
+ * [encounter-discharge](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/hooks.html#encounter-discharge)
19
+ * [order-select](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/hooks.html#order-select)
20
+ * [order-dispatch](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/hooks.html#order-dispatch)
21
+ * [order-sign](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/hooks.html#order-sign)
22
+
23
+ Each hook-specific group follows the same pattern:
24
+ 1. Allow the client to make hook invocations for the tested hook, waiting until the tester indicates
25
+ that all desired requests have been made, then
26
+ 2. Check the requests and their associated responses for conformance to CRD and CDS Hooks requirements.
27
+ Additionally, ask the tester to confirm that the responses were displayed appropriately by the client.
28
+
29
+ The CRD IG does not require support for any specific hook, so all the hook-specific sub-groups are
30
+ optional. A conformant CRD client will have implemented at least one hook and will run and pass
31
+ the hook-specific groups corresponding to each hook that it implements.
32
+
33
+ Inferno simulates two CRD discovery endpoints, each with service endpoints for all six CRD hooks
34
+ but with different service ids:
35
+ - Discovery endpoint for services requesting the complete [standard prefetch data set](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/foundation.html#standard-prefetch):
36
+ `#{ClientURLs.discovery_url}`
37
+ * `appointment-book` service id: `appointment-book-service`
38
+ * `encounter-start` service id: `encounter-start-service`
39
+ * `encounter-discharge` service id: `encounter-discharge-service`
40
+ * `order-select` service id: `order-select-service`
41
+ * `order-dispatch` service id: `order-dispatch-service`
42
+ * `order-sign` service id: `order-sign-service`
43
+ - Discovery endpoint for services requesting the a subset of the [standard prefetch data set](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/foundation.html#standard-prefetch):
44
+ `#{ClientURLs.prefetch_subset_discovery_url}`
45
+ * `appointment-book` service id: `appointment-book-subset`
46
+ * `encounter-start` service id: `encounter-start-subset`
47
+ * `encounter-discharge` service id: `encounter-discharge-subset`
48
+ * `order-select` service id: `order-select-subset`
49
+ * `order-dispatch` service id: `order-dispatch-subset`
50
+ * `order-sign` service id: `order-sign-subset`
51
+ DESCRIPTION
52
+ id :crd_v221_client_hooks
53
+
54
+ input :cds_jwt_iss,
55
+ title: 'CRD JWT Issuer',
56
+ description: %(
57
+ Value of the `iss` claim that must be present in the JWT used to authorize the client's hook
58
+ request sent as the Bearer token in the `Authorization` header.
59
+ Run or re-run the "Registration" group to set or change this value.
60
+ ),
61
+ locked: true
62
+
63
+ input_order :cds_jwt_iss, :cds_jwk_set
64
+
65
+ group from: :crd_v221_client_appointment_book,
66
+ optional: true
67
+
68
+ group from: :crd_v221_client_encounter_start,
69
+ optional: true
70
+
71
+ group from: :crd_v221_client_encounter_discharge,
72
+ optional: true
73
+
74
+ group from: :crd_v221_client_order_select,
75
+ optional: true
76
+
77
+ group from: :crd_v221_client_order_dispatch,
78
+ optional: true
79
+
80
+ group from: :crd_v221_client_order_sign,
81
+ optional: true
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,32 @@
1
+ require_relative 'long_running/client_long_running_receive_request_test'
2
+ require_relative 'long_running/client_skip_long_running_attestation_test'
3
+
4
+ module DaVinciCRDTestKit
5
+ module V221
6
+ class ClientLongRunningHookGroup < Inferno::TestGroup
7
+ title 'Long-running Hook Request'
8
+ id :crd_v221_client_long_running_hook
9
+ description <<~DESCRIPTION
10
+ When a hook invocation runs long, the CRD IG requires systems to provide
11
+ users with a way to bypass the hook and continue their workflow.
12
+
13
+ Hook requests made during these tests will not be checked for conformance
14
+ or included in the cross-hook analyses around must support and other coverage requirements.
15
+ DESCRIPTION
16
+
17
+ run_as_group
18
+
19
+ input_order :long_running_pause_time
20
+
21
+ config(
22
+ options: {
23
+ hook_name: ANY_HOOK_TAG,
24
+ crd_test_group: LONG_RUNNING_GROUP_TAG
25
+ }
26
+ )
27
+
28
+ test from: :crd_v221_client_long_running_receive_request
29
+ test from: :crd_v221_client_skip_long_running_attestation_test
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,107 @@
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_conformance_test'
7
+ require_relative 'verify_request/hook_request_requested_version_test'
8
+ require_relative 'verify_request/hook_request_prefetch_profiles_test'
9
+ require_relative 'verify_request/hook_request_prefetch_complete_test'
10
+ require_relative 'verify_request/hook_request_granted_scopes_test'
11
+ require_relative 'verify_request/hook_request_secured_transport_test'
12
+ require_relative 'verify_request/hook_request_coverage_verification_test'
13
+ require_relative 'verify_request/hook_request_data_fetch_verification_test'
14
+ require_relative 'verify_response/inferno_response_validation'
15
+ require_relative 'verify_response/client_display_cards_attest'
16
+ require_relative 'verify_response/hook_response_support_coverage_information_test'
17
+
18
+ module DaVinciCRDTestKit
19
+ module V221
20
+ class ClientOrderDispatchGroup < Inferno::TestGroup
21
+ title 'order-dispatch'
22
+ id :crd_v221_client_order_dispatch
23
+ description <<~DESCRIPTION
24
+ The [order-dispatch](https://cds-hooks.hl7.org/hooks/STU1/order-dispatch.html) hook fires when a
25
+ practitioner is selecting a candidate performer for a pre-existing order
26
+ that was not tied to a specific performer. The CRD IG places [additional constraints on the use
27
+ of the order-dispatch hook](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/hooks.html#order-dispatch),
28
+ including the profiles that resources in each request must conform to.
29
+
30
+ Inferno's simulated `order-dispatch` hook endpoints are available at:
31
+ - Complete Prefetch: `#{ClientURLs.base_url}#{ORDER_DISPATCH_PATH}`
32
+ - Subset Prefetch: `#{ClientURLs.base_url}#{ORDER_DISPATCH_PREFETCH_SUBSET_PATH}`
33
+ DESCRIPTION
34
+ run_as_group
35
+
36
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.2.1@hook-2-A', 'hl7.fhir.us.davinci-crd_2.2.1@hook-2-B'
37
+
38
+ input_order :order_dispatch_response_approach,
39
+ :order_dispatch_selected_response_types,
40
+ :order_dispatch_custom_response_template
41
+
42
+ config(
43
+ inputs: {
44
+ auth_token_headers_json: { name: :order_dispatch_auth_token_headers_json },
45
+ auth_tokens: { name: :order_dispatch_auth_tokens },
46
+ auth_tokens_jwk_json: { name: :order_dispatch_auth_tokens_jwk_json },
47
+ client_access_token: { name: :order_dispatch_client_access_token },
48
+ client_fhir_server: { name: :order_dispatch_client_fhir_server },
49
+ crd_jwks_keys_json: { name: :order_dispatch_crd_jwks_keys_json },
50
+ custom_response_template: { name: :order_dispatch_custom_response_template },
51
+ selected_response_types: { name: :order_dispatch_selected_response_types }
52
+ },
53
+ outputs: {
54
+ auth_token_headers_json: { name: :order_dispatch_auth_token_headers_json },
55
+ auth_token_payloads_json: { name: :order_dispatch_auth_token_payloads_json },
56
+ auth_tokens: { name: :order_dispatch_auth_tokens },
57
+ auth_tokens_jwk_json: { name: :order_dispatch_auth_tokens_jwk_json },
58
+ client_access_token: { name: :order_dispatch_client_access_token },
59
+ client_fhir_server: { name: :order_dispatch_client_fhir_server },
60
+ crd_jwks_keys_json: { name: :order_dispatch_crd_jwks_keys_json }
61
+ },
62
+ options: {
63
+ hook_name: 'order-dispatch'
64
+ }
65
+ )
66
+
67
+ group do
68
+ title 'Interaction'
69
+ test from: :crd_v221_order_dispatch_request
70
+ end
71
+
72
+ group do
73
+ title 'Authorization'
74
+ test from: :crd_v221_decode_auth_token
75
+ test from: :crd_v221_retrieve_jwks
76
+ test from: :crd_v221_token_header
77
+ test from: :crd_v221_token_payload
78
+ end
79
+
80
+ group do
81
+ title 'Requests'
82
+ test from: :crd_v221_hook_request_conformance do
83
+ verifies_requirements(*HookRequestConformanceTest.verifies_requirements,
84
+ 'hl7.fhir.us.davinci-crd_2.2.1@hook-31')
85
+ end
86
+ test from: :crd_v221_hook_request_requested_version
87
+ test from: :crd_v221_hook_request_prefetch_profiles
88
+ test from: :crd_v221_hook_request_prefetch_complete
89
+ test from: :crd_v221_hook_request_coverage_verification
90
+ test from: :crd_v221_hook_data_fetch_verification
91
+ test from: :crd_v221_hook_request_granted_scopes
92
+ test from: :crd_v221_hook_request_secured_transport
93
+ end
94
+
95
+ group do
96
+ title 'Response Handling'
97
+
98
+ test from: :crd_v221_inferno_response_validation
99
+ test from: :crd_v221_card_display_attest_test
100
+ test from: :crd_v221_client_hook_response_support_coverage_information do
101
+ title 'Client supports the Coverage Information response type on the order-dispatch hook'
102
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.2.1@hook-33'
103
+ end
104
+ end
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,108 @@
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_conformance_test'
7
+ require_relative 'verify_request/hook_request_requested_version_test'
8
+ require_relative 'verify_request/hook_request_prefetch_profiles_test'
9
+ require_relative 'verify_request/hook_request_prefetch_complete_test'
10
+ require_relative 'verify_request/hook_request_granted_scopes_test'
11
+ require_relative 'verify_request/hook_request_secured_transport_test'
12
+ require_relative 'verify_request/hook_request_coverage_verification_test'
13
+ require_relative 'verify_request/hook_request_data_fetch_verification_test'
14
+ require_relative 'verify_response/inferno_response_validation'
15
+ require_relative 'verify_response/client_display_cards_attest'
16
+
17
+ module DaVinciCRDTestKit
18
+ module V221
19
+ class ClientOrderSelectGroup < Inferno::TestGroup
20
+ title 'order-select'
21
+ id :crd_v221_client_order_select
22
+ description <<~DESCRIPTION
23
+ The [order-select](https://cds-hooks.hl7.org/hooks/STU1/order-select.html) hook fires
24
+ when a clinician selects one or more orders to place for a patient (including orders for medications,
25
+ procedures, labs and other orders). The CRD IG places [additional constraints on the use
26
+ of the order-select hook](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/hooks.html#order-select),
27
+ including the profiles that resources in each request must conform to.
28
+
29
+ Inferno's simulated `order-select` hook endpoints are available at:
30
+ - Complete Prefetch: `#{ClientURLs.base_url}#{ORDER_SELECT_PATH}`
31
+ - Subset Prefetch: `#{ClientURLs.base_url}#{ORDER_SELECT_PREFETCH_SUBSET_PATH}`
32
+ DESCRIPTION
33
+ run_as_group
34
+
35
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.2.1@hook-2-A', 'hl7.fhir.us.davinci-crd_2.2.1@hook-2-B'
36
+
37
+ input_order :order_select_response_approach,
38
+ :order_select_selected_response_types,
39
+ :order_select_custom_response_template
40
+
41
+ config(
42
+ inputs: {
43
+ auth_token_headers_json: { name: :order_select_auth_token_headers_json },
44
+ auth_tokens: { name: :order_select_auth_tokens },
45
+ auth_tokens_jwk_json: { name: :order_select_auth_tokens_jwk_json },
46
+ client_access_token: { name: :order_select_client_access_token },
47
+ client_fhir_server: { name: :order_select_client_fhir_server },
48
+ crd_jwks_keys_json: { name: :order_select_crd_jwks_keys_json },
49
+ custom_response_template: { name: :order_select_custom_response_template },
50
+ selected_response_types: { name: :order_select_selected_response_types }
51
+ },
52
+ outputs: {
53
+ auth_token_headers_json: { name: :order_select_auth_token_headers_json },
54
+ auth_token_payloads_json: { name: :order_select_auth_token_payloads_json },
55
+ auth_tokens: { name: :order_select_auth_tokens },
56
+ auth_tokens_jwk_json: { name: :order_select_auth_tokens_jwk_json },
57
+ client_access_token: { name: :order_select_client_access_token },
58
+ client_fhir_server: { name: :order_select_client_fhir_server },
59
+ crd_jwks_keys_json: { name: :order_select_crd_jwks_keys_json }
60
+ },
61
+ options: {
62
+ hook_name: 'order-select'
63
+ }
64
+ )
65
+
66
+ group do
67
+ title 'Interaction'
68
+ test from: :crd_v221_order_select_request
69
+ end
70
+
71
+ group do
72
+ title 'Authorization'
73
+ test from: :crd_v221_decode_auth_token
74
+ test from: :crd_v221_retrieve_jwks
75
+ test from: :crd_v221_token_header
76
+ test from: :crd_v221_token_payload
77
+ end
78
+
79
+ group do
80
+ title 'Requests'
81
+ test from: :crd_v221_hook_request_conformance do
82
+ verifies_requirements(*HookRequestConformanceTest.verifies_requirements,
83
+ 'hl7.fhir.us.davinci-crd_2.2.1@hook-35',
84
+ 'hl7.fhir.us.davinci-crd_2.2.1@prof-3',
85
+ 'hl7.fhir.us.davinci-crd_2.2.1@prof-6',
86
+ 'hl7.fhir.us.davinci-crd_2.2.1@prof-9',
87
+ 'hl7.fhir.us.davinci-crd_2.2.1@prof-10',
88
+ 'hl7.fhir.us.davinci-crd_2.2.1@prof-11',
89
+ 'hl7.fhir.us.davinci-crd_2.2.1@prof-12')
90
+ end
91
+ test from: :crd_v221_hook_request_requested_version
92
+ test from: :crd_v221_hook_request_prefetch_profiles
93
+ test from: :crd_v221_hook_request_prefetch_complete
94
+ test from: :crd_v221_hook_request_coverage_verification
95
+ test from: :crd_v221_hook_data_fetch_verification
96
+ test from: :crd_v221_hook_request_granted_scopes
97
+ test from: :crd_v221_hook_request_secured_transport
98
+ end
99
+
100
+ group do
101
+ title 'Response Handling'
102
+
103
+ test from: :crd_v221_inferno_response_validation
104
+ test from: :crd_v221_card_display_attest_test
105
+ end
106
+ end
107
+ end
108
+ 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_conformance_test'
7
+ require_relative 'verify_request/hook_request_requested_version_test'
8
+ require_relative 'verify_request/hook_request_prefetch_profiles_test'
9
+ require_relative 'verify_request/hook_request_prefetch_complete_test'
10
+ require_relative 'verify_request/hook_request_granted_scopes_test'
11
+ require_relative 'verify_request/hook_request_secured_transport_test'
12
+ require_relative 'verify_request/hook_request_coverage_verification_test'
13
+ require_relative 'verify_request/hook_request_data_fetch_verification_test'
14
+ require_relative 'verify_response/inferno_response_validation'
15
+ require_relative 'verify_response/client_display_cards_attest'
16
+ require_relative 'verify_response/hook_response_support_coverage_information_test'
17
+
18
+ module DaVinciCRDTestKit
19
+ module V221
20
+ class ClientOrderSignGroup < Inferno::TestGroup
21
+ title 'order-sign'
22
+ id :crd_v221_client_order_sign
23
+ description <<~DESCRIPTION
24
+ The [order-sign](https://cds-hooks.hl7.org/hooks/STU1/order-sign.html) hook fires
25
+ when a clinician is ready to sign one or more orders for a patient (including orders
26
+ for medications, procedures, labs and other orders). The CRD IG places [additional constraints on the use
27
+ of the order-sign hook](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/hooks.html#order-sign),
28
+ including the profiles that resources in each request must conform to.
29
+
30
+ Inferno's simulated `order-sign` hook endpoints are available at:
31
+ - Complete Prefetch: `#{ClientURLs.base_url}#{ORDER_SIGN_PATH}`
32
+ - Subset Prefetch: `#{ClientURLs.base_url}#{ORDER_SIGN_PREFETCH_SUBSET_PATH}`
33
+ DESCRIPTION
34
+ run_as_group
35
+
36
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.2.1@hook-2-A', 'hl7.fhir.us.davinci-crd_2.2.1@hook-2-B'
37
+
38
+ input_order :order_sign_response_approach,
39
+ :order_sign_selected_response_types,
40
+ :order_sign_custom_response_template
41
+
42
+ config(
43
+ inputs: {
44
+ auth_token_headers_json: { name: :order_sign_auth_token_headers_json },
45
+ auth_tokens: { name: :order_sign_auth_tokens },
46
+ auth_tokens_jwk_json: { name: :order_sign_auth_tokens_jwk_json },
47
+ client_access_token: { name: :order_sign_client_access_token },
48
+ client_fhir_server: { name: :order_sign_client_fhir_server },
49
+ crd_jwks_keys_json: { name: :order_sign_crd_jwks_keys_json },
50
+ custom_response_template: { name: :order_sign_custom_response_template },
51
+ selected_response_types: { name: :order_sign_selected_response_types }
52
+ },
53
+ outputs: {
54
+ auth_token_headers_json: { name: :order_sign_auth_token_headers_json },
55
+ auth_token_payloads_json: { name: :order_sign_auth_token_payloads_json },
56
+ auth_tokens: { name: :order_sign_auth_tokens },
57
+ auth_tokens_jwk_json: { name: :order_sign_auth_tokens_jwk_json },
58
+ client_access_token: { name: :order_sign_client_access_token },
59
+ client_fhir_server: { name: :order_sign_client_fhir_server },
60
+ crd_jwks_keys_json: { name: :order_sign_crd_jwks_keys_json }
61
+ },
62
+ options: {
63
+ hook_name: 'order-sign'
64
+ }
65
+ )
66
+
67
+ group do
68
+ title 'Interaction'
69
+ test from: :crd_v221_order_sign_request
70
+ end
71
+
72
+ group do
73
+ title 'Authorization'
74
+ test from: :crd_v221_decode_auth_token
75
+ test from: :crd_v221_retrieve_jwks
76
+ test from: :crd_v221_token_header
77
+ test from: :crd_v221_token_payload
78
+ end
79
+
80
+ group do
81
+ title 'Requests'
82
+ test from: :crd_v221_hook_request_conformance do
83
+ verifies_requirements(*HookRequestConformanceTest.verifies_requirements,
84
+ 'hl7.fhir.us.davinci-crd_2.2.1@hook-37',
85
+ 'hl7.fhir.us.davinci-crd_2.2.1@prof-3',
86
+ 'hl7.fhir.us.davinci-crd_2.2.1@prof-6',
87
+ 'hl7.fhir.us.davinci-crd_2.2.1@prof-9',
88
+ 'hl7.fhir.us.davinci-crd_2.2.1@prof-10',
89
+ 'hl7.fhir.us.davinci-crd_2.2.1@prof-11',
90
+ 'hl7.fhir.us.davinci-crd_2.2.1@prof-12')
91
+ end
92
+ test from: :crd_v221_hook_request_requested_version
93
+ test from: :crd_v221_hook_request_prefetch_profiles
94
+ test from: :crd_v221_hook_request_prefetch_complete
95
+ test from: :crd_v221_hook_request_coverage_verification
96
+ test from: :crd_v221_hook_data_fetch_verification
97
+ test from: :crd_v221_hook_request_granted_scopes
98
+ test from: :crd_v221_hook_request_secured_transport
99
+ end
100
+
101
+ group do
102
+ title 'Response Handling'
103
+
104
+ test from: :crd_v221_inferno_response_validation
105
+ test from: :crd_v221_card_display_attest_test
106
+ test from: :crd_v221_client_hook_response_support_coverage_information do
107
+ title 'Client supports the Coverage Information response type on the order-sign hook'
108
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.2.1@hook-39'
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
@@ -0,0 +1,33 @@
1
+ require_relative 'registration/client_registration_verification_test'
2
+ require_relative 'registration/client_service_registration_attestation_test'
3
+
4
+ module DaVinciCRDTestKit
5
+ module V221
6
+ class CRDClientRegistrationGroup < Inferno::TestGroup
7
+ id :crd_v221_client_registration
8
+ title 'Registration'
9
+ description %(
10
+ Before hook invocations can be made, the client tested in this session
11
+ must be registered with and trusted by Inferno's simulated CRD server
12
+ and vice-versa. Tests in this group confirm the registration of the partner
13
+ system on both ends.
14
+
15
+ Inferno simulates two CRD discovery endpoints for the client to connect to:
16
+ - Discovery endpoint for services requesting the complete [standard prefetch data set](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/foundation.html#standard-prefetch):
17
+ `#{ClientURLs.discovery_url}`
18
+ - Discovery endpoint for services requesting the a subset of the [standard prefetch data set](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/foundation.html#standard-prefetch):
19
+ `#{ClientURLs.prefetch_subset_discovery_url}`
20
+
21
+ This group must be run before any other tests in the "Hook Invocation" group because inputs
22
+ provided to this group will be used by Inferno for the remainder of the tests
23
+ to identify client requests and verify behavior. The inputs will appear as locked and
24
+ unchangeable on these subsequent tests. If changes to these values are needed,
25
+ re-run this group and provide the corrected input values.
26
+ )
27
+ run_as_group
28
+
29
+ test from: :crd_v221_client_registration_verification
30
+ test from: :crd_v221_client_service_registration_attestation
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,27 @@
1
+ require_relative '../client_base_urls'
2
+
3
+ module DaVinciCRDTestKit
4
+ module V221
5
+ module ClientURLs
6
+ include ClientBaseURLs
7
+
8
+ SUITE_ID = 'crd_client_v221'.freeze
9
+
10
+ def self.base_url
11
+ "#{Inferno::Application['base_url']}/custom/#{SUITE_ID}"
12
+ end
13
+
14
+ def self.discovery_url
15
+ "#{base_url}#{DaVinciCRDTestKit::DISCOVERY_PATH}"
16
+ end
17
+
18
+ def self.prefetch_subset_discovery_url
19
+ "#{base_url}#{DaVinciCRDTestKit::PREFETCH_DISCOVERY_PATH}"
20
+ end
21
+
22
+ def suite_id
23
+ SUITE_ID
24
+ end
25
+ end
26
+ end
27
+ end