Module: USQualityCoreTestKit::ReadTest

Included in:
USQualityCoreV050::AdverseEventReadTest, USQualityCoreV050::AllergyIntoleranceReadTest, USQualityCoreV050::CarePlanReadTest, USQualityCoreV050::CareTeamReadTest, USQualityCoreV050::ConditionEncounterDiagnosisReadTest, USQualityCoreV050::ConditionProblemsHealthConcernsReadTest, USQualityCoreV050::CoverageReadTest, USQualityCoreV050::DevicenotrequestedReadTest, USQualityCoreV050::DevicerequestReadTest, USQualityCoreV050::DiagnosticReportLabReadTest, USQualityCoreV050::DiagnosticReportNoteReadTest, USQualityCoreV050::DocumentReferenceReadTest, USQualityCoreV050::EncounterReadTest, USQualityCoreV050::FamilyMemberHistoryReadTest, USQualityCoreV050::GoalReadTest, USQualityCoreV050::HeadOccipitalFrontalCircumferencePercentileReadTest, USQualityCoreV050::ImmunizationReadTest, USQualityCoreV050::ImmunizationnotdoneReadTest, USQualityCoreV050::LocationReadTest, USQualityCoreV050::MedicationadministrationReadTest, USQualityCoreV050::MedicationadministrationnotdoneReadTest, USQualityCoreV050::MedicationdispenseReadTest, USQualityCoreV050::MedicationdispensedeclinedReadTest, USQualityCoreV050::MedicationnotrequestedReadTest, USQualityCoreV050::MedicationrequestReadTest, USQualityCoreV050::ObservationClinicalResultReadTest, USQualityCoreV050::ObservationLabReadTest, USQualityCoreV050::ObservationScreeningAssessmentReadTest, USQualityCoreV050::ObservationcancelledReadTest, USQualityCoreV050::OrganizationReadTest, USQualityCoreV050::PatientReadTest, USQualityCoreV050::PediatricBmiForAgeReadTest, USQualityCoreV050::PediatricWeightForHeightReadTest, USQualityCoreV050::PractitionerReadTest, USQualityCoreV050::PractitionerRoleReadTest, USQualityCoreV050::ProcedureReadTest, USQualityCoreV050::ProcedurenotdoneReadTest, USQualityCoreV050::ProvenanceReadTest, USQualityCoreV050::RelatedPersonReadTest, USQualityCoreV050::ServicenotrequestedReadTest, USQualityCoreV050::ServicerequestReadTest, USQualityCoreV050::SimpleObservationReadTest, USQualityCoreV050::SpecimenReadTest, USQualityCoreV050::TaskReadTest, USQualityCoreV050::TaskrejectedReadTest, USQualityCoreV050::UsCoreBloodPressureReadTest, USQualityCoreV050::UsCoreBmiReadTest, USQualityCoreV050::UsCoreBodyHeightReadTest, USQualityCoreV050::UsCoreBodyTemperatureReadTest, USQualityCoreV050::UsCoreBodyWeightReadTest, USQualityCoreV050::UsCoreHeartRateReadTest, USQualityCoreV050::UsCoreObservationOccupationReadTest, USQualityCoreV050::UsCoreObservationPregnancyintentReadTest, USQualityCoreV050::UsCoreObservationPregnancystatusReadTest, USQualityCoreV050::UsCorePulseOximetryReadTest, USQualityCoreV050::UsCoreRespiratoryRateReadTest, USQualityCoreV050::UsCoreSmokingstatusReadTest
Defined in:
lib/us_quality_core_test_kit/read_test.rb

Instance Method Summary collapse

Instance Method Details

#all_scratch_resourcesObject



5
6
7
# File 'lib/us_quality_core_test_kit/read_test.rb', line 5

def all_scratch_resources
  scratch_resources[:all] ||= []
end

#bad_resource_id_message(expected_id) ⇒ Object



97
98
99
# File 'lib/us_quality_core_test_kit/read_test.rb', line 97

def bad_resource_id_message(expected_id)
  "Expected resource to have id: `#{expected_id.inspect}`, but found `#{resource.id.inspect}`"
end

#no_resources_skip_messageObject



92
93
94
95
# File 'lib/us_quality_core_test_kit/read_test.rb', line 92

def no_resources_skip_message
  "No #{resource_type} resources appear to be available. " \
    'Please use patients with more information.'
end

#perform_read_test(resources, _reply_handler = nil, delayed_reference: false) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/us_quality_core_test_kit/read_test.rb', line 9

def perform_read_test(resources, _reply_handler = nil, delayed_reference: false)
  skip_if resources.blank?, no_resources_skip_message

  resources_to_read = if delayed_reference
                        readable_references(resources)
                      else
                        readable_resources(resources)
                      end

  assert resources_to_read.present?, "No #{resource_type} id found."

  if config.options[:read_all_resources]
    if delayed_reference
      all_referencing_resources = referencing_resources(resources_to_read)
      info %(
        The #{resource_type} references used for this test were pulled from the following resources:
        #{all_referencing_resources}
      )

      resources_to_read.map! { |resource| resource[:reference] }
    end

    resources_to_read.each do |resource|
      read_and_validate(resource)
    end
  else
    first_resource = resources_to_read.first
    if delayed_reference.present?
      info %(
        The #{resource_type} reference used for this test was pulled from resource
        #{first_resource[:referencing_resource]}
      )
      first_resource = first_resource[:reference]
    end
    read_and_validate(first_resource)
  end
end

#read_and_validate(resource_to_read) ⇒ Object



74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/us_quality_core_test_kit/read_test.rb', line 74

def read_and_validate(resource_to_read)
  id = resource_id(resource_to_read)

  fhir_read resource_type, id

  assert_response_status(200)
  assert_resource_type(resource_type)
  assert resource.id.present? && resource.id == id, bad_resource_id_message(id)

  return unless resource_to_read.is_a? FHIR::Reference

  all_scratch_resources << resource
end

#readable_references(resources) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/us_quality_core_test_kit/read_test.rb', line 53

def readable_references(resources)
  references = resources.filter_map do |resource|
    next unless resource[:reference].present? && resource[:reference].is_a?(FHIR::Reference)

    reference_id = resource[:reference].reference&.split('/')&.last
    next unless reference_id&.present?

    resource
  end

  references.uniq { |resource| resource[:reference].reference.split('/').last }
end

#readable_resources(resources) ⇒ Object



66
67
68
69
70
71
72
# File 'lib/us_quality_core_test_kit/read_test.rb', line 66

def readable_resources(resources)
  resources
    .select { |resource| resource.is_a?(resource_class) || resource.is_a?(FHIR::Reference) }
    .select { |resource| (resource.is_a?(FHIR::Reference) ? resource.reference.split('/').last : resource.id).present? }
    .compact
    .uniq { |resource| resource.is_a?(FHIR::Reference) ? resource.reference.split('/').last : resource.id }
end

#referencing_resources(readable_resources) ⇒ Object



47
48
49
50
51
# File 'lib/us_quality_core_test_kit/read_test.rb', line 47

def referencing_resources(readable_resources)
  readable_resources
    .map { |resource| resource[:referencing_resource] }
    .join(', ')
end

#resource_classObject



101
102
103
# File 'lib/us_quality_core_test_kit/read_test.rb', line 101

def resource_class
  FHIR.const_get(resource_type)
end

#resource_id(resource) ⇒ Object



88
89
90
# File 'lib/us_quality_core_test_kit/read_test.rb', line 88

def resource_id(resource)
  resource.is_a?(FHIR::Reference) ? resource.reference.split('/').last : resource.id
end