davinci_crd_test_kit 0.13.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/config/presets/inferno_crd_client_suite.json.erb +20 -14
- data/config/presets/inferno_crd_client_suite_prefetch_subset_v221.json.erb +125 -0
- data/config/presets/inferno_crd_client_suite_v221.json.erb +124 -0
- data/config/presets/inferno_crd_server_suite.json.erb +58 -1
- data/config/presets/inferno_crd_server_suite_v221.json.erb +94 -0
- data/config/presets/ri_crd_request_generator.json_v221.json.erb +13 -0
- data/config/presets/ri_crd_server.json.erb +19 -19
- data/lib/davinci_crd_test_kit/client/client_base_urls.rb +80 -0
- data/lib/davinci_crd_test_kit/{client_hook_request_validation.rb → client/client_hook_request_validation.rb} +1 -1
- data/lib/davinci_crd_test_kit/client/crd_client_options.rb +30 -0
- data/lib/davinci_crd_test_kit/client/endpoints/cds_services_discovery_handler.rb +34 -0
- data/lib/davinci_crd_test_kit/client/endpoints/custom_service_response.rb +342 -0
- data/lib/davinci_crd_test_kit/client/endpoints/gather_response_generation_data.rb +410 -0
- data/lib/davinci_crd_test_kit/client/endpoints/hook_request_endpoint.rb +233 -0
- data/lib/davinci_crd_test_kit/{mock_service_response.rb → client/endpoints/mock_service_response.rb} +165 -59
- data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/companions_prerequisites.json +1 -0
- data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/create_update_coverage_information.json +3 -2
- data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/launch_smart_app.json +8 -1
- data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/propose_alternate_request.json +1 -0
- data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/request_form_completion.json +17 -16
- data/lib/davinci_crd_test_kit/client/multi_request_message_helper.rb +35 -0
- data/lib/davinci_crd_test_kit/client/tagged_request_load_helper.rb +38 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_create_test.rb +43 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_read_test.rb +43 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_search_test.rb +234 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_update_test.rb +43 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/api/client_fhir_api_validation_test.rb +63 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/auth/decode_auth_token_test.rb +65 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/auth/retrieve_jwks_test.rb +109 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/auth/token_header_test.rb +70 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/auth/token_payload_test.rb +85 -0
- data/lib/davinci_crd_test_kit/{routes/cds-services.json → client/v2.0.1/cds-services-v201.json} +1 -1
- data/lib/davinci_crd_test_kit/client/v2.0.1/client_appointment_book_group.rb +108 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/client_card_must_support_group.rb +31 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/client_encounter_discharge_group.rb +105 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/client_encounter_start_group.rb +105 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/client_fhir_api_group.rb +790 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/client_hooks_group.rb +74 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/client_order_dispatch_group.rb +111 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/client_order_select_group.rb +116 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/client_order_sign_group.rb +113 -0
- data/lib/davinci_crd_test_kit/{client_registration_group.rb → client/v2.0.1/client_registration_group.rb} +12 -8
- data/lib/davinci_crd_test_kit/client/v2.0.1/client_urls.rb +13 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/crd_client_suite.rb +134 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/appointment_book_receive_request_test.rb +129 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/encounter_discharge_receive_request_test.rb +126 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/encounter_start_receive_request_test.rb +126 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/order_dispatch_receive_request_test.rb +138 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/order_select_receive_request_test.rb +134 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/invocation/order_sign_receive_request_test.rb +136 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/must_support/client_card_must_support_coverage_information.rb +93 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/must_support/client_card_must_support_external_reference.rb +62 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/must_support/client_card_must_support_instructions.rb +62 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/registration/client_registration_verification_test.rb +94 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/registration/client_service_registration_attestation_test.rb +40 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_fetched_data_test.rb +86 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_optional_fields_test.rb +63 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_prefetch_equals_queried_test.rb +96 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_required_fields_test.rb +55 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_valid_context_test.rb +70 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/verify_request/hook_request_valid_prefetch_test.rb +62 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/verify_response/client_display_cards_attest.rb +83 -0
- data/lib/davinci_crd_test_kit/client/v2.0.1/verify_response/inferno_response_validation.rb +79 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/api/client_coverage_info_update_test.rb +212 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/api/client_crd_update_verification_group.rb +18 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/auth/decode_auth_token_test.rb +69 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/auth/retrieve_jwks_test.rb +120 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/auth/token_header_test.rb +92 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/auth/token_payload_test.rb +93 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/cds-services-prefetch-subset-v221.json +198 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/cds-services-v221.json +202 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_appointment_book_group.rb +102 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_cross_hook_group.rb +28 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_encounter_discharge_group.rb +96 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_encounter_start_group.rb +95 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_fhir_api_group.rb +88 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_hooks_group.rb +64 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_long_running_hook_group.rb +32 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_order_dispatch_group.rb +101 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_order_select_group.rb +102 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_order_sign_group.rb +107 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_registration_group.rb +27 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/client_urls.rb +27 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/crd_client_suite.rb +229 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_card_must_support_coverage_information_test.rb +63 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_fhirpath_collection_as_comma_delimited_string_test.rb +60 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_hook_instances_unique_test.rb +45 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_location_address_propagation_test.rb +135 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/cross_hook/client_prefetch_complete_and_subset_test.rb +103 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/appointment_book_receive_request_test.rb +156 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/encounter_discharge_receive_request_test.rb +157 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/encounter_start_receive_request_test.rb +157 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/order_dispatch_receive_request_test.rb +165 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/order_select_receive_request_test.rb +165 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/invocation/order_sign_receive_request_test.rb +165 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/long_running/client_long_running_receive_request_test.rb +64 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/long_running/client_skip_long_running_attestation_test.rb +49 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/registration/client_registration_verification_test.rb +161 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/registration/client_service_registration_attestation_test.rb +107 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_conformance_test.rb +47 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_coverage_verification_test.rb +152 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_data_fetch_verification_test.rb +55 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_granted_scopes_test.rb +123 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_prefetch_complete_test.rb +127 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_prefetch_profiles_test.rb +55 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_requested_version_test.rb +54 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_request/hook_request_secured_transport_test.rb +48 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_response/client_display_cards_attest.rb +74 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_response/hook_response_support_coverage_information_test.rb +30 -0
- data/lib/davinci_crd_test_kit/client/v2.2.1/verify_response/inferno_response_validation.rb +77 -0
- data/lib/davinci_crd_test_kit/cross_suite/base_urls.rb +20 -0
- data/lib/davinci_crd_test_kit/cross_suite/cards_identification.rb +312 -0
- data/lib/davinci_crd_test_kit/{cards_validation.rb → cross_suite/cards_validation.rb} +104 -47
- data/lib/davinci_crd_test_kit/cross_suite/coverage-information_stu201_metadata.yml +27 -0
- data/lib/davinci_crd_test_kit/cross_suite/coverage-information_stu221_metadata.yml +60 -0
- data/lib/davinci_crd_test_kit/cross_suite/fhirpath_on_cds_request.rb +177 -0
- data/lib/davinci_crd_test_kit/{hook_request_field_validation.rb → cross_suite/hook_request_field_validation.rb} +282 -203
- data/lib/davinci_crd_test_kit/cross_suite/logical_models_override_helper.rb +220 -0
- data/lib/davinci_crd_test_kit/cross_suite/prefetch_completeness_checker.rb +462 -0
- data/lib/davinci_crd_test_kit/cross_suite/prefetch_contents_validation.rb +81 -0
- data/lib/davinci_crd_test_kit/cross_suite/prefetch_profile_validation.rb +48 -0
- data/lib/davinci_crd_test_kit/cross_suite/profiles_and_resource_types.rb +63 -0
- data/lib/davinci_crd_test_kit/cross_suite/replace_tokens.rb +38 -0
- data/lib/davinci_crd_test_kit/cross_suite/requests_logical_model_validation.rb +202 -0
- data/lib/davinci_crd_test_kit/cross_suite/response_logical_model_validation.rb +274 -0
- data/lib/davinci_crd_test_kit/{suggestion_actions_validation.rb → cross_suite/suggestion_actions_validation.rb} +70 -50
- data/lib/davinci_crd_test_kit/cross_suite/tags.rb +42 -0
- data/lib/davinci_crd_test_kit/metadata.rb +10 -44
- data/lib/davinci_crd_test_kit/requirements/cds-hooks-library_1.0.1_requirements.xlsx +0 -0
- data/lib/davinci_crd_test_kit/requirements/cds-hooks_2.0_requirements.xlsx +0 -0
- data/lib/davinci_crd_test_kit/requirements/cds-hooks_3.0.0-ballot_requirements.xlsx +0 -0
- data/lib/davinci_crd_test_kit/requirements/davinci_crd_test_kit_requirements.csv +742 -65
- data/lib/davinci_crd_test_kit/requirements/generated/crd_client_requirements_coverage.csv +279 -54
- data/lib/davinci_crd_test_kit/requirements/generated/crd_client_v221_requirements_coverage.csv +1430 -0
- data/lib/davinci_crd_test_kit/requirements/generated/crd_server_requirements_coverage.csv +36 -45
- data/lib/davinci_crd_test_kit/requirements/generated/crd_server_v221_requirements_coverage.csv +143 -0
- data/lib/davinci_crd_test_kit/requirements/hl7.fhir.us.davinci-crd_2.0.1_requirements.xlsx +0 -0
- data/lib/davinci_crd_test_kit/requirements/hl7.fhir.us.davinci-crd_2.2.1_requirements.xlsx +0 -0
- data/lib/davinci_crd_test_kit/server/endpoints/jwk_set_endpoint_handler.rb +13 -0
- data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_create_endpoint.rb +23 -0
- data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_delete_endpoint.rb +30 -0
- data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_metadata_endpoint.rb +112 -0
- data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_read_endpoint.rb +21 -0
- data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_request_handler.rb +261 -0
- data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_search_endpoint.rb +561 -0
- data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/fhir_update_endpoint.rb +24 -0
- data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr/stress-test-Bundle.json +54687 -0
- data/lib/davinci_crd_test_kit/server/endpoints/mock_ehr_endpoints.rb +95 -0
- data/lib/davinci_crd_test_kit/server/jobs/invoke_hook.rb +225 -0
- data/lib/davinci_crd_test_kit/{jwt_helper.rb → server/jwt_helper.rb} +1 -12
- data/lib/davinci_crd_test_kit/server/resource_extractor.rb +68 -0
- data/lib/davinci_crd_test_kit/server/server_abstract_invoke_hook_test.rb +165 -0
- data/lib/davinci_crd_test_kit/server/server_base_urls.rb +30 -0
- data/lib/davinci_crd_test_kit/{server_hook_helper.rb → server/server_hook_helper.rb} +1 -1
- data/lib/davinci_crd_test_kit/{server_hook_request_validation.rb → server/server_hook_request_validation.rb} +1 -1
- data/lib/davinci_crd_test_kit/{test_helper.rb → server/server_test_helper.rb} +7 -3
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Appointment.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/ClaimResponse.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/CommunicationRequest.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Coverage.yml +21 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Device.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/DeviceRequest.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Encounter.yml +7 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Location.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/MedicationRequest.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/NutritionOrder.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Organization.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Patient.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Practitioner.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/PractitionerRole.yml +40 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/ServiceRequest.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/Task.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_metadata/VisionPrescription.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/crd_server_suite.rb +99 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/discovery/discovery_endpoint_test.rb +90 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/discovery/discovery_services_validation_test.rb +67 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/interaction/server_invoke_hook_test.rb +12 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/must_support/coverage_information_system_action_across_hooks_validation_test.rb +34 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/must_support/external_reference_card_across_hooks_validation_test.rb +30 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/must_support/instructions_card_received_across_hooks_test.rb +27 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_appointment_book_group.rb +191 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_demonstrate_hook_response_group.rb +93 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_discovery_group.rb +62 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_encounter_discharge_group.rb +186 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_encounter_start_group.rb +186 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_hooks_group.rb +73 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_order_dispatch_group.rb +191 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_order_select_group.rb +211 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_order_sign_group.rb +216 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_required_card_response_validation_group.rb +28 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/server_urls.rb +13 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_request/service_request_context_validation_test.rb +30 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_request/service_request_optional_fields_validation_test.rb +39 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_request/service_request_required_fields_validation_test.rb +40 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/additional_orders_validation_test.rb +59 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/card_optional_fields_validation_test.rb +51 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/coverage_information_system_action_received_test.rb +65 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/coverage_information_system_action_validation_test.rb +120 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/create_or_update_coverage_info_response_validation_test.rb +70 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/external_reference_card_validation_test.rb +37 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/form_completion_response_validation_test.rb +67 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/instructions_card_received_test.rb +30 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/launch_smart_app_card_validation_test.rb +39 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/propose_alternate_request_card_validation_test.rb +46 -0
- data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/service_response_validation_test.rb +83 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Appointment_withorder.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Appointment_withoutorder.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/CommunicationRequest.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Coverage.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Device.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/DeviceRequest.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Encounter.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Location.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/MedicationRequest.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/NutritionOrder.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Organization.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/Patient.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/PractitionerRole.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/ServiceRequest.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_metadata/VisionPrescription.yml +5 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/crd_server_suite.rb +115 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_configuration_test.rb +159 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_endpoint_test.rb +90 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_prefetch_support_test.rb +43 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/discovery/discovery_services_validation_test.rb +121 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/interaction/server_invoke_hook_test.rb +17 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/must_support/coverage_information_must_support_test.rb +71 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/must_support/coverage_information_system_action_across_hooks_validation_test.rb +36 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/must_support/supported_us_core_versions_test.rb +118 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_appointment_book_group.rb +213 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_demonstrate_hook_response_group.rb +93 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_discovery_group.rb +69 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_encounter_discharge_group.rb +194 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_encounter_start_group.rb +194 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_hooks_group.rb +73 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_order_dispatch_group.rb +214 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_order_select_group.rb +219 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_order_sign_group.rb +241 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_required_card_response_validation_group.rb +30 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/server_urls.rb +13 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_context_validation_test.rb +30 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_no_custom_extensions_test.rb +120 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_optional_fields_validation_test.rb +39 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_request/service_request_required_fields_validation_test.rb +40 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/additional_orders_validation_test.rb +66 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/all_responses_include_coverage_information_test.rb +123 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/card_optional_fields_validation_test.rb +57 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/coverage_info_configuration_test.rb +83 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/coverage_information_system_action_received_test.rb +65 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/coverage_information_system_action_validation_test.rb +184 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/create_or_update_coverage_info_response_validation_test.rb +75 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/external_reference_card_validation_test.rb +47 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/form_completion_response_validation_test.rb +91 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/hook_request_resource_resolution.rb +137 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/instructions_card_received_test.rb +32 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/launch_smart_app_card_validation_test.rb +49 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/order_dispatch_coverage_information_test.rb +38 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/propose_alternate_request_card_validation_test.rb +54 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/service_response_validation_test.rb +97 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/unknown_cds_hooks_elements_test.rb +78 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/unknown_configuration_test.rb +78 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/unknown_context_test.rb +78 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/verify_response_without_billing_options_test.rb +43 -0
- data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/verify_response_without_configuration_test.rb +44 -0
- data/lib/davinci_crd_test_kit/version.rb +2 -2
- data/lib/davinci_crd_test_kit.rb +4 -2
- metadata +297 -93
- data/lib/davinci_crd_test_kit/client_fhir_api_group.rb +0 -785
- data/lib/davinci_crd_test_kit/client_hooks_group.rb +0 -74
- data/lib/davinci_crd_test_kit/client_tests/appointment_book_receive_request_test.rb +0 -93
- data/lib/davinci_crd_test_kit/client_tests/client_appointment_book_group.rb +0 -75
- data/lib/davinci_crd_test_kit/client_tests/client_display_cards_attest.rb +0 -48
- data/lib/davinci_crd_test_kit/client_tests/client_encounter_discharge_group.rb +0 -73
- data/lib/davinci_crd_test_kit/client_tests/client_encounter_start_group.rb +0 -73
- data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_create_test.rb +0 -42
- data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_read_test.rb +0 -40
- data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_search_test.rb +0 -232
- data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_update_test.rb +0 -42
- data/lib/davinci_crd_test_kit/client_tests/client_fhir_api_validation_test.rb +0 -61
- data/lib/davinci_crd_test_kit/client_tests/client_order_dispatch_group.rb +0 -79
- data/lib/davinci_crd_test_kit/client_tests/client_order_select_group.rb +0 -82
- data/lib/davinci_crd_test_kit/client_tests/client_order_sign_group.rb +0 -81
- data/lib/davinci_crd_test_kit/client_tests/client_registration_verification_test.rb +0 -88
- data/lib/davinci_crd_test_kit/client_tests/decode_auth_token_test.rb +0 -60
- data/lib/davinci_crd_test_kit/client_tests/encounter_discharge_receive_request_test.rb +0 -90
- data/lib/davinci_crd_test_kit/client_tests/encounter_start_receive_request_test.rb +0 -90
- data/lib/davinci_crd_test_kit/client_tests/hook_request_optional_fields_test.rb +0 -57
- data/lib/davinci_crd_test_kit/client_tests/hook_request_required_fields_test.rb +0 -49
- data/lib/davinci_crd_test_kit/client_tests/hook_request_valid_context_test.rb +0 -68
- data/lib/davinci_crd_test_kit/client_tests/hook_request_valid_prefetch_test.rb +0 -69
- data/lib/davinci_crd_test_kit/client_tests/order_dispatch_receive_request_test.rb +0 -102
- data/lib/davinci_crd_test_kit/client_tests/order_select_receive_request_test.rb +0 -98
- data/lib/davinci_crd_test_kit/client_tests/order_sign_receive_request_test.rb +0 -101
- data/lib/davinci_crd_test_kit/client_tests/retrieve_jwks_test.rb +0 -105
- data/lib/davinci_crd_test_kit/client_tests/submitted_response_validation.rb +0 -48
- data/lib/davinci_crd_test_kit/client_tests/token_header_test.rb +0 -65
- data/lib/davinci_crd_test_kit/client_tests/token_payload_test.rb +0 -78
- data/lib/davinci_crd_test_kit/crd_client_suite.rb +0 -193
- data/lib/davinci_crd_test_kit/crd_options.rb +0 -9
- data/lib/davinci_crd_test_kit/crd_server_suite.rb +0 -125
- data/lib/davinci_crd_test_kit/igs/davinci-crd-2.0.1.tgz +0 -0
- data/lib/davinci_crd_test_kit/routes/cds_services_discovery_handler.rb +0 -18
- data/lib/davinci_crd_test_kit/routes/hook_request_endpoint.rb +0 -77
- data/lib/davinci_crd_test_kit/routes/jwk_set_endpoint_handler.rb +0 -15
- data/lib/davinci_crd_test_kit/server_appointment_book_group.rb +0 -176
- data/lib/davinci_crd_test_kit/server_demonstrate_hook_response_group.rb +0 -77
- data/lib/davinci_crd_test_kit/server_discovery_group.rb +0 -60
- data/lib/davinci_crd_test_kit/server_encounter_discharge_group.rb +0 -170
- data/lib/davinci_crd_test_kit/server_encounter_start_group.rb +0 -170
- data/lib/davinci_crd_test_kit/server_hooks_group.rb +0 -71
- data/lib/davinci_crd_test_kit/server_order_dispatch_group.rb +0 -176
- data/lib/davinci_crd_test_kit/server_order_select_group.rb +0 -195
- data/lib/davinci_crd_test_kit/server_order_sign_group.rb +0 -201
- data/lib/davinci_crd_test_kit/server_required_card_response_validation_group.rb +0 -26
- data/lib/davinci_crd_test_kit/server_tests/additional_orders_validation_test.rb +0 -68
- data/lib/davinci_crd_test_kit/server_tests/card_optional_fields_validation_test.rb +0 -47
- data/lib/davinci_crd_test_kit/server_tests/coverage_information_system_action_across_hooks_validation_test.rb +0 -32
- data/lib/davinci_crd_test_kit/server_tests/coverage_information_system_action_received_test.rb +0 -63
- data/lib/davinci_crd_test_kit/server_tests/coverage_information_system_action_validation_test.rb +0 -118
- data/lib/davinci_crd_test_kit/server_tests/create_or_update_coverage_info_response_validation_test.rb +0 -71
- data/lib/davinci_crd_test_kit/server_tests/discovery_endpoint_test.rb +0 -88
- data/lib/davinci_crd_test_kit/server_tests/discovery_services_validation_test.rb +0 -65
- data/lib/davinci_crd_test_kit/server_tests/external_reference_card_across_hooks_validation_test.rb +0 -28
- data/lib/davinci_crd_test_kit/server_tests/external_reference_card_validation_test.rb +0 -36
- data/lib/davinci_crd_test_kit/server_tests/form_completion_response_validation_test.rb +0 -78
- data/lib/davinci_crd_test_kit/server_tests/instructions_card_received_across_hooks_test.rb +0 -25
- data/lib/davinci_crd_test_kit/server_tests/instructions_card_received_test.rb +0 -26
- data/lib/davinci_crd_test_kit/server_tests/launch_smart_app_card_validation_test.rb +0 -38
- data/lib/davinci_crd_test_kit/server_tests/propose_alternate_request_card_validation_test.rb +0 -63
- data/lib/davinci_crd_test_kit/server_tests/service_call_test.rb +0 -101
- data/lib/davinci_crd_test_kit/server_tests/service_request_context_validation_test.rb +0 -28
- data/lib/davinci_crd_test_kit/server_tests/service_request_optional_fields_validation_test.rb +0 -37
- data/lib/davinci_crd_test_kit/server_tests/service_request_required_fields_validation_test.rb +0 -38
- data/lib/davinci_crd_test_kit/server_tests/service_response_validation_test.rb +0 -81
- data/lib/davinci_crd_test_kit/tags.rb +0 -10
- data/lib/davinci_crd_test_kit/urls.rb +0 -52
- /data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/external_reference.json +0 -0
- /data/lib/davinci_crd_test_kit/{card_responses → client/endpoints/mocked_card_responses}/instructions.json +0 -0
- /data/lib/davinci_crd_test_kit/{crd_jwks.json → server/endpoints/crd_jwks.json} +0 -0
- /data/lib/davinci_crd_test_kit/{jwks.rb → server/endpoints/jwks.rb} +0 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
require_relative '../../server_test_helper'
|
|
2
|
+
require_relative '../../../cross_suite/suggestion_actions_validation'
|
|
3
|
+
require_relative '../../server_hook_helper'
|
|
4
|
+
require_relative '../../../cross_suite/cards_identification'
|
|
5
|
+
|
|
6
|
+
module DaVinciCRDTestKit
|
|
7
|
+
module V201
|
|
8
|
+
class CreateOrUpdateCoverageInfoResponseValidationTest < Inferno::Test
|
|
9
|
+
include DaVinciCRDTestKit::ServerTestHelper
|
|
10
|
+
include DaVinciCRDTestKit::SuggestionActionsValidation
|
|
11
|
+
include DaVinciCRDTestKit::ServerHookHelper
|
|
12
|
+
include DaVinciCRDTestKit::CardsIdentification
|
|
13
|
+
|
|
14
|
+
title 'Valid Create or Update Coverage Information cards or system actions received'
|
|
15
|
+
id :crd_v201_create_or_update_coverage_info_response_validation
|
|
16
|
+
description %(
|
|
17
|
+
This test validates the Create or Update Coverage Information cards or system actions received from the
|
|
18
|
+
CRD service, as per the specifications outlined in the [Da Vinci CRD Implementation Guide](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#create-or-update-coverage-information).
|
|
19
|
+
|
|
20
|
+
- **Checking for Presence:**
|
|
21
|
+
The test first checks if any Create or Update Coverage Information cards or system actions are present in
|
|
22
|
+
the returned valid cards or valid system actions.
|
|
23
|
+
- **For cards**: it ensures there are cards with a `suggestions` array containing a single suggestion,
|
|
24
|
+
and the `actions` array of that suggestion has one `create` or `update` action for the `Coverage` resource.
|
|
25
|
+
- **For system actions**: it checks for the presence of `create` or `update` actions for the `Coverage`
|
|
26
|
+
resource.
|
|
27
|
+
|
|
28
|
+
- **Validating:**
|
|
29
|
+
If any Create or Update Coverage Information cards or system actions are found, each `Coverage` resource is
|
|
30
|
+
validated against the base FHIR Coverage resource.
|
|
31
|
+
|
|
32
|
+
If no Create or Update Coverage Information cards or system actions are received, the test is skipped.
|
|
33
|
+
)
|
|
34
|
+
verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@306'
|
|
35
|
+
optional
|
|
36
|
+
input :valid_cards_with_suggestions, :valid_system_actions
|
|
37
|
+
|
|
38
|
+
run do
|
|
39
|
+
parsed_cards = parse_json(valid_cards_with_suggestions)
|
|
40
|
+
parsed_actions = parse_json(valid_system_actions)
|
|
41
|
+
|
|
42
|
+
create_or_update_coverage_info_cards = parsed_cards.select do |card|
|
|
43
|
+
create_or_update_coverage_card_response_type?(card)
|
|
44
|
+
end
|
|
45
|
+
create_or_update_coverage_info_actions = parsed_actions.select do |action|
|
|
46
|
+
create_or_update_coverage_action_response_type?(action)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
skip_msg = "#{tested_hook_name} hook response does not contain any Create or Update Coverage Information " \
|
|
50
|
+
'cards or system actions.'
|
|
51
|
+
skip_if create_or_update_coverage_info_cards.blank? && create_or_update_coverage_info_actions.blank?, skip_msg
|
|
52
|
+
|
|
53
|
+
if create_or_update_coverage_info_actions.present?
|
|
54
|
+
actions_check(create_or_update_coverage_info_actions,
|
|
55
|
+
ig_version: 'v201')
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
if create_or_update_coverage_info_cards.present?
|
|
59
|
+
create_or_update_coverage_info_cards.each do |card|
|
|
60
|
+
actions_check(card['suggestions'].first['actions'].select do |action|
|
|
61
|
+
create_or_update_coverage_action_response_type?(action)
|
|
62
|
+
end, ig_version: 'v201')
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
no_error_validation('Some Create or Update Coverage Information received are not valid.')
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
require_relative '../../server_test_helper'
|
|
2
|
+
require_relative '../../server_hook_helper'
|
|
3
|
+
require_relative '../../../cross_suite/cards_identification'
|
|
4
|
+
|
|
5
|
+
module DaVinciCRDTestKit
|
|
6
|
+
module V201
|
|
7
|
+
class ExternalReferenceCardValidationTest < Inferno::Test
|
|
8
|
+
include DaVinciCRDTestKit::ServerTestHelper
|
|
9
|
+
include DaVinciCRDTestKit::ServerHookHelper
|
|
10
|
+
include DaVinciCRDTestKit::CardsIdentification
|
|
11
|
+
|
|
12
|
+
title 'Valid External Reference cards received'
|
|
13
|
+
id :crd_v201_external_reference_card_validation
|
|
14
|
+
description %(
|
|
15
|
+
This test verifies the presence of valid External Reference cards within the list of valid cards
|
|
16
|
+
returned by the CRD service.
|
|
17
|
+
As per the [Da Vinci CRD Implementation Guide](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#external-reference),
|
|
18
|
+
External Reference cards must contain links with the type set to `absolute`.
|
|
19
|
+
This test checks for the presence of any External Reference cards by verifying:
|
|
20
|
+
- The presence of a `links` array within each card.
|
|
21
|
+
- That every link in the `links` array of a card is of type `absolute`.
|
|
22
|
+
)
|
|
23
|
+
verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@258', 'hl7.fhir.us.davinci-crd_2.0.1@259'
|
|
24
|
+
|
|
25
|
+
input :valid_cards_with_links
|
|
26
|
+
optional
|
|
27
|
+
|
|
28
|
+
run do
|
|
29
|
+
parsed_cards = parse_json(valid_cards_with_links)
|
|
30
|
+
external_reference_cards = parsed_cards.select { |card| external_reference_response_type?(card) }
|
|
31
|
+
|
|
32
|
+
assert external_reference_cards.present?,
|
|
33
|
+
"#{tested_hook_name} hook response did not contain an External Reference card."
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
require_relative '../../server_test_helper'
|
|
2
|
+
require_relative '../../../cross_suite/suggestion_actions_validation'
|
|
3
|
+
require_relative '../../server_hook_helper'
|
|
4
|
+
require_relative '../../../cross_suite/cards_identification'
|
|
5
|
+
|
|
6
|
+
module DaVinciCRDTestKit
|
|
7
|
+
module V201
|
|
8
|
+
class FormCompletionResponseValidationTest < Inferno::Test
|
|
9
|
+
include DaVinciCRDTestKit::ServerTestHelper
|
|
10
|
+
include DaVinciCRDTestKit::SuggestionActionsValidation
|
|
11
|
+
include DaVinciCRDTestKit::ServerHookHelper
|
|
12
|
+
include DaVinciCRDTestKit::CardsIdentification
|
|
13
|
+
|
|
14
|
+
title 'Valid Request Form Completion cards or system actions received'
|
|
15
|
+
id :crd_v201_request_form_completion_response_validation
|
|
16
|
+
description %(
|
|
17
|
+
This test validates the Request Form Completion cards or system actions received from the CRD service,
|
|
18
|
+
as per the specifications outlined in the [Da Vinci CRD Implementation Guide](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#request-form-completion).
|
|
19
|
+
|
|
20
|
+
- **Checking for Presence:**
|
|
21
|
+
The test begins by verifying whether any Request Form Completion cards or system actions are present.
|
|
22
|
+
- **For cards:** It ensures that there are cards with `suggestions` containing `create` actions
|
|
23
|
+
for the `Task` resource, specifically:
|
|
24
|
+
- The `Task` must have a `code` of `complete-questionnaire`.
|
|
25
|
+
- The `Task` should include an input of type `text` (`Task.input.type.text`) labeled as `questionnaire`
|
|
26
|
+
and associated with a valid canonical URL (`Task.input.valueCanonical`).
|
|
27
|
+
- **For system actions:** It checks for the presence of `create` actions for the `Task` resource with
|
|
28
|
+
the characteristics described above.
|
|
29
|
+
|
|
30
|
+
- **Validating:**
|
|
31
|
+
If any Request Form Completion cards or system actions are found, the test proceeds to validate them.
|
|
32
|
+
Each `Task` resource is validated against the [CRD Questionnaire Task profile](http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-taskquestionnaire).
|
|
33
|
+
|
|
34
|
+
If no Request Form Completion cards or system actions are received, the test is skipped.
|
|
35
|
+
)
|
|
36
|
+
verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@299'
|
|
37
|
+
optional
|
|
38
|
+
input :valid_cards_with_suggestions, :valid_system_actions
|
|
39
|
+
|
|
40
|
+
run do
|
|
41
|
+
parsed_cards = parse_json(valid_cards_with_suggestions)
|
|
42
|
+
parsed_actions = parse_json(valid_system_actions)
|
|
43
|
+
|
|
44
|
+
form_completion_cards = parsed_cards.select { |card| form_completion_card_response_type?(card) }
|
|
45
|
+
form_completion_actions = parsed_actions.select { |action| form_completion_action_response_type?(action) }
|
|
46
|
+
|
|
47
|
+
skip_if form_completion_cards.blank? && form_completion_actions.blank?,
|
|
48
|
+
"#{tested_hook_name} hook response does not contain any " \
|
|
49
|
+
'Request Form Completion cards or system actions.'
|
|
50
|
+
|
|
51
|
+
actions_check(form_completion_actions, ig_version: 'v201') if form_completion_actions.present?
|
|
52
|
+
|
|
53
|
+
if form_completion_cards.present?
|
|
54
|
+
form_completion_cards.each do |card|
|
|
55
|
+
card['suggestions'].each do |suggestion|
|
|
56
|
+
actions_check(suggestion['actions']&.select do |action|
|
|
57
|
+
form_completion_action_response_type?(action)
|
|
58
|
+
end, ig_version: 'v201')
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
no_error_validation('Some Request Form Completion received are not valid.')
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
end
|
data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/instructions_card_received_test.rb
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require_relative '../../server_test_helper'
|
|
2
|
+
require_relative '../../server_hook_helper'
|
|
3
|
+
require_relative '../../../cross_suite/cards_identification'
|
|
4
|
+
|
|
5
|
+
module DaVinciCRDTestKit
|
|
6
|
+
module V201
|
|
7
|
+
class InstructionsCardReceivedTest < Inferno::Test
|
|
8
|
+
include DaVinciCRDTestKit::ServerTestHelper
|
|
9
|
+
include DaVinciCRDTestKit::ServerHookHelper
|
|
10
|
+
include DaVinciCRDTestKit::CardsIdentification
|
|
11
|
+
|
|
12
|
+
title 'Valid Instructions cards received'
|
|
13
|
+
id :crd_v201_valid_instructions_card_received
|
|
14
|
+
description %(
|
|
15
|
+
This test validates that an [Instructions](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#instructions)
|
|
16
|
+
card was received. It does so by:
|
|
17
|
+
- Checking for the presence of a valid card that does not contain the `links` field and the `suggestions` field.
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
input :valid_cards
|
|
21
|
+
optional
|
|
22
|
+
|
|
23
|
+
run do
|
|
24
|
+
parsed_cards = parse_json(valid_cards)
|
|
25
|
+
instructions_card = parsed_cards.find { |card| instructions_response_type?(card) }
|
|
26
|
+
assert instructions_card, "#{tested_hook_name} hook response did not contain an Instructions card."
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/launch_smart_app_card_validation_test.rb
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
require_relative '../../server_test_helper'
|
|
2
|
+
require_relative '../../server_hook_helper'
|
|
3
|
+
require_relative '../../../cross_suite/cards_identification'
|
|
4
|
+
|
|
5
|
+
module DaVinciCRDTestKit
|
|
6
|
+
module V201
|
|
7
|
+
class LaunchSmartAppCardValidationTest < Inferno::Test
|
|
8
|
+
include DaVinciCRDTestKit::ServerTestHelper
|
|
9
|
+
include DaVinciCRDTestKit::ServerHookHelper
|
|
10
|
+
include DaVinciCRDTestKit::CardsIdentification
|
|
11
|
+
|
|
12
|
+
title 'Valid Launch SMART Application cards received'
|
|
13
|
+
id :crd_v201_launch_smart_app_card_validation
|
|
14
|
+
description %(
|
|
15
|
+
This test verifies the presence of valid Launch SMART Application cards within the list of valid cards
|
|
16
|
+
returned by the CRD service.
|
|
17
|
+
As per the [Da Vinci CRD Implementation Guide](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#launch-smart-application),
|
|
18
|
+
Launch SMART Application cards must contain links with the type set to `smart`.
|
|
19
|
+
This test checks for the presence of any Launch SMART Application cards by verifying:
|
|
20
|
+
- The existence of a `links` array within each card.
|
|
21
|
+
- That every link in the `links` array of a card is of type `smart`.
|
|
22
|
+
|
|
23
|
+
The test will be skipped if no Launch SMART Application cards are found within the returned valid cards.
|
|
24
|
+
)
|
|
25
|
+
verifies_requirements 'hl7.fhir.us.davinci-crd_2.0.1@258'
|
|
26
|
+
|
|
27
|
+
optional
|
|
28
|
+
input :valid_cards_with_links
|
|
29
|
+
|
|
30
|
+
run do
|
|
31
|
+
parsed_cards = parse_json(valid_cards_with_links)
|
|
32
|
+
external_reference_cards = parsed_cards.select { |card| launch_smart_app_response_type?(card) }
|
|
33
|
+
|
|
34
|
+
skip_if external_reference_cards.blank?,
|
|
35
|
+
"#{tested_hook_name} hook response does not contain any Launch SMART App cards."
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
require_relative '../../server_test_helper'
|
|
2
|
+
require_relative '../../../cross_suite/suggestion_actions_validation'
|
|
3
|
+
require_relative '../../server_hook_helper'
|
|
4
|
+
require_relative '../../../cross_suite/cards_identification'
|
|
5
|
+
|
|
6
|
+
module DaVinciCRDTestKit
|
|
7
|
+
module V201
|
|
8
|
+
class ProposeAlternateRequestCardValidationTest < Inferno::Test
|
|
9
|
+
include DaVinciCRDTestKit::ServerTestHelper
|
|
10
|
+
include DaVinciCRDTestKit::SuggestionActionsValidation
|
|
11
|
+
include DaVinciCRDTestKit::ServerHookHelper
|
|
12
|
+
include DaVinciCRDTestKit::CardsIdentification
|
|
13
|
+
|
|
14
|
+
title 'Valid Propose Alternate Request cards received'
|
|
15
|
+
id :crd_v201_propose_alternate_request_card_validation
|
|
16
|
+
description %(
|
|
17
|
+
This test validates that all [Propose Alternate Request](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#propose-alternate-request)
|
|
18
|
+
cards received are valid. It checks for the presence of a card's suggestion
|
|
19
|
+
with a single action with `Action.type` of `update` or a card with at least
|
|
20
|
+
two actions, one with `Action.type` of `delete` and the other with
|
|
21
|
+
`Action.type` of `create`.
|
|
22
|
+
)
|
|
23
|
+
optional
|
|
24
|
+
input :valid_cards_with_suggestions, :contexts
|
|
25
|
+
|
|
26
|
+
run do
|
|
27
|
+
parsed_cards = parse_json(valid_cards_with_suggestions)
|
|
28
|
+
parsed_contexts = parse_json(contexts)
|
|
29
|
+
proposed_alternate_cards = parsed_cards.filter do |card|
|
|
30
|
+
propose_alternative_request_response_type?(card)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
skip_if proposed_alternate_cards.blank?,
|
|
34
|
+
"#{tested_hook_name} hook response does not contain a Propose Alternate Request card."
|
|
35
|
+
|
|
36
|
+
proposed_alternate_cards.each do |card|
|
|
37
|
+
card['suggestions'].each do |suggestion|
|
|
38
|
+
actions_check(suggestion['actions'], parsed_contexts, ig_version: 'v201')
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
no_error_validation('Some Proposed Alternate Request cards are not valid.')
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
data/lib/davinci_crd_test_kit/server/v2.0.1/verify_response/service_response_validation_test.rb
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
require_relative '../../../cross_suite/cards_validation'
|
|
2
|
+
require_relative '../../server_hook_helper'
|
|
3
|
+
|
|
4
|
+
module DaVinciCRDTestKit
|
|
5
|
+
module V201
|
|
6
|
+
class ServiceResponseValidationTest < Inferno::Test
|
|
7
|
+
include DaVinciCRDTestKit::CardsValidation
|
|
8
|
+
include DaVinciCRDTestKit::ServerHookHelper
|
|
9
|
+
|
|
10
|
+
title 'All service responses contain valid cards and optional systemActions'
|
|
11
|
+
id :crd_v201_service_response_validation
|
|
12
|
+
description %(
|
|
13
|
+
As per the [CDS Hooks spec section on CDS Service Response](https://cds-hooks.hl7.org/2.0/#cds-service-response),
|
|
14
|
+
a successful server's response to a service request must be a JSON object containing a `cards` array.
|
|
15
|
+
It must also contain a `systemActions` array for `appointment-book` and `order-sign` hook.
|
|
16
|
+
|
|
17
|
+
Each card must contain the following required fields: `summary`, `indicator`, and `source`.
|
|
18
|
+
The required fields must have a valid data structure.
|
|
19
|
+
)
|
|
20
|
+
input :invoked_hook
|
|
21
|
+
output :valid_cards, :valid_system_actions
|
|
22
|
+
|
|
23
|
+
SYSTEM_ACTIONS_HOOK_NAMES = ['appointment-book', 'order-sign', 'order-dispatch'].freeze
|
|
24
|
+
|
|
25
|
+
def valid_cards
|
|
26
|
+
@valid_cards ||= []
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def valid_system_actions
|
|
30
|
+
@valid_system_actions ||= []
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def system_actions_check(system_actions)
|
|
34
|
+
system_actions.each do |action|
|
|
35
|
+
current_error_count = messages.count { |msg| msg[:type] == 'error' }
|
|
36
|
+
action_fields_validation(action, ig_version: 'v201')
|
|
37
|
+
valid_system_actions << action if current_error_count == messages.count { |msg| msg[:type] == 'error' }
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def perform_system_actions_validation(system_actions, response_index)
|
|
42
|
+
if SYSTEM_ACTIONS_HOOK_NAMES.include?(invoked_hook) && system_actions.nil?
|
|
43
|
+
msg = "Server response #{response_index + 1} did not have the `systemActions` field, " \
|
|
44
|
+
"which must be present for the `#{invoked_hook}` hook."
|
|
45
|
+
add_message('error', msg)
|
|
46
|
+
end
|
|
47
|
+
return if system_actions.nil?
|
|
48
|
+
|
|
49
|
+
unless system_actions.is_a?(Array)
|
|
50
|
+
add_message('error', "`systemActions` of server response #{response_index + 1} is not an array.")
|
|
51
|
+
return
|
|
52
|
+
end
|
|
53
|
+
system_actions_check(system_actions)
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
run do
|
|
57
|
+
load_tagged_requests(tested_hook_name)
|
|
58
|
+
skip_if requests.blank?, "No #{tested_hook_name} request was made in a previous test as expected."
|
|
59
|
+
successful_requests = requests.select { |request| request.status == 200 }
|
|
60
|
+
skip_if successful_requests.empty?, 'All service requests were unsuccessful.'
|
|
61
|
+
|
|
62
|
+
info do
|
|
63
|
+
unsuccessful_count = (requests - successful_requests).length
|
|
64
|
+
assert unsuccessful_count.zero?, "#{unsuccessful_count} out of #{requests.length} requests were unsuccessful"
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
successful_requests.each_with_index do |request, index|
|
|
68
|
+
service_response = JSON.parse(request.response_body)
|
|
69
|
+
perform_cards_validation(service_response['cards'], service_response['systemActions'].present?, 'v201', index)
|
|
70
|
+
|
|
71
|
+
perform_system_actions_validation(service_response['systemActions'], index)
|
|
72
|
+
rescue JSON::ParserError
|
|
73
|
+
add_message('error', "Invalid JSON: server response #{index + 1} is not valid JSON.")
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
output valid_system_actions: valid_system_actions.to_json
|
|
77
|
+
output valid_cards: valid_cards.to_json
|
|
78
|
+
|
|
79
|
+
no_error_validation('Some service responses are not valid. Check messages for issues found.')
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
require_relative '../jwt_helper'
|
|
2
|
+
require_relative '../endpoints/jwk_set_endpoint_handler'
|
|
3
|
+
require_relative 'server_discovery_group'
|
|
4
|
+
require_relative 'server_demonstrate_hook_response_group'
|
|
5
|
+
require_relative 'server_hooks_group'
|
|
6
|
+
require_relative 'server_urls'
|
|
7
|
+
require_relative '../endpoints/mock_ehr_endpoints'
|
|
8
|
+
|
|
9
|
+
module DaVinciCRDTestKit
|
|
10
|
+
module V221
|
|
11
|
+
class CRDServerSuite < Inferno::TestSuite
|
|
12
|
+
include ServerURLs
|
|
13
|
+
|
|
14
|
+
id :crd_server_v221
|
|
15
|
+
title 'Da Vinci CRD Server v2.2.1 Test Suite'
|
|
16
|
+
description <<~DESCRIPTION
|
|
17
|
+
The Da Vinci CRD Server v2.2.1 Test Suite tests the conformance of systems to the
|
|
18
|
+
capabilities of a CRD server as described in [version 2.2.1](https://hl7.org/fhir/us/davinci-crd/2.2.1)
|
|
19
|
+
of the Da Vinci Coverage Requirements Discovery (CRD) Implementation Guide.
|
|
20
|
+
|
|
21
|
+
Detailed information about this test suite can be found in the
|
|
22
|
+
[server section](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Server-Details) of the
|
|
23
|
+
[CRD Test Kit Wiki](https://github.com/inferno-framework/davinci-crd-test-kit/wiki), including:
|
|
24
|
+
- [What testers need to successfully execute these tests](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Server-Instructions-v2.2.1#pre-execution-setup-and-required-information),
|
|
25
|
+
- [Minimal](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Server-Instructions-v2.2.1#quick-start)
|
|
26
|
+
and [complete](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Server-Instructions-v2.2.1#additional-testing-options)
|
|
27
|
+
instructions for executing against a server system, and
|
|
28
|
+
- How to [interpret test results](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Server-Instructions-v2.2.1#interpreting-results).
|
|
29
|
+
DESCRIPTION
|
|
30
|
+
|
|
31
|
+
suite_summary <<~SUMMARY
|
|
32
|
+
The Da Vinci CRD Server v2.2.1 Test Suite tests the conformance of server systems
|
|
33
|
+
to [version 2.2.1 of the Da Vinci Coverage Requirements Discovery (CRD)
|
|
34
|
+
Implementation Guide](https://hl7.org/fhir/us/davinci-crd/2.2.1).
|
|
35
|
+
SUMMARY
|
|
36
|
+
|
|
37
|
+
links [
|
|
38
|
+
{
|
|
39
|
+
label: 'Implementation Guide',
|
|
40
|
+
url: 'https://hl7.org/fhir/us/davinci-crd/2.2.1'
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
label: 'Report Issue',
|
|
44
|
+
url: 'https://github.com/inferno-framework/davinci-crd-test-kit/issues'
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
label: 'Open Source',
|
|
48
|
+
url: 'https://github.com/inferno-framework/davinci-crd-test-kit'
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
label: 'Download',
|
|
52
|
+
url: 'https://github.com/inferno-framework/davinci-crd-test-kit/releases'
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
|
|
56
|
+
requirement_sets(
|
|
57
|
+
{
|
|
58
|
+
identifier: 'hl7.fhir.us.davinci-crd_2.2.1',
|
|
59
|
+
title: 'Da Vinci Coverage Requirements Discovery (CRD) v2.2.1',
|
|
60
|
+
actor: 'CRD Server'
|
|
61
|
+
}
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
input :base_url,
|
|
65
|
+
title: 'CRD server base URL'
|
|
66
|
+
|
|
67
|
+
fhir_resource_validator do
|
|
68
|
+
igs(
|
|
69
|
+
'hl7.fhir.us.davinci-crd#2.2.1',
|
|
70
|
+
'hl7.fhir.us.core#3.1.1',
|
|
71
|
+
'hl7.fhir.us.core#6.1.0',
|
|
72
|
+
'hl7.fhir.us.core#7.0.0'
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
validation_context do
|
|
76
|
+
snomedCT '731000124108' # explicit snomedCT expansion parameter
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
exclude_message do |message|
|
|
80
|
+
message.message.match?(
|
|
81
|
+
/Appointment\.participant\[.*\]: This element does not match any known slice defined in the profile/
|
|
82
|
+
) ||
|
|
83
|
+
message.message.match?(
|
|
84
|
+
/Slice 'Appointment.participant:\w+': a matching slice is required, but not found/
|
|
85
|
+
)
|
|
86
|
+
end
|
|
87
|
+
# # extension definition issue present in 2.0.1 but corrected in later versions
|
|
88
|
+
# message.message.match?(%r{The extension http://hl7.org/fhir/us/davinci-crd/StructureDefinition/ext-coverage-information is not allowed to be used at this point \(allowed = e:QuestionnaireResponse, e:Encounter, e:NutritionOrder, e:CommunicationRequest, e:DeviceRequest, e:ServiceRequest, e:MedicationRequest; this element is \[Appointment\]\)}) # rubocop:disable Layout/LineLength
|
|
89
|
+
# end
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
US_CORE_7_METADATA_PATTERN = File.join(
|
|
93
|
+
Gem::Specification.find_by_name('us_core_test_kit').gem_dir,
|
|
94
|
+
'lib', 'us_core_test_kit', 'generated', 'v7.0.0', '*', 'metadata.yml'
|
|
95
|
+
)
|
|
96
|
+
CRD_V221_METADATA_PATTERN = File.join(__dir__, 'crd_metadata', '*.yml')
|
|
97
|
+
include(MockEHREndpoints.with do
|
|
98
|
+
Dir.glob([US_CORE_7_METADATA_PATTERN, CRD_V221_METADATA_PATTERN])
|
|
99
|
+
end)
|
|
100
|
+
|
|
101
|
+
route :get, '/jwks.json', JWKSetEndpointHandler
|
|
102
|
+
resume_test_route :get, RESUME_PASS_PATH do |request|
|
|
103
|
+
request.query_parameters['token']
|
|
104
|
+
end
|
|
105
|
+
resume_test_route :get, RESUME_FAIL_PATH, result: 'fail' do |request|
|
|
106
|
+
request.query_parameters['token']
|
|
107
|
+
end
|
|
108
|
+
group from: :crd_v221_server_discovery_group
|
|
109
|
+
|
|
110
|
+
group from: :crd_v221_server_demonstrate_hook_response
|
|
111
|
+
|
|
112
|
+
group from: :crd_v221_server_hooks
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
end
|