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,219 @@
1
+ require_relative '../../cross_suite/tags'
2
+ require_relative 'interaction/server_invoke_hook_test'
3
+ require_relative 'verify_request/service_request_required_fields_validation_test'
4
+ require_relative 'verify_request/service_request_optional_fields_validation_test'
5
+ require_relative 'verify_request/service_request_context_validation_test'
6
+ require_relative 'verify_response/service_response_validation_test'
7
+ require_relative 'verify_response/card_optional_fields_validation_test'
8
+ require_relative 'verify_response/external_reference_card_validation_test'
9
+ require_relative 'verify_response/launch_smart_app_card_validation_test'
10
+ require_relative 'verify_response/instructions_card_received_test'
11
+ require_relative 'verify_response/propose_alternate_request_card_validation_test'
12
+ require_relative 'verify_response/additional_orders_validation_test'
13
+ require_relative 'verify_response/form_completion_response_validation_test'
14
+ require_relative 'verify_response/create_or_update_coverage_info_response_validation_test'
15
+ require_relative 'verify_response/coverage_info_configuration_test'
16
+ require_relative 'verify_response/unknown_configuration_test'
17
+ require_relative 'verify_response/unknown_context_test'
18
+ require_relative 'verify_response/unknown_cds_hooks_elements_test'
19
+
20
+ module DaVinciCRDTestKit
21
+ module V221
22
+ class ServerOrderSelectGroup < Inferno::TestGroup
23
+ title 'order-select'
24
+ id :crd_v221_server_order_select
25
+ description %(
26
+ This group of tests invokes the order-select hook and ensures that
27
+ the user-provided requests are valid as per the requirements described
28
+ in the [CRD IG section on order-select hook](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#order-select)
29
+ and the [CDS Hooks specification section on order-select context](https://cds-hooks.hl7.org/hooks/order-select/2023SepSTU1Ballot/order-select/).
30
+ It also ensures that the contents of the server's response are valid as per the requirements described in
31
+ the [CRD IG section on order-select hook](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#order-select)
32
+ and the [CDS Hooks section on CDS Service Response](https://cds-hooks.hl7.org/2.0/#cds-service-response).
33
+
34
+ This group includes tests to validate the following CRD response types:
35
+ - [additional orders as companions/prerequisites](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#identify-additional-orders-as-companionsprerequisites-for-current-order)\
36
+ - optional
37
+ - [Coverage Information](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#coverage-information) - optional
38
+ - [Create or update coverage information](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#create-or-update-coverage-information)\
39
+ - optional
40
+ - [External Reference](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#external-reference) - optional
41
+ - [Instructions](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#instructions) - optional
42
+ - [Launch SMART application](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#launch-smart-application) -
43
+ optional
44
+ - [Propose alternate request](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#propose-alternate-request) -
45
+ optional
46
+ - [Request form completion](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#request-form-completion) -
47
+ optional
48
+ )
49
+ # verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@168', 'hl7.fhir.us.davinci-crd_2.0.1@208'
50
+
51
+ config options: { hook_name: ORDER_SELECT_TAG }
52
+ run_as_group
53
+
54
+ group do
55
+ title 'Interaction'
56
+
57
+ test from: :crd_v221_server_invoke_hook_test,
58
+ config: {
59
+ inputs: {
60
+ service_ids: {
61
+ name: :order_select_service_ids,
62
+ title: 'Service id for the service that implements the `order-select` hook'
63
+ },
64
+ service_request_bodies: {
65
+ name: :order_select_request_bodies,
66
+ title: 'Request body or bodies for invoking the `order-select` hook'
67
+ }
68
+ }
69
+ }
70
+ end
71
+
72
+ group do
73
+ title 'Requests'
74
+
75
+ test from: :crd_v221_service_request_required_fields_validation,
76
+ config: {
77
+ outputs: {
78
+ contexts: {
79
+ name: :order_select_contexts
80
+ }
81
+ }
82
+ }
83
+ test from: :crd_v221_service_request_context_validation,
84
+ config: {
85
+ inputs: {
86
+ contexts: {
87
+ name: :order_select_contexts
88
+ }
89
+ }
90
+ }
91
+ test from: :crd_v221_service_request_optional_fields_validation
92
+ end
93
+
94
+ group do
95
+ title 'Responses'
96
+
97
+ test from: :crd_v221_service_response_validation,
98
+ config: {
99
+ outputs: {
100
+ valid_cards: {
101
+ name: :order_select_valid_cards
102
+ },
103
+ valid_system_actions: {
104
+ name: :order_select_valid_system_actions
105
+ }
106
+ }
107
+ }
108
+ test from: :crd_v221_card_optional_fields_validation,
109
+ config: {
110
+ inputs: {
111
+ valid_cards: {
112
+ name: :order_select_valid_cards
113
+ }
114
+ },
115
+ outputs: {
116
+ valid_cards_with_links: {
117
+ name: :order_select_valid_cards_with_links
118
+ },
119
+ valid_cards_with_suggestions: {
120
+ name: :order_select_valid_cards_with_suggestions
121
+ }
122
+ }
123
+ }
124
+ test from: :crd_v221_external_reference_card_validation,
125
+ config: {
126
+ inputs: {
127
+ valid_cards_with_links: {
128
+ name: :order_select_valid_cards_with_links
129
+ }
130
+ }
131
+ }
132
+ test from: :crd_v221_launch_smart_app_card_validation,
133
+ config: {
134
+ inputs: {
135
+ valid_cards_with_links: {
136
+ name: :order_select_valid_cards_with_links
137
+ }
138
+ }
139
+ }
140
+ test from: :crd_v221_valid_instructions_card_received,
141
+ config: {
142
+ inputs: {
143
+ valid_cards: {
144
+ name: :order_select_valid_cards
145
+ }
146
+ }
147
+ }
148
+ test from: :crd_v221_coverage_info_system_action_received,
149
+ optional: true,
150
+ config: {
151
+ inputs: {
152
+ valid_system_actions: {
153
+ name: :order_select_valid_system_actions
154
+ }
155
+ },
156
+ outputs: {
157
+ coverage_info: {
158
+ name: :order_select_coverage_info
159
+ }
160
+ }
161
+ }
162
+ test from: :crd_v221_coverage_info_system_action_validation,
163
+ optional: true,
164
+ config: {
165
+ inputs: {
166
+ coverage_info: {
167
+ name: :order_select_coverage_info
168
+ }
169
+ }
170
+ }
171
+ test from: :crd_v221_propose_alternate_request_card_validation,
172
+ config: {
173
+ inputs: {
174
+ valid_cards_with_suggestions: {
175
+ name: :order_select_valid_cards_with_suggestions
176
+ },
177
+ contexts: {
178
+ name: :order_select_contexts
179
+ }
180
+ }
181
+ }
182
+ test from: :crd_v221_additional_orders_card_validation,
183
+ config: {
184
+ inputs: {
185
+ valid_cards_with_suggestions: {
186
+ name: :order_select_valid_cards_with_suggestions
187
+ }
188
+ }
189
+ }
190
+ test from: :crd_v221_request_form_completion_response_validation,
191
+ config: {
192
+ inputs: {
193
+ valid_system_actions: {
194
+ name: :order_select_valid_system_actions
195
+ },
196
+ valid_cards_with_suggestions: {
197
+ name: :order_select_valid_cards_with_suggestions
198
+ }
199
+ }
200
+ }
201
+ test from: :crd_v221_create_or_update_coverage_info_response_validation,
202
+ config: {
203
+ inputs: {
204
+ valid_system_actions: {
205
+ name: :order_select_valid_system_actions
206
+ },
207
+ valid_cards_with_suggestions: {
208
+ name: :order_select_valid_cards_with_suggestions
209
+ }
210
+ }
211
+ }
212
+ test from: :crd_v221_coverage_info_configuration
213
+ test from: :crd_v221_unknown_configuration
214
+ test from: :crd_v221_unknown_context
215
+ test from: :crd_v221_unknown_cds_hooks_elements
216
+ end
217
+ end
218
+ end
219
+ end
@@ -0,0 +1,241 @@
1
+ require_relative '../../cross_suite/tags'
2
+ require_relative 'interaction/server_invoke_hook_test'
3
+ require_relative 'verify_request/service_request_required_fields_validation_test'
4
+ require_relative 'verify_request/service_request_optional_fields_validation_test'
5
+ require_relative 'verify_request/service_request_context_validation_test'
6
+ require_relative 'verify_response/service_response_validation_test'
7
+ require_relative 'verify_response/card_optional_fields_validation_test'
8
+ require_relative 'verify_response/external_reference_card_validation_test'
9
+ require_relative 'verify_response/launch_smart_app_card_validation_test'
10
+ require_relative 'verify_response/instructions_card_received_test'
11
+ require_relative 'verify_response/coverage_information_system_action_received_test'
12
+ require_relative 'verify_response/coverage_information_system_action_validation_test'
13
+ require_relative 'verify_response/coverage_info_configuration_test'
14
+ require_relative 'verify_response/propose_alternate_request_card_validation_test'
15
+ require_relative 'verify_response/additional_orders_validation_test'
16
+ require_relative 'verify_response/form_completion_response_validation_test'
17
+ require_relative 'verify_response/create_or_update_coverage_info_response_validation_test'
18
+ require_relative 'verify_response/all_responses_include_coverage_information_test'
19
+ require_relative 'verify_response/unknown_configuration_test'
20
+ require_relative 'verify_response/unknown_context_test'
21
+ require_relative 'verify_response/unknown_cds_hooks_elements_test'
22
+
23
+ module DaVinciCRDTestKit
24
+ module V221
25
+ class ServerOrderSignGroup < Inferno::TestGroup
26
+ title 'order-sign'
27
+ id :crd_v221_server_order_sign
28
+ description %(
29
+ This group of tests invokes the order-sign hook and ensures that
30
+ the user-provided requests are valid as per the requirements described
31
+ in the [CRD IG section on order-sign hook](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#order-sign)
32
+ and the [CDS Hooks specification section on order-sign context](https://cds-hooks.hl7.org/hooks/order-sign/2023SepSTU1Ballot/order-sign/).
33
+ It also ensures that the contents of the server's response are valid as per the requirements described in
34
+ the [CRD IG section on order-sign hook](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#order-sign)
35
+ and the [CDS Hooks section on CDS Service Response](https://cds-hooks.hl7.org/2.0/#cds-service-response).
36
+
37
+ The [CRD IG section on order-sign hook](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#order-sign)
38
+ states that "servers SHALL, at minimum, support returning and processing the Coverage Information
39
+ system action for all invocations of this hook."
40
+
41
+ This group includes tests to validate the following CRD response types:
42
+ - [additional orders as companions/prerequisites](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#identify-additional-orders-as-companionsprerequisites-for-current-order)\
43
+ - optional
44
+ - [Coverage Information](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#coverage-information)
45
+ - [Create or update coverage information](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#create-or-update-coverage-information)\
46
+ - optional
47
+ - [External Reference](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#external-reference) - optional
48
+ - [Instructions](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#instructions) - optional
49
+ - [Launch SMART application](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#launch-smart-application) -
50
+ optional
51
+ - [Propose alternate request](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#propose-alternate-request) -
52
+ optional
53
+ - [Request form completion](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#request-form-completion) -
54
+ optional
55
+ )
56
+ # verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@164', 'hl7.fhir.us.davinci-crd_2.0.1@168',
57
+ # 'hl7.fhir.us.davinci-crd_2.0.1@217', 'hl7.fhir.us.davinci-crd_2.0.1@226'
58
+
59
+ config options: { hook_name: ORDER_SIGN_TAG }
60
+ run_as_group
61
+
62
+ group do
63
+ title 'Interaction'
64
+
65
+ test from: :crd_v221_server_invoke_hook_test,
66
+ config: {
67
+ inputs: {
68
+ service_ids: {
69
+ name: :order_sign_service_ids,
70
+ title: 'Service id for the service that implements the `order-sign` hook'
71
+ },
72
+ service_request_bodies: {
73
+ name: :order_sign_request_bodies,
74
+ title: 'Request body or bodies for invoking the `order-sign` hook'
75
+ }
76
+ }
77
+ }
78
+ end
79
+
80
+ group do
81
+ title 'Requests'
82
+
83
+ test from: :crd_v221_service_request_required_fields_validation,
84
+ config: {
85
+ outputs: {
86
+ contexts: {
87
+ name: :order_sign_contexts
88
+ }
89
+ }
90
+ }
91
+ test from: :crd_v221_service_request_context_validation,
92
+ config: {
93
+ inputs: {
94
+ contexts: {
95
+ name: :order_sign_contexts
96
+ }
97
+ }
98
+ }
99
+ test from: :crd_v221_service_request_optional_fields_validation
100
+ end
101
+
102
+ group do
103
+ title 'Responses'
104
+
105
+ test from: :crd_v221_service_response_validation,
106
+ config: {
107
+ outputs: {
108
+ valid_cards: {
109
+ name: :order_sign_valid_cards
110
+ },
111
+ valid_system_actions: {
112
+ name: :order_sign_valid_system_actions
113
+ }
114
+ }
115
+ }
116
+ test from: :crd_v221_card_optional_fields_validation,
117
+ config: {
118
+ inputs: {
119
+ valid_cards: {
120
+ name: :order_sign_valid_cards
121
+ }
122
+ },
123
+ outputs: {
124
+ valid_cards_with_links: {
125
+ name: :order_sign_valid_cards_with_links
126
+ },
127
+ valid_cards_with_suggestions: {
128
+ name: :order_sign_valid_cards_with_suggestions
129
+ }
130
+ }
131
+ }
132
+ test from: :crd_v221_external_reference_card_validation,
133
+ config: {
134
+ inputs: {
135
+ valid_cards_with_links: {
136
+ name: :order_sign_valid_cards_with_links
137
+ }
138
+ }
139
+ }
140
+ test from: :crd_v221_launch_smart_app_card_validation,
141
+ config: {
142
+ inputs: {
143
+ valid_cards_with_links: {
144
+ name: :order_sign_valid_cards_with_links
145
+ }
146
+ }
147
+ }
148
+ test from: :crd_v221_valid_instructions_card_received,
149
+ config: {
150
+ inputs: {
151
+ valid_cards: {
152
+ name: :order_sign_valid_cards
153
+ }
154
+ }
155
+ }
156
+ test from: :crd_v221_coverage_info_system_action_received,
157
+ config: {
158
+ inputs: {
159
+ valid_system_actions: {
160
+ name: :order_sign_valid_system_actions
161
+ }
162
+ },
163
+ outputs: {
164
+ coverage_info: {
165
+ name: :order_sign_coverage_info
166
+ }
167
+ }
168
+ },
169
+ verifies_requirements: [
170
+ 'hl7.fhir.us.davinci-crd_2.2.1@resp-26'
171
+ ]
172
+ test from: :crd_v221_coverage_info_system_action_validation,
173
+ config: {
174
+ inputs: {
175
+ coverage_info: {
176
+ name: :order_sign_coverage_info
177
+ }
178
+ }
179
+ },
180
+ verifies_requirements: [
181
+ 'hl7.fhir.us.davinci-crd_2.2.1@resp-25'
182
+ ]
183
+ test from: :crd_v221_all_responses_include_coverage_information,
184
+ verifies_requirements: [
185
+ 'hl7.fhir.us.davinci-crd_2.2.1@hook-16',
186
+ 'hl7.fhir.us.davinci-crd_2.2.1@resp-28',
187
+ # This requirement has a typo. It says 'order-select' but it
188
+ # should be 'order-sign'.
189
+ # https://jira.hl7.org/browse/FHIR-56985
190
+ 'hl7.fhir.us.davinci-crd_2.2.1@hook-39',
191
+ 'hl7.fhir.us.davinci-crd_2.2.1@resp-29'
192
+ ]
193
+ test from: :crd_v221_propose_alternate_request_card_validation,
194
+ config: {
195
+ inputs: {
196
+ valid_cards_with_suggestions: {
197
+ name: :order_sign_valid_cards_with_suggestions
198
+ },
199
+ contexts: {
200
+ name: :order_sign_contexts
201
+ }
202
+ }
203
+ }
204
+ test from: :crd_v221_additional_orders_card_validation,
205
+ config: {
206
+ inputs: {
207
+ valid_cards_with_suggestions: {
208
+ name: :order_sign_valid_cards_with_suggestions
209
+ }
210
+ }
211
+ }
212
+ test from: :crd_v221_request_form_completion_response_validation,
213
+ config: {
214
+ inputs: {
215
+ valid_system_actions: {
216
+ name: :order_sign_valid_system_actions
217
+ },
218
+ valid_cards_with_suggestions: {
219
+ name: :order_sign_valid_cards_with_suggestions
220
+ }
221
+ }
222
+ }
223
+ test from: :crd_v221_create_or_update_coverage_info_response_validation,
224
+ config: {
225
+ inputs: {
226
+ valid_system_actions: {
227
+ name: :order_sign_valid_system_actions
228
+ },
229
+ valid_cards_with_suggestions: {
230
+ name: :order_sign_valid_cards_with_suggestions
231
+ }
232
+ }
233
+ }
234
+ test from: :crd_v221_coverage_info_configuration
235
+ test from: :crd_v221_unknown_configuration
236
+ test from: :crd_v221_unknown_context
237
+ test from: :crd_v221_unknown_cds_hooks_elements
238
+ end
239
+ end
240
+ end
241
+ end
@@ -0,0 +1,30 @@
1
+ require_relative 'must_support/coverage_information_system_action_across_hooks_validation_test'
2
+ require_relative 'must_support/coverage_information_must_support_test'
3
+ require_relative 'verify_response/verify_response_without_billing_options_test'
4
+ require_relative 'must_support/supported_us_core_versions_test'
5
+ require_relative 'verify_response/verify_response_without_configuration_test'
6
+ require_relative 'verify_request/service_request_no_custom_extensions_test'
7
+
8
+ module DaVinciCRDTestKit
9
+ module V221
10
+ class ServerRequiredCardResponseValidationGroup < Inferno::TestGroup
11
+ title 'Cross-Hook Response Validation'
12
+ description %(
13
+ This group contains tests to verify the behavior of the server responses
14
+ across all hooks.
15
+ )
16
+ # verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@247', 'hl7.fhir.us.davinci-crd_2.0.1@248',
17
+ # 'hl7.fhir.us.davinci-crd_2.0.1@249'
18
+
19
+ id :crd_v221_server_required_card_response_validation
20
+ run_as_group
21
+
22
+ test from: :crd_v221_coverage_info_system_action_across_hooks_validation
23
+ test from: :crd_v221_coverage_information_must_support
24
+ test from: :verify_response_without_billing_options
25
+ test from: :verify_response_without_configuration
26
+ test from: :crd_v221_supported_us_core_versions
27
+ test from: :crd_v221_service_request_no_custom_extensions
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,13 @@
1
+ require_relative '../server_base_urls'
2
+
3
+ module DaVinciCRDTestKit
4
+ module V221
5
+ module ServerURLs
6
+ include ServerBaseURLs
7
+
8
+ def suite_id
9
+ DaVinciCRDTestKit::V221::CRDServerSuite.id
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,30 @@
1
+ require_relative '../../server_hook_request_validation'
2
+ require_relative '../../server_test_helper'
3
+ require_relative '../../server_hook_helper'
4
+
5
+ module DaVinciCRDTestKit
6
+ module V221
7
+ class ServiceRequestContextValidationTest < Inferno::Test
8
+ include DaVinciCRDTestKit::ServerHookRequestValidation
9
+ include DaVinciCRDTestKit::ServerTestHelper
10
+ include DaVinciCRDTestKit::ServerHookHelper
11
+
12
+ title 'Service request contexts are valid'
13
+ id :crd_v221_service_request_context_validation
14
+ description %(
15
+ This test verifies that all service requests `context` field is valid and contains all the
16
+ required fields.
17
+ )
18
+ input :contexts, :invoked_hook
19
+
20
+ run do
21
+ parsed_contexts = parse_json(contexts)
22
+ parsed_contexts.each do |context|
23
+ hook_request_context_check(context, invoked_hook, ig_version: 'v221')
24
+ end
25
+
26
+ no_error_validation('Some contexts are not valid.')
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,120 @@
1
+ require_relative '../../resource_extractor'
2
+ require_relative '../../server_hook_helper'
3
+
4
+ module DaVinciCRDTestKit
5
+ module V221
6
+ class ServiceRequestNoCustomExtensionsTest < Inferno::Test
7
+ include DaVinciCRDTestKit::ResourceExtractor
8
+ include DaVinciCRDTestKit::ServerHookHelper
9
+
10
+ US_CORE_EXTENSION_URLS = [
11
+ 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-birthsex',
12
+ 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-direct',
13
+ 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity',
14
+ 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-race',
15
+ 'http://hl7.org/fhir/us/core/StructureDefinition/uscdi-requirement',
16
+ 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-extension-questionnaire-uri',
17
+ 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-genderIdentity',
18
+ 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-jurisdiction',
19
+ 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-sex',
20
+ 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-tribal-affiliation',
21
+ 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-medication-adherence',
22
+ 'http://hl7.org/fhir/StructureDefinition/condition-assertedDate'
23
+ ].freeze
24
+
25
+ CRD_EXTENSION_URLS = [
26
+ 'http://hl7.org/fhir/us/davinci-crd/StructureDefinition/ext-coverage-information',
27
+ 'http://hl7.org/fhir/us/davinci-crd/StructureDefinition/ext-billing-options',
28
+ 'http://hl7.org/fhir/us/davinci-crd/StructureDefinition/ext-request-category',
29
+ 'http://hl7.org/fhir/StructureDefinition/codeOptions',
30
+ 'http://hl7.org/fhir/StructureDefinition/alternate-reference',
31
+ 'http://hl7.org/fhir/5.0/StructureDefinition/extension-CommunicationRequest.payload.content',
32
+ 'http://hl7.org/fhir/5.0/StructureDefinition/extension-Task.requestedPeriod',
33
+ 'http://hl7.org/fhir/5.0/StructureDefinition/extension-Task.requestedPerformer',
34
+ 'http://hl7.org/fhir/5.0/StructureDefinition/extension-Task.performer',
35
+ 'http://hl7.org/fhir/StructureDefinition/request-doNotPerform',
36
+ 'http://hl7.org/fhir/5.0/StructureDefinition/extension-Task.input.value',
37
+ 'http://hl7.org/fhir/5.0/StructureDefinition/extension-Task.output.value',
38
+ 'http://hl7.org/fhir/5.0/StructureDefinition/extension-Task.statusReason'
39
+ ].freeze
40
+
41
+ HREX_EXTENSION_URLS = [
42
+ 'http://hl7.org/fhir/us/davinci-hrex/StructureDefinition/extension-CoverageDavinciWellknownLocation'
43
+ ].freeze
44
+
45
+ VALID_EXTENSION_URLS = (US_CORE_EXTENSION_URLS + CRD_EXTENSION_URLS + HREX_EXTENSION_URLS).freeze
46
+
47
+ title 'Server does not require custom extensions'
48
+ id :crd_v221_service_request_no_custom_extensions
49
+ description %(
50
+ This test verifies that the server is capable of responding to a client
51
+ without the use of any custom extensions. It inspects each successful
52
+ hook call, and if it finds one which doesn't use any extensions not
53
+ defined by US Core, CRD, or HREX it passes.
54
+ )
55
+
56
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.2.1@conf-7',
57
+ 'hl7.fhir.us.davinci-crd_2.2.1@hook-22'
58
+
59
+ run do
60
+ ALL_HOOK_TAGS.each do |tag|
61
+ load_tagged_requests(tag)
62
+ end
63
+
64
+ skip_if requests.blank?, 'No requests were made in a previous test as expected.'
65
+
66
+ successful_requests = requests.select { |request| request.status == 200 }
67
+
68
+ skip_if successful_requests.empty?, 'All service requests were unsuccessful.'
69
+
70
+ embedded_resources =
71
+ successful_requests
72
+ .map { |request| resources_from_request(request) }
73
+ .reject(&:blank?)
74
+
75
+ skip_if embedded_resources.blank?,
76
+ 'No embedded FHIR resources were found in successful hook requests.'
77
+
78
+ request_with_no_custom_extensions =
79
+ embedded_resources.any? { |resources| resources.all? { |resource| no_custom_extensions? resource } }
80
+
81
+ pass_if request_with_no_custom_extensions
82
+
83
+ custom_extensions_string =
84
+ embedded_resources
85
+ .flatten
86
+ .flat_map { |resource| custom_extensions(resource) }
87
+ .uniq
88
+ .map { |extension| "\n- `#{extension}`" }
89
+ .join
90
+
91
+ skip 'No requests were made without custom extensions. The following custom extensions were found: ' \
92
+ "#{custom_extensions_string}"
93
+ end
94
+
95
+ def no_custom_extensions?(resource)
96
+ resource.each_element do |value, _metadata, path|
97
+ next unless value.is_a? FHIR::Extension
98
+
99
+ next if path.scan('extension').length > 1
100
+
101
+ return false unless VALID_EXTENSION_URLS.include? value.url
102
+ end
103
+
104
+ true
105
+ end
106
+
107
+ def custom_extensions(resource)
108
+ [].tap do |custom_extensions|
109
+ resource.each_element do |value, _metadata, path|
110
+ next unless value.is_a? FHIR::Extension
111
+
112
+ next if path.scan('extension').length > 1
113
+
114
+ custom_extensions << value.url unless VALID_EXTENSION_URLS.include? value.url
115
+ end
116
+ end
117
+ end
118
+ end
119
+ end
120
+ end