Class: DaVinciDTRTestKit::DTRAdaptiveResponseValidationTest
- Inherits:
-
Inferno::Test
- Object
- Inferno::Test
- DaVinciDTRTestKit::DTRAdaptiveResponseValidationTest
- Includes:
- DTRQuestionnaireResponseValidation, URLs
- Defined in:
- lib/davinci_dtr_test_kit/client_groups/adaptive_questionnaire/dtr_adaptive_response_validation_test.rb
Constant Summary
Constants included from DTRQuestionnaireResponseValidation
DaVinciDTRTestKit::DTRQuestionnaireResponseValidation::CQL_EXPRESSION_EXTENSIONS
Constants included from CQLTest
CQLTest::ADAPTIVE_QUESTIONNAIRE_PACKAGE_BUNDLE_PROFILE, CQLTest::ADAPTIVE_QUESTIONNAIRE_PACKAGE_PARAMETER_PROFILE, CQLTest::STATIC_QUESTIONNAIRE_PACKAGE_BUNDLE_PROFILE, CQLTest::STATIC_QUESTIONNAIRE_PACKAGE_PARAMETER_PROFILE
Instance Method Summary collapse
- #next_request_tag ⇒ Object
-
#perform_questionnaire_reponses_validation(custom_questionnaires) ⇒ Object
rubocop:disable Metrics/CyclomaticComplexity.
- #profile_url ⇒ Object
- #verify_contained_questionnaire(questionnaire, index, custom_questionnaires) ⇒ Object
- #verify_workflow_completion(custom_questionnaires) ⇒ Object
Methods included from DTRQuestionnaireResponseValidation
#answer_value_equal?, #check_answer, #check_answer_presence, #check_is_questionnaire_response, #check_item_prepopulation, #check_missing_origin_sources, #check_origin_source, #check_origin_sources, #coding_equal?, #collect_questionnaire_cql_expression_link_ids, #extract_expected_answers_from_template, #extract_origin_sources, #extract_required_link_ids, #find_extension, #find_item_by_link_id, #find_origin_source, #item_is_cql_expression?, #origin_source_error, #validate_cql_executed, #validate_questionnaire_pre_population, #validate_questionnaire_response_correctness, #value_for_display, #verify_basic_conformance
Methods included from CQLTest
#add_formatting_messages, #add_item_messages, #add_launch_context_messages, #check_expression_format, #check_for_cql, #check_item_extension, #check_libraries, #check_library_references, #check_nested_items, #check_questionnaire_extensions, #check_questionnaire_items, #cqf_reference_libraries, #cql_presence, #evaluate_library, #extension_presence, #extract_bundles_from_parameter, #extract_contained_questionnaires, #extract_libraries_from_bundles, #extract_questionnaire_bundles, #extract_questionnaire_from_questionnaire_package, #extract_questionnaires_from_bundles, #found_duplicate_library_name, #found_non_cql_elm_library, #found_non_cql_expression, #found_questionnaire, #library_names, #library_urls, #perform_questionnaire_package_validation, #questionnaire_package_profile_urls, #reset_cql_tests, #total_cqf_libs, #validate_questionnaire_package, #verify_questionnaire_extensions, #verify_questionnaire_items
Methods included from URLs
#base_url, #ehr_authorize_url, #ehr_token_url, #fhir_base_url, #next_url, #payer_token_url, #questionnaire_package_url, #questionnaire_response_url, #registration_url, #resume_fail_url, #resume_pass_url, #suite_id, #supported_payer_url, #token_url, #udap_discovery_url
Instance Method Details
#next_request_tag ⇒ Object
34 35 36 |
# File 'lib/davinci_dtr_test_kit/client_groups/adaptive_questionnaire/dtr_adaptive_response_validation_test.rb', line 34 def next_request_tag config.[:next_tag] end |
#perform_questionnaire_reponses_validation(custom_questionnaires) ⇒ Object
rubocop:disable Metrics/CyclomaticComplexity
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/davinci_dtr_test_kit/client_groups/adaptive_questionnaire/dtr_adaptive_response_validation_test.rb', line 38 def perform_questionnaire_reponses_validation(custom_questionnaires) # rubocop:disable Metrics/CyclomaticComplexity requests.each_with_index do |r, index| if r.url != next_url ('warning', "Request #{index} made to wrong URL: #{r.url}. Should instead be to #{next_url}") end assert_valid_json(r.request_body) input_params = FHIR.from_contents(r.request_body) assert input_params.present?, 'Request does not contain a recognized FHIR object' qr = nil if input_params.is_a?(FHIR::QuestionnaireResponse) qr = input_params elsif input_params.is_a?(FHIR::Parameters) qr = input_params.parameter&.find do |param| param.name == 'questionnaire-response' end&.resource end assert qr.present?, 'QuestionnaireResponse resource not provided.' verify_basic_conformance(qr.to_json, profile_url) questionnaire = qr.contained.find { |res| res.resourceType == 'Questionnaire' } assert questionnaire, 'QuestionnaireResponse does not contained a Questionnaire' scratch[:contained_questionnaires] ||= [] scratch[:contained_questionnaires] << questionnaire verify_contained_questionnaire(questionnaire, index, custom_questionnaires) check_missing_origin_sources(qr, index) if index == requests.length - 1 expected_overrides = next_request_tag&.include?('custom') ? [] : ['PBD.2'] check_origin_sources(questionnaire.item, qr.item, expected_overrides:, index:) required_link_ids = extract_required_link_ids(questionnaire.item) check_answer_presence(qr.item, required_link_ids, index) rescue Inferno::Exceptions::AssertionException => e prefix = e..include?('Workflow not') ? '' : "Request #{index}: " ('error', "#{prefix}#{e.}") next end end |
#profile_url ⇒ Object
30 31 32 |
# File 'lib/davinci_dtr_test_kit/client_groups/adaptive_questionnaire/dtr_adaptive_response_validation_test.rb', line 30 def profile_url 'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaireresponse-adapt' end |
#verify_contained_questionnaire(questionnaire, index, custom_questionnaires) ⇒ Object
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/davinci_dtr_test_kit/client_groups/adaptive_questionnaire/dtr_adaptive_response_validation_test.rb', line 82 def verify_contained_questionnaire(questionnaire, index, custom_questionnaires) return unless next_request_tag&.include?('custom') return unless index.positive? && custom_questionnaires.present? expected_questionnaire = custom_questionnaires[index - 1] return unless expected_questionnaire actual_items = questionnaire.to_hash['item'] expected_items = expected_questionnaire['item'] assert actual_items == expected_items, %( Invalid QuestionnaireResponse: the contained Questionnaire `item` does not match the expected content. **Expected**: #{expected_items.inspect} **Received**: #{actual_items.inspect} ) end |
#verify_workflow_completion(custom_questionnaires) ⇒ Object
99 100 101 102 103 104 105 106 |
# File 'lib/davinci_dtr_test_kit/client_groups/adaptive_questionnaire/dtr_adaptive_response_validation_test.rb', line 99 def verify_workflow_completion(custom_questionnaires) return unless next_request_tag&.include?('custom') assert requests.length > custom_questionnaires.length, %( Workflow not completed: expected #{custom_questionnaires.length + 1} next-question requests, but received #{requests.length}. ) end |