davinci_crd_test_kit 0.13.0 → 0.14.1
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 +188 -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 +239 -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}/external_reference.json +1 -1
- data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/launch_smart_app.json +1 -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 +109 -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 +102 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_encounter_start_group.rb +101 -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 +84 -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 +107 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_order_select_group.rb +108 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_order_sign_group.rb +113 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_registration_group.rb +33 -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 +234 -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 +54 -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 +108 -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 +133 -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 +75 -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 +321 -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 +476 -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 +203 -0
- data/lib/davinci_crd_test_kit/cross_suite/response_logical_model_validation.rb +435 -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 +46 -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/server/jobs/invoke_hook_no_special_requests.rb +17 -0
- data/lib/davinci_crd_test_kit/server/jobs/invoke_hook_with_bad_auth.rb +14 -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 +183 -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} +3 -3
- 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 +118 -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/discovery/discovery_standard_prefetch_expressions_test.rb +166 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/interaction/server_invoke_hook_single_request_test.rb +22 -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 +121 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_demonstrate_hook_response_group.rb +94 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_discovery_group.rb +71 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_encounter_discharge_group.rb +107 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_encounter_start_group.rb +107 -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 +121 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_order_select_group.rb +115 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_order_sign_group.rb +132 -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/specific_coverage_response_group.rb +23 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/specific_coverage_responses/coverage_info_reason_test.rb +108 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/specific_coverage_responses/coverage_not_found_group.rb +116 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/specific_coverage_responses/no_active_coverage_group.rb +115 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/specific_coverage_responses/no_member_found_group.rb +117 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/specific_coverage_responses/technical_issues_group.rb +121 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/specific_coverage_responses/technical_issues_invoke_test.rb +22 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_context_validation_test.rb +31 -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 +40 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_required_fields_validation_test.rb +41 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/additional_orders_validation_test.rb +109 -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/coverage_info_configuration_test.rb +83 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/coverage_information_card_absence_test.rb +76 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/coverage_information_system_action_validation_test.rb +130 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/create_or_update_coverage_info_response_validation_test.rb +119 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/external_reference_card_validation_test.rb +89 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/form_completion_response_validation_test.rb +126 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/hook_request_resource_resolution.rb +174 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/instructions_card_received_test.rb +83 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/launch_smart_app_card_validation_test.rb +88 -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 +81 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/service_response_validation_test.rb +63 -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 +307 -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}/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
data/lib/davinci_crd_test_kit/server/v2.2.1/specific_coverage_responses/coverage_info_reason_test.rb
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
module DaVinciCRDTestKit
|
|
2
|
+
module V221
|
|
3
|
+
# Users of this test need to set config options for coverage_code, reason_code, and optionally require_reason_text
|
|
4
|
+
class CoverageInfoReasonTest < Inferno::Test
|
|
5
|
+
id :crd_v221_coverage_info_reason
|
|
6
|
+
title 'Coverage Information responses have the expected coverage and reason codes'
|
|
7
|
+
|
|
8
|
+
description <<~DESCRIPTION
|
|
9
|
+
This test verifies that the Coverage Information responses received contain Coverage Information extensions
|
|
10
|
+
with the expected coverage and reason codes.
|
|
11
|
+
DESCRIPTION
|
|
12
|
+
|
|
13
|
+
input :coverage_info
|
|
14
|
+
|
|
15
|
+
COVERAGE_INFO_EXTENSION_URL =
|
|
16
|
+
'http://hl7.org/fhir/us/davinci-crd/StructureDefinition/ext-coverage-information'.freeze
|
|
17
|
+
|
|
18
|
+
run do
|
|
19
|
+
coverage_info_actions = JSON.parse(coverage_info)
|
|
20
|
+
|
|
21
|
+
skip_if coverage_info_actions.blank?, 'No Coverage Information system actions received'
|
|
22
|
+
|
|
23
|
+
coverage_info_actions.each_with_index do |action, index|
|
|
24
|
+
coverage_info_extensions(action['resource']).each do |extension|
|
|
25
|
+
unless expected_coverage? extension
|
|
26
|
+
coverage_code = coverage_extension_value(extension)
|
|
27
|
+
add_message(
|
|
28
|
+
'error',
|
|
29
|
+
"Coverage should be `#{expected_coverage_code}`, but found `#{coverage_code}` in action ##{index + 1}"
|
|
30
|
+
)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
unless expected_reason? extension
|
|
34
|
+
reason_code =
|
|
35
|
+
reason_extension_values(extension)
|
|
36
|
+
&.map { |reason| "`#{reason}`" }
|
|
37
|
+
&.join(', ') || 'no reason'
|
|
38
|
+
add_message(
|
|
39
|
+
'error',
|
|
40
|
+
"Coverage reason should be `#{expected_reason_code}`, but found #{reason_code} in action ##{index + 1}"
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
next
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
next unless require_reason_text?
|
|
47
|
+
next if reason_text?(extension)
|
|
48
|
+
|
|
49
|
+
add_message(
|
|
50
|
+
'error',
|
|
51
|
+
"`#{expected_reason_code}` coverage reason contains no additional details in `text` field " \
|
|
52
|
+
"in action ##{index + 1}"
|
|
53
|
+
)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
assert_no_error_messages(
|
|
58
|
+
"Not all coverage info extensions had `#{expected_coverage_code}` coverage " \
|
|
59
|
+
"with a reason of `#{expected_reason_code}`"
|
|
60
|
+
)
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def coverage_info_extensions(resource)
|
|
64
|
+
resource['extension'].select { |extension| extension['url'] == COVERAGE_INFO_EXTENSION_URL }
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def coverage_extension_value(coverage_info_extension)
|
|
68
|
+
coverage_info_extension['extension']
|
|
69
|
+
.find { |extension| extension['url'] == 'covered' }
|
|
70
|
+
&.dig('valueCode')
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def expected_coverage?(coverage_info_extension)
|
|
74
|
+
coverage_extension_value(coverage_info_extension) == expected_coverage_code
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def reason_extension_values(coverage_info_extension)
|
|
78
|
+
coverage_info_extension['extension']
|
|
79
|
+
.find { |extension| extension['url'] == 'reason' }
|
|
80
|
+
&.dig('valueCodeableConcept', 'coding')
|
|
81
|
+
&.map { |coding| coding['code'] }
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def expected_reason?(coverage_info_extension)
|
|
85
|
+
reason_extension_values(coverage_info_extension)&.include? expected_reason_code
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def reason_text?(coverage_info_extension)
|
|
89
|
+
coverage_info_extension['extension']
|
|
90
|
+
.find { |extension| extension['url'] == 'reason' }
|
|
91
|
+
&.dig('valueCodeableConcept', 'text')
|
|
92
|
+
&.present?
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def expected_coverage_code
|
|
96
|
+
config.options[:expected_coverage_code]
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def expected_reason_code
|
|
100
|
+
config.options[:expected_reason_code]
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def require_reason_text?
|
|
104
|
+
config.options[:require_reason_text] || false
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
data/lib/davinci_crd_test_kit/server/v2.2.1/specific_coverage_responses/coverage_not_found_group.rb
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
require_relative '../interaction/server_invoke_hook_single_request_test'
|
|
2
|
+
require_relative 'coverage_info_reason_test'
|
|
3
|
+
|
|
4
|
+
module DaVinciCRDTestKit
|
|
5
|
+
module V221
|
|
6
|
+
class CoverageNotFoundGroup < Inferno::TestGroup
|
|
7
|
+
title 'Coverage Not Found'
|
|
8
|
+
id :crd_v221_server_coverage_not_found_group
|
|
9
|
+
description %(
|
|
10
|
+
This group of tests allows the system to demonstrate its ability to respond to a CRD Hook invocation
|
|
11
|
+
with a `not-covered` coverage determination when the patient can be resolved but coverage cannot be found
|
|
12
|
+
or cannot be resolved to a single coverage.
|
|
13
|
+
|
|
14
|
+
For these tests, provide a hook request body that represents a resolvable patient for whom the CRD Server
|
|
15
|
+
cannot find coverage or cannot resolve to a single coverage. The tests then verify that a Coverage
|
|
16
|
+
Information systemAction is received with `not-covered` coverage for `coverage-not-found` reason.
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
config options: { hook_name: COVERAGE_NOT_FOUND_TAG }
|
|
20
|
+
run_as_group
|
|
21
|
+
|
|
22
|
+
group do
|
|
23
|
+
title 'Interaction'
|
|
24
|
+
|
|
25
|
+
test from: :crd_v221_server_invoke_hook_single_request_test,
|
|
26
|
+
title: 'Inferno invokes the selected hook to elicit coverage not found response',
|
|
27
|
+
description: <<~DESCRIPTION,
|
|
28
|
+
This test initiates a POST request to a specified CDS Service using the JSON body provided
|
|
29
|
+
by the user. The request body should represent a resolvable patient for whom coverage cannot be
|
|
30
|
+
found or cannot be resolved to a single coverage.
|
|
31
|
+
DESCRIPTION
|
|
32
|
+
config: {
|
|
33
|
+
inputs: {
|
|
34
|
+
service_ids: {
|
|
35
|
+
name: :coverage_not_found_service_ids,
|
|
36
|
+
title: 'Service id to use for the "Coverage Not Found" test',
|
|
37
|
+
description: %(
|
|
38
|
+
If blank, Inferno will attempt to infer the service id to use by finding a service entry
|
|
39
|
+
in the Discovery response for the hook indicated in the provided request body. If it
|
|
40
|
+
cannot be inferred, the tests will be skipped.
|
|
41
|
+
)
|
|
42
|
+
},
|
|
43
|
+
service_request_bodies: {
|
|
44
|
+
name: :coverage_not_found_request_body,
|
|
45
|
+
title: 'Request body to use for the "Coverage Not Found" test',
|
|
46
|
+
description: %(
|
|
47
|
+
Provide a single JSON request body to submit for the hook invocation. The type of hook
|
|
48
|
+
invoked will be inferred based on the `hook` element in the request. The body should be
|
|
49
|
+
constructed so that it represents a resolvable patient for whom coverage cannot be found.
|
|
50
|
+
)
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
group do
|
|
57
|
+
title 'Requests'
|
|
58
|
+
simulation_verification
|
|
59
|
+
|
|
60
|
+
test from: :crd_v221_service_request_required_fields_validation,
|
|
61
|
+
config: {
|
|
62
|
+
outputs: {
|
|
63
|
+
contexts: {
|
|
64
|
+
name: :coverage_not_found_contexts
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
test from: :crd_v221_service_request_context_validation,
|
|
69
|
+
config: {
|
|
70
|
+
inputs: {
|
|
71
|
+
contexts: {
|
|
72
|
+
name: :coverage_not_found_contexts
|
|
73
|
+
},
|
|
74
|
+
request_body: {
|
|
75
|
+
name: :coverage_not_found_request_body
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
group do
|
|
82
|
+
title 'Responses'
|
|
83
|
+
|
|
84
|
+
test from: :crd_v221_service_response_validation
|
|
85
|
+
test from: :crd_v221_coverage_info_system_action_validation,
|
|
86
|
+
config: {
|
|
87
|
+
outputs: {
|
|
88
|
+
coverage_info: {
|
|
89
|
+
name: :coverage_not_found_coverage_info
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
test from: :crd_v221_coverage_info_reason,
|
|
94
|
+
title: 'Coverage Information responses have not-covered coverage for coverage-not-found reason',
|
|
95
|
+
description: <<~DESCRIPTION,
|
|
96
|
+
This test verifies that the Coverage Information responses received contain Coverage Information
|
|
97
|
+
extensions with `not-covered` coverage and a `coverage-not-found` reason.
|
|
98
|
+
DESCRIPTION
|
|
99
|
+
config: {
|
|
100
|
+
inputs: {
|
|
101
|
+
coverage_info: {
|
|
102
|
+
name: :coverage_not_found_coverage_info
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
options: {
|
|
106
|
+
expected_coverage_code: 'not-covered',
|
|
107
|
+
expected_reason_code: 'coverage-not-found'
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
verifies_requirements: [
|
|
111
|
+
'hl7.fhir.us.davinci-crd_2.2.1@resp-45'
|
|
112
|
+
]
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
data/lib/davinci_crd_test_kit/server/v2.2.1/specific_coverage_responses/no_active_coverage_group.rb
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
require_relative '../interaction/server_invoke_hook_single_request_test'
|
|
2
|
+
require_relative 'coverage_info_reason_test'
|
|
3
|
+
|
|
4
|
+
module DaVinciCRDTestKit
|
|
5
|
+
module V221
|
|
6
|
+
class NoActiveCoverageGroup < Inferno::TestGroup
|
|
7
|
+
title 'No Active Coverage'
|
|
8
|
+
id :crd_v221_server_no_active_coverage_group
|
|
9
|
+
description %(
|
|
10
|
+
This group of tests allows the system to demonstrate its ability to respond to a CRD Hook invocation
|
|
11
|
+
with a `not-covered` coverage determination when the patient can be resolved but does not have active
|
|
12
|
+
coverage.
|
|
13
|
+
|
|
14
|
+
For these tests, provide a hook request body that represents a resolvable patient without active
|
|
15
|
+
coverage. The tests then verify that a Coverage Information systemAction is received with `not-covered`
|
|
16
|
+
coverage for `no-active-coverage` reason.
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
config options: { hook_name: NO_ACTIVE_COVERAGE_TAG }
|
|
20
|
+
run_as_group
|
|
21
|
+
|
|
22
|
+
group do
|
|
23
|
+
title 'Interaction'
|
|
24
|
+
|
|
25
|
+
test from: :crd_v221_server_invoke_hook_single_request_test,
|
|
26
|
+
title: 'Inferno invokes the selected hook to elicit no active coverage response',
|
|
27
|
+
description: <<~DESCRIPTION,
|
|
28
|
+
This test initiates a POST request to a specified CDS Service using the JSON body provided
|
|
29
|
+
by the user. The request body should represent a resolvable patient without active coverage.
|
|
30
|
+
DESCRIPTION
|
|
31
|
+
config: {
|
|
32
|
+
inputs: {
|
|
33
|
+
service_ids: {
|
|
34
|
+
name: :no_active_coverage_service_ids,
|
|
35
|
+
title: 'Service id to use for the "No Active Coverage" test',
|
|
36
|
+
description: %(
|
|
37
|
+
If blank, Inferno will attempt to infer the service id to use by finding a service entry
|
|
38
|
+
in the Discovery response for the hook indicated in the provided request body. If it
|
|
39
|
+
cannot be inferred, the tests will be skipped.
|
|
40
|
+
)
|
|
41
|
+
},
|
|
42
|
+
service_request_bodies: {
|
|
43
|
+
name: :no_active_coverage_request_body,
|
|
44
|
+
title: 'Request body to use for the "No Active Coverage" test',
|
|
45
|
+
description: %(
|
|
46
|
+
Provide a single JSON request body to submit for the hook invocation. The type of hook
|
|
47
|
+
invoked will be inferred based on the `hook` element in the request. The body should be
|
|
48
|
+
constructed so that it represents a resolvable patient without active coverage.
|
|
49
|
+
)
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
group do
|
|
56
|
+
title 'Requests'
|
|
57
|
+
simulation_verification
|
|
58
|
+
|
|
59
|
+
test from: :crd_v221_service_request_required_fields_validation,
|
|
60
|
+
config: {
|
|
61
|
+
outputs: {
|
|
62
|
+
contexts: {
|
|
63
|
+
name: :no_active_coverage_contexts
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
test from: :crd_v221_service_request_context_validation,
|
|
68
|
+
config: {
|
|
69
|
+
inputs: {
|
|
70
|
+
contexts: {
|
|
71
|
+
name: :no_active_coverage_contexts
|
|
72
|
+
},
|
|
73
|
+
request_body: {
|
|
74
|
+
name: :no_active_coverage_request_body
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
group do
|
|
81
|
+
title 'Responses'
|
|
82
|
+
|
|
83
|
+
test from: :crd_v221_service_response_validation
|
|
84
|
+
test from: :crd_v221_coverage_info_system_action_validation,
|
|
85
|
+
config: {
|
|
86
|
+
outputs: {
|
|
87
|
+
coverage_info: {
|
|
88
|
+
name: :no_active_coverage_coverage_info
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
test from: :crd_v221_coverage_info_reason,
|
|
93
|
+
title: 'Coverage Information responses have not-covered coverage for no-active-coverage reason',
|
|
94
|
+
description: <<~DESCRIPTION,
|
|
95
|
+
This test verifies that the Coverage Information responses received contain Coverage Information
|
|
96
|
+
extensions with `not-covered` coverage and a `no-active-coverage` reason.
|
|
97
|
+
DESCRIPTION
|
|
98
|
+
config: {
|
|
99
|
+
inputs: {
|
|
100
|
+
coverage_info: {
|
|
101
|
+
name: :no_active_coverage_coverage_info
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
options: {
|
|
105
|
+
expected_coverage_code: 'not-covered',
|
|
106
|
+
expected_reason_code: 'no-active-coverage'
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
verifies_requirements: [
|
|
110
|
+
'hl7.fhir.us.davinci-crd_2.2.1@resp-45'
|
|
111
|
+
]
|
|
112
|
+
end
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|
data/lib/davinci_crd_test_kit/server/v2.2.1/specific_coverage_responses/no_member_found_group.rb
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
require_relative '../interaction/server_invoke_hook_single_request_test'
|
|
2
|
+
require_relative 'coverage_info_reason_test'
|
|
3
|
+
|
|
4
|
+
module DaVinciCRDTestKit
|
|
5
|
+
module V221
|
|
6
|
+
class NoMemberFoundGroup < Inferno::TestGroup
|
|
7
|
+
title 'No Member Found'
|
|
8
|
+
id :crd_v221_server_no_member_found_group
|
|
9
|
+
description %(
|
|
10
|
+
This group of tests allows the system to demonstrate its ability to respond to a CRD Hook invocation
|
|
11
|
+
with a `not-covered` coverage determination when it is unable to resolve the patient for a
|
|
12
|
+
non-technical reason.
|
|
13
|
+
|
|
14
|
+
For these tests, provide a hook request body that represents a patient/member the CRD Server cannot
|
|
15
|
+
resolve for a non-technical reason.
|
|
16
|
+
|
|
17
|
+
The tests then verify that a Coverage Information systemAction is received with `not-covered` coverage
|
|
18
|
+
for `no-member-found` reasons.
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
config options: { hook_name: NO_MEMBER_FOUND_TAG }
|
|
22
|
+
run_as_group
|
|
23
|
+
|
|
24
|
+
group do
|
|
25
|
+
title 'Interaction'
|
|
26
|
+
|
|
27
|
+
test from: :crd_v221_server_invoke_hook_single_request_test,
|
|
28
|
+
title: 'Inferno invokes the selected hook to elicit unresolved member response',
|
|
29
|
+
description: <<~DESCRIPTION,
|
|
30
|
+
This test initiates a POST request to a specified CDS Service using the JSON body provided
|
|
31
|
+
by the user. The request body should represent an unrecognized member.
|
|
32
|
+
DESCRIPTION
|
|
33
|
+
config: {
|
|
34
|
+
inputs: {
|
|
35
|
+
service_ids: {
|
|
36
|
+
name: :no_member_found_service_ids,
|
|
37
|
+
title: 'Service id to use for the "No Member Found" test',
|
|
38
|
+
description: %(
|
|
39
|
+
If blank, Inferno will attempt to infer the service id to use by finding a service entry
|
|
40
|
+
in the Discovery response for the hook indicated in the provided request body. If it
|
|
41
|
+
cannot be inferred, the tests will be skipped.
|
|
42
|
+
)
|
|
43
|
+
},
|
|
44
|
+
service_request_bodies: {
|
|
45
|
+
name: :no_member_found_request_body,
|
|
46
|
+
title: 'Request body to use for the "No Member Found" test',
|
|
47
|
+
description: %(
|
|
48
|
+
Provide a single JSON request body to submit for the hook invocation. The type of hook
|
|
49
|
+
invoked will be inferred based on the `hook` element in the request. The body should be
|
|
50
|
+
constructed so that the CRD Server is unable to resolve the patient/member.
|
|
51
|
+
)
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
group do
|
|
58
|
+
title 'Requests'
|
|
59
|
+
simulation_verification
|
|
60
|
+
|
|
61
|
+
test from: :crd_v221_service_request_required_fields_validation,
|
|
62
|
+
config: {
|
|
63
|
+
outputs: {
|
|
64
|
+
contexts: {
|
|
65
|
+
name: :no_member_found_contexts
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
test from: :crd_v221_service_request_context_validation,
|
|
70
|
+
config: {
|
|
71
|
+
inputs: {
|
|
72
|
+
contexts: {
|
|
73
|
+
name: :no_member_found_contexts
|
|
74
|
+
},
|
|
75
|
+
request_body: {
|
|
76
|
+
name: :no_member_found_request_body
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
group do
|
|
83
|
+
title 'Responses'
|
|
84
|
+
|
|
85
|
+
test from: :crd_v221_service_response_validation
|
|
86
|
+
test from: :crd_v221_coverage_info_system_action_validation,
|
|
87
|
+
config: {
|
|
88
|
+
outputs: {
|
|
89
|
+
coverage_info: {
|
|
90
|
+
name: :no_member_found_coverage_info
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
test from: :crd_v221_coverage_info_reason,
|
|
95
|
+
title: 'Coverage Information responses have not-covered coverage for no-member-found reason',
|
|
96
|
+
description: <<~DESCRIPTION,
|
|
97
|
+
This test verifies that the Coverage Information responses received contain Coverage Information
|
|
98
|
+
extensions with `not-covered` coverage and a `no-member-found` reason.
|
|
99
|
+
DESCRIPTION
|
|
100
|
+
config: {
|
|
101
|
+
inputs: {
|
|
102
|
+
coverage_info: {
|
|
103
|
+
name: :no_member_found_coverage_info
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
options: {
|
|
107
|
+
expected_coverage_code: 'not-covered',
|
|
108
|
+
expected_reason_code: 'no-member-found'
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
verifies_requirements: [
|
|
112
|
+
'hl7.fhir.us.davinci-crd_2.2.1@resp-44'
|
|
113
|
+
]
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
data/lib/davinci_crd_test_kit/server/v2.2.1/specific_coverage_responses/technical_issues_group.rb
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
require_relative 'technical_issues_invoke_test'
|
|
2
|
+
require_relative 'coverage_info_reason_test'
|
|
3
|
+
|
|
4
|
+
module DaVinciCRDTestKit
|
|
5
|
+
module V221
|
|
6
|
+
class TechnicalIssuesGroup < Inferno::TestGroup
|
|
7
|
+
title 'Technical Issues'
|
|
8
|
+
id :crd_v221_server_technical_issues_group
|
|
9
|
+
description %(
|
|
10
|
+
This group of tests allows the system to demonstrate its ability to
|
|
11
|
+
respond to a CRD Hook invocation with an `indeterminate` coverage
|
|
12
|
+
determination due to technical issues.
|
|
13
|
+
|
|
14
|
+
For these tests, the hook call will include an invalid access token,
|
|
15
|
+
which due to the nature of Inferno's FHIR server simulation will result
|
|
16
|
+
in 500 response to FHIR requests, simulating a temporary server outage.
|
|
17
|
+
The tests then verify that a Coverage Information systemAction is
|
|
18
|
+
received with `indeterminate` coverage for `technical` reasons.
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
config options: { hook_name: TECHNICAL_ISSUES_TAG }
|
|
22
|
+
run_as_group
|
|
23
|
+
|
|
24
|
+
group do
|
|
25
|
+
title 'Interaction'
|
|
26
|
+
|
|
27
|
+
test from: :crd_v221_server_technical_issues_invoke_hook_test,
|
|
28
|
+
description: <<~DESCRIPTION,
|
|
29
|
+
This test initiates a POST request to a specified CDS Service
|
|
30
|
+
using the JSON body list provided by the user. This request is
|
|
31
|
+
generated so that requests for FHIR resources from the CDS service
|
|
32
|
+
result in 500 errors, simulating a temporary server error.
|
|
33
|
+
DESCRIPTION
|
|
34
|
+
config: {
|
|
35
|
+
inputs: {
|
|
36
|
+
service_ids: {
|
|
37
|
+
name: :technical_issues_service_ids,
|
|
38
|
+
title: 'Service id to use for the "Technical Issues" test',
|
|
39
|
+
description: %(
|
|
40
|
+
If blank, Inferno will attempt to infer the service id to use
|
|
41
|
+
by finding a service entry in the Discovery response for the
|
|
42
|
+
hook indicated in the provided request body. If it cannot be
|
|
43
|
+
inferred, the tests will be skipped.
|
|
44
|
+
)
|
|
45
|
+
},
|
|
46
|
+
service_request_bodies: {
|
|
47
|
+
name: :technical_issues_request_body,
|
|
48
|
+
title: 'Request body to use for the "Technical Issues" test',
|
|
49
|
+
description: %(
|
|
50
|
+
Provide a single JSON request body to submit for the hook
|
|
51
|
+
invocation. The type of hook invoked will be inferred based
|
|
52
|
+
on the `hook` element in the request.
|
|
53
|
+
)
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
group do
|
|
60
|
+
title 'Requests'
|
|
61
|
+
simulation_verification
|
|
62
|
+
|
|
63
|
+
test from: :crd_v221_service_request_required_fields_validation,
|
|
64
|
+
config: {
|
|
65
|
+
outputs: {
|
|
66
|
+
contexts: {
|
|
67
|
+
name: :technical_issues_contexts
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
test from: :crd_v221_service_request_context_validation,
|
|
72
|
+
config: {
|
|
73
|
+
inputs: {
|
|
74
|
+
contexts: {
|
|
75
|
+
name: :technical_issues_contexts
|
|
76
|
+
},
|
|
77
|
+
request_body: {
|
|
78
|
+
name: :technical_issues_request_body
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
group do
|
|
85
|
+
title 'Responses'
|
|
86
|
+
|
|
87
|
+
test from: :crd_v221_service_response_validation
|
|
88
|
+
test from: :crd_v221_coverage_info_system_action_validation,
|
|
89
|
+
config: {
|
|
90
|
+
outputs: {
|
|
91
|
+
coverage_info: {
|
|
92
|
+
name: :technical_issues_coverage_info
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
test from: :crd_v221_coverage_info_reason,
|
|
97
|
+
title: 'Coverage Information responses have indeterminate coverage for technical reasons',
|
|
98
|
+
description: <<~DESCRIPTION,
|
|
99
|
+
This test verifies that the Coverage Information responses received contain Coverage Information
|
|
100
|
+
extensions with `indeterminate` coverage and a `technical` reason, and additional details about the
|
|
101
|
+
failure are included in the `text` field of the reason extension.
|
|
102
|
+
DESCRIPTION
|
|
103
|
+
config: {
|
|
104
|
+
inputs: {
|
|
105
|
+
coverage_info: {
|
|
106
|
+
name: :technical_issues_coverage_info
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
options: {
|
|
110
|
+
expected_coverage_code: 'indeterminate',
|
|
111
|
+
expected_reason_code: 'technical',
|
|
112
|
+
require_reason_text: true
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
verifies_requirements: [
|
|
116
|
+
'hl7.fhir.us.davinci-crd_2.2.1@resp-43'
|
|
117
|
+
]
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require_relative '../server_urls'
|
|
2
|
+
require_relative '../../jobs/invoke_hook_with_bad_auth'
|
|
3
|
+
require_relative '../../server_abstract_invoke_hook_test'
|
|
4
|
+
|
|
5
|
+
module DaVinciCRDTestKit
|
|
6
|
+
module V221
|
|
7
|
+
class TechnicalIssuesInvokeHookTest < ServerAbstractInvokeHookTest
|
|
8
|
+
include ServerURLs
|
|
9
|
+
|
|
10
|
+
title 'Inferno invokes the selected hook with invalid authorization'
|
|
11
|
+
id :crd_v221_server_technical_issues_invoke_hook_test
|
|
12
|
+
|
|
13
|
+
def perform_invoke_hook_job(*)
|
|
14
|
+
Inferno::Jobs.perform(DaVinciCRDTestKit::Jobs::InvokeHookWithBadAuth, *)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def check_request_length(payloads)
|
|
18
|
+
skip_if payloads.length != 1, 'The *Technical Issues* test supports only one request body.'
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
require_relative '../../server_hook_request_validation'
|
|
2
|
+
require_relative '../../server_test_helper'
|
|
3
|
+
require_relative '../../server_hook_helper'
|
|
4
|
+
|
|
5
|
+
module DaVinciCRDTestKit
|
|
6
|
+
module V221
|
|
7
|
+
class ServiceRequestContextValidationTest < Inferno::Test
|
|
8
|
+
include DaVinciCRDTestKit::ServerHookRequestValidation
|
|
9
|
+
include DaVinciCRDTestKit::ServerTestHelper
|
|
10
|
+
include DaVinciCRDTestKit::ServerHookHelper
|
|
11
|
+
|
|
12
|
+
title 'Service request contexts are valid'
|
|
13
|
+
id :crd_v221_service_request_context_validation
|
|
14
|
+
description %(
|
|
15
|
+
This test verifies that all service requests `context` field is valid and contains all the
|
|
16
|
+
required fields.
|
|
17
|
+
)
|
|
18
|
+
input :contexts, :invoked_hook
|
|
19
|
+
simulation_verification
|
|
20
|
+
|
|
21
|
+
run do
|
|
22
|
+
parsed_contexts = parse_json(contexts)
|
|
23
|
+
parsed_contexts.each do |context|
|
|
24
|
+
hook_request_context_check(context, invoked_hook, ig_version: 'v221')
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
no_error_validation('Some contexts are not valid.')
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|