davinci_crd_test_kit 0.12.2 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +59 -2
- 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 +308 -101
- data/lib/davinci_crd_test_kit/client_fhir_api_group.rb +0 -785
- data/lib/davinci_crd_test_kit/client_hooks_group.rb +0 -75
- 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 -41
- data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_read_test.rb +0 -39
- 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 -41
- data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_validation_test.rb +0 -60
- 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 -44
- 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 -185
- 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,101 +0,0 @@
|
|
|
1
|
-
require_relative '../server_hook_helper'
|
|
2
|
-
require_relative '../tags'
|
|
3
|
-
|
|
4
|
-
module DaVinciCRDTestKit
|
|
5
|
-
class ServiceCallTest < Inferno::Test
|
|
6
|
-
include ServerHookHelper
|
|
7
|
-
|
|
8
|
-
title 'Submit user-defined service requests'
|
|
9
|
-
id :crd_service_call_test
|
|
10
|
-
description %(
|
|
11
|
-
This test initiates POST request(s) to a specified CDS Service using the JSON body list provided by the user.
|
|
12
|
-
As indicated in the [CDS Hooks specification section on Calling a CDS Service](https://cds-hooks.hl7.org/2.0/#calling-a-cds-service),
|
|
13
|
-
the service endpoint is constructed by appending the individual service id to the CDS Service base URL,
|
|
14
|
-
following the format `{baseUrl}/cds-services/{service.id}`.
|
|
15
|
-
|
|
16
|
-
If running this group only, the user will need to provide the `service.id` to call the specified service.
|
|
17
|
-
Otherwise, the `service.id` is derived from the CDS Services that are retrieved through a query to the
|
|
18
|
-
discovery endpoint.
|
|
19
|
-
|
|
20
|
-
The test will be skipped if the CRD server does not host a CDS Service corresponding to the hook that
|
|
21
|
-
is being tested.
|
|
22
|
-
|
|
23
|
-
The test is deemed successful if the CRD server returns a 200 HTTP response for all requests.
|
|
24
|
-
)
|
|
25
|
-
input_order :base_url, :encryption_method, :jwks_kid
|
|
26
|
-
input :base_url
|
|
27
|
-
input :service_ids,
|
|
28
|
-
description: %(
|
|
29
|
-
If blank, Inferno will attempt to infer the service id to use by finding a service entry in the
|
|
30
|
-
Discovery response for the target hook. If it cannot be inferred, the tests will be skipped.
|
|
31
|
-
),
|
|
32
|
-
optional: true
|
|
33
|
-
input :service_request_bodies,
|
|
34
|
-
optional: true,
|
|
35
|
-
type: 'textarea',
|
|
36
|
-
description: 'To send multiple requests, provide as a JSON list, e.g., [json_body_1, json_body_2].'
|
|
37
|
-
input :encryption_method,
|
|
38
|
-
title: 'JWT Signing Algorithm',
|
|
39
|
-
description: <<~DESCRIPTION,
|
|
40
|
-
CDS Hooks recommends ES384 and RS384 for JWT signature verification.
|
|
41
|
-
Select which method to use.
|
|
42
|
-
DESCRIPTION
|
|
43
|
-
type: 'radio',
|
|
44
|
-
options: {
|
|
45
|
-
list_options: [
|
|
46
|
-
{
|
|
47
|
-
label: 'ES384',
|
|
48
|
-
value: 'ES384'
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
label: 'RS384',
|
|
52
|
-
value: 'RS384'
|
|
53
|
-
}
|
|
54
|
-
]
|
|
55
|
-
}
|
|
56
|
-
input :jwks_kid,
|
|
57
|
-
title: 'CDS Services JWKS kid',
|
|
58
|
-
description: <<~DESCRIPTION,
|
|
59
|
-
The key ID of the JWKS private key to use for signing the JWTs when invoking a CDS service endpoint
|
|
60
|
-
requiring authentication.
|
|
61
|
-
Defaults to the first JWK in the list if no kid is supplied.
|
|
62
|
-
DESCRIPTION
|
|
63
|
-
optional: true
|
|
64
|
-
output :invoked_hook
|
|
65
|
-
|
|
66
|
-
run do
|
|
67
|
-
discovery_url = "#{base_url.chomp('/')}/cds-services"
|
|
68
|
-
skip_if service_request_bodies.blank?,
|
|
69
|
-
'Request body not provided, skipping test.'
|
|
70
|
-
assert_valid_json(service_request_bodies)
|
|
71
|
-
|
|
72
|
-
payloads = [JSON.parse(service_request_bodies)].flatten
|
|
73
|
-
skip_if tested_hook_name == ANY_HOOK_TAG && payloads.length != 1,
|
|
74
|
-
'The *Demonstrate a Hook Invocation* test supports only one request body.'
|
|
75
|
-
invoked_hook = identify_hook(payloads)
|
|
76
|
-
service_id = target_service_id(service_ids, invoked_hook)
|
|
77
|
-
skip_if service_id.blank?, "No service id provided or discovered for the #{invoked_hook} hook"
|
|
78
|
-
|
|
79
|
-
service_endpoint = "#{discovery_url}/#{service_id}"
|
|
80
|
-
token = JwtHelper.build(
|
|
81
|
-
aud: service_endpoint,
|
|
82
|
-
iss: inferno_base_url,
|
|
83
|
-
jku: "#{inferno_base_url}/jwks.json",
|
|
84
|
-
kid: jwks_kid,
|
|
85
|
-
encryption_method:
|
|
86
|
-
)
|
|
87
|
-
headers = { 'Content-type' => 'application/json', 'Authorization' => "Bearer #{token}" }
|
|
88
|
-
|
|
89
|
-
payloads.each do |payload|
|
|
90
|
-
post(service_endpoint, body: payload.to_json, headers:, tags: [tested_hook_name])
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
output(invoked_hook:)
|
|
94
|
-
|
|
95
|
-
requests.each do |request|
|
|
96
|
-
assert_response_status(200, request:)
|
|
97
|
-
assert_valid_json(request.response_body)
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
|
-
end
|
|
101
|
-
end
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
require_relative '../server_hook_request_validation'
|
|
2
|
-
require_relative '../test_helper'
|
|
3
|
-
require_relative '../server_hook_helper'
|
|
4
|
-
|
|
5
|
-
module DaVinciCRDTestKit
|
|
6
|
-
class ServiceRequestContextValidationTest < Inferno::Test
|
|
7
|
-
include DaVinciCRDTestKit::ServerHookRequestValidation
|
|
8
|
-
include DaVinciCRDTestKit::TestHelper
|
|
9
|
-
include DaVinciCRDTestKit::ServerHookHelper
|
|
10
|
-
|
|
11
|
-
title 'All service requests contain valid context'
|
|
12
|
-
id :crd_service_request_context_validation
|
|
13
|
-
description %(
|
|
14
|
-
This test verifies that all service requests `context` field is valid and contains all the
|
|
15
|
-
required fields.
|
|
16
|
-
)
|
|
17
|
-
input :contexts, :invoked_hook
|
|
18
|
-
|
|
19
|
-
run do
|
|
20
|
-
parsed_contexts = parse_json(contexts)
|
|
21
|
-
parsed_contexts.each do |context|
|
|
22
|
-
hook_request_context_check(context, invoked_hook)
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
no_error_validation('Some contexts are not valid.')
|
|
26
|
-
end
|
|
27
|
-
end
|
|
28
|
-
end
|
data/lib/davinci_crd_test_kit/server_tests/service_request_optional_fields_validation_test.rb
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
require_relative '../server_hook_request_validation'
|
|
2
|
-
require_relative '../server_hook_helper'
|
|
3
|
-
|
|
4
|
-
module DaVinciCRDTestKit
|
|
5
|
-
class ServiceRequestOptionalFieldsValidationTest < Inferno::Test
|
|
6
|
-
include DaVinciCRDTestKit::ServerHookRequestValidation
|
|
7
|
-
include DaVinciCRDTestKit::ServerHookHelper
|
|
8
|
-
|
|
9
|
-
title 'All service requests contain optional fields'
|
|
10
|
-
id :crd_service_request_optional_fields_validation
|
|
11
|
-
description %(
|
|
12
|
-
This optional test reviews the user-submitted CRD service requests for the presence of optional fields:
|
|
13
|
-
`fhirAuthorization` and `prefetch`.
|
|
14
|
-
|
|
15
|
-
The test will not fail if these optional fields are missing from a service request; instead, it generates an
|
|
16
|
-
informational message.
|
|
17
|
-
)
|
|
18
|
-
optional
|
|
19
|
-
|
|
20
|
-
run do
|
|
21
|
-
load_tagged_requests(tested_hook_name)
|
|
22
|
-
skip_if requests.empty?, "No #{tested_hook_name} request was made in a previous test as expected."
|
|
23
|
-
|
|
24
|
-
requests.each_with_index do |request, index|
|
|
25
|
-
@request_number = index + 1
|
|
26
|
-
request_body = json_parse(request.request_body)
|
|
27
|
-
if request_body.blank?
|
|
28
|
-
add_message('error', "#{request_number}Hook request body cannot be empty.")
|
|
29
|
-
next
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
hook_request_optional_fields_check(request_body)
|
|
33
|
-
end
|
|
34
|
-
no_error_validation('Some service requests have invalid optional fields.')
|
|
35
|
-
end
|
|
36
|
-
end
|
|
37
|
-
end
|
data/lib/davinci_crd_test_kit/server_tests/service_request_required_fields_validation_test.rb
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
require_relative '../server_hook_request_validation'
|
|
2
|
-
require_relative '../server_hook_helper'
|
|
3
|
-
|
|
4
|
-
module DaVinciCRDTestKit
|
|
5
|
-
class ServiceRequestRequiredFieldsValidationTest < Inferno::Test
|
|
6
|
-
include DaVinciCRDTestKit::ServerHookRequestValidation
|
|
7
|
-
include DaVinciCRDTestKit::ServerHookHelper
|
|
8
|
-
|
|
9
|
-
title 'All service requests contain required fields'
|
|
10
|
-
id :crd_service_request_required_fields_validation
|
|
11
|
-
description %(
|
|
12
|
-
This test validates all CRD service requests provided by the user, ensuring each includes all required fields
|
|
13
|
-
specified in the [CDS Hooks spec section on Calling a CDS Service](https://cds-hooks.hl7.org/2.0/#calling-a-cds-service):
|
|
14
|
-
`hook`, `hookInstance`, and `context`. Furthermore, the test checks for the conditional presence of the
|
|
15
|
-
`fhirServer` field if `fhirAuthorization` is included.
|
|
16
|
-
)
|
|
17
|
-
input :invoked_hook
|
|
18
|
-
output :contexts
|
|
19
|
-
|
|
20
|
-
run do
|
|
21
|
-
load_tagged_requests(tested_hook_name)
|
|
22
|
-
skip_if requests.empty?, "No #{tested_hook_name} request was made in a previous test as expected."
|
|
23
|
-
contexts = []
|
|
24
|
-
requests.each_with_index do |request, index|
|
|
25
|
-
@request_number = index + 1
|
|
26
|
-
request_body = json_parse(request.request_body)
|
|
27
|
-
next if request_body.blank?
|
|
28
|
-
|
|
29
|
-
contexts << request_body['context'] if request_body['context'].is_a?(Hash)
|
|
30
|
-
hook_request_required_fields_check(request_body, invoked_hook)
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
output contexts: contexts.to_json
|
|
34
|
-
|
|
35
|
-
no_error_validation('Some service requests made are not valid.')
|
|
36
|
-
end
|
|
37
|
-
end
|
|
38
|
-
end
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
require_relative '../cards_validation'
|
|
2
|
-
require_relative '../server_hook_helper'
|
|
3
|
-
|
|
4
|
-
module DaVinciCRDTestKit
|
|
5
|
-
class ServiceResponseValidationTest < Inferno::Test
|
|
6
|
-
include DaVinciCRDTestKit::CardsValidation
|
|
7
|
-
include DaVinciCRDTestKit::ServerHookHelper
|
|
8
|
-
|
|
9
|
-
title 'All service responses contain valid cards and optional systemActions'
|
|
10
|
-
id :crd_service_response_validation
|
|
11
|
-
description %(
|
|
12
|
-
As per the [CDS Hooks spec section on CDS Service Response](https://cds-hooks.hl7.org/2.0/#cds-service-response),
|
|
13
|
-
a successful server's response to a service request must be a JSON object containing a `cards` array.
|
|
14
|
-
It must also contain a `systemActions` array for `appointment-book` and `order-sign` hook.
|
|
15
|
-
|
|
16
|
-
Each card must contain the following required fields: `summary`, `indicator`, and `source`.
|
|
17
|
-
The required fields must have a valid data structure.
|
|
18
|
-
)
|
|
19
|
-
input :invoked_hook
|
|
20
|
-
output :valid_cards, :valid_system_actions
|
|
21
|
-
|
|
22
|
-
SYSTEM_ACTIONS_HOOK_NAMES = ['appointment-book', 'order-sign', 'order-dispatch'].freeze
|
|
23
|
-
|
|
24
|
-
def valid_cards
|
|
25
|
-
@valid_cards ||= []
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def valid_system_actions
|
|
29
|
-
@valid_system_actions ||= []
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def system_actions_check(system_actions)
|
|
33
|
-
system_actions.each do |action|
|
|
34
|
-
current_error_count = messages.count { |msg| msg[:type] == 'error' }
|
|
35
|
-
action_fields_validation(action)
|
|
36
|
-
valid_system_actions << action if current_error_count == messages.count { |msg| msg[:type] == 'error' }
|
|
37
|
-
end
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def perform_system_actions_validation(system_actions, response_index)
|
|
41
|
-
if SYSTEM_ACTIONS_HOOK_NAMES.include?(invoked_hook) && system_actions.nil?
|
|
42
|
-
msg = "Server response #{response_index + 1} did not have `systemActions` field." \
|
|
43
|
-
"Must be present for #{invoked_hook}."
|
|
44
|
-
add_message('error', msg)
|
|
45
|
-
end
|
|
46
|
-
return if system_actions.nil?
|
|
47
|
-
|
|
48
|
-
unless system_actions.is_a?(Array)
|
|
49
|
-
add_message('error', "`systemActions` of server response #{response_index + 1} is not an array.")
|
|
50
|
-
return
|
|
51
|
-
end
|
|
52
|
-
system_actions_check(system_actions)
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
run do
|
|
56
|
-
load_tagged_requests(tested_hook_name)
|
|
57
|
-
skip_if requests.blank?, "No #{tested_hook_name} request was made in a previous test as expected."
|
|
58
|
-
successful_requests = requests.select { |request| request.status == 200 }
|
|
59
|
-
skip_if successful_requests.empty?, 'All service requests were unsuccessful.'
|
|
60
|
-
|
|
61
|
-
info do
|
|
62
|
-
unsuccessful_count = (requests - successful_requests).length
|
|
63
|
-
assert unsuccessful_count.zero?, "#{unsuccessful_count} out of #{requests.length} requests were unsuccessful"
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
successful_requests.each_with_index do |request, index|
|
|
67
|
-
service_response = JSON.parse(request.response_body)
|
|
68
|
-
perform_cards_validation(service_response['cards'], index)
|
|
69
|
-
|
|
70
|
-
perform_system_actions_validation(service_response['systemActions'], index)
|
|
71
|
-
rescue JSON::ParserError
|
|
72
|
-
add_message('error', "Invalid JSON: server response #{index + 1} is not a valid JSON.")
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
output valid_system_actions: valid_system_actions.to_json
|
|
76
|
-
output valid_cards: valid_cards.to_json
|
|
77
|
-
|
|
78
|
-
no_error_validation('Some service responses are not valid. Check messages for issues found.')
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
end
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
module DaVinciCRDTestKit
|
|
2
|
-
APPOINTMENT_BOOK_TAG = 'appointment-book'.freeze
|
|
3
|
-
ENCOUNTER_START_TAG = 'encounter-start'.freeze
|
|
4
|
-
ENCOUNTER_DISCHARGE_TAG = 'encounter-discharge'.freeze
|
|
5
|
-
ORDER_DISPATCH_TAG = 'order-dispatch'.freeze
|
|
6
|
-
ORDER_SELECT_TAG = 'order-select'.freeze
|
|
7
|
-
ORDER_SIGN_TAG = 'order-sign'.freeze
|
|
8
|
-
DISCOVERY_TAG = 'cds_discovery'.freeze
|
|
9
|
-
ANY_HOOK_TAG = 'any_hook'.freeze
|
|
10
|
-
end
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
module DaVinciCRDTestKit
|
|
2
|
-
APPOINTMENT_BOOK_PATH = '/cds-services/appointment-book-service'.freeze
|
|
3
|
-
ENCOUNTER_START_PATH = '/cds-services/encounter-start-service'.freeze
|
|
4
|
-
ENCOUNTER_DISCHARGE_PATH = '/cds-services/encounter-discharge-service'.freeze
|
|
5
|
-
ORDER_DISPATCH_PATH = '/cds-services/order-dispatch-service'.freeze
|
|
6
|
-
ORDER_SELECT_PATH = '/cds-services/order-select-service'.freeze
|
|
7
|
-
ORDER_SIGN_PATH = '/cds-services/order-sign-service'.freeze
|
|
8
|
-
RESUME_PASS_PATH = '/resume_pass'.freeze
|
|
9
|
-
RESUME_FAIL_PATH = '/resume_fail'.freeze
|
|
10
|
-
|
|
11
|
-
module URLs
|
|
12
|
-
def base_url
|
|
13
|
-
@base_url ||= "#{Inferno::Application['base_url']}/custom/#{suite_id}"
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def appointment_book_url
|
|
17
|
-
@appointment_book_url ||= base_url + APPOINTMENT_BOOK_PATH
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def encounter_start_url
|
|
21
|
-
@encounter_start_url ||= base_url + ENCOUNTER_START_PATH
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
def encounter_discharge_url
|
|
25
|
-
@encounter_discharge_url ||= base_url + ENCOUNTER_DISCHARGE_PATH
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def order_dispatch_url
|
|
29
|
-
@order_dispatch_url ||= base_url + ORDER_DISPATCH_PATH
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def order_select_url
|
|
33
|
-
@order_select_url ||= base_url + ORDER_SELECT_PATH
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def order_sign_url
|
|
37
|
-
@order_sign_url ||= base_url + ORDER_SIGN_PATH
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def resume_pass_url
|
|
41
|
-
@resume_pass_url ||= base_url + RESUME_PASS_PATH
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
def resume_fail_url
|
|
45
|
-
@resume_fail_url ||= base_url + RESUME_FAIL_PATH
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def suite_id
|
|
49
|
-
self.class.suite.id
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|