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
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
require_relative 'client_fhir_api_group'
|
|
2
|
+
require_relative 'client_hooks_group'
|
|
3
|
+
require_relative 'client_cross_hook_group'
|
|
4
|
+
require_relative 'client_registration_group'
|
|
5
|
+
require_relative 'client_long_running_hook_group'
|
|
6
|
+
require_relative '../endpoints/cds_services_discovery_handler'
|
|
7
|
+
require_relative '../../cross_suite/tags'
|
|
8
|
+
require_relative 'client_urls'
|
|
9
|
+
require_relative '../crd_client_options'
|
|
10
|
+
require_relative '../endpoints/hook_request_endpoint'
|
|
11
|
+
require_relative '../../ext/inferno_core/runnable'
|
|
12
|
+
require 'us_core_test_kit/generated/v3.1.1/us_core_test_suite'
|
|
13
|
+
require 'us_core_test_kit/generated/v6.1.0/us_core_test_suite'
|
|
14
|
+
require 'us_core_test_kit/generated/v7.0.0/us_core_test_suite'
|
|
15
|
+
|
|
16
|
+
module DaVinciCRDTestKit
|
|
17
|
+
module V221
|
|
18
|
+
class CRDClientSuite < Inferno::TestSuite
|
|
19
|
+
id :crd_client_v221
|
|
20
|
+
title 'Da Vinci CRD Client v2.2.1 Test Suite'
|
|
21
|
+
description <<~DESCRIPTION
|
|
22
|
+
The Da Vinci CRD Client v2.2.1 Test Suite tests the conformance of systems to the
|
|
23
|
+
capabilities of a CRD client as described in [version 2.2.1](https://hl7.org/fhir/us/davinci-crd/2.2.1)
|
|
24
|
+
of the Da Vinci Coverage Requirements Discovery (CRD) Implementation Guide.
|
|
25
|
+
|
|
26
|
+
Detailed information about this test suite can be found in the
|
|
27
|
+
[client section](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Client-Details) of the
|
|
28
|
+
[CRD Test Kit Wiki](https://github.com/inferno-framework/davinci-crd-test-kit/wiki), including:
|
|
29
|
+
- [What testers need to successfully execute these tests](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Client-Instructions-v2.2.1#pre-execution-setup-and-required-information),
|
|
30
|
+
- [Minimal](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Client-Instructions-v2.2.1#quick-start)
|
|
31
|
+
and [complete](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Client-Instructions-v2.2.1#additional-testing-options)
|
|
32
|
+
instructions for executing against a client system, and
|
|
33
|
+
- How to [interpret test results](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Client-Instructions-v2.2.1#interpreting-results).
|
|
34
|
+
DESCRIPTION
|
|
35
|
+
|
|
36
|
+
suite_summary <<~SUMMARY
|
|
37
|
+
The Da Vinci CRD Client v2.2.1 Test Suite tests the conformance of client systems
|
|
38
|
+
to [version 2.2.1 of the Da Vinci Coverage Requirements Discovery (CRD)
|
|
39
|
+
Implementation Guide](https://hl7.org/fhir/us/davinci-crd/2.2.1).
|
|
40
|
+
SUMMARY
|
|
41
|
+
|
|
42
|
+
links [
|
|
43
|
+
{
|
|
44
|
+
label: 'Implementation Guide',
|
|
45
|
+
url: 'https://hl7.org/fhir/us/davinci-crd/2.2.1'
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
label: 'Report Issue',
|
|
49
|
+
url: 'https://github.com/inferno-framework/davinci-crd-test-kit/issues'
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
label: 'Open Source',
|
|
53
|
+
url: 'https://github.com/inferno-framework/davinci-crd-test-kit'
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
label: 'Download',
|
|
57
|
+
url: 'https://github.com/inferno-framework/davinci-crd-test-kit/releases'
|
|
58
|
+
}
|
|
59
|
+
]
|
|
60
|
+
|
|
61
|
+
requirement_sets(
|
|
62
|
+
{
|
|
63
|
+
identifier: 'hl7.fhir.us.davinci-crd_2.2.1',
|
|
64
|
+
title: 'Da Vinci Coverage Requirements Discovery (CRD) v2.2.1',
|
|
65
|
+
actor: 'CRD Client'
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
identifier: 'cds-hooks_3.0.0-ballot',
|
|
69
|
+
title: 'CDS Hooks 3.0.0-ballot',
|
|
70
|
+
actor: 'Client'
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
identifier: 'cds-hooks-library_1.0.1',
|
|
74
|
+
title: 'CDS Hooks Library',
|
|
75
|
+
actor: 'Client',
|
|
76
|
+
requirements: 'referenced'
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
identifier: 'hl7.fhir.us.core_3.1.1',
|
|
80
|
+
title: 'US Core Implementation Guide v3.1.1',
|
|
81
|
+
actor: 'Server',
|
|
82
|
+
suite_options: {
|
|
83
|
+
us_core_version: CRDClientOptions::US_CORE_3
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
identifier: 'hl7.fhir.us.core_6.1.0',
|
|
88
|
+
title: 'US Core Implementation Guide v6.1.0',
|
|
89
|
+
actor: 'Server',
|
|
90
|
+
suite_options: {
|
|
91
|
+
us_core_version: CRDClientOptions::US_CORE_6
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
identifier: 'hl7.fhir.us.core_7.0.0',
|
|
96
|
+
title: 'US Core Implementation Guide v7.0.0',
|
|
97
|
+
actor: 'Server',
|
|
98
|
+
suite_options: {
|
|
99
|
+
us_core_version: CRDClientOptions::US_CORE_7
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
verifies_requirements 'cds-hooks_3.0.0-ballot@1', # use of json for everything verified across the whole suite
|
|
105
|
+
'cds-hooks_3.0.0-ballot@15', # use of POST verified by suite endpoint setup
|
|
106
|
+
'cds-hooks_3.0.0-ballot@208', # use of CORS endpoints defined in the suite
|
|
107
|
+
'hl7.fhir.us.davinci-crd_2.2.1@impl-3' # suite verifies system interactions
|
|
108
|
+
|
|
109
|
+
CRD_MESSAGE_FILTERS = [
|
|
110
|
+
/\A\S+: \S+: URL value '.*' does not resolve/,
|
|
111
|
+
%r{This element is not allowed by the profile http://hl7\.org/fhir/tools/StructureDefinition/CDSHooksExtensions\|1\.1\.2},
|
|
112
|
+
/CDSHooksRequest.extension: Unrecognized property/,
|
|
113
|
+
/No definition could be found for URL value/
|
|
114
|
+
].freeze
|
|
115
|
+
|
|
116
|
+
US_CORE_3_MESSAGE_FILTERS = CRD_MESSAGE_FILTERS +
|
|
117
|
+
USCoreTestKit::USCoreV311::USCoreTestSuite::VALIDATION_MESSAGE_FILTERS
|
|
118
|
+
|
|
119
|
+
US_CORE_6_MESSAGE_FILTERS = CRD_MESSAGE_FILTERS +
|
|
120
|
+
USCoreTestKit::USCoreV610::USCoreTestSuite::VALIDATION_MESSAGE_FILTERS
|
|
121
|
+
|
|
122
|
+
US_CORE_7_MESSAGE_FILTERS = CRD_MESSAGE_FILTERS +
|
|
123
|
+
USCoreTestKit::USCoreV700::USCoreTestSuite::VALIDATION_MESSAGE_FILTERS
|
|
124
|
+
|
|
125
|
+
fhir_resource_validator required_suite_options: { us_core_version: CRDClientOptions::US_CORE_3 } do
|
|
126
|
+
igs('hl7.fhir.us.davinci-crd#2.2.1')
|
|
127
|
+
|
|
128
|
+
validation_context do
|
|
129
|
+
snomedCT '731000124108' # explicit snomedCT expansion parameter
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
exclude_message do |message|
|
|
133
|
+
US_CORE_3_MESSAGE_FILTERS.any? { |match_template| message.message.match?(match_template) }
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
fhir_resource_validator required_suite_options: { us_core_version: CRDClientOptions::US_CORE_6 } do
|
|
138
|
+
igs('hl7.fhir.us.davinci-crd#2.2.1')
|
|
139
|
+
|
|
140
|
+
validation_context do
|
|
141
|
+
snomedCT '731000124108' # explicit snomedCT expansion parameter
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
exclude_message do |message|
|
|
145
|
+
US_CORE_6_MESSAGE_FILTERS.any? do |match_template|
|
|
146
|
+
message.message.match?(match_template)
|
|
147
|
+
end
|
|
148
|
+
end
|
|
149
|
+
end
|
|
150
|
+
|
|
151
|
+
fhir_resource_validator required_suite_options: { us_core_version: CRDClientOptions::US_CORE_7 } do
|
|
152
|
+
igs('hl7.fhir.us.davinci-crd#2.2.1')
|
|
153
|
+
|
|
154
|
+
validation_context do
|
|
155
|
+
snomedCT '731000124108' # explicit snomedCT expansion parameter
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
exclude_message do |message|
|
|
159
|
+
US_CORE_7_MESSAGE_FILTERS.any? do |match_template|
|
|
160
|
+
message.message.match?(match_template)
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
suite_option :us_core_version,
|
|
166
|
+
title: 'US Core Version',
|
|
167
|
+
list_options: [
|
|
168
|
+
{
|
|
169
|
+
label: 'US Core 3.1.1',
|
|
170
|
+
value: CRDClientOptions::US_CORE_3
|
|
171
|
+
},
|
|
172
|
+
{
|
|
173
|
+
label: 'US Core 6.1.0',
|
|
174
|
+
value: CRDClientOptions::US_CORE_6
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
label: 'US Core 7.0.0',
|
|
178
|
+
value: CRDClientOptions::US_CORE_7
|
|
179
|
+
}
|
|
180
|
+
]
|
|
181
|
+
|
|
182
|
+
def self.extract_token_from_query_params(request)
|
|
183
|
+
request.query_parameters['token']
|
|
184
|
+
end
|
|
185
|
+
|
|
186
|
+
route :get, DISCOVERY_PATH, CDSServicesDiscoveryHandler
|
|
187
|
+
route :get, PREFETCH_DISCOVERY_PATH, CDSServicesDiscoveryHandler
|
|
188
|
+
|
|
189
|
+
allow_cors APPOINTMENT_BOOK_PATH, ENCOUNTER_START_PATH, ENCOUNTER_DISCHARGE_PATH, ORDER_DISPATCH_PATH,
|
|
190
|
+
ORDER_SELECT_PATH, ORDER_SIGN_PATH, DISCOVERY_PATH
|
|
191
|
+
suite_endpoint :post, APPOINTMENT_BOOK_PATH, HookRequestEndpoint
|
|
192
|
+
suite_endpoint :post, ENCOUNTER_START_PATH, HookRequestEndpoint
|
|
193
|
+
suite_endpoint :post, ENCOUNTER_DISCHARGE_PATH, HookRequestEndpoint
|
|
194
|
+
suite_endpoint :post, ORDER_DISPATCH_PATH, HookRequestEndpoint
|
|
195
|
+
suite_endpoint :post, ORDER_SELECT_PATH, HookRequestEndpoint
|
|
196
|
+
suite_endpoint :post, ORDER_SIGN_PATH, HookRequestEndpoint
|
|
197
|
+
|
|
198
|
+
allow_cors APPOINTMENT_BOOK_PREFETCH_SUBSET_PATH, ENCOUNTER_START_PREFETCH_SUBSET_PATH,
|
|
199
|
+
ENCOUNTER_DISCHARGE_PREFETCH_SUBSET_PATH, ORDER_DISPATCH_PREFETCH_SUBSET_PATH,
|
|
200
|
+
ORDER_SELECT_PREFETCH_SUBSET_PATH, ORDER_SIGN_PREFETCH_SUBSET_PATH,
|
|
201
|
+
PREFETCH_DISCOVERY_PATH
|
|
202
|
+
suite_endpoint :post, APPOINTMENT_BOOK_PREFETCH_SUBSET_PATH, HookRequestEndpoint
|
|
203
|
+
suite_endpoint :post, ENCOUNTER_START_PREFETCH_SUBSET_PATH, HookRequestEndpoint
|
|
204
|
+
suite_endpoint :post, ENCOUNTER_DISCHARGE_PREFETCH_SUBSET_PATH, HookRequestEndpoint
|
|
205
|
+
suite_endpoint :post, ORDER_DISPATCH_PREFETCH_SUBSET_PATH, HookRequestEndpoint
|
|
206
|
+
suite_endpoint :post, ORDER_SELECT_PREFETCH_SUBSET_PATH, HookRequestEndpoint
|
|
207
|
+
suite_endpoint :post, ORDER_SIGN_PREFETCH_SUBSET_PATH, HookRequestEndpoint
|
|
208
|
+
|
|
209
|
+
resume_test_route :get, RESUME_PASS_PATH do |request|
|
|
210
|
+
CRDClientSuite.extract_token_from_query_params(request)
|
|
211
|
+
end
|
|
212
|
+
resume_test_route :get, RESUME_FAIL_PATH, result: 'fail' do |request|
|
|
213
|
+
CRDClientSuite.extract_token_from_query_params(request)
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
group do
|
|
217
|
+
id :crd_v221_client_hook_invocation
|
|
218
|
+
title 'Hook Invocation'
|
|
219
|
+
|
|
220
|
+
group from: :crd_v221_client_registration
|
|
221
|
+
group from: :crd_v221_client_hooks
|
|
222
|
+
group from: :crd_v221_client_cross_hook
|
|
223
|
+
group from: :crd_v221_client_long_running_hook
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
group from: :crd_v221_client_fhir_api
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
end
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
require_relative '../../../cross_suite/cards_identification'
|
|
2
|
+
require_relative '../../tagged_request_load_helper'
|
|
3
|
+
|
|
4
|
+
module DaVinciCRDTestKit
|
|
5
|
+
module V221
|
|
6
|
+
class ClientCardMustSupportCoverageInformationTest < Inferno::Test
|
|
7
|
+
include CardsIdentification
|
|
8
|
+
include TaggedRequestLoadHelper
|
|
9
|
+
|
|
10
|
+
title 'Client supports the Coverage Information response type'
|
|
11
|
+
id :crd_v221_client_card_must_support_coverage_information
|
|
12
|
+
description <<~DESCRIPTION
|
|
13
|
+
During this test, Inferno will verify that the client demonstrated support for the [Coverage Information](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/cards.html#coverage-information)
|
|
14
|
+
response type for this hook. At least one hook invocation received during this group must have returned a Coverage Information action.
|
|
15
|
+
Additionally, all [coverage-information extension](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/StructureDefinition-ext-coverage-information.html)
|
|
16
|
+
must support elements must be demonstrated across all the returned actions.
|
|
17
|
+
|
|
18
|
+
If this test fails, adjust the [cards returned by Inferno's simulated CRD server](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Controlling-Simulated-Responses)
|
|
19
|
+
and/or the hook requests made by the client during the Hooks tests such that Coverage Information actions are returned
|
|
20
|
+
that cover the full scope of the [coverage-information extension](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/StructureDefinition-ext-coverage-information.html)
|
|
21
|
+
and support for them is demonstrated.
|
|
22
|
+
DESCRIPTION
|
|
23
|
+
|
|
24
|
+
verifies_requirements 'hl7.fhir.us.davinci-crd_2.2.1@resp-14'
|
|
25
|
+
|
|
26
|
+
def metadata
|
|
27
|
+
@metadata ||= YAML.load_file(
|
|
28
|
+
File.join(__dir__, '..', '..', '..', 'cross_suite', 'coverage-information_stu221_metadata.yml')
|
|
29
|
+
)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
class MustSupportMetadataHolder
|
|
33
|
+
attr_accessor :metadata
|
|
34
|
+
|
|
35
|
+
def initialize(metadata)
|
|
36
|
+
self.metadata = metadata
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def must_supports
|
|
40
|
+
@must_supports ||= {
|
|
41
|
+
extensions: metadata[:must_supports][:extensions] || [],
|
|
42
|
+
slices: metadata[:must_supports][:slices] || [],
|
|
43
|
+
elements: metadata[:must_supports][:elements] || []
|
|
44
|
+
}
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
run do
|
|
49
|
+
loaded_requests = requests_to_analyze
|
|
50
|
+
skip_if loaded_requests.blank?, 'No hook requests received.'
|
|
51
|
+
|
|
52
|
+
sorted_cards = sorted_cards_from_requests(loaded_requests)
|
|
53
|
+
|
|
54
|
+
assert sorted_cards['actions'][COVERAGE_INFORMATION_RESPONSE_TYPE].present?,
|
|
55
|
+
'Support for the Coverage Information response type not demonstrated.'
|
|
56
|
+
|
|
57
|
+
coverage_information_extensions = extract_coverage_information_extensions(sorted_cards)
|
|
58
|
+
assert_must_support_elements_present(coverage_information_extensions, COVERAGE_INFO_EXT_URL,
|
|
59
|
+
metadata: MustSupportMetadataHolder.new(metadata))
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
module DaVinciCRDTestKit
|
|
2
|
+
module V221
|
|
3
|
+
class ClientFHIRPathCollectionAsCommaDelimitedStringTest < Inferno::Test
|
|
4
|
+
title 'Client correctly interprets collections when substituting FHIRPath results in prefetch templates'
|
|
5
|
+
id :crd_v221_client_fhir_path_collection_as_comma_delimited_string
|
|
6
|
+
description <<~DESCRIPTION
|
|
7
|
+
The CDS Hooks specification requires that when a FHIRPath token in A
|
|
8
|
+
prefetch template resolves to a collection of datatypes (e.g., resource ids),
|
|
9
|
+
then the collection gets turned into a comma-delimited string when instantiating
|
|
10
|
+
the prefetch template.
|
|
11
|
+
|
|
12
|
+
During this test, Inferno will verify that during a previously-run hook test,
|
|
13
|
+
there was at least one instance of a prefetch template that has a
|
|
14
|
+
token which Inferno expects to result in a collection with multiple unique members.
|
|
15
|
+
Note that this does not test whether the client correctly
|
|
16
|
+
handles the collection, which is checked by the
|
|
17
|
+
"Hook requests include the requested prefetch data" test.
|
|
18
|
+
|
|
19
|
+
This test relies on the evaluation performed by the "Hook requests include the
|
|
20
|
+
requested prefetch data" test present in each hook-specific "Requests" group. One of these groups
|
|
21
|
+
must have been run and resulted in a "Hook requests include the requested prefetch data"
|
|
22
|
+
test that outputs "demonstrates_fhirpath_collection_as_comma_delimited_string" as true.
|
|
23
|
+
DESCRIPTION
|
|
24
|
+
|
|
25
|
+
verifies_requirements 'cds-hooks_3.0.0-ballot@239', 'cds-hooks_3.0.0-ballot@242'
|
|
26
|
+
|
|
27
|
+
run do
|
|
28
|
+
completeness_tests = find_completeness_tests
|
|
29
|
+
pass_if completeness_tests_demonstrate_collection_token_substitution?(completeness_tests)
|
|
30
|
+
|
|
31
|
+
skip 'No prefetch template requiring FHIRPath collection token substitution demonstrated. ' \
|
|
32
|
+
'Perform more complex hook requests and re-run.'
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def find_completeness_tests
|
|
36
|
+
hooks_group = self.class.parent.parent.groups.find do |group|
|
|
37
|
+
group.id.to_s.include?('crd_v221_client_hooks')
|
|
38
|
+
end
|
|
39
|
+
hooks_group.groups.map do |group|
|
|
40
|
+
group.groups.flat_map(&:tests).find do |test|
|
|
41
|
+
test.id.to_s.include?('crd_v221_hook_request_prefetch_complete')
|
|
42
|
+
end
|
|
43
|
+
end.compact
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def completeness_tests_demonstrate_collection_token_substitution?(prefetch_completeness_tests)
|
|
47
|
+
results_repo = Inferno::Repositories::Results.new
|
|
48
|
+
results = results_repo.current_results_for_test_session_and_runnables(test_session_id,
|
|
49
|
+
prefetch_completeness_tests)
|
|
50
|
+
|
|
51
|
+
results.any? do |result|
|
|
52
|
+
result.outputs.any? do |output|
|
|
53
|
+
output['name'] == 'demonstrates_fhirpath_collection_as_comma_delimited_string' &&
|
|
54
|
+
output['value'] == 'true'
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
require_relative '../../tagged_request_load_helper'
|
|
2
|
+
require_relative '../../multi_request_message_helper'
|
|
3
|
+
require_relative '../../../cross_suite/tags'
|
|
4
|
+
|
|
5
|
+
module DaVinciCRDTestKit
|
|
6
|
+
module V221
|
|
7
|
+
class ClientHookInstancesUniqueTest < Inferno::Test
|
|
8
|
+
include TaggedRequestLoadHelper
|
|
9
|
+
include MultiRequestMessageHelper
|
|
10
|
+
|
|
11
|
+
title 'Client does not reuse hookInstance values'
|
|
12
|
+
id :crd_v221_client_hook_instances_unique
|
|
13
|
+
description <<~DESCRIPTION
|
|
14
|
+
The CDS Hooks specification requires that the `hookInstance` field of each hook
|
|
15
|
+
request be globally unique so that it can be used for tracking
|
|
16
|
+
and auditing.
|
|
17
|
+
|
|
18
|
+
During this test, Inferno will check that across all hook invocations performed during these
|
|
19
|
+
tests, the `hookInstance` field was never reused.
|
|
20
|
+
DESCRIPTION
|
|
21
|
+
|
|
22
|
+
verifies_requirements 'cds-hooks_3.0.0-ballot@25'
|
|
23
|
+
|
|
24
|
+
config(
|
|
25
|
+
options: {
|
|
26
|
+
crd_test_group: DUPLICATED_HOOK_INSTANCE_TAG
|
|
27
|
+
}
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
run do
|
|
31
|
+
duplicated_hook_instance_requests = load_hook_requests
|
|
32
|
+
reused_values = duplicated_hook_instance_requests.map.with_index do |request, request_index|
|
|
33
|
+
request_body = parse_json_request_entity(request.request_body, 'Request body', request_index)
|
|
34
|
+
next nil unless request_body.present?
|
|
35
|
+
|
|
36
|
+
request_body['hookInstance']
|
|
37
|
+
end.compact.uniq
|
|
38
|
+
reused_values.each { |hook_instance| load_tagged_requests(TagMethods.hook_instance_tag(hook_instance)) }
|
|
39
|
+
|
|
40
|
+
assert duplicated_hook_instance_requests.blank?,
|
|
41
|
+
"Inferno received hook requests that re-used `hookInstance` values: #{reused_values.join(', ')}"
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_location_address_propagation_test.rb
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
require_relative '../../../cross_suite/tags'
|
|
2
|
+
require_relative '../../tagged_request_load_helper'
|
|
3
|
+
|
|
4
|
+
module DaVinciCRDTestKit
|
|
5
|
+
module V221
|
|
6
|
+
class ClientLocationAddressPropagationTest < Inferno::Test
|
|
7
|
+
include TaggedRequestLoadHelper
|
|
8
|
+
|
|
9
|
+
title 'Client propagates addresses to child Location resources'
|
|
10
|
+
id :crd_v221_client_location_address_propagation
|
|
11
|
+
description <<~DESCRIPTION
|
|
12
|
+
The CRD IG requires that ([prof-13](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/StructureDefinition-profile-location.html#ci-c-prof-13))
|
|
13
|
+
> If a Location is a fine-grained location such as a bed or room,
|
|
14
|
+
> the address SHALL be propagated from the higher-level location it is part of.
|
|
15
|
+
|
|
16
|
+
During this test, Inferno will verify that for all locations provided as a prefetched resource
|
|
17
|
+
and their parents (via the `partOf` element), if the Location has a parent Location (`partOf`) and
|
|
18
|
+
that parent Location's `address` element is populated, then the child Location's `address` element
|
|
19
|
+
must also be populated. The test will not verify the details of the address because Inferno cannot
|
|
20
|
+
easily determine whether a particular location is "fine-grained" so as to need the same address.
|
|
21
|
+
By requiring just population, this check allows for refinement of the address in the child
|
|
22
|
+
in addition to straight propagation.
|
|
23
|
+
DESCRIPTION
|
|
24
|
+
|
|
25
|
+
verifies_requirements 'hl7.fhir.us.davinci-crd_2.2.1@prof-13'
|
|
26
|
+
|
|
27
|
+
run do
|
|
28
|
+
skip_if loaded_requests.blank?, 'No hook requests received.'
|
|
29
|
+
pass_if prefetched_location_hash.blank?, 'No Location resources in use, so verification not needed.'
|
|
30
|
+
|
|
31
|
+
prefetched_location_hash.each_value do |location|
|
|
32
|
+
check_location_address_propagation(location)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
assert_no_error_messages('Address propagation issues found. See Messages for details.')
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# checks that the location has an address if a parent also has an address
|
|
39
|
+
def check_location_address_propagation(location, root_id = location.id)
|
|
40
|
+
return if location.address.present?
|
|
41
|
+
return unless location.partOf.present? && location.partOf.reference.present?
|
|
42
|
+
|
|
43
|
+
parent = prefetched_location_hash[location.partOf.reference]
|
|
44
|
+
parent = fetched_location_hash[location.partOf.reference] unless parent.present?
|
|
45
|
+
if parent.present?
|
|
46
|
+
check_location_conformance(parent, root_id)
|
|
47
|
+
if parent.address.present?
|
|
48
|
+
add_message('error', "Address missing on prefetched 'Location/#{root_id}': " \
|
|
49
|
+
"parent 'Location/#{parent.id}' has an address.")
|
|
50
|
+
else
|
|
51
|
+
check_location_address_propagation(parent, root_id)
|
|
52
|
+
end
|
|
53
|
+
else
|
|
54
|
+
add_message('error', "Unable to check address propagation prefetched 'Location/#{root_id}': " \
|
|
55
|
+
"`partOf` reference '#{location.partOf.reference}' could not be fetched.")
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
nil
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# skip profile check if in the prefetch hash (done elsewhere) or already checked
|
|
62
|
+
def check_location_conformance(location, root_id)
|
|
63
|
+
key = "Location/#{location.id}"
|
|
64
|
+
return if prefetched_location_hash.key?(key) || fetched_locations_checked_for_conformance.key?(key)
|
|
65
|
+
|
|
66
|
+
fetched_locations_checked_for_conformance[key] = location
|
|
67
|
+
validator_response_details = []
|
|
68
|
+
return if resource_is_valid?(resource: location, profile_url: 'http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-location|2.2.1',
|
|
69
|
+
add_messages_to_runnable: false, validator_response_details:)
|
|
70
|
+
|
|
71
|
+
message_prefix = "Parent of prefetched 'Location/#{root_id}'"
|
|
72
|
+
add_message('error', "Location/#{location.id}: #{message_prefix} does not conform to the CRD Location profile.")
|
|
73
|
+
validator_response_details.each { |issue| add_message(issue.severity, "(#{message_prefix}) #{issue.message}") }
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def fetched_locations_checked_for_conformance
|
|
77
|
+
@fetched_locations_checked_for_conformance ||= {}
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def loaded_requests
|
|
81
|
+
@loaded_requests ||= requests_to_analyze
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def prefetched_location_hash
|
|
85
|
+
@prefetched_location_hash ||= build_prefetched_locations_hash
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def build_prefetched_locations_hash
|
|
89
|
+
loaded_requests.each_with_object({}) do |request, location_hash|
|
|
90
|
+
request_body = JSON.parse(request.request_body)
|
|
91
|
+
next unless request_body.is_a?(Hash)
|
|
92
|
+
|
|
93
|
+
prefetched_location_bundle = extract_prefetched_location_bundle(request_body)
|
|
94
|
+
next unless prefetched_location_bundle.present?
|
|
95
|
+
|
|
96
|
+
prefetched_location_bundle.entry.each do |entry|
|
|
97
|
+
add_location_to_hash(entry.resource, location_hash)
|
|
98
|
+
end
|
|
99
|
+
rescue JSON::ParserError
|
|
100
|
+
next
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def extract_prefetched_location_bundle(request_body)
|
|
105
|
+
locations_data = request_body.dig('prefetch', 'locations') || request_body.dig('prefetch', 'locs')
|
|
106
|
+
locations = FHIR.from_contents(locations_data.to_json) if locations_data.present?
|
|
107
|
+
return locations if locations.is_a?(FHIR::Bundle)
|
|
108
|
+
return nil unless locations.is_a?(FHIR::Location)
|
|
109
|
+
|
|
110
|
+
FHIR::Bundle.new({ entry: [FHIR::Bundle::Entry.new({ resource: locations })] })
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def fetched_location_hash
|
|
114
|
+
@fetched_location_hash ||= build_fetched_locations_hash
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def build_fetched_locations_hash
|
|
118
|
+
load_tagged_requests(PARENT_LOCATION_FETCH_TAG, DATA_FETCH_TAG).each_with_object({}) do |request, location_hash|
|
|
119
|
+
add_location_to_hash(FHIR.from_contents(request.response_body), location_hash)
|
|
120
|
+
rescue JSON::ParserError
|
|
121
|
+
next
|
|
122
|
+
end
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def add_location_to_hash(location, location_hash)
|
|
126
|
+
return unless location.is_a?(FHIR::Location) && location.id.present?
|
|
127
|
+
|
|
128
|
+
relative_reference = "#{location.resourceType}/#{location.id}"
|
|
129
|
+
return if location_hash.key?(relative_reference)
|
|
130
|
+
|
|
131
|
+
location_hash[relative_reference] = location
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
end
|
data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_prefetch_complete_and_subset_test.rb
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
require_relative '../../tagged_request_load_helper'
|
|
2
|
+
require_relative '../client_urls'
|
|
3
|
+
|
|
4
|
+
module DaVinciCRDTestKit
|
|
5
|
+
module V221
|
|
6
|
+
class ClientPrefetchCompleteAndSubsetTest < Inferno::Test
|
|
7
|
+
include TaggedRequestLoadHelper
|
|
8
|
+
|
|
9
|
+
title 'Client can provide both the complete standard prefetch data set and a subset'
|
|
10
|
+
id :crd_v221_client_prefetch_complete_and_subset
|
|
11
|
+
description <<~DESCRIPTION
|
|
12
|
+
The CRD IG requires clients to be able to prefetch a standard set of resources that
|
|
13
|
+
payers are expected to need to evaluate coverage requirements. They are also
|
|
14
|
+
required to be able to prefetch a subset of these standard prefetch requirements
|
|
15
|
+
if a payer requests fewer in their service discovery responses because the payer
|
|
16
|
+
does not always need the complete set of standard prefetch resources to evaluate
|
|
17
|
+
coverage.
|
|
18
|
+
|
|
19
|
+
During this test, Inferno will verify that the client has demonstrated requests
|
|
20
|
+
- made against both of Inferno's simulated CRD servers,
|
|
21
|
+
one of which requests the all standard prefetch resources while the
|
|
22
|
+
other requests only a subset.
|
|
23
|
+
- which demonstrate the capability to distinguish the difference between
|
|
24
|
+
the two prefetch sets.
|
|
25
|
+
|
|
26
|
+
The CRD server that requests only a subset of the standard prefetch data does not request
|
|
27
|
+
resources referenced from the following elements. Request made to each Inferno service
|
|
28
|
+
endpoint with one of these elements populated with a reference to a resource not referenced
|
|
29
|
+
elsewhere will demonstrate the required capability.
|
|
30
|
+
- On an `appointment-book` hook request, an Appointment with a participant entry that
|
|
31
|
+
references a Practitioner or PractitionerRole resource in its actor element
|
|
32
|
+
- On an `encounter-start` or `encounter-discharge` hook request, an Encounter with a
|
|
33
|
+
referenced Location via the `location` element or referenced Organization via the
|
|
34
|
+
`serviceProvider` element.
|
|
35
|
+
- On an `order-select`, `order-sign`, or `order-dispatch` hook request, one of the following order resources:
|
|
36
|
+
- A CommunicationRequest, DeviceRequest, MedicationRequest, or ServiceRequest that references a Practitioner or PractitionerRole resource in its `requester` element, or
|
|
37
|
+
- A NutritionOrder that references a Practitioner or PractitionerRole resource in its `orderer` element
|
|
38
|
+
- A VisionPrescription that references a Practitioner or PractitionerRole resource in its `prescriber` element
|
|
39
|
+
|
|
40
|
+
This test relies on the evaluation performed by the "Hook requests include the
|
|
41
|
+
requested prefetch data" tests present in each hook-specific "Requests" group. One of these groups must
|
|
42
|
+
have been run and resulted in a "Hook requests include the
|
|
43
|
+
requested prefetch data" test that outputs
|
|
44
|
+
"demonstrates_prefetch_subset_distinct_from_complete" and
|
|
45
|
+
"demonstrates_prefetch_complete_distinct_from_subset" as true (does not have to be the
|
|
46
|
+
same test).
|
|
47
|
+
DESCRIPTION
|
|
48
|
+
|
|
49
|
+
verifies_requirements 'hl7.fhir.us.davinci-crd_2.2.1@found-25-A', 'hl7.fhir.us.davinci-crd_2.2.1@found-25-B'
|
|
50
|
+
|
|
51
|
+
run do
|
|
52
|
+
subset_prefetch_requests, complete_prefetch_requests =
|
|
53
|
+
requests_to_analyze.partition { |request| request.url.include?(PREFETCH_SUBSET_PREFIX) }
|
|
54
|
+
completeness_tests = find_completeness_tests
|
|
55
|
+
check_for_demonstration(subset_prefetch_requests, completeness_tests, :subset)
|
|
56
|
+
check_for_demonstration(complete_prefetch_requests, completeness_tests, :complete)
|
|
57
|
+
|
|
58
|
+
skip_if error_messages?,
|
|
59
|
+
'The client did not demonstrate both complete and subset prefetch capability. See Messages for details.'
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def find_completeness_tests
|
|
63
|
+
hooks_group = self.class.parent.parent.groups.find do |group|
|
|
64
|
+
group.id.to_s.include?('crd_v221_client_hooks')
|
|
65
|
+
end
|
|
66
|
+
hooks_group.groups.map do |group|
|
|
67
|
+
group.groups.flat_map(&:tests).find do |test|
|
|
68
|
+
test.id.to_s.include?('crd_v221_hook_request_prefetch_complete')
|
|
69
|
+
end
|
|
70
|
+
end.compact
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def check_for_demonstration(requests, completeness_tests, target_name)
|
|
74
|
+
unless requests.present?
|
|
75
|
+
add_message('error', "No requests made to the service endpoint requesting #{target_name} prefetch data.")
|
|
76
|
+
return
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
results_repo = Inferno::Repositories::Results.new
|
|
80
|
+
results = results_repo.current_results_for_test_session_and_runnables(test_session_id,
|
|
81
|
+
completeness_tests)
|
|
82
|
+
output_name =
|
|
83
|
+
if target_name == :subset
|
|
84
|
+
'demonstrates_prefetch_subset_distinct_from_complete'
|
|
85
|
+
else
|
|
86
|
+
'demonstrates_prefetch_complete_distinct_from_subset'
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
demonstrated = results.any? do |result|
|
|
90
|
+
result.outputs.any? do |output|
|
|
91
|
+
output['name'] == output_name &&
|
|
92
|
+
output['value'] == 'true'
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
return if demonstrated
|
|
97
|
+
|
|
98
|
+
add_message('error', "Requests made to the service endpoint requesting #{target_name} prefetch data " \
|
|
99
|
+
'did not demonstrate a difference between the two levels of prefetch data.')
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|