davinci_crd_test_kit 0.13.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/config/presets/inferno_crd_client_suite.json.erb +20 -14
- data/config/presets/inferno_crd_client_suite_prefetch_subset_v221.json.erb +125 -0
- data/config/presets/inferno_crd_client_suite_v221.json.erb +124 -0
- data/config/presets/inferno_crd_server_suite.json.erb +58 -1
- data/config/presets/inferno_crd_server_suite_v221.json.erb +94 -0
- data/config/presets/ri_crd_request_generator.json_v221.json.erb +13 -0
- data/config/presets/ri_crd_server.json.erb +19 -19
- data/lib/davinci_crd_test_kit/client/client_base_urls.rb +80 -0
- data/lib/davinci_crd_test_kit/{client_hook_request_validation.rb → client/client_hook_request_validation.rb} +1 -1
- data/lib/davinci_crd_test_kit/client/crd_client_options.rb +30 -0
- data/lib/davinci_crd_test_kit/client/endpoints/cds_services_discovery_handler.rb +34 -0
- data/lib/davinci_crd_test_kit/client/endpoints/custom_service_response.rb +342 -0
- data/lib/davinci_crd_test_kit/client/endpoints/gather_response_generation_data.rb +410 -0
- data/lib/davinci_crd_test_kit/client/endpoints/hook_request_endpoint.rb +233 -0
- data/lib/davinci_crd_test_kit/{mock_service_response.rb → client/endpoints/mock_service_response.rb} +165 -59
- data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/companions_prerequisites.json +1 -0
- data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/create_update_coverage_information.json +3 -2
- data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/launch_smart_app.json +8 -1
- data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/propose_alternate_request.json +1 -0
- data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/request_form_completion.json +17 -16
- data/lib/davinci_crd_test_kit/client/multi_request_message_helper.rb +35 -0
- data/lib/davinci_crd_test_kit/client/tagged_request_load_helper.rb +38 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_create_test.rb +43 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_read_test.rb +43 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_search_test.rb +234 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_update_test.rb +43 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_validation_test.rb +63 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/auth/decode_auth_token_test.rb +65 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/auth/retrieve_jwks_test.rb +109 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/auth/token_header_test.rb +70 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/auth/token_payload_test.rb +85 -0
- data/lib/davinci_crd_test_kit/{routes/cds-services.json → client/v2.0.1/cds-services-v201.json} +1 -1
- data/lib/davinci_crd_test_kit/client/v2.0.1/client_appointment_book_group.rb +108 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/client_card_must_support_group.rb +31 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/client_encounter_discharge_group.rb +105 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/client_encounter_start_group.rb +105 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/client_fhir_api_group.rb +790 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/client_hooks_group.rb +74 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/client_order_dispatch_group.rb +111 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/client_order_select_group.rb +116 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/client_order_sign_group.rb +113 -0
- data/lib/davinci_crd_test_kit/{client_registration_group.rb → client/v2.0.1/client_registration_group.rb} +12 -8
- data/lib/davinci_crd_test_kit/client/v2.0.1/client_urls.rb +13 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/crd_client_suite.rb +134 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/appointment_book_receive_request_test.rb +129 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/encounter_discharge_receive_request_test.rb +126 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/encounter_start_receive_request_test.rb +126 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/order_dispatch_receive_request_test.rb +138 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/order_select_receive_request_test.rb +134 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/order_sign_receive_request_test.rb +136 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/must_support/client_card_must_support_coverage_information.rb +93 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/must_support/client_card_must_support_external_reference.rb +62 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/must_support/client_card_must_support_instructions.rb +62 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/registration/client_registration_verification_test.rb +94 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/registration/client_service_registration_attestation_test.rb +40 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_fetched_data_test.rb +86 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_optional_fields_test.rb +63 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_prefetch_equals_queried_test.rb +96 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_required_fields_test.rb +55 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_valid_context_test.rb +70 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_valid_prefetch_test.rb +62 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/verify_response/client_display_cards_attest.rb +83 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/verify_response/inferno_response_validation.rb +79 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/api/client_coverage_info_update_test.rb +212 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/api/client_crd_update_verification_group.rb +18 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/auth/decode_auth_token_test.rb +69 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/auth/retrieve_jwks_test.rb +120 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/auth/token_header_test.rb +92 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/auth/token_payload_test.rb +93 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/cds-services-prefetch-subset-v221.json +198 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/cds-services-v221.json +202 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_appointment_book_group.rb +102 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_cross_hook_group.rb +28 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_encounter_discharge_group.rb +96 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_encounter_start_group.rb +95 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_fhir_api_group.rb +88 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_hooks_group.rb +64 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_long_running_hook_group.rb +32 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_order_dispatch_group.rb +101 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_order_select_group.rb +102 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_order_sign_group.rb +107 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_registration_group.rb +27 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_urls.rb +27 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/crd_client_suite.rb +229 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_card_must_support_coverage_information_test.rb +63 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_fhirpath_collection_as_comma_delimited_string_test.rb +60 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_hook_instances_unique_test.rb +45 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_location_address_propagation_test.rb +135 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_prefetch_complete_and_subset_test.rb +103 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/appointment_book_receive_request_test.rb +156 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/encounter_discharge_receive_request_test.rb +157 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/encounter_start_receive_request_test.rb +157 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/order_dispatch_receive_request_test.rb +165 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/order_select_receive_request_test.rb +165 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/order_sign_receive_request_test.rb +165 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/long_running/client_long_running_receive_request_test.rb +64 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/long_running/client_skip_long_running_attestation_test.rb +49 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/registration/client_registration_verification_test.rb +161 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/registration/client_service_registration_attestation_test.rb +107 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_conformance_test.rb +47 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_coverage_verification_test.rb +152 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_data_fetch_verification_test.rb +55 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_granted_scopes_test.rb +123 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_prefetch_complete_test.rb +127 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_prefetch_profiles_test.rb +55 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_requested_version_test.rb +54 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_secured_transport_test.rb +48 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_response/client_display_cards_attest.rb +74 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_response/hook_response_support_coverage_information_test.rb +30 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_response/inferno_response_validation.rb +77 -0
- data/lib/davinci_crd_test_kit/cross_suite/base_urls.rb +20 -0
- data/lib/davinci_crd_test_kit/cross_suite/cards_identification.rb +312 -0
- data/lib/davinci_crd_test_kit/{cards_validation.rb → cross_suite/cards_validation.rb} +104 -47
- data/lib/davinci_crd_test_kit/cross_suite/coverage-information_stu201_metadata.yml +27 -0
- data/lib/davinci_crd_test_kit/cross_suite/coverage-information_stu221_metadata.yml +60 -0
- data/lib/davinci_crd_test_kit/cross_suite/fhirpath_on_cds_request.rb +177 -0
- data/lib/davinci_crd_test_kit/{hook_request_field_validation.rb → cross_suite/hook_request_field_validation.rb} +282 -203
- data/lib/davinci_crd_test_kit/cross_suite/logical_models_override_helper.rb +220 -0
- data/lib/davinci_crd_test_kit/cross_suite/prefetch_completeness_checker.rb +462 -0
- data/lib/davinci_crd_test_kit/cross_suite/prefetch_contents_validation.rb +81 -0
- data/lib/davinci_crd_test_kit/cross_suite/prefetch_profile_validation.rb +48 -0
- data/lib/davinci_crd_test_kit/cross_suite/profiles_and_resource_types.rb +63 -0
- data/lib/davinci_crd_test_kit/cross_suite/replace_tokens.rb +38 -0
- data/lib/davinci_crd_test_kit/cross_suite/requests_logical_model_validation.rb +202 -0
- data/lib/davinci_crd_test_kit/cross_suite/response_logical_model_validation.rb +274 -0
- data/lib/davinci_crd_test_kit/{suggestion_actions_validation.rb → cross_suite/suggestion_actions_validation.rb} +70 -50
- data/lib/davinci_crd_test_kit/cross_suite/tags.rb +42 -0
- data/lib/davinci_crd_test_kit/metadata.rb +10 -44
- data/lib/davinci_crd_test_kit/requirements/cds-hooks-library_1.0.1_requirements.xlsx +0 -0
- data/lib/davinci_crd_test_kit/requirements/cds-hooks_2.0_requirements.xlsx +0 -0
- data/lib/davinci_crd_test_kit/requirements/cds-hooks_3.0.0-ballot_requirements.xlsx +0 -0
- data/lib/davinci_crd_test_kit/requirements/davinci_crd_test_kit_requirements.csv +742 -65
- data/lib/davinci_crd_test_kit/requirements/generated/crd_client_requirements_coverage.csv +279 -54
- data/lib/davinci_crd_test_kit/requirements/generated/crd_client_v221_requirements_coverage.csv +1430 -0
- data/lib/davinci_crd_test_kit/requirements/generated/crd_server_requirements_coverage.csv +36 -45
- data/lib/davinci_crd_test_kit/requirements/generated/crd_server_v221_requirements_coverage.csv +143 -0
- data/lib/davinci_crd_test_kit/requirements/hl7.fhir.us.davinci-crd_2.0.1_requirements.xlsx +0 -0
- data/lib/davinci_crd_test_kit/requirements/hl7.fhir.us.davinci-crd_2.2.1_requirements.xlsx +0 -0
- data/lib/davinci_crd_test_kit/server/endpoints/jwk_set_endpoint_handler.rb +13 -0
- data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_create_endpoint.rb +23 -0
- data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_delete_endpoint.rb +30 -0
- data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_metadata_endpoint.rb +112 -0
- data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_read_endpoint.rb +21 -0
- data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_request_handler.rb +261 -0
- data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_search_endpoint.rb +561 -0
- data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_update_endpoint.rb +24 -0
- data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/stress-test-Bundle.json +54687 -0
- data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr_endpoints.rb +95 -0
- data/lib/davinci_crd_test_kit/server/jobs/invoke_hook.rb +225 -0
- data/lib/davinci_crd_test_kit/{jwt_helper.rb → server/jwt_helper.rb} +1 -12
- data/lib/davinci_crd_test_kit/server/resource_extractor.rb +68 -0
- data/lib/davinci_crd_test_kit/server/server_abstract_invoke_hook_test.rb +165 -0
- data/lib/davinci_crd_test_kit/server/server_base_urls.rb +30 -0
- data/lib/davinci_crd_test_kit/{server_hook_helper.rb → server/server_hook_helper.rb} +1 -1
- data/lib/davinci_crd_test_kit/{server_hook_request_validation.rb → server/server_hook_request_validation.rb} +1 -1
- data/lib/davinci_crd_test_kit/{test_helper.rb → server/server_test_helper.rb} +7 -3
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Appointment.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/ClaimResponse.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/CommunicationRequest.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Coverage.yml +21 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Device.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/DeviceRequest.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Encounter.yml +7 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Location.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/MedicationRequest.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/NutritionOrder.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Organization.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Patient.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Practitioner.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/PractitionerRole.yml +40 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/ServiceRequest.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Task.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/VisionPrescription.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_server_suite.rb +99 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/discovery/discovery_endpoint_test.rb +90 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/discovery/discovery_services_validation_test.rb +67 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/interaction/server_invoke_hook_test.rb +12 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/must_support/coverage_information_system_action_across_hooks_validation_test.rb +34 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/must_support/external_reference_card_across_hooks_validation_test.rb +30 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/must_support/instructions_card_received_across_hooks_test.rb +27 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_appointment_book_group.rb +191 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_demonstrate_hook_response_group.rb +93 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_discovery_group.rb +62 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_encounter_discharge_group.rb +186 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_encounter_start_group.rb +186 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_hooks_group.rb +73 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_order_dispatch_group.rb +191 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_order_select_group.rb +211 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_order_sign_group.rb +216 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_required_card_response_validation_group.rb +28 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_urls.rb +13 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_request/service_request_context_validation_test.rb +30 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_request/service_request_optional_fields_validation_test.rb +39 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_request/service_request_required_fields_validation_test.rb +40 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/additional_orders_validation_test.rb +59 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/card_optional_fields_validation_test.rb +51 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/coverage_information_system_action_received_test.rb +65 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/coverage_information_system_action_validation_test.rb +120 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/create_or_update_coverage_info_response_validation_test.rb +70 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/external_reference_card_validation_test.rb +37 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/form_completion_response_validation_test.rb +67 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/instructions_card_received_test.rb +30 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/launch_smart_app_card_validation_test.rb +39 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/propose_alternate_request_card_validation_test.rb +46 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/service_response_validation_test.rb +83 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Appointment_withorder.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Appointment_withoutorder.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/CommunicationRequest.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Coverage.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Device.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/DeviceRequest.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Encounter.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Location.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/MedicationRequest.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/NutritionOrder.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Organization.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Patient.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/PractitionerRole.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/ServiceRequest.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/VisionPrescription.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_server_suite.rb +115 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_configuration_test.rb +159 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_endpoint_test.rb +90 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_prefetch_support_test.rb +43 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_services_validation_test.rb +121 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/interaction/server_invoke_hook_test.rb +17 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/must_support/coverage_information_must_support_test.rb +71 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/must_support/coverage_information_system_action_across_hooks_validation_test.rb +36 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/must_support/supported_us_core_versions_test.rb +118 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_appointment_book_group.rb +213 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_demonstrate_hook_response_group.rb +93 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_discovery_group.rb +69 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_encounter_discharge_group.rb +194 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_encounter_start_group.rb +194 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_hooks_group.rb +73 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_order_dispatch_group.rb +214 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_order_select_group.rb +219 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_order_sign_group.rb +241 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_required_card_response_validation_group.rb +30 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_urls.rb +13 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_context_validation_test.rb +30 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_no_custom_extensions_test.rb +120 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_optional_fields_validation_test.rb +39 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_required_fields_validation_test.rb +40 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/additional_orders_validation_test.rb +66 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/all_responses_include_coverage_information_test.rb +123 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/card_optional_fields_validation_test.rb +57 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/coverage_info_configuration_test.rb +83 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/coverage_information_system_action_received_test.rb +65 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/coverage_information_system_action_validation_test.rb +184 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/create_or_update_coverage_info_response_validation_test.rb +75 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/external_reference_card_validation_test.rb +47 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/form_completion_response_validation_test.rb +91 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/hook_request_resource_resolution.rb +137 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/instructions_card_received_test.rb +32 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/launch_smart_app_card_validation_test.rb +49 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/order_dispatch_coverage_information_test.rb +38 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/propose_alternate_request_card_validation_test.rb +54 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/service_response_validation_test.rb +97 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/unknown_cds_hooks_elements_test.rb +78 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/unknown_configuration_test.rb +78 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/unknown_context_test.rb +78 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/verify_response_without_billing_options_test.rb +43 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/verify_response_without_configuration_test.rb +44 -0
- data/lib/davinci_crd_test_kit/version.rb +2 -2
- data/lib/davinci_crd_test_kit.rb +4 -2
- metadata +297 -93
- data/lib/davinci_crd_test_kit/client_fhir_api_group.rb +0 -785
- data/lib/davinci_crd_test_kit/client_hooks_group.rb +0 -74
- data/lib/davinci_crd_test_kit/client_tests/appointment_book_receive_request_test.rb +0 -93
- data/lib/davinci_crd_test_kit/client_tests/client_appointment_book_group.rb +0 -75
- data/lib/davinci_crd_test_kit/client_tests/client_display_cards_attest.rb +0 -48
- data/lib/davinci_crd_test_kit/client_tests/client_encounter_discharge_group.rb +0 -73
- data/lib/davinci_crd_test_kit/client_tests/client_encounter_start_group.rb +0 -73
- data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_create_test.rb +0 -42
- data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_read_test.rb +0 -40
- data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_search_test.rb +0 -232
- data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_update_test.rb +0 -42
- data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_validation_test.rb +0 -61
- data/lib/davinci_crd_test_kit/client_tests/client_order_dispatch_group.rb +0 -79
- data/lib/davinci_crd_test_kit/client_tests/client_order_select_group.rb +0 -82
- data/lib/davinci_crd_test_kit/client_tests/client_order_sign_group.rb +0 -81
- data/lib/davinci_crd_test_kit/client_tests/client_registration_verification_test.rb +0 -88
- data/lib/davinci_crd_test_kit/client_tests/decode_auth_token_test.rb +0 -60
- data/lib/davinci_crd_test_kit/client_tests/encounter_discharge_receive_request_test.rb +0 -90
- data/lib/davinci_crd_test_kit/client_tests/encounter_start_receive_request_test.rb +0 -90
- data/lib/davinci_crd_test_kit/client_tests/hook_request_optional_fields_test.rb +0 -57
- data/lib/davinci_crd_test_kit/client_tests/hook_request_required_fields_test.rb +0 -49
- data/lib/davinci_crd_test_kit/client_tests/hook_request_valid_context_test.rb +0 -68
- data/lib/davinci_crd_test_kit/client_tests/hook_request_valid_prefetch_test.rb +0 -69
- data/lib/davinci_crd_test_kit/client_tests/order_dispatch_receive_request_test.rb +0 -102
- data/lib/davinci_crd_test_kit/client_tests/order_select_receive_request_test.rb +0 -98
- data/lib/davinci_crd_test_kit/client_tests/order_sign_receive_request_test.rb +0 -101
- data/lib/davinci_crd_test_kit/client_tests/retrieve_jwks_test.rb +0 -105
- data/lib/davinci_crd_test_kit/client_tests/submitted_response_validation.rb +0 -48
- data/lib/davinci_crd_test_kit/client_tests/token_header_test.rb +0 -65
- data/lib/davinci_crd_test_kit/client_tests/token_payload_test.rb +0 -78
- data/lib/davinci_crd_test_kit/crd_client_suite.rb +0 -193
- data/lib/davinci_crd_test_kit/crd_options.rb +0 -9
- data/lib/davinci_crd_test_kit/crd_server_suite.rb +0 -125
- data/lib/davinci_crd_test_kit/igs/davinci-crd-2.0.1.tgz +0 -0
- data/lib/davinci_crd_test_kit/routes/cds_services_discovery_handler.rb +0 -18
- data/lib/davinci_crd_test_kit/routes/hook_request_endpoint.rb +0 -77
- data/lib/davinci_crd_test_kit/routes/jwk_set_endpoint_handler.rb +0 -15
- data/lib/davinci_crd_test_kit/server_appointment_book_group.rb +0 -176
- data/lib/davinci_crd_test_kit/server_demonstrate_hook_response_group.rb +0 -77
- data/lib/davinci_crd_test_kit/server_discovery_group.rb +0 -60
- data/lib/davinci_crd_test_kit/server_encounter_discharge_group.rb +0 -170
- data/lib/davinci_crd_test_kit/server_encounter_start_group.rb +0 -170
- data/lib/davinci_crd_test_kit/server_hooks_group.rb +0 -71
- data/lib/davinci_crd_test_kit/server_order_dispatch_group.rb +0 -176
- data/lib/davinci_crd_test_kit/server_order_select_group.rb +0 -195
- data/lib/davinci_crd_test_kit/server_order_sign_group.rb +0 -201
- data/lib/davinci_crd_test_kit/server_required_card_response_validation_group.rb +0 -26
- data/lib/davinci_crd_test_kit/server_tests/additional_orders_validation_test.rb +0 -68
- data/lib/davinci_crd_test_kit/server_tests/card_optional_fields_validation_test.rb +0 -47
- data/lib/davinci_crd_test_kit/server_tests/coverage_information_system_action_across_hooks_validation_test.rb +0 -32
- data/lib/davinci_crd_test_kit/server_tests/coverage_information_system_action_received_test.rb +0 -63
- data/lib/davinci_crd_test_kit/server_tests/coverage_information_system_action_validation_test.rb +0 -118
- data/lib/davinci_crd_test_kit/server_tests/create_or_update_coverage_info_response_validation_test.rb +0 -71
- data/lib/davinci_crd_test_kit/server_tests/discovery_endpoint_test.rb +0 -88
- data/lib/davinci_crd_test_kit/server_tests/discovery_services_validation_test.rb +0 -65
- data/lib/davinci_crd_test_kit/server_tests/external_reference_card_across_hooks_validation_test.rb +0 -28
- data/lib/davinci_crd_test_kit/server_tests/external_reference_card_validation_test.rb +0 -36
- data/lib/davinci_crd_test_kit/server_tests/form_completion_response_validation_test.rb +0 -78
- data/lib/davinci_crd_test_kit/server_tests/instructions_card_received_across_hooks_test.rb +0 -25
- data/lib/davinci_crd_test_kit/server_tests/instructions_card_received_test.rb +0 -26
- data/lib/davinci_crd_test_kit/server_tests/launch_smart_app_card_validation_test.rb +0 -38
- data/lib/davinci_crd_test_kit/server_tests/propose_alternate_request_card_validation_test.rb +0 -63
- data/lib/davinci_crd_test_kit/server_tests/service_call_test.rb +0 -101
- data/lib/davinci_crd_test_kit/server_tests/service_request_context_validation_test.rb +0 -28
- data/lib/davinci_crd_test_kit/server_tests/service_request_optional_fields_validation_test.rb +0 -37
- data/lib/davinci_crd_test_kit/server_tests/service_request_required_fields_validation_test.rb +0 -38
- data/lib/davinci_crd_test_kit/server_tests/service_response_validation_test.rb +0 -81
- data/lib/davinci_crd_test_kit/tags.rb +0 -10
- data/lib/davinci_crd_test_kit/urls.rb +0 -52
- /data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/external_reference.json +0 -0
- /data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/instructions.json +0 -0
- /data/lib/davinci_crd_test_kit/{crd_jwks.json → server/endpoints/crd_jwks.json} +0 -0
- /data/lib/davinci_crd_test_kit/{jwks.rb → server/endpoints/jwks.rb} +0 -0
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
module DaVinciCRDTestKit
|
|
2
|
-
module CRDOptions
|
|
3
|
-
SMART_1 = 'smart_app_launch_1'.freeze
|
|
4
|
-
SMART_2 = 'smart_app_launch_2'.freeze
|
|
5
|
-
|
|
6
|
-
SMART_1_REQUIREMENT = { smart_app_launch_version: SMART_1 }.freeze
|
|
7
|
-
SMART_2_REQUIREMENT = { smart_app_launch_version: SMART_2 }.freeze
|
|
8
|
-
end
|
|
9
|
-
end
|
|
@@ -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
|
|
Binary file
|
|
@@ -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
|