davinci_crd_test_kit 0.12.2 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (341) hide show
  1. checksums.yaml +4 -4
  2. data/config/presets/inferno_crd_client_suite.json.erb +20 -14
  3. data/config/presets/inferno_crd_client_suite_prefetch_subset_v221.json.erb +125 -0
  4. data/config/presets/inferno_crd_client_suite_v221.json.erb +124 -0
  5. data/config/presets/inferno_crd_server_suite.json.erb +59 -2
  6. data/config/presets/inferno_crd_server_suite_v221.json.erb +94 -0
  7. data/config/presets/ri_crd_request_generator.json_v221.json.erb +13 -0
  8. data/config/presets/ri_crd_server.json.erb +19 -19
  9. data/lib/davinci_crd_test_kit/client/client_base_urls.rb +80 -0
  10. data/lib/davinci_crd_test_kit/{client_hook_request_validation.rb → client/client_hook_request_validation.rb} +1 -1
  11. data/lib/davinci_crd_test_kit/client/crd_client_options.rb +30 -0
  12. data/lib/davinci_crd_test_kit/client/endpoints/cds_services_discovery_handler.rb +34 -0
  13. data/lib/davinci_crd_test_kit/client/endpoints/custom_service_response.rb +342 -0
  14. data/lib/davinci_crd_test_kit/client/endpoints/gather_response_generation_data.rb +410 -0
  15. data/lib/davinci_crd_test_kit/client/endpoints/hook_request_endpoint.rb +233 -0
  16. data/lib/davinci_crd_test_kit/{mock_service_response.rb → client/endpoints/mock_service_response.rb} +165 -59
  17. data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/companions_prerequisites.json +1 -0
  18. data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/create_update_coverage_information.json +3 -2
  19. data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/launch_smart_app.json +8 -1
  20. data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/propose_alternate_request.json +1 -0
  21. data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/request_form_completion.json +17 -16
  22. data/lib/davinci_crd_test_kit/client/multi_request_message_helper.rb +35 -0
  23. data/lib/davinci_crd_test_kit/client/tagged_request_load_helper.rb +38 -0
  24. data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_create_test.rb +43 -0
  25. data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_read_test.rb +43 -0
  26. data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_search_test.rb +234 -0
  27. data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_update_test.rb +43 -0
  28. data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_validation_test.rb +63 -0
  29. data/lib/davinci_crd_test_kit/client/v2.0.1/auth/decode_auth_token_test.rb +65 -0
  30. data/lib/davinci_crd_test_kit/client/v2.0.1/auth/retrieve_jwks_test.rb +109 -0
  31. data/lib/davinci_crd_test_kit/client/v2.0.1/auth/token_header_test.rb +70 -0
  32. data/lib/davinci_crd_test_kit/client/v2.0.1/auth/token_payload_test.rb +85 -0
  33. data/lib/davinci_crd_test_kit/{routes/cds-services.json → client/v2.0.1/cds-services-v201.json} +1 -1
  34. data/lib/davinci_crd_test_kit/client/v2.0.1/client_appointment_book_group.rb +108 -0
  35. data/lib/davinci_crd_test_kit/client/v2.0.1/client_card_must_support_group.rb +31 -0
  36. data/lib/davinci_crd_test_kit/client/v2.0.1/client_encounter_discharge_group.rb +105 -0
  37. data/lib/davinci_crd_test_kit/client/v2.0.1/client_encounter_start_group.rb +105 -0
  38. data/lib/davinci_crd_test_kit/client/v2.0.1/client_fhir_api_group.rb +790 -0
  39. data/lib/davinci_crd_test_kit/client/v2.0.1/client_hooks_group.rb +74 -0
  40. data/lib/davinci_crd_test_kit/client/v2.0.1/client_order_dispatch_group.rb +111 -0
  41. data/lib/davinci_crd_test_kit/client/v2.0.1/client_order_select_group.rb +116 -0
  42. data/lib/davinci_crd_test_kit/client/v2.0.1/client_order_sign_group.rb +113 -0
  43. data/lib/davinci_crd_test_kit/{client_registration_group.rb → client/v2.0.1/client_registration_group.rb} +12 -8
  44. data/lib/davinci_crd_test_kit/client/v2.0.1/client_urls.rb +13 -0
  45. data/lib/davinci_crd_test_kit/client/v2.0.1/crd_client_suite.rb +134 -0
  46. data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/appointment_book_receive_request_test.rb +129 -0
  47. data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/encounter_discharge_receive_request_test.rb +126 -0
  48. data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/encounter_start_receive_request_test.rb +126 -0
  49. data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/order_dispatch_receive_request_test.rb +138 -0
  50. data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/order_select_receive_request_test.rb +134 -0
  51. data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/order_sign_receive_request_test.rb +136 -0
  52. data/lib/davinci_crd_test_kit/client/v2.0.1/must_support/client_card_must_support_coverage_information.rb +93 -0
  53. data/lib/davinci_crd_test_kit/client/v2.0.1/must_support/client_card_must_support_external_reference.rb +62 -0
  54. data/lib/davinci_crd_test_kit/client/v2.0.1/must_support/client_card_must_support_instructions.rb +62 -0
  55. data/lib/davinci_crd_test_kit/client/v2.0.1/registration/client_registration_verification_test.rb +94 -0
  56. data/lib/davinci_crd_test_kit/client/v2.0.1/registration/client_service_registration_attestation_test.rb +40 -0
  57. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_fetched_data_test.rb +86 -0
  58. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_optional_fields_test.rb +63 -0
  59. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_prefetch_equals_queried_test.rb +96 -0
  60. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_required_fields_test.rb +55 -0
  61. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_valid_context_test.rb +70 -0
  62. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_valid_prefetch_test.rb +62 -0
  63. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_response/client_display_cards_attest.rb +83 -0
  64. data/lib/davinci_crd_test_kit/client/v2.0.1/verify_response/inferno_response_validation.rb +79 -0
  65. data/lib/davinci_crd_test_kit/client/v2.2.1/api/client_coverage_info_update_test.rb +212 -0
  66. data/lib/davinci_crd_test_kit/client/v2.2.1/api/client_crd_update_verification_group.rb +18 -0
  67. data/lib/davinci_crd_test_kit/client/v2.2.1/auth/decode_auth_token_test.rb +69 -0
  68. data/lib/davinci_crd_test_kit/client/v2.2.1/auth/retrieve_jwks_test.rb +120 -0
  69. data/lib/davinci_crd_test_kit/client/v2.2.1/auth/token_header_test.rb +92 -0
  70. data/lib/davinci_crd_test_kit/client/v2.2.1/auth/token_payload_test.rb +93 -0
  71. data/lib/davinci_crd_test_kit/client/v2.2.1/cds-services-prefetch-subset-v221.json +198 -0
  72. data/lib/davinci_crd_test_kit/client/v2.2.1/cds-services-v221.json +202 -0
  73. data/lib/davinci_crd_test_kit/client/v2.2.1/client_appointment_book_group.rb +102 -0
  74. data/lib/davinci_crd_test_kit/client/v2.2.1/client_cross_hook_group.rb +28 -0
  75. data/lib/davinci_crd_test_kit/client/v2.2.1/client_encounter_discharge_group.rb +96 -0
  76. data/lib/davinci_crd_test_kit/client/v2.2.1/client_encounter_start_group.rb +95 -0
  77. data/lib/davinci_crd_test_kit/client/v2.2.1/client_fhir_api_group.rb +88 -0
  78. data/lib/davinci_crd_test_kit/client/v2.2.1/client_hooks_group.rb +64 -0
  79. data/lib/davinci_crd_test_kit/client/v2.2.1/client_long_running_hook_group.rb +32 -0
  80. data/lib/davinci_crd_test_kit/client/v2.2.1/client_order_dispatch_group.rb +101 -0
  81. data/lib/davinci_crd_test_kit/client/v2.2.1/client_order_select_group.rb +102 -0
  82. data/lib/davinci_crd_test_kit/client/v2.2.1/client_order_sign_group.rb +107 -0
  83. data/lib/davinci_crd_test_kit/client/v2.2.1/client_registration_group.rb +27 -0
  84. data/lib/davinci_crd_test_kit/client/v2.2.1/client_urls.rb +27 -0
  85. data/lib/davinci_crd_test_kit/client/v2.2.1/crd_client_suite.rb +229 -0
  86. data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_card_must_support_coverage_information_test.rb +63 -0
  87. data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_fhirpath_collection_as_comma_delimited_string_test.rb +60 -0
  88. data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_hook_instances_unique_test.rb +45 -0
  89. data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_location_address_propagation_test.rb +135 -0
  90. data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_prefetch_complete_and_subset_test.rb +103 -0
  91. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/appointment_book_receive_request_test.rb +156 -0
  92. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/encounter_discharge_receive_request_test.rb +157 -0
  93. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/encounter_start_receive_request_test.rb +157 -0
  94. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/order_dispatch_receive_request_test.rb +165 -0
  95. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/order_select_receive_request_test.rb +165 -0
  96. data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/order_sign_receive_request_test.rb +165 -0
  97. data/lib/davinci_crd_test_kit/client/v2.2.1/long_running/client_long_running_receive_request_test.rb +64 -0
  98. data/lib/davinci_crd_test_kit/client/v2.2.1/long_running/client_skip_long_running_attestation_test.rb +49 -0
  99. data/lib/davinci_crd_test_kit/client/v2.2.1/registration/client_registration_verification_test.rb +161 -0
  100. data/lib/davinci_crd_test_kit/client/v2.2.1/registration/client_service_registration_attestation_test.rb +107 -0
  101. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_conformance_test.rb +47 -0
  102. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_coverage_verification_test.rb +152 -0
  103. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_data_fetch_verification_test.rb +55 -0
  104. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_granted_scopes_test.rb +123 -0
  105. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_prefetch_complete_test.rb +127 -0
  106. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_prefetch_profiles_test.rb +55 -0
  107. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_requested_version_test.rb +54 -0
  108. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_secured_transport_test.rb +48 -0
  109. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_response/client_display_cards_attest.rb +74 -0
  110. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_response/hook_response_support_coverage_information_test.rb +30 -0
  111. data/lib/davinci_crd_test_kit/client/v2.2.1/verify_response/inferno_response_validation.rb +77 -0
  112. data/lib/davinci_crd_test_kit/cross_suite/base_urls.rb +20 -0
  113. data/lib/davinci_crd_test_kit/cross_suite/cards_identification.rb +312 -0
  114. data/lib/davinci_crd_test_kit/{cards_validation.rb → cross_suite/cards_validation.rb} +104 -47
  115. data/lib/davinci_crd_test_kit/cross_suite/coverage-information_stu201_metadata.yml +27 -0
  116. data/lib/davinci_crd_test_kit/cross_suite/coverage-information_stu221_metadata.yml +60 -0
  117. data/lib/davinci_crd_test_kit/cross_suite/fhirpath_on_cds_request.rb +177 -0
  118. data/lib/davinci_crd_test_kit/{hook_request_field_validation.rb → cross_suite/hook_request_field_validation.rb} +282 -203
  119. data/lib/davinci_crd_test_kit/cross_suite/logical_models_override_helper.rb +220 -0
  120. data/lib/davinci_crd_test_kit/cross_suite/prefetch_completeness_checker.rb +462 -0
  121. data/lib/davinci_crd_test_kit/cross_suite/prefetch_contents_validation.rb +81 -0
  122. data/lib/davinci_crd_test_kit/cross_suite/prefetch_profile_validation.rb +48 -0
  123. data/lib/davinci_crd_test_kit/cross_suite/profiles_and_resource_types.rb +63 -0
  124. data/lib/davinci_crd_test_kit/cross_suite/replace_tokens.rb +38 -0
  125. data/lib/davinci_crd_test_kit/cross_suite/requests_logical_model_validation.rb +202 -0
  126. data/lib/davinci_crd_test_kit/cross_suite/response_logical_model_validation.rb +274 -0
  127. data/lib/davinci_crd_test_kit/{suggestion_actions_validation.rb → cross_suite/suggestion_actions_validation.rb} +70 -50
  128. data/lib/davinci_crd_test_kit/cross_suite/tags.rb +42 -0
  129. data/lib/davinci_crd_test_kit/metadata.rb +10 -44
  130. data/lib/davinci_crd_test_kit/requirements/cds-hooks-library_1.0.1_requirements.xlsx +0 -0
  131. data/lib/davinci_crd_test_kit/requirements/cds-hooks_2.0_requirements.xlsx +0 -0
  132. data/lib/davinci_crd_test_kit/requirements/cds-hooks_3.0.0-ballot_requirements.xlsx +0 -0
  133. data/lib/davinci_crd_test_kit/requirements/davinci_crd_test_kit_requirements.csv +742 -65
  134. data/lib/davinci_crd_test_kit/requirements/generated/crd_client_requirements_coverage.csv +279 -54
  135. data/lib/davinci_crd_test_kit/requirements/generated/crd_client_v221_requirements_coverage.csv +1430 -0
  136. data/lib/davinci_crd_test_kit/requirements/generated/crd_server_requirements_coverage.csv +36 -45
  137. data/lib/davinci_crd_test_kit/requirements/generated/crd_server_v221_requirements_coverage.csv +143 -0
  138. data/lib/davinci_crd_test_kit/requirements/hl7.fhir.us.davinci-crd_2.0.1_requirements.xlsx +0 -0
  139. data/lib/davinci_crd_test_kit/requirements/hl7.fhir.us.davinci-crd_2.2.1_requirements.xlsx +0 -0
  140. data/lib/davinci_crd_test_kit/server/endpoints/jwk_set_endpoint_handler.rb +13 -0
  141. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_create_endpoint.rb +23 -0
  142. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_delete_endpoint.rb +30 -0
  143. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_metadata_endpoint.rb +112 -0
  144. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_read_endpoint.rb +21 -0
  145. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_request_handler.rb +261 -0
  146. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_search_endpoint.rb +561 -0
  147. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_update_endpoint.rb +24 -0
  148. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/stress-test-Bundle.json +54687 -0
  149. data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr_endpoints.rb +95 -0
  150. data/lib/davinci_crd_test_kit/server/jobs/invoke_hook.rb +225 -0
  151. data/lib/davinci_crd_test_kit/{jwt_helper.rb → server/jwt_helper.rb} +1 -12
  152. data/lib/davinci_crd_test_kit/server/resource_extractor.rb +68 -0
  153. data/lib/davinci_crd_test_kit/server/server_abstract_invoke_hook_test.rb +165 -0
  154. data/lib/davinci_crd_test_kit/server/server_base_urls.rb +30 -0
  155. data/lib/davinci_crd_test_kit/{server_hook_helper.rb → server/server_hook_helper.rb} +1 -1
  156. data/lib/davinci_crd_test_kit/{server_hook_request_validation.rb → server/server_hook_request_validation.rb} +1 -1
  157. data/lib/davinci_crd_test_kit/{test_helper.rb → server/server_test_helper.rb} +7 -3
  158. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Appointment.yml +5 -0
  159. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/ClaimResponse.yml +5 -0
  160. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/CommunicationRequest.yml +5 -0
  161. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Coverage.yml +21 -0
  162. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Device.yml +5 -0
  163. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/DeviceRequest.yml +5 -0
  164. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Encounter.yml +7 -0
  165. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Location.yml +5 -0
  166. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/MedicationRequest.yml +5 -0
  167. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/NutritionOrder.yml +5 -0
  168. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Organization.yml +5 -0
  169. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Patient.yml +5 -0
  170. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Practitioner.yml +5 -0
  171. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/PractitionerRole.yml +40 -0
  172. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/ServiceRequest.yml +5 -0
  173. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Task.yml +5 -0
  174. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/VisionPrescription.yml +5 -0
  175. data/lib/davinci_crd_test_kit/server/v2.0.1/crd_server_suite.rb +99 -0
  176. data/lib/davinci_crd_test_kit/server/v2.0.1/discovery/discovery_endpoint_test.rb +90 -0
  177. data/lib/davinci_crd_test_kit/server/v2.0.1/discovery/discovery_services_validation_test.rb +67 -0
  178. data/lib/davinci_crd_test_kit/server/v2.0.1/interaction/server_invoke_hook_test.rb +12 -0
  179. data/lib/davinci_crd_test_kit/server/v2.0.1/must_support/coverage_information_system_action_across_hooks_validation_test.rb +34 -0
  180. data/lib/davinci_crd_test_kit/server/v2.0.1/must_support/external_reference_card_across_hooks_validation_test.rb +30 -0
  181. data/lib/davinci_crd_test_kit/server/v2.0.1/must_support/instructions_card_received_across_hooks_test.rb +27 -0
  182. data/lib/davinci_crd_test_kit/server/v2.0.1/server_appointment_book_group.rb +191 -0
  183. data/lib/davinci_crd_test_kit/server/v2.0.1/server_demonstrate_hook_response_group.rb +93 -0
  184. data/lib/davinci_crd_test_kit/server/v2.0.1/server_discovery_group.rb +62 -0
  185. data/lib/davinci_crd_test_kit/server/v2.0.1/server_encounter_discharge_group.rb +186 -0
  186. data/lib/davinci_crd_test_kit/server/v2.0.1/server_encounter_start_group.rb +186 -0
  187. data/lib/davinci_crd_test_kit/server/v2.0.1/server_hooks_group.rb +73 -0
  188. data/lib/davinci_crd_test_kit/server/v2.0.1/server_order_dispatch_group.rb +191 -0
  189. data/lib/davinci_crd_test_kit/server/v2.0.1/server_order_select_group.rb +211 -0
  190. data/lib/davinci_crd_test_kit/server/v2.0.1/server_order_sign_group.rb +216 -0
  191. data/lib/davinci_crd_test_kit/server/v2.0.1/server_required_card_response_validation_group.rb +28 -0
  192. data/lib/davinci_crd_test_kit/server/v2.0.1/server_urls.rb +13 -0
  193. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_request/service_request_context_validation_test.rb +30 -0
  194. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_request/service_request_optional_fields_validation_test.rb +39 -0
  195. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_request/service_request_required_fields_validation_test.rb +40 -0
  196. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/additional_orders_validation_test.rb +59 -0
  197. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/card_optional_fields_validation_test.rb +51 -0
  198. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/coverage_information_system_action_received_test.rb +65 -0
  199. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/coverage_information_system_action_validation_test.rb +120 -0
  200. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/create_or_update_coverage_info_response_validation_test.rb +70 -0
  201. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/external_reference_card_validation_test.rb +37 -0
  202. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/form_completion_response_validation_test.rb +67 -0
  203. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/instructions_card_received_test.rb +30 -0
  204. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/launch_smart_app_card_validation_test.rb +39 -0
  205. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/propose_alternate_request_card_validation_test.rb +46 -0
  206. data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/service_response_validation_test.rb +83 -0
  207. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Appointment_withorder.yml +5 -0
  208. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Appointment_withoutorder.yml +5 -0
  209. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/CommunicationRequest.yml +5 -0
  210. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Coverage.yml +5 -0
  211. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Device.yml +5 -0
  212. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/DeviceRequest.yml +5 -0
  213. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Encounter.yml +5 -0
  214. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Location.yml +5 -0
  215. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/MedicationRequest.yml +5 -0
  216. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/NutritionOrder.yml +5 -0
  217. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Organization.yml +5 -0
  218. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Patient.yml +5 -0
  219. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/PractitionerRole.yml +5 -0
  220. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/ServiceRequest.yml +5 -0
  221. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/VisionPrescription.yml +5 -0
  222. data/lib/davinci_crd_test_kit/server/v2.2.1/crd_server_suite.rb +115 -0
  223. data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_configuration_test.rb +159 -0
  224. data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_endpoint_test.rb +90 -0
  225. data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_prefetch_support_test.rb +43 -0
  226. data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_services_validation_test.rb +121 -0
  227. data/lib/davinci_crd_test_kit/server/v2.2.1/interaction/server_invoke_hook_test.rb +17 -0
  228. data/lib/davinci_crd_test_kit/server/v2.2.1/must_support/coverage_information_must_support_test.rb +71 -0
  229. data/lib/davinci_crd_test_kit/server/v2.2.1/must_support/coverage_information_system_action_across_hooks_validation_test.rb +36 -0
  230. data/lib/davinci_crd_test_kit/server/v2.2.1/must_support/supported_us_core_versions_test.rb +118 -0
  231. data/lib/davinci_crd_test_kit/server/v2.2.1/server_appointment_book_group.rb +213 -0
  232. data/lib/davinci_crd_test_kit/server/v2.2.1/server_demonstrate_hook_response_group.rb +93 -0
  233. data/lib/davinci_crd_test_kit/server/v2.2.1/server_discovery_group.rb +69 -0
  234. data/lib/davinci_crd_test_kit/server/v2.2.1/server_encounter_discharge_group.rb +194 -0
  235. data/lib/davinci_crd_test_kit/server/v2.2.1/server_encounter_start_group.rb +194 -0
  236. data/lib/davinci_crd_test_kit/server/v2.2.1/server_hooks_group.rb +73 -0
  237. data/lib/davinci_crd_test_kit/server/v2.2.1/server_order_dispatch_group.rb +214 -0
  238. data/lib/davinci_crd_test_kit/server/v2.2.1/server_order_select_group.rb +219 -0
  239. data/lib/davinci_crd_test_kit/server/v2.2.1/server_order_sign_group.rb +241 -0
  240. data/lib/davinci_crd_test_kit/server/v2.2.1/server_required_card_response_validation_group.rb +30 -0
  241. data/lib/davinci_crd_test_kit/server/v2.2.1/server_urls.rb +13 -0
  242. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_context_validation_test.rb +30 -0
  243. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_no_custom_extensions_test.rb +120 -0
  244. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_optional_fields_validation_test.rb +39 -0
  245. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_required_fields_validation_test.rb +40 -0
  246. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/additional_orders_validation_test.rb +66 -0
  247. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/all_responses_include_coverage_information_test.rb +123 -0
  248. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/card_optional_fields_validation_test.rb +57 -0
  249. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/coverage_info_configuration_test.rb +83 -0
  250. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/coverage_information_system_action_received_test.rb +65 -0
  251. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/coverage_information_system_action_validation_test.rb +184 -0
  252. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/create_or_update_coverage_info_response_validation_test.rb +75 -0
  253. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/external_reference_card_validation_test.rb +47 -0
  254. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/form_completion_response_validation_test.rb +91 -0
  255. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/hook_request_resource_resolution.rb +137 -0
  256. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/instructions_card_received_test.rb +32 -0
  257. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/launch_smart_app_card_validation_test.rb +49 -0
  258. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/order_dispatch_coverage_information_test.rb +38 -0
  259. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/propose_alternate_request_card_validation_test.rb +54 -0
  260. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/service_response_validation_test.rb +97 -0
  261. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/unknown_cds_hooks_elements_test.rb +78 -0
  262. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/unknown_configuration_test.rb +78 -0
  263. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/unknown_context_test.rb +78 -0
  264. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/verify_response_without_billing_options_test.rb +43 -0
  265. data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/verify_response_without_configuration_test.rb +44 -0
  266. data/lib/davinci_crd_test_kit/version.rb +2 -2
  267. data/lib/davinci_crd_test_kit.rb +4 -2
  268. metadata +308 -101
  269. data/lib/davinci_crd_test_kit/client_fhir_api_group.rb +0 -785
  270. data/lib/davinci_crd_test_kit/client_hooks_group.rb +0 -75
  271. data/lib/davinci_crd_test_kit/client_tests/appointment_book_receive_request_test.rb +0 -93
  272. data/lib/davinci_crd_test_kit/client_tests/client_appointment_book_group.rb +0 -75
  273. data/lib/davinci_crd_test_kit/client_tests/client_display_cards_attest.rb +0 -48
  274. data/lib/davinci_crd_test_kit/client_tests/client_encounter_discharge_group.rb +0 -73
  275. data/lib/davinci_crd_test_kit/client_tests/client_encounter_start_group.rb +0 -73
  276. data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_create_test.rb +0 -41
  277. data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_read_test.rb +0 -39
  278. data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_search_test.rb +0 -232
  279. data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_update_test.rb +0 -41
  280. data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_validation_test.rb +0 -60
  281. data/lib/davinci_crd_test_kit/client_tests/client_order_dispatch_group.rb +0 -79
  282. data/lib/davinci_crd_test_kit/client_tests/client_order_select_group.rb +0 -82
  283. data/lib/davinci_crd_test_kit/client_tests/client_order_sign_group.rb +0 -81
  284. data/lib/davinci_crd_test_kit/client_tests/client_registration_verification_test.rb +0 -88
  285. data/lib/davinci_crd_test_kit/client_tests/decode_auth_token_test.rb +0 -60
  286. data/lib/davinci_crd_test_kit/client_tests/encounter_discharge_receive_request_test.rb +0 -90
  287. data/lib/davinci_crd_test_kit/client_tests/encounter_start_receive_request_test.rb +0 -90
  288. data/lib/davinci_crd_test_kit/client_tests/hook_request_optional_fields_test.rb +0 -57
  289. data/lib/davinci_crd_test_kit/client_tests/hook_request_required_fields_test.rb +0 -49
  290. data/lib/davinci_crd_test_kit/client_tests/hook_request_valid_context_test.rb +0 -68
  291. data/lib/davinci_crd_test_kit/client_tests/hook_request_valid_prefetch_test.rb +0 -69
  292. data/lib/davinci_crd_test_kit/client_tests/order_dispatch_receive_request_test.rb +0 -102
  293. data/lib/davinci_crd_test_kit/client_tests/order_select_receive_request_test.rb +0 -98
  294. data/lib/davinci_crd_test_kit/client_tests/order_sign_receive_request_test.rb +0 -101
  295. data/lib/davinci_crd_test_kit/client_tests/retrieve_jwks_test.rb +0 -105
  296. data/lib/davinci_crd_test_kit/client_tests/submitted_response_validation.rb +0 -44
  297. data/lib/davinci_crd_test_kit/client_tests/token_header_test.rb +0 -65
  298. data/lib/davinci_crd_test_kit/client_tests/token_payload_test.rb +0 -78
  299. data/lib/davinci_crd_test_kit/crd_client_suite.rb +0 -185
  300. data/lib/davinci_crd_test_kit/crd_options.rb +0 -9
  301. data/lib/davinci_crd_test_kit/crd_server_suite.rb +0 -125
  302. data/lib/davinci_crd_test_kit/igs/davinci-crd-2.0.1.tgz +0 -0
  303. data/lib/davinci_crd_test_kit/routes/cds_services_discovery_handler.rb +0 -18
  304. data/lib/davinci_crd_test_kit/routes/hook_request_endpoint.rb +0 -77
  305. data/lib/davinci_crd_test_kit/routes/jwk_set_endpoint_handler.rb +0 -15
  306. data/lib/davinci_crd_test_kit/server_appointment_book_group.rb +0 -176
  307. data/lib/davinci_crd_test_kit/server_demonstrate_hook_response_group.rb +0 -77
  308. data/lib/davinci_crd_test_kit/server_discovery_group.rb +0 -60
  309. data/lib/davinci_crd_test_kit/server_encounter_discharge_group.rb +0 -170
  310. data/lib/davinci_crd_test_kit/server_encounter_start_group.rb +0 -170
  311. data/lib/davinci_crd_test_kit/server_hooks_group.rb +0 -71
  312. data/lib/davinci_crd_test_kit/server_order_dispatch_group.rb +0 -176
  313. data/lib/davinci_crd_test_kit/server_order_select_group.rb +0 -195
  314. data/lib/davinci_crd_test_kit/server_order_sign_group.rb +0 -201
  315. data/lib/davinci_crd_test_kit/server_required_card_response_validation_group.rb +0 -26
  316. data/lib/davinci_crd_test_kit/server_tests/additional_orders_validation_test.rb +0 -68
  317. data/lib/davinci_crd_test_kit/server_tests/card_optional_fields_validation_test.rb +0 -47
  318. data/lib/davinci_crd_test_kit/server_tests/coverage_information_system_action_across_hooks_validation_test.rb +0 -32
  319. data/lib/davinci_crd_test_kit/server_tests/coverage_information_system_action_received_test.rb +0 -63
  320. data/lib/davinci_crd_test_kit/server_tests/coverage_information_system_action_validation_test.rb +0 -118
  321. data/lib/davinci_crd_test_kit/server_tests/create_or_update_coverage_info_response_validation_test.rb +0 -71
  322. data/lib/davinci_crd_test_kit/server_tests/discovery_endpoint_test.rb +0 -88
  323. data/lib/davinci_crd_test_kit/server_tests/discovery_services_validation_test.rb +0 -65
  324. data/lib/davinci_crd_test_kit/server_tests/external_reference_card_across_hooks_validation_test.rb +0 -28
  325. data/lib/davinci_crd_test_kit/server_tests/external_reference_card_validation_test.rb +0 -36
  326. data/lib/davinci_crd_test_kit/server_tests/form_completion_response_validation_test.rb +0 -78
  327. data/lib/davinci_crd_test_kit/server_tests/instructions_card_received_across_hooks_test.rb +0 -25
  328. data/lib/davinci_crd_test_kit/server_tests/instructions_card_received_test.rb +0 -26
  329. data/lib/davinci_crd_test_kit/server_tests/launch_smart_app_card_validation_test.rb +0 -38
  330. data/lib/davinci_crd_test_kit/server_tests/propose_alternate_request_card_validation_test.rb +0 -63
  331. data/lib/davinci_crd_test_kit/server_tests/service_call_test.rb +0 -101
  332. data/lib/davinci_crd_test_kit/server_tests/service_request_context_validation_test.rb +0 -28
  333. data/lib/davinci_crd_test_kit/server_tests/service_request_optional_fields_validation_test.rb +0 -37
  334. data/lib/davinci_crd_test_kit/server_tests/service_request_required_fields_validation_test.rb +0 -38
  335. data/lib/davinci_crd_test_kit/server_tests/service_response_validation_test.rb +0 -81
  336. data/lib/davinci_crd_test_kit/tags.rb +0 -10
  337. data/lib/davinci_crd_test_kit/urls.rb +0 -52
  338. /data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/external_reference.json +0 -0
  339. /data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/instructions.json +0 -0
  340. /data/lib/davinci_crd_test_kit/{crd_jwks.json → server/endpoints/crd_jwks.json} +0 -0
  341. /data/lib/davinci_crd_test_kit/{jwks.rb → server/endpoints/jwks.rb} +0 -0
