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,60 +0,0 @@
|
|
|
1
|
-
require_relative '../client_hook_request_validation'
|
|
2
|
-
|
|
3
|
-
module DaVinciCRDTestKit
|
|
4
|
-
class DecodeAuthTokenTest < Inferno::Test
|
|
5
|
-
include ClientHookRequestValidation
|
|
6
|
-
id :crd_decode_auth_token
|
|
7
|
-
title 'Bearer token can be decoded'
|
|
8
|
-
description %(
|
|
9
|
-
Verify that the Bearer token is a properly constructed JWT. As per the [CDS hooks specification](https://cds-hooks.hl7.org/2.0#trusting-cds-clients),
|
|
10
|
-
each time a CDS Client transmits a request to a CDS Service which requires authentication, the request MUST
|
|
11
|
-
include an Authorization header presenting the JWT as a "Bearer" token.
|
|
12
|
-
)
|
|
13
|
-
|
|
14
|
-
output :auth_tokens, :auth_token_payloads_json, :auth_token_headers_json
|
|
15
|
-
|
|
16
|
-
def hook_name
|
|
17
|
-
config.options[:hook_name]
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
run do
|
|
21
|
-
load_tagged_requests(hook_name)
|
|
22
|
-
skip_if requests.empty?, "No #{hook_name} requests were made in a previous test as expected."
|
|
23
|
-
auth_tokens = []
|
|
24
|
-
auth_token_payloads_json = []
|
|
25
|
-
auth_token_headers_json = []
|
|
26
|
-
|
|
27
|
-
requests.each_with_index do |request, index|
|
|
28
|
-
@request_number = index + 1
|
|
29
|
-
|
|
30
|
-
authorization_header = request.request_header('Authorization')&.value
|
|
31
|
-
|
|
32
|
-
unless authorization_header.start_with?('Bearer ')
|
|
33
|
-
add_message('error', "#{request_number}Authorization token must be a JWT presented as a `Bearer` token")
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
auth_token = authorization_header.delete_prefix('Bearer ')
|
|
37
|
-
auth_tokens << auth_token
|
|
38
|
-
|
|
39
|
-
begin
|
|
40
|
-
payload, header =
|
|
41
|
-
JWT.decode(
|
|
42
|
-
auth_token,
|
|
43
|
-
nil,
|
|
44
|
-
false
|
|
45
|
-
)
|
|
46
|
-
|
|
47
|
-
auth_token_payloads_json << payload.to_json
|
|
48
|
-
auth_token_headers_json << header.to_json
|
|
49
|
-
rescue StandardError => e
|
|
50
|
-
add_message('error', "#{request_number}Token is not a properly constructed JWT: #{e.message}")
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
output auth_tokens: auth_tokens.to_json,
|
|
54
|
-
auth_token_payloads_json: auth_token_payloads_json.to_json,
|
|
55
|
-
auth_token_headers_json: auth_token_headers_json.to_json
|
|
56
|
-
|
|
57
|
-
no_error_validation('Decoding Authorization header Bearer tokens failed.')
|
|
58
|
-
end
|
|
59
|
-
end
|
|
60
|
-
end
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
require_relative '../urls'
|
|
2
|
-
|
|
3
|
-
module DaVinciCRDTestKit
|
|
4
|
-
class EncounterDischargeReceiveRequestTest < Inferno::Test
|
|
5
|
-
include URLs
|
|
6
|
-
|
|
7
|
-
id :crd_encounter_discharge_request
|
|
8
|
-
title 'Request received for encounter-discharge hook'
|
|
9
|
-
description %(
|
|
10
|
-
This test waits for multiple incoming [encounter-discharge](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#encounter-discharge)
|
|
11
|
-
hook requests and responds to the client with the response types selected as an input.
|
|
12
|
-
)
|
|
13
|
-
verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@197', 'hl7.fhir.us.davinci-crd_2.0.1@243',
|
|
14
|
-
'hl7.fhir.us.davinci-crd_2.0.1@244', 'hl7.fhir.us.davinci-crd_2.0.1@245'
|
|
15
|
-
|
|
16
|
-
config options: { accepts_multiple_requests: true }
|
|
17
|
-
|
|
18
|
-
input :cds_jwt_iss,
|
|
19
|
-
title: 'CRD JWT Issuer',
|
|
20
|
-
description: %(
|
|
21
|
-
Value of the `iss` claim that must be sent on the Bearer token in the `Authorization`
|
|
22
|
-
header of all requests. Run or re-run the **Client Registration** group to set or
|
|
23
|
-
change this value.
|
|
24
|
-
),
|
|
25
|
-
locked: true
|
|
26
|
-
input :encounter_discharge_selected_response_types,
|
|
27
|
-
title: 'Response types to return from encounter-discharge hook requests',
|
|
28
|
-
description: %(
|
|
29
|
-
Select the cards/action response types that the Inferno hook request endpoints will return. The default
|
|
30
|
-
response type that will be returned for this hook is the `Instructions` card type.
|
|
31
|
-
),
|
|
32
|
-
type: 'checkbox',
|
|
33
|
-
default: ['coverage_information', 'external_reference', 'instructions'],
|
|
34
|
-
optional: true,
|
|
35
|
-
options: {
|
|
36
|
-
list_options: [
|
|
37
|
-
{
|
|
38
|
-
label: 'External Reference',
|
|
39
|
-
value: 'external_reference'
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
label: 'Instructions',
|
|
43
|
-
value: 'instructions'
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
label: 'Coverage Information',
|
|
47
|
-
value: 'coverage_information'
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
label: 'Request Form Completion',
|
|
51
|
-
value: 'request_form_completion'
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
label: 'Create/Update Coverage Information',
|
|
55
|
-
value: 'create_update_coverage_info'
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
label: 'Launch SMART Application',
|
|
59
|
-
value: 'launch_smart_app'
|
|
60
|
-
}
|
|
61
|
-
]
|
|
62
|
-
}
|
|
63
|
-
input :encounter_discharge_custom_response,
|
|
64
|
-
title: 'Custom response for encounter-discharge hook requests',
|
|
65
|
-
description: %(
|
|
66
|
-
A JSON string may be provided here to replace the normal response
|
|
67
|
-
from the hook request endpoint
|
|
68
|
-
),
|
|
69
|
-
type: 'textarea',
|
|
70
|
-
optional: true
|
|
71
|
-
|
|
72
|
-
run do
|
|
73
|
-
wait(
|
|
74
|
-
identifier: "encounter-discharge #{cds_jwt_iss}",
|
|
75
|
-
message: %(
|
|
76
|
-
**Encounter Discharge CDS Service Test**:
|
|
77
|
-
|
|
78
|
-
Invoke the encounter-discharge hook and send requests to:
|
|
79
|
-
|
|
80
|
-
`#{encounter_discharge_url}`
|
|
81
|
-
|
|
82
|
-
Inferno will process the requests and return CDS cards if successful.
|
|
83
|
-
|
|
84
|
-
[Click here](#{resume_pass_url}?token=encounter-discharge%20#{cds_jwt_iss}) when you have finished submitting
|
|
85
|
-
requests.
|
|
86
|
-
)
|
|
87
|
-
)
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
end
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
require_relative '../urls'
|
|
2
|
-
|
|
3
|
-
module DaVinciCRDTestKit
|
|
4
|
-
class EncounterStartReceiveRequestTest < Inferno::Test
|
|
5
|
-
include URLs
|
|
6
|
-
|
|
7
|
-
id :crd_encounter_start_request
|
|
8
|
-
title 'Request received for encounter-start hook'
|
|
9
|
-
description %(
|
|
10
|
-
This test waits for multiple incoming [encounter-start](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#encounter-start)
|
|
11
|
-
hook requests and responds to the client with the response types selected as an input.
|
|
12
|
-
)
|
|
13
|
-
verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@186', 'hl7.fhir.us.davinci-crd_2.0.1@243',
|
|
14
|
-
'hl7.fhir.us.davinci-crd_2.0.1@244', 'hl7.fhir.us.davinci-crd_2.0.1@245'
|
|
15
|
-
|
|
16
|
-
config options: { accepts_multiple_requests: true }
|
|
17
|
-
|
|
18
|
-
input :cds_jwt_iss,
|
|
19
|
-
title: 'CRD JWT Issuer',
|
|
20
|
-
description: %(
|
|
21
|
-
Value of the `iss` claim that must be sent on the Bearer token in the `Authorization`
|
|
22
|
-
header of all requests. Run or re-run the **Client Registration** group to set or
|
|
23
|
-
change this value.
|
|
24
|
-
),
|
|
25
|
-
locked: true
|
|
26
|
-
input :encounter_start_selected_response_types,
|
|
27
|
-
title: 'Response types to return from encounter-start hook requests',
|
|
28
|
-
description: %(
|
|
29
|
-
Select the cards/action response types that the Inferno hook request endpoints will return. The default
|
|
30
|
-
response type that will be returned for this hook is the `Instructions` card type.
|
|
31
|
-
),
|
|
32
|
-
type: 'checkbox',
|
|
33
|
-
default: ['coverage_information', 'external_reference', 'instructions'],
|
|
34
|
-
optional: true,
|
|
35
|
-
options: {
|
|
36
|
-
list_options: [
|
|
37
|
-
{
|
|
38
|
-
label: 'External Reference',
|
|
39
|
-
value: 'external_reference'
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
label: 'Instructions',
|
|
43
|
-
value: 'instructions'
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
label: 'Coverage Information',
|
|
47
|
-
value: 'coverage_information'
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
label: 'Request Form Completion',
|
|
51
|
-
value: 'request_form_completion'
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
label: 'Create/Update Coverage Information',
|
|
55
|
-
value: 'create_update_coverage_info'
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
label: 'Launch SMART Application',
|
|
59
|
-
value: 'launch_smart_app'
|
|
60
|
-
}
|
|
61
|
-
]
|
|
62
|
-
}
|
|
63
|
-
input :encounter_start_custom_response,
|
|
64
|
-
title: 'Custom response for encounter-start hook requests',
|
|
65
|
-
description: %(
|
|
66
|
-
A JSON string may be provided here to replace the normal response
|
|
67
|
-
from the hook request endpoint
|
|
68
|
-
),
|
|
69
|
-
type: 'textarea',
|
|
70
|
-
optional: true
|
|
71
|
-
|
|
72
|
-
run do
|
|
73
|
-
wait(
|
|
74
|
-
identifier: "encounter-start #{cds_jwt_iss}",
|
|
75
|
-
message: %(
|
|
76
|
-
**Encounter Start CDS Service Test**:
|
|
77
|
-
|
|
78
|
-
Invoke the encounter-start hook and send requests to:
|
|
79
|
-
|
|
80
|
-
`#{encounter_start_url}`
|
|
81
|
-
|
|
82
|
-
Inferno will process the requests and return CDS cards if successful.
|
|
83
|
-
|
|
84
|
-
[Click here](#{resume_pass_url}?token=enounter-start%20#{cds_jwt_iss}) when you have finished submitting
|
|
85
|
-
requests.
|
|
86
|
-
)
|
|
87
|
-
)
|
|
88
|
-
end
|
|
89
|
-
end
|
|
90
|
-
end
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
require_relative '../client_hook_request_validation'
|
|
2
|
-
|
|
3
|
-
module DaVinciCRDTestKit
|
|
4
|
-
class HookRequestOptionalFieldsTest < Inferno::Test
|
|
5
|
-
include ClientHookRequestValidation
|
|
6
|
-
include URLs
|
|
7
|
-
|
|
8
|
-
id :crd_hook_request_optional_fields
|
|
9
|
-
title 'Hook request contains optional fields'
|
|
10
|
-
description %(
|
|
11
|
-
Under the [CDS hooks HTTP Request section](https://cds-hooks.hl7.org/2.0/#http-request_1), the specification
|
|
12
|
-
requires that a CDS service request SHALL include a JSON POST body which MAY contain the following optional input
|
|
13
|
-
fields:
|
|
14
|
-
* `fhirServer` - *URL*
|
|
15
|
-
* `fhirAuthorization` - *object*
|
|
16
|
-
* `prefetch` - *object*
|
|
17
|
-
|
|
18
|
-
This test checks for the presence of these fields and if they are of the correct type. This test is optional and
|
|
19
|
-
will not fail if the hook request does not contain an optional field, it only produces an informational message.
|
|
20
|
-
If the client provides its FHIR server URL in the `fhirServer` field, and it's authorization token in the
|
|
21
|
-
`fhirAuthorization` field object, they will be produced as an output from this test to be used in
|
|
22
|
-
subsequent tests.
|
|
23
|
-
)
|
|
24
|
-
optional
|
|
25
|
-
|
|
26
|
-
def hook_name
|
|
27
|
-
config.options[:hook_name]
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
output :client_fhir_server
|
|
31
|
-
output :client_access_token,
|
|
32
|
-
optional: true
|
|
33
|
-
|
|
34
|
-
run do
|
|
35
|
-
load_tagged_requests(hook_name)
|
|
36
|
-
skip_if requests.empty?, "No #{hook_name} requests were made in a previous test as expected."
|
|
37
|
-
client_fhir_server = nil
|
|
38
|
-
requests.each_with_index do |request, index|
|
|
39
|
-
@request_number = index + 1
|
|
40
|
-
request_body = json_parse(request.request_body)
|
|
41
|
-
if request_body.blank?
|
|
42
|
-
add_message('error', "#{request_number}Hook request body cannot be empty.")
|
|
43
|
-
next
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
fhir_server_info = hook_request_optional_fields_check(request_body)
|
|
47
|
-
client_fhir_server ||= fhir_server_info
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
unless client_fhir_server.nil?
|
|
51
|
-
output client_fhir_server: client_fhir_server[:fhir_server_uri],
|
|
52
|
-
client_access_token: client_fhir_server[:fhir_access_token]
|
|
53
|
-
end
|
|
54
|
-
no_error_validation('Some service requests contain invalid optional fields.')
|
|
55
|
-
end
|
|
56
|
-
end
|
|
57
|
-
end
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
require_relative '../client_hook_request_validation'
|
|
2
|
-
|
|
3
|
-
module DaVinciCRDTestKit
|
|
4
|
-
class HookRequestRequiredFieldsTest < Inferno::Test
|
|
5
|
-
include ClientHookRequestValidation
|
|
6
|
-
include URLs
|
|
7
|
-
|
|
8
|
-
id :crd_hook_request_required_fields
|
|
9
|
-
title 'Hook request contains required fields'
|
|
10
|
-
description %(
|
|
11
|
-
Under the [CDS hooks HTTP Request section](https://cds-hooks.hl7.org/2.0/#http-request_1), the specification
|
|
12
|
-
requires that a CDS service request SHALL include a JSON POST body with the following input fields:
|
|
13
|
-
* `hook` - *string*
|
|
14
|
-
* `hookInstance` - *string*
|
|
15
|
-
* `context` - *object*
|
|
16
|
-
|
|
17
|
-
Additionally, if the optional `fhirAuthorization` field is present, then the `fhirServer` field is required.
|
|
18
|
-
|
|
19
|
-
This test also checks that the `hook` field contains the correct CDS service name that the CDS client is sending
|
|
20
|
-
a request for
|
|
21
|
-
)
|
|
22
|
-
|
|
23
|
-
def hook_name
|
|
24
|
-
config.options[:hook_name]
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
output :contexts, :prefetches
|
|
28
|
-
|
|
29
|
-
run do
|
|
30
|
-
load_tagged_requests(hook_name)
|
|
31
|
-
skip_if requests.empty?, "No #{hook_name} requests were made in a previous test as expected."
|
|
32
|
-
contexts = []
|
|
33
|
-
prefetches = []
|
|
34
|
-
requests.each_with_index do |request, index|
|
|
35
|
-
@request_number = index + 1
|
|
36
|
-
request_body = json_parse(request.request_body)
|
|
37
|
-
next if request_body.blank?
|
|
38
|
-
|
|
39
|
-
contexts << request_body['context'] if request_body['context'].is_a?(Hash)
|
|
40
|
-
prefetches << request_body['prefetch'] if request_body['prefetch'].is_a?(Hash)
|
|
41
|
-
hook_request_required_fields_check(request_body, hook_name)
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
output contexts: contexts.to_json,
|
|
45
|
-
prefetches: prefetches.to_json
|
|
46
|
-
no_error_validation('Some service requests made are not valid.')
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
end
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
require_relative '../client_hook_request_validation'
|
|
2
|
-
|
|
3
|
-
module DaVinciCRDTestKit
|
|
4
|
-
class HookRequestValidContextTest < Inferno::Test
|
|
5
|
-
include URLs
|
|
6
|
-
include ClientHookRequestValidation
|
|
7
|
-
|
|
8
|
-
id :crd_hook_request_valid_context
|
|
9
|
-
title 'Hook contains valid context'
|
|
10
|
-
description %(
|
|
11
|
-
As stated in the [CDS hooks specification](https://cds-hooks.hl7.org/2.0#http-request), a CDS service request's
|
|
12
|
-
`context` field contains hook-specific contextual data that the CDS service will need. The context is specified
|
|
13
|
-
in the hook definition to guide developers on the information available at the point in the workflow when the hook
|
|
14
|
-
is triggered.
|
|
15
|
-
|
|
16
|
-
The `context` requirements for each [hook specified in the CRD IG](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html)
|
|
17
|
-
can be found below:
|
|
18
|
-
* [appointment-book](https://cds-hooks.hl7.org/hooks/appointment-book/2023SepSTU1Ballot/appointment-book/)
|
|
19
|
-
* [encounter-start](https://cds-hooks.hl7.org/hooks/encounter-start/2023SepSTU1Ballot/encounter-start/)
|
|
20
|
-
* [encounter-discharge](https://cds-hooks.hl7.org/hooks/encounter-discharge/2023SepSTU1Ballot/encounter-discharge/)
|
|
21
|
-
* [order-select](https://cds-hooks.hl7.org/hooks/order-select/2023SepSTU1Ballot/order-select/)
|
|
22
|
-
* [order-dispatch](https://cds-hooks.hl7.org/hooks/order-dispatch/2023SepSTU1Ballot/order-dispatch/)
|
|
23
|
-
* [order-sign](https://cds-hooks.org/hooks/order-sign/)
|
|
24
|
-
|
|
25
|
-
This test performs the following:
|
|
26
|
-
* Verifies that the incoming hook request's `context` field contains the fields required by each hook and
|
|
27
|
-
that they are in the correct format
|
|
28
|
-
* Checks the optional fields and ensures they are in the correct format
|
|
29
|
-
* Validates any resources contained in a `context` field that contains a Bundle or FHIR resource
|
|
30
|
-
* Makes FHIR requests for any `context` fields that contain an id or reference and validates each resource
|
|
31
|
-
response against its corresponding CRD resource profile
|
|
32
|
-
* Check some specific `context` requirements for hooks that have special requirements for certain fields
|
|
33
|
-
|
|
34
|
-
The client must provide its FHIR server URL and access token in the hook request in order to run
|
|
35
|
-
this test.
|
|
36
|
-
)
|
|
37
|
-
verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@254'
|
|
38
|
-
|
|
39
|
-
input :contexts, :client_fhir_server
|
|
40
|
-
input :client_access_token,
|
|
41
|
-
optional: true
|
|
42
|
-
|
|
43
|
-
fhir_client do
|
|
44
|
-
url :client_fhir_server
|
|
45
|
-
bearer_token :client_access_token
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def hook_name
|
|
49
|
-
config.options[:hook_name]
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
run do
|
|
53
|
-
hook_contexts = json_parse(contexts)
|
|
54
|
-
if hook_contexts
|
|
55
|
-
skip_if(hook_contexts.none?(&:present?), "No #{hook_name} requests contained the `context` field.")
|
|
56
|
-
hook_contexts.each_with_index do |context, index|
|
|
57
|
-
@request_number = index + 1
|
|
58
|
-
if context.blank?
|
|
59
|
-
add_message('error', "#{request_number}Missing required context field.")
|
|
60
|
-
next
|
|
61
|
-
end
|
|
62
|
-
hook_request_context_check(context, hook_name)
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
no_error_validation('Context is not valid.')
|
|
66
|
-
end
|
|
67
|
-
end
|
|
68
|
-
end
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
require_relative '../client_hook_request_validation'
|
|
2
|
-
|
|
3
|
-
module DaVinciCRDTestKit
|
|
4
|
-
class HookRequestValidPrefetchTest < Inferno::Test
|
|
5
|
-
include ClientHookRequestValidation
|
|
6
|
-
include URLs
|
|
7
|
-
|
|
8
|
-
id :crd_hook_request_valid_prefetch
|
|
9
|
-
title 'Hook contains valid prefetch response'
|
|
10
|
-
description %(
|
|
11
|
-
As stated in the [CDS hooks specification](https://cds-hooks.hl7.org/2.0#http-request), a CDS service request's
|
|
12
|
-
`prefetch` field is an optional field that contains key/value pairs of FHIR queries that the service is requesting
|
|
13
|
-
the CDS Client to perform and provide on each service call. The key is a string that describes the type of data
|
|
14
|
-
being requested and the value is a string representing the FHIR query. See [Prefetch Template](https://cds-hooks.hl7.org/2.0#prefetch-template)
|
|
15
|
-
for more information about how the `prefetch` formatting works.
|
|
16
|
-
|
|
17
|
-
This test verifies that the incoming hook request's `prefetch` field is in a valid JSON format and validates each
|
|
18
|
-
contained resource against its corresponding CRD resource profile. This test is optional and will be skipped if no
|
|
19
|
-
`prefetch` field is contained in the hook request.
|
|
20
|
-
)
|
|
21
|
-
verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@43'
|
|
22
|
-
optional
|
|
23
|
-
|
|
24
|
-
input :contexts, :prefetches
|
|
25
|
-
|
|
26
|
-
def hook_name
|
|
27
|
-
config.options[:hook_name]
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def cds_services_json
|
|
31
|
-
JSON.parse(File.read(File.join(
|
|
32
|
-
__dir__, '..', 'routes', 'cds-services.json'
|
|
33
|
-
)))['services']
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def advertised_prefetch_fields
|
|
37
|
-
advertised_hook_service = cds_services_json.find { |service| service['hook'] == hook_name }
|
|
38
|
-
advertised_hook_service['prefetch']
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
run do
|
|
42
|
-
hook_contexts = json_parse(contexts)
|
|
43
|
-
hook_prefetches = json_parse(prefetches)
|
|
44
|
-
|
|
45
|
-
if hook_contexts && hook_prefetches
|
|
46
|
-
skip_if(hook_prefetches.none? do |prefetch|
|
|
47
|
-
prefetch_index = hook_prefetches.find_index(prefetch)
|
|
48
|
-
prefetch.present? && hook_contexts[prefetch_index].present?
|
|
49
|
-
end, "No #{hook_name} requests contained both the `context` and `prefetch` field.")
|
|
50
|
-
|
|
51
|
-
hook_prefetches.each_with_index do |prefetch, index|
|
|
52
|
-
@request_number = index + 1
|
|
53
|
-
context = hook_contexts[index]
|
|
54
|
-
|
|
55
|
-
info "#{request_number}Received hook request does not contain the `prefetch` field." if prefetch.blank?
|
|
56
|
-
if context.blank?
|
|
57
|
-
info %(#{request_number}Received hook request does not contain the `context` field
|
|
58
|
-
which is needed to validate the `prefetch` field)
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
next if prefetch.blank? || context.blank?
|
|
62
|
-
|
|
63
|
-
hook_request_prefetch_check(advertised_prefetch_fields, prefetch, context)
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
no_error_validation('Prefetch is not valid.')
|
|
67
|
-
end
|
|
68
|
-
end
|
|
69
|
-
end
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
require_relative '../urls'
|
|
2
|
-
|
|
3
|
-
module DaVinciCRDTestKit
|
|
4
|
-
class OrderDispatchReceiveRequestTest < Inferno::Test
|
|
5
|
-
include URLs
|
|
6
|
-
|
|
7
|
-
id :crd_order_dispatch_request
|
|
8
|
-
title 'Request received for order-dispatch hook'
|
|
9
|
-
description %(
|
|
10
|
-
This test waits for multiple incoming [order-dispatch](https://hl7.org/fhir/us/davinci-crd/STU2/hooks.html#order-dispatch)
|
|
11
|
-
hook requests and responds to the client with the response types selected as an input. This hook is a 'primary'
|
|
12
|
-
hook, meaning that CRD Servers SHALL, at minimum, return a [Coverage Information](https://hl7.org/fhir/us/davinci-crd/STU2/StructureDefinition-ext-coverage-information.html)
|
|
13
|
-
system action for these hooks, even if the response indicates that further information is needed or that the
|
|
14
|
-
level of detail provided is insufficient to determine coverage.
|
|
15
|
-
)
|
|
16
|
-
verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@205',
|
|
17
|
-
'hl7.fhir.us.davinci-crd_2.0.1@207', 'hl7.fhir.us.davinci-crd_2.0.1@243',
|
|
18
|
-
'hl7.fhir.us.davinci-crd_2.0.1@244', 'hl7.fhir.us.davinci-crd_2.0.1@245'
|
|
19
|
-
|
|
20
|
-
config options: { accepts_multiple_requests: true }
|
|
21
|
-
|
|
22
|
-
input :cds_jwt_iss,
|
|
23
|
-
title: 'CRD JWT Issuer',
|
|
24
|
-
description: %(
|
|
25
|
-
Value of the `iss` claim that must be sent on the Bearer token in the `Authorization`
|
|
26
|
-
header of all requests. Run or re-run the **Client Registration** group to set or
|
|
27
|
-
change this value.
|
|
28
|
-
),
|
|
29
|
-
locked: true
|
|
30
|
-
input :order_dispatch_selected_response_types,
|
|
31
|
-
title: 'Response types to return from order-dispatch hook requests',
|
|
32
|
-
description: %(
|
|
33
|
-
Select the cards/action response types that the Inferno hook request endpoints will return. The default
|
|
34
|
-
response type that will be returned for this hook is the `Coverage Information` card type.
|
|
35
|
-
),
|
|
36
|
-
type: 'checkbox',
|
|
37
|
-
default: ['coverage_information', 'external_reference', 'instructions'],
|
|
38
|
-
optional: true,
|
|
39
|
-
options: {
|
|
40
|
-
list_options: [
|
|
41
|
-
{
|
|
42
|
-
label: 'External Reference',
|
|
43
|
-
value: 'external_reference'
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
label: 'Instructions',
|
|
47
|
-
value: 'instructions'
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
label: 'Coverage Information',
|
|
51
|
-
value: 'coverage_information'
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
label: 'Request Form Completion',
|
|
55
|
-
value: 'request_form_completion'
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
label: 'Create/Update Coverage Information',
|
|
59
|
-
value: 'create_update_coverage_info'
|
|
60
|
-
},
|
|
61
|
-
{
|
|
62
|
-
label: 'Launch SMART Application',
|
|
63
|
-
value: 'launch_smart_app'
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
label: 'Propose Alternate Request',
|
|
67
|
-
value: 'propose_alternate_request'
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
label: 'Additional Orders as Companions/Prerequisites',
|
|
71
|
-
value: 'companions_prerequisites'
|
|
72
|
-
}
|
|
73
|
-
]
|
|
74
|
-
}
|
|
75
|
-
input :order_dispatch_custom_response,
|
|
76
|
-
title: 'Custom response for order-dispatch hook requests',
|
|
77
|
-
description: %(
|
|
78
|
-
A JSON string may be provided here to replace the normal response
|
|
79
|
-
from the hook request endpoint
|
|
80
|
-
),
|
|
81
|
-
type: 'textarea',
|
|
82
|
-
optional: true
|
|
83
|
-
|
|
84
|
-
run do
|
|
85
|
-
wait(
|
|
86
|
-
identifier: "order-dispatch #{cds_jwt_iss}",
|
|
87
|
-
message: %(
|
|
88
|
-
**Order Dispatch CDS Service Test**:
|
|
89
|
-
|
|
90
|
-
Invoke the order-dispatch hook and send requests to:
|
|
91
|
-
|
|
92
|
-
`#{order_dispatch_url}`
|
|
93
|
-
|
|
94
|
-
Inferno will process the requests and return CDS cards if successful.
|
|
95
|
-
|
|
96
|
-
[Click here](#{resume_pass_url}?token=order-dispatch%20#{cds_jwt_iss}) when you have finished submitting
|
|
97
|
-
requests.
|
|
98
|
-
)
|
|
99
|
-
)
|
|
100
|
-
end
|
|
101
|
-
end
|
|
102
|
-
end
|