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
@@ -1,125 +0,0 @@
1
- require_relative 'jwt_helper'
2
- require_relative 'routes/jwk_set_endpoint_handler'
3
- require_relative 'server_discovery_group'
4
- require_relative 'server_demonstrate_hook_response_group'
5
- require_relative 'server_hooks_group'
6
-
7
- module DaVinciCRDTestKit
8
- class CRDServerSuite < Inferno::TestSuite
9
- id :crd_server
10
- title 'Da Vinci CRD Server Test Suite'
11
- description <<~DESCRIPTION
12
- The Da Vinci CRD Server Test Suite tests the conformance of server systems
13
- to [version 2.0.1 of the Da Vinci Coverage Requirements Discovery (CRD)
14
- Implementation Guide](https://hl7.org/fhir/us/davinci-crd/STU2).
15
-
16
- ## Overview
17
- This suite contains three groups of tests:
18
- 1. The *Discovery* group validates a CRD server's discovery response.
19
- 2. The *Demonstrate A Hook Response* group validates that the server
20
- can respond to a single hook invocation and return conformant cards.
21
- 3. The *Hooks* group makes one or more CDS Hooks calls for each hook
22
- type that the tester provides request bodies for. It then validates that the
23
- responses are conformant and cover the full range of cards as
24
- required by the hook type.
25
-
26
- ## Trusting CDS Clients
27
- As specified in the [CDS Hooks Spec](https://cds-hooks.hl7.org/2.0/#trusting-cds-clients),
28
- Each time a CDS Client transmits a request to a CDS Service which
29
- requires authentication, the request MUST include an Authorization
30
- header presenting the JWT as a “Bearer” token:
31
- `Authorization: Bearer {{JWT}}`
32
-
33
- Inferno self-issues the JWT for each CDS Service call. The following
34
- info is needed to register Inferno:
35
-
36
- - **ISS**: `#{Inferno::Application[:base_url]}/custom/crd_server`
37
- - **JWK Set Url**:
38
- `#{Inferno::Application[:base_url]}/custom/crd_server/jwks.json`
39
-
40
- ## Running the Tests
41
- Execution of these tests require a significant amount of tester input in
42
- the form of requests that Inferno will make against the server under test.
43
-
44
- If you would like to try out the tests using examples from the IG and the
45
- [CDS Hooks spec](https://cds-hooks.hl7.org/2.0/) against [the public CRD
46
- reference server endpoint](https://crd.davinci.hl7.org/), you can do so
47
- by:
48
- 1. Selecting the *CRD Server RI* option from the
49
- Preset dropdown in the upper left
50
- 2. Clicking the *Run All Tests* button in the upper right
51
- 3. Clicking the *Submit* button at the bottom of the input dialog
52
-
53
- You can run these tests using your own server by updating the "CRD server
54
- base URL" and, if needed, providing requests inputs you wish to use for
55
- each hook your server supports.
56
-
57
- Note that the provided inputs for these tests are not complete and systems
58
- are not expected to pass the tests based on them.
59
-
60
-
61
- ## Limitations
62
- Inferno is unable to determine what requests will result in specific kinds
63
- of responses from the server under test (e.g., what will result in
64
- Instructions being returned vs. Coverage Information). As a result, the
65
- tester must supply the request bodies which will cause the system under
66
- test to return the desired response types.
67
-
68
- The ability of a CRD Server to request additional FHIR resources is not
69
- tested. Hook configuration is not tested.
70
- DESCRIPTION
71
-
72
- suite_summary <<~SUMMARY
73
- The Da Vinci CRD Server Test Suite tests the conformance of server systems
74
- to [version 2.0.1 of the Da Vinci Coverage Requirements Discovery (CRD)
75
- Implementation Guide](https://hl7.org/fhir/us/davinci-crd/STU2).
76
- SUMMARY
77
-
78
- links [
79
- {
80
- label: 'Report Issue',
81
- url: 'https://github.com/inferno-framework/davinci-crd-test-kit/issues'
82
- },
83
- {
84
- label: 'Open Source',
85
- url: 'https://github.com/inferno-framework/davinci-crd-test-kit'
86
- },
87
- {
88
- label: 'Download',
89
- url: 'https://github.com/inferno-framework/davinci-crd-test-kit/releases'
90
- }
91
- ]
92
-
93
- requirement_sets(
94
- {
95
- identifier: 'hl7.fhir.us.davinci-crd_2.0.1',
96
- title: 'Da Vinci Coverage Requirements Discovery (CRD) v2.0.1',
97
- actor: 'Server'
98
- }
99
- )
100
-
101
- input :base_url,
102
- title: 'CRD server base URL'
103
-
104
- fhir_resource_validator do
105
- igs('hl7.fhir.us.davinci-crd#2.0.1')
106
-
107
- exclude_message do |message|
108
- message.message.match?(/\A\S+: \S+: URL value '.*' does not resolve/)
109
- end
110
- end
111
-
112
- def inferno_base_url
113
- suite_id = self.class.suite.id
114
- @inferno_base_url ||= "#{Inferno::Application['base_url']}/custom/#{suite_id}"
115
- end
116
-
117
- route :get, '/jwks.json', Routes::JWKSetEndpointHandler
118
-
119
- group from: :crd_server_discovery_group
120
-
121
- group from: :crd_server_demonstrate_hook_response
122
-
123
- group from: :crd_server_hooks
124
- end
125
- end
@@ -1,18 +0,0 @@
1
- module DaVinciCRDTestKit
2
- module Routes
3
- class CDSServicesDiscoveryHandler
4
- def self.call(...)
5
- new.call(...)
6
- end
7
-
8
- def self.cds_services
9
- @cds_services ||= File.read(File.join(__dir__, 'cds-services.json'))
10
- end
11
-
12
- def call(_env)
13
- # Check authorization header
14
- [200, { 'Content-Type' => 'application/json' }, [self.class.cds_services]]
15
- end
16
- end
17
- end
18
- end
@@ -1,77 +0,0 @@
1
- require_relative '../mock_service_response'
2
- require_relative '../tags'
3
- module DaVinciCRDTestKit
4
- class HookRequestEndpoint < Inferno::DSL::SuiteEndpoint
5
- include DaVinciCRDTestKit::MockServiceResponse
6
-
7
- def selected_response_types
8
- @selected_response_types ||=
9
- JSON.parse(result.input_json)
10
- .find { |input| input['name'].include?('selected_response_types') }
11
- &.dig('value')
12
- end
13
-
14
- def custom_response
15
- @custom_response ||=
16
- JSON.parse(result.input_json)
17
- .find { |input| input['name'].include?('custom_response') }
18
- &.dig('value')
19
- end
20
-
21
- def test_run_identifier
22
- "#{hook_name} #{iss}"
23
- end
24
-
25
- def hook_name
26
- @hook_name ||= request.params[:hook]
27
- end
28
-
29
- def iss
30
- @iss ||=
31
- begin
32
- payload, = JWT.decode(token, nil, false)
33
- payload['iss']
34
- rescue JWT::DecodeError
35
- nil
36
- end
37
- end
38
-
39
- def token
40
- @token ||= request.headers['authorization']&.delete_prefix('Bearer ')
41
- end
42
-
43
- def make_response
44
- case hook_name
45
- when 'appointment-book', 'encounter-start', 'encounter-discharge', 'order-select', 'order-sign', 'order-dispatch'
46
- hook_response
47
- else
48
- response.status = 400
49
- response.body = 'Invalid Request: Request did not contain a valid hook in the `hook` field.'
50
- end
51
- end
52
-
53
- def tags
54
- case hook_name
55
- when 'appointment-book'
56
- [APPOINTMENT_BOOK_TAG]
57
- when 'encounter-start'
58
- [ENCOUNTER_START_TAG]
59
- when 'encounter-discharge'
60
- [ENCOUNTER_DISCHARGE_TAG]
61
- when 'order-select'
62
- [ORDER_SELECT_TAG]
63
- when 'order-sign'
64
- [ORDER_SIGN_TAG]
65
- when 'order-dispatch'
66
- [ORDER_DISPATCH_TAG]
67
- else
68
- response.status = 400
69
- response.body = 'Invalid Request: Request did not contain a valid hook in the `hook` field.'
70
- end
71
- end
72
-
73
- def name
74
- hook_name.gsub('-', '_')
75
- end
76
- end
77
- end
@@ -1,15 +0,0 @@
1
- require_relative '../jwks'
2
-
3
- module DaVinciCRDTestKit
4
- module Routes
5
- class JWKSetEndpointHandler
6
- def self.call(...)
7
- new.call(...)
8
- end
9
-
10
- def call(_env)
11
- [200, { 'Content-Type' => 'application/json' }, [JWKS.jwks_json]]
12
- end
13
- end
14
- end
15
- end
@@ -1,176 +0,0 @@
1
- require_relative 'server_tests/service_call_test'
2
- require_relative 'server_tests/service_response_validation_test'
3
- require_relative 'server_tests/card_optional_fields_validation_test'
4
- require_relative 'server_tests/external_reference_card_validation_test'
5
- require_relative 'server_tests/coverage_information_system_action_received_test'
6
- require_relative 'server_tests/coverage_information_system_action_validation_test'
7
- require_relative 'server_tests/instructions_card_received_test'
8
- require_relative 'server_tests/service_request_required_fields_validation_test'
9
- require_relative 'server_tests/service_request_optional_fields_validation_test'
10
- require_relative 'server_tests/service_request_context_validation_test'
11
- require_relative 'server_tests/form_completion_response_validation_test'
12
- require_relative 'server_tests/launch_smart_app_card_validation_test'
13
- require_relative 'server_tests/create_or_update_coverage_info_response_validation_test'
14
- require_relative 'tags'
15
-
16
- module DaVinciCRDTestKit
17
- class ServerAppointmentBookGroup < Inferno::TestGroup
18
- title 'appointment-book'
19
- id :crd_server_appointment_book
20
- description %(
21
- This group of tests invokes the appointment-book hook and ensures that
22
- the user-provided requests are valid as per the requirements described
23
- in the [CRD IG section on appointment-book hook](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#appointment-book)
24
- and the [CDS Hooks specification section on appointment-book context](https://cds-hooks.hl7.org/hooks/appointment-book/2023SepSTU1Ballot/appointment-book/).
25
- It also ensures that the contents of the server's response are valid as per the requirements described in
26
- the [CRD IG section on appointment-book hook](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#appointment-book)
27
- and the [CDS Hooks section on CDS Service Response](https://cds-hooks.hl7.org/2.0/#cds-service-response).
28
-
29
- The [CRD IG section on appointment-book hook](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#appointment-book)
30
- states that "servers SHALL, at minimum, support returning and processing the Coverage Information
31
- system action for all invocations of this hook."
32
-
33
- This group includes tests to validate the following CRD response types:
34
- - [Coverage Information](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#coverage-information)
35
- - [Create or update coverage information](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#create-or-update-coverage-information)\
36
- - optional
37
- - [External Reference](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#external-reference) - optional
38
- - [Instructions](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#instructions) - optional
39
- - [Launch SMART application](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#launch-smart-application) -
40
- optional
41
- - [Request form completion](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#request-form-completion) -
42
- optional
43
- )
44
- verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@164', 'hl7.fhir.us.davinci-crd_2.0.1@168',
45
- 'hl7.fhir.us.davinci-crd_2.0.1@170', 'hl7.fhir.us.davinci-crd_2.0.1@184'
46
-
47
- config options: { hook_name: APPOINTMENT_BOOK_TAG }
48
- run_as_group
49
-
50
- test from: :crd_service_call_test,
51
- config: {
52
- inputs: {
53
- service_ids: {
54
- name: :appointment_book_service_ids,
55
- title: 'Service id for the service that implements the `appointment-book` hook'
56
- },
57
- service_request_bodies: {
58
- name: :appointment_book_request_bodies,
59
- title: 'Request body or bodies for invoking the `appointment-book` hook'
60
- }
61
- }
62
- }
63
-
64
- test from: :crd_service_request_required_fields_validation,
65
- config: {
66
- outputs: {
67
- contexts: {
68
- name: :appointment_book_contexts
69
- }
70
- }
71
- }
72
- test from: :crd_service_request_context_validation,
73
- config: {
74
- inputs: {
75
- contexts: {
76
- name: :appointment_book_contexts
77
- }
78
- }
79
- }
80
- test from: :crd_service_request_optional_fields_validation
81
- test from: :crd_service_response_validation,
82
- config: {
83
- outputs: {
84
- valid_cards: {
85
- name: :appointment_book_valid_cards
86
- },
87
- valid_system_actions: {
88
- name: :appointment_book_valid_system_actions
89
- }
90
- }
91
- }
92
- test from: :crd_card_optional_fields_validation,
93
- config: {
94
- inputs: {
95
- valid_cards: {
96
- name: :appointment_book_valid_cards
97
- }
98
- },
99
- outputs: {
100
- valid_cards_with_links: {
101
- name: :appointment_book_valid_cards_with_links
102
- },
103
- valid_cards_with_suggestions: {
104
- name: :appointment_book_valid_cards_with_suggestions
105
- }
106
- }
107
- }
108
- test from: :crd_external_reference_card_validation,
109
- config: {
110
- inputs: {
111
- valid_cards_with_links: {
112
- name: :appointment_book_valid_cards_with_links
113
- }
114
- }
115
- }
116
- test from: :crd_launch_smart_app_card_validation,
117
- config: {
118
- inputs: {
119
- valid_cards_with_links: {
120
- name: :appointment_book_valid_cards_with_links
121
- }
122
- }
123
- }
124
- test from: :crd_valid_instructions_card_received,
125
- config: {
126
- inputs: {
127
- valid_cards: {
128
- name: :appointment_book_valid_cards
129
- }
130
- }
131
- }
132
- test from: :crd_coverage_info_system_action_received,
133
- config: {
134
- inputs: {
135
- valid_system_actions: {
136
- name: :appointment_book_valid_system_actions
137
- }
138
- },
139
- outputs: {
140
- coverage_info: {
141
- name: :appointment_book_coverage_info
142
- }
143
- }
144
- }
145
- test from: :crd_coverage_info_system_action_validation,
146
- config: {
147
- inputs: {
148
- coverage_info: {
149
- name: :appointment_book_coverage_info
150
- }
151
- }
152
- }
153
- test from: :crd_request_form_completion_response_validation,
154
- config: {
155
- inputs: {
156
- valid_system_actions: {
157
- name: :appointment_book_valid_system_actions
158
- },
159
- valid_cards_with_suggestions: {
160
- name: :appointment_book_valid_cards_with_suggestions
161
- }
162
- }
163
- }
164
- test from: :crd_create_or_update_coverage_info_response_validation,
165
- config: {
166
- inputs: {
167
- valid_system_actions: {
168
- name: :appointment_book_valid_system_actions
169
- },
170
- valid_cards_with_suggestions: {
171
- name: :appointment_book_valid_cards_with_suggestions
172
- }
173
- }
174
- }
175
- end
176
- end
@@ -1,77 +0,0 @@
1
- require_relative 'server_tests/service_call_test'
2
- require_relative 'server_tests/service_request_required_fields_validation_test'
3
- require_relative 'server_tests/service_request_context_validation_test'
4
- require_relative 'server_tests/service_response_validation_test'
5
- require_relative 'tags'
6
-
7
- module DaVinciCRDTestKit
8
- class ServerDemonstrateHookResponseGroup < Inferno::TestGroup
9
- title 'Demonstrate A Hook Response'
10
- id :crd_server_demonstrate_hook_response
11
- description %(
12
- This group of tests allows the system to demonstrate its ability to respond to a CRD Hook invocation
13
- and return a valid response. Inferno will use the provided request body and will either use the provided service
14
- id or infer one from the hook indicated in the request and the server's discovery response.
15
- It ensures that the user-provided request and the server's response are both
16
- valid as per the requirements described in the [CRD IG section](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html)
17
- and the [CDS Hooks](https://cds-hooks.hl7.org/) hook specification for the corresponding hook.
18
- )
19
-
20
- config options: { hook_name: ANY_HOOK_TAG }
21
- run_as_group
22
-
23
- test from: :crd_service_call_test,
24
- config: {
25
- inputs: {
26
- service_ids: {
27
- name: :any_hook_service_ids,
28
- title: 'Service id to use for the "Demonstrate a Hook Response" test',
29
- description: %(
30
- If blank, Inferno will attempt to infer the service id to use by finding a service entry in the
31
- Discovery response for the hook indicated in the provided request body. If it cannot be inferred,
32
- the tests will be skipped.
33
- )
34
- },
35
- service_request_bodies: {
36
- name: :any_hook_request_body,
37
- title: 'Request body to use for the "Demonstrate a Hook Response" test',
38
- description: %(
39
- Provide a single JSON request body to submit for the hook invocation. The type of hook invoked
40
- will be inferred based on the `hook` element in the request.
41
- )
42
- }
43
- }
44
- }
45
-
46
- test from: :crd_service_request_required_fields_validation,
47
- config: {
48
- outputs: {
49
- contexts: {
50
- name: :any_hook_contexts
51
- }
52
- }
53
- }
54
- test from: :crd_service_request_context_validation,
55
- config: {
56
- inputs: {
57
- contexts: {
58
- name: :any_hook_contexts
59
- },
60
- request_body: {
61
- name: :any_hook_request_body
62
- }
63
- }
64
- }
65
- test from: :crd_service_response_validation,
66
- config: {
67
- outputs: {
68
- valid_cards: {
69
- name: :any_hook_valid_cards
70
- },
71
- valid_system_actions: {
72
- name: :any_hook_valid_system_actions
73
- }
74
- }
75
- }
76
- end
77
- end
@@ -1,60 +0,0 @@
1
- require 'tls_test_kit'
2
- require_relative 'server_tests/discovery_endpoint_test'
3
- require_relative 'server_tests/discovery_services_validation_test'
4
-
5
- module DaVinciCRDTestKit
6
- class ServerDiscoveryGroup < Inferno::TestGroup
7
- title 'Discovery'
8
- id :crd_server_discovery_group
9
- description %(
10
- # Background
11
-
12
- The #{title} Group checks for a CDS Service's Discovery endpoint as described by the
13
- [CDS Hooks Specification](https://cds-hooks.hl7.org/2.0/#discovery).
14
- A CDS Service is discoverable via a stable endpoint by CDS Clients. The Discovery endpoint
15
- includes information such as a description of the CDS Service, when it should be invoked,
16
- and any data that is requested to be prefetched.
17
- The Discovery endpoint SHALL always be available at `{baseUrl}/cds-services`.
18
-
19
- # Test Methodology
20
-
21
- This test sequence accesses the CRD server Discovery endpoint at /cds-services using a GET request.
22
- It parses the response and verifies that:
23
- - The Discovery endpoint is TLS secured.
24
- - The Discovery endpoint is available at `{baseURL}/cds-services`.
25
- - 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).
26
-
27
- It collects the following information that is saved in the testing session for use by later tests:
28
- - List of supported CDS Services/Hooks
29
- - List of service IDs for each supported Hook.
30
- )
31
-
32
- run_as_group
33
-
34
- test from: :tls_version_test do
35
- title 'CRD Server is secured by transport layer security'
36
- description <<~DESCRIPTION
37
- Under [Privacy, Security, and Safety](https://hl7.org/fhir/us/davinci-crd/STU2/security.html),
38
- the CRD Implementation Guide imposes the following rule about TLS:
39
-
40
- As per the [CDS Hook specification](https://cds-hooks.hl7.org/2.0/#security-and-safety),
41
- communications between CRD Clients and CRD Servers SHALL
42
- use TLS. Mutual TLS is not required by this specification but is permitted. CRD Servers and
43
- CRD Clients SHOULD enforce a minimum version and other TLS configuration requirements based
44
- on HRex rules for PHI exchange.
45
-
46
- This test verifies that the CRD server is using TLS 1.2 or higher.
47
- DESCRIPTION
48
- verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@89'
49
- id :crd_server_tls_version_stu2
50
-
51
- config(
52
- options: { minimum_allowed_version: OpenSSL::SSL::TLS1_2_VERSION },
53
- inputs: { url: { name: :base_url } }
54
- )
55
- end
56
-
57
- test from: :crd_discovery_endpoint_test
58
- test from: :crd_discovery_services_validation
59
- end
60
- end