@@ -0,0 +1,213 @@
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/coverage_information_system_action_received_test'
10
+ require_relative 'verify_response/coverage_information_system_action_validation_test'
11
+ require_relative 'verify_response/coverage_info_configuration_test'
12
+ require_relative 'verify_response/instructions_card_received_test'
13
+ require_relative 'verify_response/form_completion_response_validation_test'
14
+ require_relative 'verify_response/launch_smart_app_card_validation_test'
15
+ require_relative 'verify_response/create_or_update_coverage_info_response_validation_test'
16
+ require_relative 'verify_response/all_responses_include_coverage_information_test'
17
+ require_relative 'verify_response/unknown_configuration_test'
18
+ require_relative 'verify_response/unknown_context_test'
19
+ require_relative 'verify_response/unknown_cds_hooks_elements_test'
20
+
21
+ module DaVinciCRDTestKit
22
+ module V221
23
+ class ServerAppointmentBookGroup < Inferno::TestGroup
24
+ title 'appointment-book'
25
+ id :crd_v221_server_appointment_book
26
+ description %(
27
+ This group of tests invokes the appointment-book hook and ensures that
28
+ the user-provided requests are valid as per the requirements described
29
+ in the [CRD IG section on appointment-book hook](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#appointment-book)
30
+ and the [CDS Hooks specification section on appointment-book context](https://cds-hooks.hl7.org/hooks/appointment-book/2023SepSTU1Ballot/appointment-book/).
31
+ It also ensures that the contents of the server's response are valid as per the requirements described in
32
+ the [CRD IG section on appointment-book hook](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#appointment-book)
33
+ and the [CDS Hooks section on CDS Service Response](https://cds-hooks.hl7.org/2.0/#cds-service-response).
34
+
35
+ The [CRD IG section on appointment-book hook](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#appointment-book)
36
+ states that "servers SHALL, at minimum, support returning and processing the Coverage Information
37
+ system action for all invocations of this hook."
38
+
39
+ This group includes tests to validate the following CRD response types:
40
+ - [Coverage Information](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#coverage-information)
41
+ - [Create or update coverage information](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#create-or-update-coverage-information)\
42
+ - optional
43
+ - [External Reference](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#external-reference) - optional
44
+ - [Instructions](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#instructions) - optional
45
+ - [Launch SMART application](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#launch-smart-application) -
46
+ optional
47
+ - [Request form completion](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#request-form-completion) -
48
+ optional
49
+ )
50
+ # verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@164', 'hl7.fhir.us.davinci-crd_2.0.1@168',
51
+ # 'hl7.fhir.us.davinci-crd_2.0.1@170', 'hl7.fhir.us.davinci-crd_2.0.1@184'
52
+
53
+ config options: { hook_name: APPOINTMENT_BOOK_TAG }
54
+ run_as_group
55
+
56
+ group do
57
+ title 'Interaction'
58
+
59
+ test from: :crd_v221_server_invoke_hook_test,
60
+ config: {
61
+ inputs: {
62
+ service_ids: {
63
+ name: :appointment_book_service_ids,
64
+ title: 'Service id for the service that implements the `appointment-book` hook'
65
+ },
66
+ service_request_bodies: {
67
+ name: :appointment_book_request_bodies,
68
+ title: 'Request body or bodies for invoking the `appointment-book` hook'
69
+ }
70
+ }
71
+ }
72
+ end
73
+
74
+ group do
75
+ title 'Requests'
76
+
77
+ test from: :crd_v221_service_request_required_fields_validation,
78
+ config: {
79
+ outputs: {
80
+ contexts: {
81
+ name: :appointment_book_contexts
82
+ }
83
+ }
84
+ }
85
+ test from: :crd_v221_service_request_context_validation,
86
+ config: {
87
+ inputs: {
88
+ contexts: {
89
+ name: :appointment_book_contexts
90
+ }
91
+ }
92
+ }
93
+ test from: :crd_v221_service_request_optional_fields_validation
94
+ end
95
+
96
+ group do
97
+ title 'Responses'
98
+
99
+ test from: :crd_v221_service_response_validation,
100
+ config: {
101
+ outputs: {
102
+ valid_cards: {
103
+ name: :appointment_book_valid_cards
104
+ },
105
+ valid_system_actions: {
106
+ name: :appointment_book_valid_system_actions
107
+ }
108
+ }
109
+ }
110
+ test from: :crd_v221_card_optional_fields_validation,
111
+ config: {
112
+ inputs: {
113
+ valid_cards: {
114
+ name: :appointment_book_valid_cards
115
+ }
116
+ },
117
+ outputs: {
118
+ valid_cards_with_links: {
119
+ name: :appointment_book_valid_cards_with_links
120
+ },
121
+ valid_cards_with_suggestions: {
122
+ name: :appointment_book_valid_cards_with_suggestions
123
+ }
124
+ }
125
+ }
126
+ test from: :crd_v221_external_reference_card_validation,
127
+ config: {
128
+ inputs: {
129
+ valid_cards_with_links: {
130
+ name: :appointment_book_valid_cards_with_links
131
+ }
132
+ }
133
+ }
134
+ test from: :crd_v221_launch_smart_app_card_validation,
135
+ config: {
136
+ inputs: {
137
+ valid_cards_with_links: {
138
+ name: :appointment_book_valid_cards_with_links
139
+ }
140
+ }
141
+ }
142
+ test from: :crd_v221_valid_instructions_card_received,
143
+ config: {
144
+ inputs: {
145
+ valid_cards: {
146
+ name: :appointment_book_valid_cards
147
+ }
148
+ }
149
+ }
150
+ test from: :crd_v221_coverage_info_system_action_received,
151
+ config: {
152
+ inputs: {
153
+ valid_system_actions: {
154
+ name: :appointment_book_valid_system_actions
155
+ }
156
+ },
157
+ outputs: {
158
+ coverage_info: {
159
+ name: :appointment_book_coverage_info
160
+ }
161
+ }
162
+ },
163
+ verifies_requirements: [
164
+ 'hl7.fhir.us.davinci-crd_2.2.1@resp-26'
165
+ ]
166
+ test from: :crd_v221_coverage_info_system_action_validation,
167
+ config: {
168
+ inputs: {
169
+ coverage_info: {
170
+ name: :appointment_book_coverage_info
171
+ }
172
+ }
173
+ },
174
+ verifies_requirements: [
175
+ 'hl7.fhir.us.davinci-crd_2.2.1@resp-25'
176
+ ]
177
+ test from: :crd_v221_all_responses_include_coverage_information,
178
+ verifies_requirements: [
179
+ 'hl7.fhir.us.davinci-crd_2.2.1@hook-16',
180
+ 'hl7.fhir.us.davinci-crd_2.2.1@resp-28',
181
+ 'hl7.fhir.us.davinci-crd_2.2.1@hook-26',
182
+ 'hl7.fhir.us.davinci-crd_2.2.1@resp-29'
183
+ ]
184
+ test from: :crd_v221_request_form_completion_response_validation,
185
+ config: {
186
+ inputs: {
187
+ valid_system_actions: {
188
+ name: :appointment_book_valid_system_actions
189
+ },
190
+ valid_cards_with_suggestions: {
191
+ name: :appointment_book_valid_cards_with_suggestions
192
+ }
193
+ }
194
+ }
195
+ test from: :crd_v221_create_or_update_coverage_info_response_validation,
196
+ config: {
197
+ inputs: {
198
+ valid_system_actions: {
199
+ name: :appointment_book_valid_system_actions
200
+ },
201
+ valid_cards_with_suggestions: {
202
+ name: :appointment_book_valid_cards_with_suggestions
203
+ }
204
+ }
205
+ }
206
+ test from: :crd_v221_coverage_info_configuration
207
+ test from: :crd_v221_unknown_configuration
208
+ test from: :crd_v221_unknown_context
209
+ test from: :crd_v221_unknown_cds_hooks_elements
210
+ end
211
+ end
212
+ end
213
+ end
@@ -0,0 +1,93 @@
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
+
8
+ module DaVinciCRDTestKit
9
+ module V221
10
+ class ServerDemonstrateHookResponseGroup < Inferno::TestGroup
11
+ title 'Hook Response Demonstration'
12
+ id :crd_v221_server_demonstrate_hook_response
13
+ description %(
14
+ This group of tests allows the system to demonstrate its ability to respond to a CRD Hook invocation
15
+ and return a valid response. Inferno will use the provided request body and will either use the provided service
16
+ id or infer one from the hook indicated in the request and the server's discovery response.
17
+ It ensures that the user-provided request and the server's response are both
18
+ valid as per the requirements described in the [CRD IG section](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html)
19
+ and the [CDS Hooks](https://cds-hooks.hl7.org/) hook specification for the corresponding hook.
20
+ )
21
+
22
+ config options: { hook_name: ANY_HOOK_TAG }
23
+ run_as_group
24
+
25
+ group do
26
+ title 'Interaction'
27
+
28
+ test from: :crd_v221_server_invoke_hook_test,
29
+ config: {
30
+ inputs: {
31
+ service_ids: {
32
+ name: :any_hook_service_ids,
33
+ title: 'Service id to use for the "Demonstrate a Hook Response" test',
34
+ description: %(
35
+ If blank, Inferno will attempt to infer the service id to use by finding a service entry in the
36
+ Discovery response for the hook indicated in the provided request body. If it cannot be inferred,
37
+ the tests will be skipped.
38
+ )
39
+ },
40
+ service_request_bodies: {
41
+ name: :any_hook_request_body,
42
+ title: 'Request body to use for the "Demonstrate a Hook Response" test',
43
+ description: %(
44
+ Provide a single JSON request body to submit for the hook invocation. The type of hook invoked
45
+ will be inferred based on the `hook` element in the request.
46
+ )
47
+ }
48
+ }
49
+ }
50
+ end
51
+
52
+ group do
53
+ title 'Requests'
54
+
55
+ test from: :crd_v221_service_request_required_fields_validation,
56
+ config: {
57
+ outputs: {
58
+ contexts: {
59
+ name: :any_hook_contexts
60
+ }
61
+ }
62
+ }
63
+ test from: :crd_v221_service_request_context_validation,
64
+ config: {
65
+ inputs: {
66
+ contexts: {
67
+ name: :any_hook_contexts
68
+ },
69
+ request_body: {
70
+ name: :any_hook_request_body
71
+ }
72
+ }
73
+ }
74
+ end
75
+
76
+ group do
77
+ title 'Responses'
78
+
79
+ test from: :crd_v221_service_response_validation,
80
+ config: {
81
+ outputs: {
82
+ valid_cards: {
83
+ name: :any_hook_valid_cards
84
+ },
85
+ valid_system_actions: {
86
+ name: :any_hook_valid_system_actions
87
+ }
88
+ }
89
+ }
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,69 @@
1
+ require 'tls_test_kit'
2
+ require_relative 'discovery/discovery_configuration_test'
3
+ require_relative 'discovery/discovery_endpoint_test'
4
+ require_relative 'discovery/discovery_services_validation_test'
5
+ require_relative 'discovery/discovery_prefetch_support_test'
6
+
7
+ module DaVinciCRDTestKit
8
+ module V221
9
+ class ServerDiscoveryGroup < Inferno::TestGroup
10
+ title 'Discovery'
11
+ id :crd_v221_server_discovery_group
12
+ description %(
13
+ # Background
14
+
15
+ The #{title} Group checks for a CDS Service's Discovery endpoint as described by the
16
+ [CDS Hooks Specification](https://cds-hooks.hl7.org/2.0/#discovery).
17
+ A CDS Service is discoverable via a stable endpoint by CDS Clients. The Discovery endpoint
18
+ includes information such as a description of the CDS Service, when it should be invoked,
19
+ and any data that is requested to be prefetched.
20
+ The Discovery endpoint SHALL always be available at `{baseUrl}/cds-services`.
21
+
22
+ # Test Methodology
23
+
24
+ This test sequence accesses the CRD server Discovery endpoint at /cds-services using a GET request.
25
+ It parses the response and verifies that:
26
+ - The Discovery endpoint is TLS secured.
27
+ - The Discovery endpoint is available at `{baseURL}/cds-services`.
28
+ - Each CDS Service in the response contains the required fields as specified in the [CDS Hooks Spec](https://cds-hooks.hl7.org/2.0/#response).
29
+
30
+ It collects the following information that is saved in the testing session for use by later tests:
31
+ - List of supported CDS Services/Hooks
32
+ - List of service IDs for each supported Hook.
33
+ )
34
+
35
+ run_as_group
36
+
37
+ test from: :tls_version_test do
38
+ title 'CRD server uses TLS 1.2 or higher'
39
+ description <<~DESCRIPTION
40
+ Under [Privacy, Safety, and
41
+ Security](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/security.html),
42
+ the CRD Implementation Guide imposes the following rule about TLS:
43
+
44
+ As per the [CDS Hook specification](https://cds-hooks.hl7.org/2.0/#security-and-safety),
45
+ communications between CRD Clients and CRD Servers SHALL
46
+ use TLS. Mutual TLS is not required by this specification but is permitted. CRD Servers and
47
+ CRD Clients SHOULD enforce a minimum version and other TLS configuration requirements based
48
+ on HRex rules for PHI exchange.
49
+
50
+ This test verifies that the CRD server is using TLS 1.2 or higher.
51
+ DESCRIPTION
52
+
53
+ verifies_requirements 'hl7.fhir.us.davinci-crd_2.2.1@sec-2'
54
+
55
+ id :crd_v221_server_tls_version_stu2
56
+
57
+ config(
58
+ options: { minimum_allowed_version: OpenSSL::SSL::TLS1_2_VERSION },
59
+ inputs: { url: { name: :base_url } }
60
+ )
61
+ end
62
+
63
+ test from: :crd_v221_discovery_endpoint_test
64
+ test from: :crd_v221_discovery_services_validation
65
+ test from: :crd_v221_discovery_configuration
66
+ test from: :crd_v221_discovery_prefetch_support
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,194 @@
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/form_completion_response_validation_test'
12
+ require_relative 'verify_response/create_or_update_coverage_info_response_validation_test'
13
+ require_relative 'verify_response/coverage_info_configuration_test'
14
+ require_relative 'verify_response/unknown_configuration_test'
15
+ require_relative 'verify_response/unknown_context_test'
16
+ require_relative 'verify_response/unknown_cds_hooks_elements_test'
17
+
18
+ module DaVinciCRDTestKit
19
+ module V221
20
+ class ServerEncounterDischargeGroup < Inferno::TestGroup
21
+ title 'encounter-discharge'
22
+ id :crd_v221_server_encounter_discharge
23
+ description %(
24
+ This group of tests invokes the encounter-discharge hook and ensures that
25
+ the user-provided requests are valid as per the requirements described
26
+ in the [CRD IG section on encounter-discharge hook](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#encounter-discharge)
27
+ and the [CDS Hooks specification section on encounter-discharge context](https://cds-hooks.hl7.org/hooks/encounter-discharge/2023SepSTU1Ballot/encounter-discharge/).
28
+ It also ensures that the contents of the server's response are valid as per the requirements described in
29
+ the [CRD IG section on encounter-discharge hook](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#encounter-discharge)
30
+ and the [CDS Hooks section on CDS Service Response](https://cds-hooks.hl7.org/2.0/#cds-service-response).
31
+
32
+ This group includes tests to validate the following CRD response types:
33
+ - [Coverage Information](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#coverage-information) - optional
34
+ - [Create or update coverage information](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#create-or-update-coverage-information)\
35
+ - optional
36
+ - [External Reference](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#external-reference) - optional
37
+ - [Instructions](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#instructions) - optional
38
+ - [Launch SMART application](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#launch-smart-application) -
39
+ optional
40
+ - [Request form completion](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#request-form-completion) -
41
+ optional
42
+ )
43
+ # verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@168', 'hl7.fhir.us.davinci-crd_2.0.1@196'
44
+
45
+ config options: { hook_name: ENCOUNTER_DISCHARGE_TAG }
46
+ run_as_group
47
+
48
+ group do
49
+ title 'Interaction'
50
+
51
+ test from: :crd_v221_server_invoke_hook_test,
52
+ config: {
53
+ inputs: {
54
+ service_ids: {
55
+ name: :encounter_discharge_service_ids,
56
+ title: 'Service id for the service that implements the `encounter-discharge` hook'
57
+ },
58
+ service_request_bodies: {
59
+ name: :encounter_discharge_request_bodies,
60
+ title: 'Request body or bodies for invoking the `encounter-discharge` hook'
61
+ }
62
+ }
63
+ }
64
+ end
65
+
66
+ group do
67
+ title 'Requests'
68
+
69
+ test from: :crd_v221_service_request_required_fields_validation,
70
+ config: {
71
+ outputs: {
72
+ contexts: {
73
+ name: :encounter_discharge_contexts
74
+ }
75
+ }
76
+ }
77
+ test from: :crd_v221_service_request_context_validation,
78
+ config: {
79
+ inputs: {
80
+ contexts: {
81
+ name: :encounter_discharge_contexts
82
+ }
83
+ }
84
+ }
85
+ test from: :crd_v221_service_request_optional_fields_validation
86
+ end
87
+
88
+ group do
89
+ title 'Responses'
90
+
91
+ test from: :crd_v221_service_response_validation,
92
+ config: {
93
+ outputs: {
94
+ valid_cards: {
95
+ name: :encounter_discharge_valid_cards
96
+ },
97
+ valid_system_actions: {
98
+ name: :encounter_discharge_valid_system_actions
99
+ }
100
+ }
101
+ }
102
+ test from: :crd_v221_card_optional_fields_validation,
103
+ config: {
104
+ inputs: {
105
+ valid_cards: {
106
+ name: :encounter_discharge_valid_cards
107
+ }
108
+ },
109
+ outputs: {
110
+ valid_cards_with_links: {
111
+ name: :encounter_discharge_valid_cards_with_links
112
+ },
113
+ valid_cards_with_suggestions: {
114
+ name: :encounter_discharge_valid_cards_with_suggestions
115
+ }
116
+ }
117
+ }
118
+ test from: :crd_v221_external_reference_card_validation,
119
+ config: {
120
+ inputs: {
121
+ valid_cards_with_links: {
122
+ name: :encounter_discharge_valid_cards_with_links
123
+ }
124
+ }
125
+ }
126
+ test from: :crd_v221_launch_smart_app_card_validation,
127
+ config: {
128
+ inputs: {
129
+ valid_cards_with_links: {
130
+ name: :encounter_discharge_valid_cards_with_links
131
+ }
132
+ }
133
+ }
134
+ test from: :crd_v221_valid_instructions_card_received,
135
+ config: {
136
+ inputs: {
137
+ valid_cards: {
138
+ name: :encounter_discharge_valid_cards
139
+ }
140
+ }
141
+ }
142
+ test from: :crd_v221_coverage_info_system_action_received,
143
+ optional: true,
144
+ config: {
145
+ inputs: {
146
+ valid_system_actions: {
147
+ name: :encounter_discharge_valid_system_actions
148
+ }
149
+ },
150
+ outputs: {
151
+ coverage_info: {
152
+ name: :encounter_discharge_coverage_info
153
+ }
154
+ }
155
+ }
156
+ test from: :crd_v221_coverage_info_system_action_validation,
157
+ optional: true,
158
+ config: {
159
+ inputs: {
160
+ coverage_info: {
161
+ name: :encounter_discharge_coverage_info
162
+ }
163
+ }
164
+ }
165
+ test from: :crd_v221_request_form_completion_response_validation,
166
+ config: {
167
+ inputs: {
168
+ valid_system_actions: {
169
+ name: :encounter_discharge_valid_system_actions
170
+ },
171
+ valid_cards_with_suggestions: {
172
+ name: :encounter_discharge_valid_cards_with_suggestions
173
+ }
174
+ }
175
+ }
176
+ test from: :crd_v221_create_or_update_coverage_info_response_validation,
177
+ config: {
178
+ inputs: {
179
+ valid_system_actions: {
180
+ name: :encounter_discharge_valid_system_actions
181
+ },
182
+ valid_cards_with_suggestions: {
183
+ name: :encounter_discharge_valid_cards_with_suggestions
184
+ }
185
+ }
186
+ }
187
+ test from: :crd_v221_coverage_info_configuration
188
+ test from: :crd_v221_unknown_configuration
189
+ test from: :crd_v221_unknown_context
190
+ test from: :crd_v221_unknown_cds_hooks_elements
191
+ end
192
+ end
193
+ end
194
+ end