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,75 @@
|
|
|
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
|
+
require_relative '../../../cross_suite/cards_validation'
|
|
6
|
+
|
|
7
|
+
module DaVinciCRDTestKit
|
|
8
|
+
module V221
|
|
9
|
+
class CreateOrUpdateCoverageInfoResponseValidationTest < Inferno::Test
|
|
10
|
+
include DaVinciCRDTestKit::ServerTestHelper
|
|
11
|
+
include DaVinciCRDTestKit::SuggestionActionsValidation
|
|
12
|
+
include DaVinciCRDTestKit::ServerHookHelper
|
|
13
|
+
include DaVinciCRDTestKit::CardsIdentification
|
|
14
|
+
include DaVinciCRDTestKit::CardsValidation
|
|
15
|
+
|
|
16
|
+
title 'Create or Update Coverage Information cards and system actions are valid'
|
|
17
|
+
id :crd_v221_create_or_update_coverage_info_response_validation
|
|
18
|
+
description %(
|
|
19
|
+
This test validates the Create or Update Coverage Information cards or system actions received from the
|
|
20
|
+
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).
|
|
21
|
+
|
|
22
|
+
- **Checking for Presence:**
|
|
23
|
+
The test first checks if any Create or Update Coverage Information cards or system actions are present in
|
|
24
|
+
the returned valid cards or valid system actions.
|
|
25
|
+
- **For cards**: it ensures there are cards with a `suggestions` array containing a single suggestion,
|
|
26
|
+
and the `actions` array of that suggestion has one `create` or `update` action for the `Coverage` resource.
|
|
27
|
+
- **For system actions**: it checks for the presence of `create` or `update` actions for the `Coverage`
|
|
28
|
+
resource.
|
|
29
|
+
|
|
30
|
+
- **Validating:**
|
|
31
|
+
If any Create or Update Coverage Information cards or system actions are found, each `Coverage` resource is
|
|
32
|
+
validated against the base FHIR Coverage resource.
|
|
33
|
+
|
|
34
|
+
If no Create or Update Coverage Information cards or system actions are received, the test is skipped.
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
verifies_requirements 'hl7.fhir.us.davinci-crd_2.2.1@resp-71'
|
|
38
|
+
|
|
39
|
+
optional
|
|
40
|
+
input :valid_cards_with_suggestions, :valid_system_actions
|
|
41
|
+
|
|
42
|
+
run do
|
|
43
|
+
parsed_cards = parse_json(valid_cards_with_suggestions)
|
|
44
|
+
parsed_actions = parse_json(valid_system_actions)
|
|
45
|
+
|
|
46
|
+
create_or_update_coverage_info_cards = parsed_cards.select do |card|
|
|
47
|
+
create_or_update_coverage_card_response_type?(card)
|
|
48
|
+
end
|
|
49
|
+
create_or_update_coverage_info_actions = parsed_actions.select do |action|
|
|
50
|
+
create_or_update_coverage_action_response_type?(action)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
skip_msg = "#{tested_hook_name} hook response does not contain any Create or Update Coverage Information " \
|
|
54
|
+
'cards or system actions.'
|
|
55
|
+
skip_if create_or_update_coverage_info_cards.blank? && create_or_update_coverage_info_actions.blank?, skip_msg
|
|
56
|
+
|
|
57
|
+
if create_or_update_coverage_info_actions.present?
|
|
58
|
+
actions_check(create_or_update_coverage_info_actions, ig_version: 'v221')
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
if create_or_update_coverage_info_cards.present?
|
|
62
|
+
create_or_update_coverage_info_cards.each do |card|
|
|
63
|
+
actions_check(card['suggestions'].first['actions'].select do |action|
|
|
64
|
+
create_or_update_coverage_action_response_type?(action)
|
|
65
|
+
end, ig_version: 'v221')
|
|
66
|
+
|
|
67
|
+
create_or_update_coverage_check(card)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
no_error_validation('Some Create or Update Coverage Information received are not valid.')
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require_relative '../../server_test_helper'
|
|
2
|
+
require_relative '../../server_hook_helper'
|
|
3
|
+
require_relative '../../../cross_suite/cards_identification'
|
|
4
|
+
require_relative '../../../cross_suite/cards_validation'
|
|
5
|
+
|
|
6
|
+
module DaVinciCRDTestKit
|
|
7
|
+
module V221
|
|
8
|
+
class ExternalReferenceCardValidationTest < Inferno::Test
|
|
9
|
+
include DaVinciCRDTestKit::ServerTestHelper
|
|
10
|
+
include DaVinciCRDTestKit::ServerHookHelper
|
|
11
|
+
include DaVinciCRDTestKit::CardsIdentification
|
|
12
|
+
include DaVinciCRDTestKit::CardsValidation
|
|
13
|
+
|
|
14
|
+
title 'External Reference cards are valid'
|
|
15
|
+
id :crd_v221_external_reference_card_validation
|
|
16
|
+
description %(
|
|
17
|
+
This test verifies the presence of valid External Reference cards within the list of valid cards
|
|
18
|
+
returned by the CRD service.
|
|
19
|
+
As per the [Da Vinci CRD Implementation Guide](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#external-reference),
|
|
20
|
+
External Reference cards must contain links with the type set to `absolute`.
|
|
21
|
+
This test checks for the presence of any External Reference cards by verifying:
|
|
22
|
+
- The presence of a `links` array within each card.
|
|
23
|
+
- That every link in the `links` array of a card is of type `absolute`.
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
verifies_requirements 'hl7.fhir.us.davinci-crd_2.2.1@resp-22'
|
|
27
|
+
|
|
28
|
+
input :valid_cards_with_links
|
|
29
|
+
optional
|
|
30
|
+
|
|
31
|
+
run do
|
|
32
|
+
parsed_cards = parse_json(valid_cards_with_links)
|
|
33
|
+
external_reference_cards = parsed_cards.select { |card| external_reference_response_type?(card) }
|
|
34
|
+
|
|
35
|
+
skip_if external_reference_cards.blank?,
|
|
36
|
+
"#{tested_hook_name} hook response does not contain any External Reference cards."
|
|
37
|
+
|
|
38
|
+
external_reference_cards.each do |card|
|
|
39
|
+
external_reference_card_check(card)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
assert messages.blank?,
|
|
43
|
+
'Not all External Reference cards were valid. See messages for more information.'
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
@@ -0,0 +1,91 @@
|
|
|
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
|
+
require_relative '../../../cross_suite/cards_validation'
|
|
6
|
+
|
|
7
|
+
module DaVinciCRDTestKit
|
|
8
|
+
module V221
|
|
9
|
+
class FormCompletionResponseValidationTest < Inferno::Test
|
|
10
|
+
include DaVinciCRDTestKit::ServerTestHelper
|
|
11
|
+
include DaVinciCRDTestKit::SuggestionActionsValidation
|
|
12
|
+
include DaVinciCRDTestKit::ServerHookHelper
|
|
13
|
+
include DaVinciCRDTestKit::CardsIdentification
|
|
14
|
+
include DaVinciCRDTestKit::CardsValidation
|
|
15
|
+
|
|
16
|
+
title 'Request Form Completion cards and system actions are valid'
|
|
17
|
+
id :crd_v221_request_form_completion_response_validation
|
|
18
|
+
description %(
|
|
19
|
+
This test validates the Request Form Completion cards or system actions received from the CRD service,
|
|
20
|
+
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).
|
|
21
|
+
|
|
22
|
+
- **Checking for Presence:**
|
|
23
|
+
The test begins by verifying whether any Request Form Completion cards or system actions are present.
|
|
24
|
+
- **For cards:** It ensures that there are cards with `suggestions` containing `create` actions
|
|
25
|
+
for the `Task` resource, specifically:
|
|
26
|
+
- The `Task` must have a `code` of `complete-questionnaire`.
|
|
27
|
+
- The `Task` should include an input of type `text` (`Task.input.type.text`) labeled as `questionnaire`
|
|
28
|
+
and associated with a valid canonical URL (`Task.input.valueCanonical`).
|
|
29
|
+
- **For system actions:** It checks for the presence of `create` actions for the `Task` resource with
|
|
30
|
+
the characteristics described above.
|
|
31
|
+
|
|
32
|
+
- **Validating:**
|
|
33
|
+
If any Request Form Completion cards or system actions are found, the test proceeds to validate them.
|
|
34
|
+
Each `Task` resource is validated against the [CRD Questionnaire Task
|
|
35
|
+
profile](http://hl7.org/fhir/us/davinci-crd/StructureDefinition/profile-taskquestionnaire).
|
|
36
|
+
Additionally, if any actions for the creation of a `Questionnaire` are
|
|
37
|
+
found, the test verifies that they include the
|
|
38
|
+
`davinci-crd.if-none-exist` extension.
|
|
39
|
+
|
|
40
|
+
If no Request Form Completion cards or system actions are received, the test is skipped.
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
verifies_requirements 'hl7.fhir.us.davinci-crd_2.2.1@dev-20',
|
|
44
|
+
'hl7.fhir.us.davinci-crd_2.2.1@resp-62',
|
|
45
|
+
'hl7.fhir.us.davinci-crd_2.2.1@resp-65'
|
|
46
|
+
|
|
47
|
+
optional
|
|
48
|
+
input :valid_cards_with_suggestions, :valid_system_actions
|
|
49
|
+
|
|
50
|
+
run do
|
|
51
|
+
parsed_cards = parse_json(valid_cards_with_suggestions)
|
|
52
|
+
parsed_actions = parse_json(valid_system_actions)
|
|
53
|
+
|
|
54
|
+
form_completion_cards = parsed_cards.select { |card| form_completion_card_response_type?(card) }
|
|
55
|
+
form_completion_actions = parsed_actions.select { |action| form_completion_action_response_type?(action) }
|
|
56
|
+
|
|
57
|
+
skip_if form_completion_cards.blank? && form_completion_actions.blank?,
|
|
58
|
+
"#{tested_hook_name} hook response does not contain any Request Form Completion cards " \
|
|
59
|
+
'or system actions.'
|
|
60
|
+
|
|
61
|
+
actions_check(form_completion_actions, ig_version: 'v221') if form_completion_actions.present?
|
|
62
|
+
|
|
63
|
+
if form_completion_cards.present?
|
|
64
|
+
form_completion_cards.each do |card|
|
|
65
|
+
actions =
|
|
66
|
+
card['suggestions']
|
|
67
|
+
.flat_map { |suggestion| suggestion['actions'] }
|
|
68
|
+
.compact
|
|
69
|
+
.select { |action| form_completion_action_response_type? action }
|
|
70
|
+
|
|
71
|
+
actions_check(actions, ig_version: 'v221')
|
|
72
|
+
|
|
73
|
+
form_completion_check(card)
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
questionnaire_create_actions =
|
|
78
|
+
parsed_actions.select { |action| create_questionnaire_action_response_type?(action) } +
|
|
79
|
+
form_completion_cards
|
|
80
|
+
.flat_map { |card| card['suggestions'] }
|
|
81
|
+
.flat_map { |suggestion| suggestion['actions'] }
|
|
82
|
+
.compact
|
|
83
|
+
.select { |action| create_questionnaire_action_response_type?(action) }
|
|
84
|
+
|
|
85
|
+
questionnaire_create_actions.each { |action| questionnaire_creation_check(action) }
|
|
86
|
+
|
|
87
|
+
no_error_validation('Some Request Form Completion received are not valid.')
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/hook_request_resource_resolution.rb
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
module DaVinciCRDTestKit
|
|
2
|
+
module V221
|
|
3
|
+
module HookRequestResourceResolution
|
|
4
|
+
def mock_ehr_bundle_resource
|
|
5
|
+
@mock_ehr_bundle_resource ||= JSON.parse(mock_ehr_bundle) if mock_ehr_bundle.present?
|
|
6
|
+
rescue JSON::ParserError
|
|
7
|
+
nil
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def matching_request_for_action(action)
|
|
11
|
+
requests.find do |request|
|
|
12
|
+
response = JSON.parse(request.response_body)
|
|
13
|
+
request.status == 200 && Array(response['systemActions']).any? { |candidate| candidate == action }
|
|
14
|
+
rescue JSON::ParserError
|
|
15
|
+
false
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Resolve the original resource being updated by a systemAction.
|
|
20
|
+
# - appointment-book: look in context.appointments; if the action targets a ServiceRequest,
|
|
21
|
+
# follow the Appointment basedOn reference and resolve that from prefetch or mock EHR data
|
|
22
|
+
# - order-sign/order-select: look in context.draftOrders
|
|
23
|
+
# - other hooks: resolve from prefetch or mock EHR data because context may carry only ids/references
|
|
24
|
+
def find_action_source_resource(action, request)
|
|
25
|
+
action_resource = action['resource']
|
|
26
|
+
return unless action_resource.is_a?(Hash)
|
|
27
|
+
|
|
28
|
+
target_type = action_resource['resourceType']
|
|
29
|
+
target_id = action_resource['id']
|
|
30
|
+
request_body = parse_request_body(request)
|
|
31
|
+
return unless target_type.present? && target_id.present? && request_body
|
|
32
|
+
|
|
33
|
+
hook_context_resource(request_body, target_type, target_id) ||
|
|
34
|
+
fallback_source_resource(request_body, target_type, target_id)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def find_appointment_book_resource(request_body, target_type, target_id)
|
|
38
|
+
appointments_bundle = request_body.dig('context', 'appointments')
|
|
39
|
+
find_resource_in_bundle(appointments_bundle, target_type, target_id) ||
|
|
40
|
+
appointment_book_service_request(request_body, appointments_bundle, target_id)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def find_draft_orders_resource(request_body, target_type, target_id)
|
|
44
|
+
draft_orders_bundle = request_body.dig('context', 'draftOrders')
|
|
45
|
+
find_resource_in_bundle(draft_orders_bundle, target_type, target_id)
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
def fallback_source_resource(request_body, target_type, target_id)
|
|
49
|
+
find_resource_in_prefetch(request_body, target_type, target_id) ||
|
|
50
|
+
find_resource_in_bundle(mock_ehr_bundle_resource, target_type, target_id)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def hook_context_resource(request_body, target_type, target_id)
|
|
54
|
+
case tested_hook_name
|
|
55
|
+
when 'appointment-book'
|
|
56
|
+
find_appointment_book_resource(request_body, target_type, target_id)
|
|
57
|
+
when 'order-sign', 'order-select'
|
|
58
|
+
find_draft_orders_resource(request_body, target_type, target_id)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def appointment_book_service_request(request_body, appointments_bundle_hash, target_id)
|
|
63
|
+
target_type = 'ServiceRequest'
|
|
64
|
+
appointments_bundle = parse_bundle(appointments_bundle_hash)
|
|
65
|
+
appointment = (appointments_bundle&.entry || [])
|
|
66
|
+
.filter_map(&:resource)
|
|
67
|
+
.find { |candidate| appointment_based_on_matches_target?(candidate, target_type, target_id) }
|
|
68
|
+
return unless appointment
|
|
69
|
+
|
|
70
|
+
find_resource_in_prefetch(request_body, target_type, target_id) ||
|
|
71
|
+
find_resource_in_bundle(mock_ehr_bundle_resource, target_type, target_id)
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def appointment_based_on_matches_target?(appointment, target_type, target_id)
|
|
75
|
+
Array(appointment.basedOn).any? do |reference|
|
|
76
|
+
reference_parts(reference.reference) == [target_type, target_id]
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def find_resource_in_prefetch(request_body, target_type, target_id)
|
|
81
|
+
Array(request_body['prefetch']&.values).each do |prefetched_value|
|
|
82
|
+
if prefetched_value.is_a?(Hash) &&
|
|
83
|
+
prefetched_value['resourceType'] == target_type &&
|
|
84
|
+
prefetched_value['id'] == target_id
|
|
85
|
+
return FHIR.from_contents(prefetched_value.to_json)
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
resource = find_resource_in_bundle(prefetched_value, target_type, target_id)
|
|
89
|
+
return resource if resource
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
nil
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def find_resource_by_reference(request_body, reference)
|
|
96
|
+
target_type, target_id = reference_parts(reference)
|
|
97
|
+
return unless target_type.present? && target_id.present?
|
|
98
|
+
|
|
99
|
+
find_resource_in_prefetch(request_body, target_type, target_id) ||
|
|
100
|
+
find_resource_in_bundle(mock_ehr_bundle_resource, target_type, target_id)
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def find_resource_in_bundle(bundle_hash, target_type, target_id)
|
|
104
|
+
bundle = parse_bundle(bundle_hash)
|
|
105
|
+
return unless bundle&.entry
|
|
106
|
+
|
|
107
|
+
bundle.entry
|
|
108
|
+
.filter_map(&:resource)
|
|
109
|
+
.find { |resource| resource.resourceType == target_type && resource.id == target_id }
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def reference_parts(reference)
|
|
113
|
+
return if reference.blank?
|
|
114
|
+
|
|
115
|
+
parts = reference.split('/')
|
|
116
|
+
return unless parts.length >= 2
|
|
117
|
+
|
|
118
|
+
[parts[-2], parts[-1]]
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def parse_bundle(bundle_hash)
|
|
122
|
+
bundle = FHIR.from_contents(bundle_hash.to_json)
|
|
123
|
+
bundle if bundle.is_a?(FHIR::Bundle)
|
|
124
|
+
rescue StandardError
|
|
125
|
+
nil
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def parse_request_body(request)
|
|
129
|
+
return unless request&.request_body.present?
|
|
130
|
+
|
|
131
|
+
JSON.parse(request.request_body)
|
|
132
|
+
rescue JSON::ParserError
|
|
133
|
+
nil
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|
data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/instructions_card_received_test.rb
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
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 V221
|
|
7
|
+
class InstructionsCardReceivedTest < Inferno::Test
|
|
8
|
+
include DaVinciCRDTestKit::ServerTestHelper
|
|
9
|
+
include DaVinciCRDTestKit::ServerHookHelper
|
|
10
|
+
include DaVinciCRDTestKit::CardsIdentification
|
|
11
|
+
|
|
12
|
+
title 'Instructions cards are valid'
|
|
13
|
+
id :crd_v221_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
|
+
verifies_requirements 'hl7.fhir.us.davinci-crd_2.2.1@resp-24'
|
|
21
|
+
|
|
22
|
+
input :valid_cards
|
|
23
|
+
optional
|
|
24
|
+
|
|
25
|
+
run do
|
|
26
|
+
parsed_cards = parse_json(valid_cards)
|
|
27
|
+
instructions_card = parsed_cards.find { |card| instructions_response_type?(card) }
|
|
28
|
+
assert instructions_card, "#{tested_hook_name} hook response did not contain an Instructions card."
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/launch_smart_app_card_validation_test.rb
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require_relative '../../server_test_helper'
|
|
2
|
+
require_relative '../../server_hook_helper'
|
|
3
|
+
require_relative '../../../cross_suite/cards_identification'
|
|
4
|
+
require_relative '../../../cross_suite/cards_validation'
|
|
5
|
+
|
|
6
|
+
module DaVinciCRDTestKit
|
|
7
|
+
module V221
|
|
8
|
+
class LaunchSmartAppCardValidationTest < Inferno::Test
|
|
9
|
+
include DaVinciCRDTestKit::ServerTestHelper
|
|
10
|
+
include DaVinciCRDTestKit::ServerHookHelper
|
|
11
|
+
include DaVinciCRDTestKit::CardsIdentification
|
|
12
|
+
include DaVinciCRDTestKit::CardsValidation
|
|
13
|
+
|
|
14
|
+
title 'Launch SMART Application cards are valid'
|
|
15
|
+
id :crd_v221_launch_smart_app_card_validation
|
|
16
|
+
description %(
|
|
17
|
+
This test verifies the presence of valid Launch SMART Application cards within the list of valid cards
|
|
18
|
+
returned by the CRD service.
|
|
19
|
+
As per the [Da Vinci CRD Implementation Guide](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#launch-smart-application),
|
|
20
|
+
Launch SMART Application cards must contain links with the type set to `smart`.
|
|
21
|
+
This test checks for the presence of any Launch SMART Application cards by verifying:
|
|
22
|
+
- The existence of a `links` array within each card.
|
|
23
|
+
- That every link in the `links` array of a card is of type `smart`.
|
|
24
|
+
|
|
25
|
+
The test will be skipped if no Launch SMART Application cards are found within the returned valid cards.
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
verifies_requirements 'hl7.fhir.us.davinci-crd_2.2.1@resp-72'
|
|
29
|
+
|
|
30
|
+
optional
|
|
31
|
+
input :valid_cards_with_links
|
|
32
|
+
|
|
33
|
+
run do
|
|
34
|
+
parsed_cards = parse_json(valid_cards_with_links)
|
|
35
|
+
launch_smart_app_cards = parsed_cards.select { |card| launch_smart_app_response_type?(card) }
|
|
36
|
+
|
|
37
|
+
skip_if launch_smart_app_cards.blank?,
|
|
38
|
+
"#{tested_hook_name} hook response does not contain any Launch SMART App cards."
|
|
39
|
+
|
|
40
|
+
launch_smart_app_cards.each do |card|
|
|
41
|
+
smart_app_card_check(card)
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
assert messages.blank?,
|
|
45
|
+
'Not all Launch SMART App cards were valid. See messages for more information.'
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require_relative 'all_responses_include_coverage_information_test'
|
|
2
|
+
require_relative 'hook_request_resource_resolution'
|
|
3
|
+
|
|
4
|
+
module DaVinciCRDTestKit
|
|
5
|
+
module V221
|
|
6
|
+
class OrderDispatchCoverageInformationTest < AllResponsesIncludeCoverageInformationTest
|
|
7
|
+
include HookRequestResourceResolution
|
|
8
|
+
|
|
9
|
+
id :crd_v221_order_dispatch_coverage_information
|
|
10
|
+
|
|
11
|
+
input :invoked_hook
|
|
12
|
+
|
|
13
|
+
input :mock_ehr_bundle
|
|
14
|
+
|
|
15
|
+
def order_resources(hook_call_body)
|
|
16
|
+
references = hook_call_body.dig('context', 'dispatchedOrders')
|
|
17
|
+
resources = []
|
|
18
|
+
unmatched_references = []
|
|
19
|
+
|
|
20
|
+
Array(references).each do |reference|
|
|
21
|
+
resource = find_resource_by_reference(hook_call_body, reference)
|
|
22
|
+
|
|
23
|
+
if resource.present?
|
|
24
|
+
resources << resource
|
|
25
|
+
else
|
|
26
|
+
unmatched_references << reference
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
skip_if unmatched_references.present?,
|
|
31
|
+
'The following `dispatchedOrders` are not included in the Mock EHR Data input or prefetch: ' \
|
|
32
|
+
"#{unmatched_references.join(', ')}"
|
|
33
|
+
|
|
34
|
+
resources
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
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
|
+
require_relative '../../../cross_suite/cards_validation'
|
|
6
|
+
|
|
7
|
+
module DaVinciCRDTestKit
|
|
8
|
+
module V221
|
|
9
|
+
class ProposeAlternateRequestCardValidationTest < Inferno::Test
|
|
10
|
+
include DaVinciCRDTestKit::ServerTestHelper
|
|
11
|
+
include DaVinciCRDTestKit::SuggestionActionsValidation
|
|
12
|
+
include DaVinciCRDTestKit::ServerHookHelper
|
|
13
|
+
include DaVinciCRDTestKit::CardsIdentification
|
|
14
|
+
include DaVinciCRDTestKit::CardsValidation
|
|
15
|
+
|
|
16
|
+
title 'Propose Alternate Request cards are valid'
|
|
17
|
+
id :crd_v221_propose_alternate_request_card_validation
|
|
18
|
+
description %(
|
|
19
|
+
This test validates that all [Propose Alternate Request](https://hl7.org/fhir/us/davinci-crd/STU2/cards.html#propose-alternate-request)
|
|
20
|
+
cards received are valid. It checks for the presence of a card's suggestion
|
|
21
|
+
with a single action with `Action.type` of `update` or a card with at least
|
|
22
|
+
two actions, one with `Action.type` of `delete` and the other with
|
|
23
|
+
`Action.type` of `create`.
|
|
24
|
+
)
|
|
25
|
+
optional
|
|
26
|
+
|
|
27
|
+
verifies_requirements 'hl7.fhir.us.davinci-crd_2.2.1@resp-55',
|
|
28
|
+
'hl7.fhir.us.davinci-crd_2.2.1@resp-56'
|
|
29
|
+
|
|
30
|
+
input :valid_cards_with_suggestions, :contexts
|
|
31
|
+
|
|
32
|
+
run do
|
|
33
|
+
parsed_cards = parse_json(valid_cards_with_suggestions)
|
|
34
|
+
parsed_contexts = parse_json(contexts)
|
|
35
|
+
proposed_alternate_cards = parsed_cards.filter do |card|
|
|
36
|
+
propose_alternative_request_response_type?(card)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
skip_if proposed_alternate_cards.blank?,
|
|
40
|
+
"#{tested_hook_name} hook response does not contain a Propose Alternate Request card."
|
|
41
|
+
|
|
42
|
+
proposed_alternate_cards.each do |card|
|
|
43
|
+
card['suggestions'].each do |suggestion|
|
|
44
|
+
actions_check(suggestion['actions'], parsed_contexts, ig_version: 'v221')
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
propose_alternate_request_check(card)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
no_error_validation('Some Propose Alternate Request cards are not valid.')
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
data/lib/davinci_crd_test_kit/server/v2.2.1/verify_response/service_response_validation_test.rb
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
require_relative '../../../cross_suite/cards_validation'
|
|
2
|
+
require_relative '../../../cross_suite/response_logical_model_validation'
|
|
3
|
+
require_relative '../../server_hook_helper'
|
|
4
|
+
|
|
5
|
+
module DaVinciCRDTestKit
|
|
6
|
+
module V221
|
|
7
|
+
class ServiceResponseValidationTest < Inferno::Test
|
|
8
|
+
include DaVinciCRDTestKit::CardsValidation
|
|
9
|
+
include DaVinciCRDTestKit::ResponseLogicalModelValidation
|
|
10
|
+
include DaVinciCRDTestKit::ServerHookHelper
|
|
11
|
+
|
|
12
|
+
title 'Service responses contain valid cards and systemActions'
|
|
13
|
+
id :crd_v221_service_response_validation
|
|
14
|
+
description %(
|
|
15
|
+
As per the [CDS Hooks spec section on CDS Service
|
|
16
|
+
Response](https://cds-hooks.hl7.org/2.0/#cds-service-response), a
|
|
17
|
+
successful server's response to a service request must be a JSON object
|
|
18
|
+
containing a `cards` array and optionally a `systemActions` array.
|
|
19
|
+
|
|
20
|
+
Each card must contain the following required fields: `summary`, `indicator`, and `source`.
|
|
21
|
+
The required fields must have a valid data structure.
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
verifies_requirements 'hl7.fhir.us.davinci-crd_2.2.1@resp-4',
|
|
25
|
+
'hl7.fhir.us.davinci-crd_2.2.1@resp-5',
|
|
26
|
+
'hl7.fhir.us.davinci-crd_2.2.1@resp-13',
|
|
27
|
+
'hl7.fhir.us.davinci-crd_2.2.1@resp-22',
|
|
28
|
+
'hl7.fhir.us.davinci-crd_2.2.1@resp-24',
|
|
29
|
+
'hl7.fhir.us.davinci-crd_2.2.1@resp-56'
|
|
30
|
+
|
|
31
|
+
input :invoked_hook
|
|
32
|
+
output :valid_cards, :valid_system_actions
|
|
33
|
+
|
|
34
|
+
SYSTEM_ACTIONS_HOOK_NAMES = ['appointment-book', 'order-sign', 'order-dispatch'].freeze
|
|
35
|
+
|
|
36
|
+
def valid_cards
|
|
37
|
+
@valid_cards ||= []
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def valid_system_actions
|
|
41
|
+
@valid_system_actions ||= []
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def system_actions_check(system_actions)
|
|
45
|
+
system_actions.each do |action|
|
|
46
|
+
current_error_count = messages.count { |msg| msg[:type] == 'error' }
|
|
47
|
+
action_fields_validation(action, ig_version: 'v221')
|
|
48
|
+
valid_system_actions << action if current_error_count == messages.count { |msg| msg[:type] == 'error' }
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def perform_system_actions_validation(system_actions, response_index)
|
|
53
|
+
if SYSTEM_ACTIONS_HOOK_NAMES.include?(invoked_hook) && system_actions.nil?
|
|
54
|
+
msg = "Server response #{response_index + 1} did not have the `systemActions` field, " \
|
|
55
|
+
"which must be present for the `#{invoked_hook}` hook."
|
|
56
|
+
add_message('error', msg)
|
|
57
|
+
end
|
|
58
|
+
return if system_actions.nil?
|
|
59
|
+
|
|
60
|
+
unless system_actions.is_a?(Array)
|
|
61
|
+
add_message('error', "`systemActions` of server response #{response_index + 1} is not an array.")
|
|
62
|
+
return
|
|
63
|
+
end
|
|
64
|
+
system_actions_check(system_actions)
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
run do
|
|
68
|
+
load_tagged_requests(tested_hook_name)
|
|
69
|
+
skip_if requests.blank?, "No #{tested_hook_name} request was made in a previous test as expected."
|
|
70
|
+
successful_requests = requests.select { |request| request.status == 200 }
|
|
71
|
+
skip_if successful_requests.empty?, 'All service requests were unsuccessful.'
|
|
72
|
+
|
|
73
|
+
info do
|
|
74
|
+
unsuccessful_count = (requests - successful_requests).length
|
|
75
|
+
assert unsuccessful_count.zero?, "#{unsuccessful_count} out of #{requests.length} requests were unsuccessful"
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
successful_requests.each_with_index do |request, index|
|
|
79
|
+
service_response = JSON.parse(request.response_body)
|
|
80
|
+
perform_cards_validation(service_response['cards'], service_response['systemActions'].present?, 'v221', index)
|
|
81
|
+
|
|
82
|
+
perform_system_actions_validation(service_response['systemActions'], index)
|
|
83
|
+
|
|
84
|
+
# perform_response_logical_model_validation(service_response['cards'], service_response['systemActions'],
|
|
85
|
+
# index)
|
|
86
|
+
rescue JSON::ParserError
|
|
87
|
+
add_message('error', "Invalid JSON: server response #{index + 1} is not valid JSON.")
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
output valid_system_actions: valid_system_actions.to_json
|
|
91
|
+
output valid_cards: valid_cards.to_json
|
|
92
|
+
|
|
93
|
+
no_error_validation('Some service responses are not valid. Check messages for issues found.')
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|