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,165 @@
|
|
|
1
|
+
require_relative '../client_urls'
|
|
2
|
+
|
|
3
|
+
module DaVinciCRDTestKit
|
|
4
|
+
module V221
|
|
5
|
+
class OrderSelectReceiveRequestTest < Inferno::Test
|
|
6
|
+
include ClientURLs
|
|
7
|
+
|
|
8
|
+
id :crd_v221_order_select_request
|
|
9
|
+
title 'Client invokes the order-select hook'
|
|
10
|
+
description %(
|
|
11
|
+
During this test, Inferno will wait while the client makes one or more [order-select](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/hooks.html#order-select)
|
|
12
|
+
hook requests against Inferno's simulated CRD servers. Inferno will respond
|
|
13
|
+
based on the response configuration provided when running the test.
|
|
14
|
+
For more details on how Inferno's simulated CRD servers behave during
|
|
15
|
+
hook invocation see the [simulated CRD server](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Client-Details#crd-server-simulation)
|
|
16
|
+
documentation.
|
|
17
|
+
|
|
18
|
+
Inferno will pause and wait for inbound requests until told explicitly to continue
|
|
19
|
+
by the tester by clicking on the link in the "User Action Required" dialog (NOTE: after
|
|
20
|
+
5 minutes the test will become inactive and unresponsive to anything except cancelation).
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
config options: { accepts_multiple_requests: true }
|
|
24
|
+
|
|
25
|
+
input :cds_jwt_iss,
|
|
26
|
+
title: 'CRD JWT Issuer',
|
|
27
|
+
description: %(
|
|
28
|
+
Value of the `iss` claim that must be present in the JWT used to authorize the client's hook
|
|
29
|
+
request sent as the Bearer token in the `Authorization` header.
|
|
30
|
+
Run or re-run the "Registration" group to set or change this value.
|
|
31
|
+
),
|
|
32
|
+
locked: true
|
|
33
|
+
input :order_select_response_approach,
|
|
34
|
+
title: 'Response generation approach for order-select',
|
|
35
|
+
description: %(
|
|
36
|
+
Determines how Inferno will generate response for order-select
|
|
37
|
+
hook invocations.
|
|
38
|
+
),
|
|
39
|
+
type: 'radio',
|
|
40
|
+
default: 'mocked',
|
|
41
|
+
options: {
|
|
42
|
+
list_options: [
|
|
43
|
+
{
|
|
44
|
+
label: 'Create simple mocks based on selected response types',
|
|
45
|
+
value: 'mocked'
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
label: 'Generate responses based on a tester-provided template',
|
|
49
|
+
value: 'custom'
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
input :order_select_selected_response_types,
|
|
54
|
+
title: 'Response types to return from order-select hook requests',
|
|
55
|
+
description: %(
|
|
56
|
+
Select the CRD response types that the simulated Inferno CRD server will [mock](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Controlling-Simulated-Responses#mocked-responses)
|
|
57
|
+
when responding to hook invocations. If no types are selected, Inferno will mock and return
|
|
58
|
+
an [Instructions](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/cards.html#instructions-response-type)
|
|
59
|
+
response for this secondary hook.
|
|
60
|
+
),
|
|
61
|
+
type: 'checkbox',
|
|
62
|
+
default: ['coverage_information', 'external_reference', 'instructions'],
|
|
63
|
+
optional: true,
|
|
64
|
+
options: {
|
|
65
|
+
list_options: [
|
|
66
|
+
{
|
|
67
|
+
label: 'External Reference',
|
|
68
|
+
value: 'external_reference'
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
label: 'Instructions',
|
|
72
|
+
value: 'instructions'
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
label: 'Coverage Information',
|
|
76
|
+
value: 'coverage_information'
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
label: 'Request Form Completion',
|
|
80
|
+
value: 'request_form_completion'
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
label: 'Create/Update Coverage Information',
|
|
84
|
+
value: 'create_update_coverage_info'
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
label: 'Launch SMART Application',
|
|
88
|
+
value: 'launch_smart_app'
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
label: 'Propose Alternate Request',
|
|
92
|
+
value: 'propose_alternate_request'
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
label: 'Additional Orders as Companions/Prerequisites',
|
|
96
|
+
value: 'companions_prerequisites'
|
|
97
|
+
}
|
|
98
|
+
]
|
|
99
|
+
},
|
|
100
|
+
enable_when: { input_name: 'order_select_response_approach', value: 'mocked' }
|
|
101
|
+
input :order_select_custom_response_template,
|
|
102
|
+
title: 'Custom response template for order-select hook requests',
|
|
103
|
+
description: %(
|
|
104
|
+
Provide a [custom response template](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Controlling-Simulated-Responses#tester-directed-custom-responses)
|
|
105
|
+
in JSON form for Inferno to use when responding to hook invocations.
|
|
106
|
+
),
|
|
107
|
+
type: 'textarea',
|
|
108
|
+
optional: true,
|
|
109
|
+
enable_when: { input_name: 'order_select_response_approach', value: 'custom' }
|
|
110
|
+
output :continuation_url
|
|
111
|
+
|
|
112
|
+
def configured_response_details
|
|
113
|
+
if order_select_response_approach == 'custom'
|
|
114
|
+
# rubocop:disable Layout/LineLength
|
|
115
|
+
'When responding, Inferno will evaluate the provided [custom response template](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Controlling-Simulated-Responses#tester-directed-custom-responses) ' \
|
|
116
|
+
'from the **Custom response template for order-select hook requests** input ' \
|
|
117
|
+
'against the incoming request to create a response.'
|
|
118
|
+
# rubocop:enable Layout/LineLength
|
|
119
|
+
|
|
120
|
+
else
|
|
121
|
+
# rubocop:disable Layout/LineLength
|
|
122
|
+
'When responding, Inferno will [mock](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Controlling-Simulated-Responses#mocked-responses) ' \
|
|
123
|
+
'the following response types using the incoming request: ' \
|
|
124
|
+
"\n - #{selected_response_types_string}"
|
|
125
|
+
# rubocop:enable Layout/LineLength
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def selected_response_types_string
|
|
130
|
+
if order_select_selected_response_types.present?
|
|
131
|
+
order_select_selected_response_types.join("\n - ")
|
|
132
|
+
else
|
|
133
|
+
'Instructions' # secondary hook default
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
run do
|
|
138
|
+
identifier = cds_jwt_iss
|
|
139
|
+
continuation_url = "#{resume_pass_url}?token=#{identifier}"
|
|
140
|
+
output(continuation_url:)
|
|
141
|
+
|
|
142
|
+
wait(
|
|
143
|
+
identifier:,
|
|
144
|
+
message: %(
|
|
145
|
+
**Invoke the `order-select` hook**:
|
|
146
|
+
|
|
147
|
+
Invoke the order-select hook by sending requests to
|
|
148
|
+
one or both of the two Inferno simulated CRD servers:
|
|
149
|
+
|
|
150
|
+
- Complete Prefetch: `#{order_select_url}`
|
|
151
|
+
- Subset Prefetch: `#{order_select_prefetch_subset_url}`
|
|
152
|
+
|
|
153
|
+
For Inferno to recognize these requests and associate them with this session,
|
|
154
|
+
the authentication JWT sent as a Bearer token in the Authorization header
|
|
155
|
+
must have `#{cds_jwt_iss}` as the `iss` claim in the JWT payload.
|
|
156
|
+
|
|
157
|
+
#{configured_response_details}
|
|
158
|
+
|
|
159
|
+
[Click here](#{continuation_url}) when you have finished submitting requests.
|
|
160
|
+
)
|
|
161
|
+
)
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
end
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
require_relative '../client_urls'
|
|
2
|
+
|
|
3
|
+
module DaVinciCRDTestKit
|
|
4
|
+
module V221
|
|
5
|
+
class OrderSignReceiveRequestTest < Inferno::Test
|
|
6
|
+
include ClientURLs
|
|
7
|
+
|
|
8
|
+
id :crd_v221_order_sign_request
|
|
9
|
+
title 'Client invokes the order-sign hook'
|
|
10
|
+
description %(
|
|
11
|
+
During this test, Inferno will wait while the client makes one or more [order-sign](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/hooks.html#order-sign)
|
|
12
|
+
hook requests against Inferno's simulated CRD servers. Inferno will respond
|
|
13
|
+
based on the response configuration provided when running the test.
|
|
14
|
+
For more details on how Inferno's simulated CRD servers behave during
|
|
15
|
+
hook invocation see the [simulated CRD server](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Client-Details#crd-server-simulation)
|
|
16
|
+
documentation.
|
|
17
|
+
|
|
18
|
+
Inferno will pause and wait for inbound requests until told explicitly to continue
|
|
19
|
+
by the tester by clicking on the link in the "User Action Required" dialog (NOTE: after
|
|
20
|
+
5 minutes the test will become inactive and unresponsive to anything except cancelation).
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
config options: { accepts_multiple_requests: true }
|
|
24
|
+
|
|
25
|
+
input :cds_jwt_iss,
|
|
26
|
+
title: 'CRD JWT Issuer',
|
|
27
|
+
description: %(
|
|
28
|
+
Value of the `iss` claim that must be present in the JWT used to authorize the client's hook
|
|
29
|
+
request sent as the Bearer token in the `Authorization` header.
|
|
30
|
+
Run or re-run the "Registration" group to set or change this value.
|
|
31
|
+
),
|
|
32
|
+
locked: true
|
|
33
|
+
input :order_sign_response_approach,
|
|
34
|
+
title: 'Response generation approach for order-sign',
|
|
35
|
+
description: %(
|
|
36
|
+
Determines how Inferno will generate response for order-sign
|
|
37
|
+
hook invocations.
|
|
38
|
+
),
|
|
39
|
+
type: 'radio',
|
|
40
|
+
default: 'mocked',
|
|
41
|
+
options: {
|
|
42
|
+
list_options: [
|
|
43
|
+
{
|
|
44
|
+
label: 'Create simple mocks based on selected response types',
|
|
45
|
+
value: 'mocked'
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
label: 'Generate responses based on a tester-provided template',
|
|
49
|
+
value: 'custom'
|
|
50
|
+
}
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
input :order_sign_selected_response_types,
|
|
54
|
+
title: 'Response types to return from order-sign hook requests',
|
|
55
|
+
description: %(
|
|
56
|
+
Select the CRD response types that the simulated Inferno CRD server will [mock](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Controlling-Simulated-Responses#mocked-responses)
|
|
57
|
+
when responding to hook invocations. If no types are selected, Inferno will mock and return
|
|
58
|
+
a [Coverage Information](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/cards.html#coverage-information-response-type)
|
|
59
|
+
response for this primary hook.
|
|
60
|
+
),
|
|
61
|
+
type: 'checkbox',
|
|
62
|
+
default: ['coverage_information', 'external_reference', 'instructions'],
|
|
63
|
+
optional: true,
|
|
64
|
+
options: {
|
|
65
|
+
list_options: [
|
|
66
|
+
{
|
|
67
|
+
label: 'External Reference',
|
|
68
|
+
value: 'external_reference'
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
label: 'Instructions',
|
|
72
|
+
value: 'instructions'
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
label: 'Coverage Information',
|
|
76
|
+
value: 'coverage_information'
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
label: 'Request Form Completion',
|
|
80
|
+
value: 'request_form_completion'
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
label: 'Create/Update Coverage Information',
|
|
84
|
+
value: 'create_update_coverage_info'
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
label: 'Launch SMART Application',
|
|
88
|
+
value: 'launch_smart_app'
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
label: 'Propose Alternate Request',
|
|
92
|
+
value: 'propose_alternate_request'
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
label: 'Additional Orders as Companions/Prerequisites',
|
|
96
|
+
value: 'companions_prerequisites'
|
|
97
|
+
}
|
|
98
|
+
]
|
|
99
|
+
},
|
|
100
|
+
enable_when: { input_name: 'order_sign_response_approach', value: 'mocked' }
|
|
101
|
+
input :order_sign_custom_response_template,
|
|
102
|
+
title: 'Custom response template for order-sign hook requests',
|
|
103
|
+
description: %(
|
|
104
|
+
Provide a [custom response template](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Controlling-Simulated-Responses#tester-directed-custom-responses)
|
|
105
|
+
in JSON form for Inferno to use when responding to hook invocations.
|
|
106
|
+
),
|
|
107
|
+
type: 'textarea',
|
|
108
|
+
optional: true,
|
|
109
|
+
enable_when: { input_name: 'order_sign_response_approach', value: 'custom' }
|
|
110
|
+
output :continuation_url
|
|
111
|
+
|
|
112
|
+
def configured_response_details
|
|
113
|
+
if order_sign_response_approach == 'custom'
|
|
114
|
+
# rubocop:disable Layout/LineLength
|
|
115
|
+
'When responding, Inferno will evaluate the provided [custom response template](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Controlling-Simulated-Responses#tester-directed-custom-responses) ' \
|
|
116
|
+
'from the **Custom response template for order-sign hook requests** input ' \
|
|
117
|
+
'against the incoming request to create a response.'
|
|
118
|
+
# rubocop:enable Layout/LineLength
|
|
119
|
+
|
|
120
|
+
else
|
|
121
|
+
# rubocop:disable Layout/LineLength
|
|
122
|
+
'When responding, Inferno will [mock](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Controlling-Simulated-Responses#mocked-responses) ' \
|
|
123
|
+
'the following response types using the incoming request: ' \
|
|
124
|
+
"\n - #{selected_response_types_string}"
|
|
125
|
+
# rubocop:enable Layout/LineLength
|
|
126
|
+
end
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def selected_response_types_string
|
|
130
|
+
if order_sign_selected_response_types.present?
|
|
131
|
+
order_sign_selected_response_types.join("\n - ")
|
|
132
|
+
else
|
|
133
|
+
'Coverage Information' # primary hook default
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
run do
|
|
138
|
+
identifier = cds_jwt_iss
|
|
139
|
+
continuation_url = "#{resume_pass_url}?token=#{identifier}"
|
|
140
|
+
output(continuation_url:)
|
|
141
|
+
|
|
142
|
+
wait(
|
|
143
|
+
identifier:,
|
|
144
|
+
message: %(
|
|
145
|
+
**Invoke the `order-sign` hook**:
|
|
146
|
+
|
|
147
|
+
Invoke the order-sign hook by sending requests to
|
|
148
|
+
one or both of the two Inferno simulated CRD servers:
|
|
149
|
+
|
|
150
|
+
- Complete Prefetch: `#{order_sign_url}`
|
|
151
|
+
- Subset Prefetch: `#{order_sign_prefetch_subset_url}`
|
|
152
|
+
|
|
153
|
+
For Inferno to recognize these requests and associate them with this session,
|
|
154
|
+
the authentication JWT sent as a Bearer token in the Authorization header
|
|
155
|
+
must have `#{cds_jwt_iss}` as the `iss` claim in the JWT payload.
|
|
156
|
+
|
|
157
|
+
#{configured_response_details}
|
|
158
|
+
|
|
159
|
+
[Click here](#{continuation_url}) when you have finished submitting requests.
|
|
160
|
+
)
|
|
161
|
+
)
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
end
|
data/lib/davinci_crd_test_kit/client/v2.2.1/long_running/client_long_running_receive_request_test.rb
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
require_relative '../client_urls'
|
|
2
|
+
|
|
3
|
+
module DaVinciCRDTestKit
|
|
4
|
+
module V221
|
|
5
|
+
class ClientLongRunningReceiveRequestTest < Inferno::Test
|
|
6
|
+
include ClientURLs
|
|
7
|
+
|
|
8
|
+
id :crd_v221_client_long_running_receive_request
|
|
9
|
+
title 'Client invokes any hook'
|
|
10
|
+
description %(
|
|
11
|
+
During this test, Inferno will wait while the client makes a single hook requests of any type.
|
|
12
|
+
Inferno will return a [mocked response](https://github.com/inferno-framework/davinci-crd-test-kit/wiki/Controlling-Simulated-Responses#mocked-responses)
|
|
13
|
+
but only after pausing for a configured amount of time, which must be 5 seconds or longer. The details
|
|
14
|
+
of the request and its response do not matter for the purposes of this test and they will not be
|
|
15
|
+
evaluated, checked for conformance, or included in cross-hook evaluations. The test will automatically
|
|
16
|
+
continue after Inferno receives a hook request, the configured pause time has elapsed,
|
|
17
|
+
and a response has been returned.
|
|
18
|
+
)
|
|
19
|
+
config options: { accepts_multiple_requests: true }
|
|
20
|
+
|
|
21
|
+
input :cds_jwt_iss,
|
|
22
|
+
title: 'CRD JWT Issuer',
|
|
23
|
+
description: %(
|
|
24
|
+
Value of the `iss` claim that must be present in the JWT used to authorize the client's hook
|
|
25
|
+
request sent as the Bearer token in the `Authorization` header.
|
|
26
|
+
Run or re-run the "Registration" group to set or change this value.
|
|
27
|
+
),
|
|
28
|
+
locked: true
|
|
29
|
+
input :long_running_pause_time,
|
|
30
|
+
title: 'Long-running Request Pause Time',
|
|
31
|
+
description: %(
|
|
32
|
+
Time in seconds to wait before returning a response to a hook invocation
|
|
33
|
+
made when testing a long-running request. Must be at least 5 seconds,
|
|
34
|
+
which is the minimum threshold for a long-running response as defined by CRD.
|
|
35
|
+
),
|
|
36
|
+
default: '5'
|
|
37
|
+
|
|
38
|
+
run do
|
|
39
|
+
verify_long_running_pause_time_input
|
|
40
|
+
|
|
41
|
+
identifier = cds_jwt_iss
|
|
42
|
+
wait(
|
|
43
|
+
identifier:,
|
|
44
|
+
message: %(
|
|
45
|
+
**Long Running Hook Request Test**:
|
|
46
|
+
|
|
47
|
+
Invoke any supported hook. This test will
|
|
48
|
+
automatically continue once Inferno has received a request, paused
|
|
49
|
+
for #{long_running_pause_time.to_i} seconds, and returned a response.
|
|
50
|
+
|
|
51
|
+
Users must have the option to continue
|
|
52
|
+
their workflow before Inferno's response is returned. Testers will be asked to
|
|
53
|
+
attest that this was demonstrated in the next test.
|
|
54
|
+
)
|
|
55
|
+
)
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def verify_long_running_pause_time_input
|
|
59
|
+
assert long_running_pause_time.to_i >= 5,
|
|
60
|
+
'The **Long-running Request Pause Time** input must be at least 5 seconds.'
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
require_relative '../client_urls'
|
|
2
|
+
require_relative '../../tagged_request_load_helper'
|
|
3
|
+
|
|
4
|
+
module DaVinciCRDTestKit
|
|
5
|
+
module V221
|
|
6
|
+
class ClientSkipLongRunningAttestationTest < Inferno::Test
|
|
7
|
+
include ClientURLs
|
|
8
|
+
include DaVinciCRDTestKit::TaggedRequestLoadHelper
|
|
9
|
+
|
|
10
|
+
id :crd_v221_client_skip_long_running_attestation_test
|
|
11
|
+
title 'Client allows the user to continue their workflow during long-running requests (Attestation)'
|
|
12
|
+
description %(
|
|
13
|
+
During this test, the tester will confirm that the client system allowed
|
|
14
|
+
its user to continue with their workflow while the sytem was waiting for the previous
|
|
15
|
+
long-running hook request to return.
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
verifies_requirements 'hl7.fhir.us.davinci-crd_2.2.1@found-6'
|
|
19
|
+
|
|
20
|
+
output :attest_true_url
|
|
21
|
+
output :attest_false_url
|
|
22
|
+
|
|
23
|
+
run do
|
|
24
|
+
long_running_requests = load_hook_requests
|
|
25
|
+
skip_if long_running_requests.blank?, 'Long-running requests not demonstrated: ' \
|
|
26
|
+
'no hook requests sent during the previous wait.'
|
|
27
|
+
|
|
28
|
+
identifier = SecureRandom.hex(32)
|
|
29
|
+
attest_true_url = "#{resume_pass_url}?token=#{identifier}"
|
|
30
|
+
attest_false_url = "#{resume_fail_url}?token=#{identifier}"
|
|
31
|
+
output(attest_true_url:)
|
|
32
|
+
output(attest_false_url:)
|
|
33
|
+
wait(
|
|
34
|
+
identifier:,
|
|
35
|
+
message: <<~MESSAGE
|
|
36
|
+
**Long Running Request Attestation**:
|
|
37
|
+
|
|
38
|
+
I attest that the user had the option to continue their workflow
|
|
39
|
+
while waiting for the long-running hook request to return a response:
|
|
40
|
+
|
|
41
|
+
[Click here](#{attest_true_url}) if the above statement is **true**.
|
|
42
|
+
|
|
43
|
+
[Click here](#{attest_false_url}) if the above statement is **false**.
|
|
44
|
+
MESSAGE
|
|
45
|
+
)
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
data/lib/davinci_crd_test_kit/client/v2.2.1/registration/client_registration_verification_test.rb
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
require 'jwt'
|
|
2
|
+
require_relative '../client_urls'
|
|
3
|
+
|
|
4
|
+
module DaVinciCRDTestKit
|
|
5
|
+
module V221
|
|
6
|
+
class CRDClientRegistrationVerification < Inferno::Test
|
|
7
|
+
include ClientURLs
|
|
8
|
+
|
|
9
|
+
id :crd_v221_client_registration_verification
|
|
10
|
+
title 'CRD client registers with Inferno'
|
|
11
|
+
description %(
|
|
12
|
+
In order to register with and be able to make hook requests against Inferno's
|
|
13
|
+
simulated CRD servers, the tester must provide the `iss` (issuer) claim in
|
|
14
|
+
the payload of the JWT sent in the Authorization header of hook requests
|
|
15
|
+
made by the client against Inferno. This information is used to
|
|
16
|
+
associate inbound requests to Inferno's simulated CRD servers with this session.
|
|
17
|
+
Requests made without a JWT or with a different `iss` value will not appear in this
|
|
18
|
+
session or be analyzed.
|
|
19
|
+
|
|
20
|
+
Inferno also requires some additional information to verify conformant client behavior.
|
|
21
|
+
This information is not needed to execute the tests, but the tests will not completely
|
|
22
|
+
pass without it:
|
|
23
|
+
- A JSON Web Key Set (JWKS) containing the key used to sign the JWT sent in the Authorization
|
|
24
|
+
header for use in signature validation. It can be provided either as a URL where it is
|
|
25
|
+
publicly hosted (preferred) or the raw JWKS as JSON.
|
|
26
|
+
- A FHIR Organization id associated with each of Inferno's two simulated CRD servers,
|
|
27
|
+
one at `#{ClientURLs.discovery_url}` requesting the [complete standard prefetch data set](https://hl7.org/fhir/us/davinci-crd/2.2.1/en/foundation.html#standard-prefetch),
|
|
28
|
+
and the other at `#{ClientURLs.prefetch_subset_discovery_url}` requesting a subset of that data set.
|
|
29
|
+
These are used to verify that the prefetched coverage is linked to the correct payer for the invoked
|
|
30
|
+
service.
|
|
31
|
+
|
|
32
|
+
During this test, registration information provided will be checked for conformance
|
|
33
|
+
with these requirements.
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
verifies_requirements 'cds-hooks_3.0.0-ballot@199'
|
|
37
|
+
|
|
38
|
+
input :cds_jwt_iss,
|
|
39
|
+
title: 'CRD JWT Issuer',
|
|
40
|
+
description: %(
|
|
41
|
+
Value of the `iss` claim that will be sent in the JWT used to authorize the client's hook
|
|
42
|
+
request sent as the Bearer token in the `Authorization` header.
|
|
43
|
+
This value will be used to associate incoming requests with this test
|
|
44
|
+
session and any requests that use a different `iss` value will not be recognized.
|
|
45
|
+
),
|
|
46
|
+
type: 'text'
|
|
47
|
+
input :cds_jwk_set,
|
|
48
|
+
title: 'CRD JSON Web Key Set (JWKS)',
|
|
49
|
+
type: 'textarea',
|
|
50
|
+
description: %(
|
|
51
|
+
The CRD client's JWK Set containing it's public key. May be either
|
|
52
|
+
a publicly accessible url containing the JWKS, or the raw JWKS.
|
|
53
|
+
The client suite may be run without this input, but it is required
|
|
54
|
+
for the tests to pass.
|
|
55
|
+
),
|
|
56
|
+
optional: true
|
|
57
|
+
input :complete_prefetch_service_organization_id,
|
|
58
|
+
title: 'Complete Prefetch Service Organization id',
|
|
59
|
+
description: %(
|
|
60
|
+
The FHIR Organization id associated with Inferno's simulated
|
|
61
|
+
complete prefetch CRD server. This Organization must be referenced as the
|
|
62
|
+
payer on Coverages in hook requests made to services described by the
|
|
63
|
+
`#{ClientURLs.discovery_url}` discovery endpoint.
|
|
64
|
+
The client suite may be run without this input, but it is required
|
|
65
|
+
for the tests to pass.
|
|
66
|
+
),
|
|
67
|
+
type: 'text',
|
|
68
|
+
optional: true
|
|
69
|
+
input :subset_prefetch_service_organization_id,
|
|
70
|
+
title: 'Subset Prefetch Service Organization id',
|
|
71
|
+
description: %(
|
|
72
|
+
The FHIR Organization id associated with Inferno's simulated
|
|
73
|
+
subset prefetch CRD server. This Organization must be referenced
|
|
74
|
+
payer on Coverages in hook requests made to services described by the
|
|
75
|
+
`#{ClientURLs.prefetch_subset_discovery_url}` discovery endpoint.
|
|
76
|
+
The client suite may be run without this input, but it is required
|
|
77
|
+
for the tests to pass.
|
|
78
|
+
),
|
|
79
|
+
type: 'text',
|
|
80
|
+
optional: true
|
|
81
|
+
|
|
82
|
+
run do
|
|
83
|
+
if cds_jwk_set.present?
|
|
84
|
+
check_jwks
|
|
85
|
+
else
|
|
86
|
+
add_message('error', 'Provide a jwk set in the **CRD JSON Web Key Set (JWKS)** input.')
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
unless complete_prefetch_service_organization_id.present?
|
|
90
|
+
add_message('error', 'Provide an Organization id associated with the Complete Prefetch Service ' \
|
|
91
|
+
"at endpoint #{discovery_url}")
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
unless subset_prefetch_service_organization_id.present?
|
|
95
|
+
add_message('error', 'Provide an Organization id associated with the Subset Prefetch Service ' \
|
|
96
|
+
"at endpoint #{prefetch_subset_discovery_url}")
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
unless complete_prefetch_service_organization_id.present? && subset_prefetch_service_organization_id.present? &&
|
|
100
|
+
complete_prefetch_service_organization_id != subset_prefetch_service_organization_id
|
|
101
|
+
add_message('error', 'Each Inferno CRD service must be assigned a unique Organization id.')
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
assert_no_error_messages 'Invalid registration information provided. See Messages for details.'
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def check_jwks
|
|
108
|
+
jwks_warnings = []
|
|
109
|
+
parsed_jwk_set = jwk_set(cds_jwk_set, jwks_warnings)
|
|
110
|
+
jwks_warnings.each { |warning| add_message('warning', warning) }
|
|
111
|
+
|
|
112
|
+
add_message('error', 'JWKS content does not include any valid keys.') unless parsed_jwk_set.length.positive?
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def jwk_set(jku, warning_messages = []) # rubocop:disable Metrics/CyclomaticComplexity
|
|
116
|
+
jwk_set = JWT::JWK::Set.new
|
|
117
|
+
|
|
118
|
+
if jku.blank?
|
|
119
|
+
warning_messages << 'No key set input.'
|
|
120
|
+
return jwk_set
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
jwk_body = # try as raw jwk set
|
|
124
|
+
begin
|
|
125
|
+
JSON.parse(jku)
|
|
126
|
+
rescue JSON::ParserError
|
|
127
|
+
nil
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
if jwk_body.blank?
|
|
131
|
+
retrieved = Faraday.get(jku) # try as url pointing to a jwk set
|
|
132
|
+
jwk_body =
|
|
133
|
+
begin
|
|
134
|
+
JSON.parse(retrieved.body)
|
|
135
|
+
rescue JSON::ParserError
|
|
136
|
+
warning_messages << "Failed to fetch valid json from jwks uri #{jku}."
|
|
137
|
+
nil
|
|
138
|
+
end
|
|
139
|
+
else
|
|
140
|
+
warning_messages << 'Providing the JWK Set directly is strongly discouraged.'
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
return jwk_set if jwk_body.blank?
|
|
144
|
+
|
|
145
|
+
jwk_body['keys']&.each_with_index do |key_hash, index|
|
|
146
|
+
parsed_key =
|
|
147
|
+
begin
|
|
148
|
+
JWT::JWK.new(key_hash)
|
|
149
|
+
rescue JWT::JWKError => e
|
|
150
|
+
id = key_hash['kid'] | index
|
|
151
|
+
warning_messages << "Key #{id} invalid: #{e}"
|
|
152
|
+
nil
|
|
153
|
+
end
|
|
154
|
+
jwk_set << parsed_key unless parsed_key.blank?
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
jwk_set
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
end
|