Class: DaVinciDTRTestKit::DTRAdaptiveNextQuestionRequestValidationTest

Inherits:
Inferno::Test
  • Object
show all
Includes:
URLs
Defined in:
lib/davinci_dtr_test_kit/client_groups/adaptive_questionnaire/dtr_adaptive_next_question_request_validation_test.rb

Instance Method Summary collapse

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

#assert_valid_resource_type(resource) ⇒ Object



35
36
37
38
39
# File 'lib/davinci_dtr_test_kit/client_groups/adaptive_questionnaire/dtr_adaptive_next_question_request_validation_test.rb', line 35

def assert_valid_resource_type(resource)
  type = resource.resourceType
  valid = ['Parameters', 'QuestionnaireResponse'].include?(type)
  assert valid, "Request body not valid. Expected Parameters or QuestionnaireResponse, got #{type}"
end

#next_request_tagObject



41
42
43
# File 'lib/davinci_dtr_test_kit/client_groups/adaptive_questionnaire/dtr_adaptive_next_question_request_validation_test.rb', line 41

def next_request_tag
  config.options[:next_tag]
end

#perform_requests_validationObject



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
# File 'lib/davinci_dtr_test_kit/client_groups/adaptive_questionnaire/dtr_adaptive_next_question_request_validation_test.rb', line 45

def perform_requests_validation
  requests.each_with_index do |r, index|
    if r.url != next_url
      add_message('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'
    assert_valid_resource_type(input_params)

    if input_params.is_a?(FHIR::Parameters)
      questionnaire_response_params = input_params.parameter.select do |param|
        param.name == 'questionnaire-response'
      end
      qr_params_count = questionnaire_response_params.length
      assert qr_params_count == 1,
             "Input parameter must contain one `parameter:questionnaire-response` slice. Found #{qr_params_count}"

      questionnaire_response =  questionnaire_response_params.first.resource
      assert_resource_type(:questionnaire_response, resource: questionnaire_response)
    end
  rescue Inferno::Exceptions::AssertionException => e
    add_message('error', "Request #{index}: #{e.message}")
    next
  end
end