Class: AUCoreTestKit::Generator::MultipleOrSearchTestGenerator

Inherits:
Object
  • Object
show all
Defined in:
lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(search_name, group_metadata, search_metadata, base_output_dir) ⇒ MultipleOrSearchTestGenerator

Returns a new instance of MultipleOrSearchTestGenerator.



24
25
26
27
28
29
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 24

def initialize(search_name, , , base_output_dir)
  self.search_name = search_name
  self. = 
  self. = 
  self.base_output_dir = base_output_dir
end

Instance Attribute Details

#base_output_dirObject

Returns the value of attribute base_output_dir.



22
23
24
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 22

def base_output_dir
  @base_output_dir
end

#group_metadataObject

Returns the value of attribute group_metadata.



22
23
24
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 22

def 
  @group_metadata
end

#search_metadataObject

Returns the value of attribute search_metadata.



22
23
24
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 22

def 
  @search_metadata
end

#search_nameObject

Returns the value of attribute search_name.



22
23
24
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 22

def search_name
  @search_name
end

Class Method Details

.generate(ig_metadata, base_output_dir) ⇒ Object



11
12
13
14
15
16
17
18
19
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 11

def generate(, base_output_dir)
  .groups
             .select { |group| group.searches.present? }
             .each do |group|
    group.search_definitions.each_key do |search_key|
      new(search_key.to_s, group, group.search_definitions[search_key], base_output_dir).generate if group.search_definitions[search_key].key?(:multiple_or) && search_key.to_s != 'patient'
    end
  end
end

Instance Method Details

#array_of_strings(array) ⇒ Object



153
154
155
156
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 153

def array_of_strings(array)
  quoted_strings = array.map { |element| "'#{element}'" }
  "[#{quoted_strings.join(', ')}]"
end

#base_output_file_nameObject



39
40
41
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 39

def base_output_file_name
  "#{class_name.underscore}.rb"
end

#class_nameObject



67
68
69
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 67

def class_name
  "#{Naming.upper_camel_case_for_profile()}#{search_title.capitalize}MultipleOrSearchTest"
end

#conformance_expectationObject



79
80
81
82
83
84
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 79

def conformance_expectation
  # NOTE: https://github.com/hl7au/au-fhir-core-inferno/issues/61
  return 'SHOULD' if search_name == 'status' && (resource_type == 'Procedure' || resource_type == 'Observation')

  [:multiple_or]
end

#descriptionObject



214
215
216
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 214

def description
  Helpers.multiple_test_description('OR', conformance_expectation, search_param_name_string, resource_type, url_version)
end

#first_search?Boolean

Returns:

  • (Boolean)


86
87
88
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 86

def first_search?
  .searches.first == 
end

#fixed_value_search?Boolean

Returns:

  • (Boolean)


90
91
92
93
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 90

def fixed_value_search?
  first_search? && [:names] != ['patient'] &&
    !.delayed? && resource_type != 'Patient'
end

#fixed_value_search_param_nameObject



95
96
97
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 95

def fixed_value_search_param_name
  ([:names] - [:patient]).first
end

#generateObject



204
205
206
207
208
209
210
211
212
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 204

def generate
  FileUtils.mkdir_p(output_file_directory)
  File.open(output_file_name, 'w') { |f| f.write(output) }

  .add_test(
    id: test_id,
    file_name: base_output_file_name
  )
end

#module_nameObject



71
72
73
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 71

def module_name
  "AUCore#{.reformatted_version.upcase}"
end

#needs_patient_id?Boolean

Returns:

  • (Boolean)


103
104
105
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 103

def needs_patient_id?
  true
end

#optional?Boolean

Returns:

  • (Boolean)


119
120
121
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 119

def optional?
  conformance_expectation == 'SHOULD' || conformance_expectation == 'MAY'
end

#optional_multiple_or_search_paramsObject



136
137
138
139
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 136

def optional_multiple_or_search_params
  @optional_multiple_or_search_params ||=
    search_definition(search_name)[:multiple_or] == 'SHOULD'
end

#optional_multiple_or_search_params_stringObject



145
146
147
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 145

def optional_multiple_or_search_params_string
  optional_multiple_or_search_params
end

#outputObject



35
36
37
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 35

def output
  @output ||= ERB.new(template).result(binding)
end

#output_file_directoryObject



43
44
45
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 43

def output_file_directory
  File.join(base_output_dir, profile_identifier)
end

#output_file_nameObject



47
48
49
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 47

def output_file_name
  File.join(output_file_directory, base_output_file_name)
end

#path_for_value(path) ⇒ Object



115
116
117
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 115

def path_for_value(path)
  path == 'class' ? 'local_class' : path
end

#profile_identifierObject



51
52
53
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 51

def profile_identifier
  Naming.snake_case_for_profile()
end

#required_comparators_stringObject



149
150
151
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 149

def required_comparators_string
  array_of_strings(required_comparators.keys)
end

#required_multiple_or_search_paramsObject



131
132
133
134
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 131

def required_multiple_or_search_params
  @required_multiple_or_search_params ||=
    search_definition(search_name)[:multiple_or] == 'SHALL'
end

#required_multiple_or_search_params_stringObject



141
142
143
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 141

def required_multiple_or_search_params_string
  required_multiple_or_search_params
end

#resource_typeObject



75
76
77
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 75

def resource_type
  .resource
end

#saves_delayed_references?Boolean

Returns:

  • (Boolean)


127
128
129
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 127

def saves_delayed_references?
  first_search? && .delayed_references.present?
end

#search_definition(name) ⇒ Object



123
124
125
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 123

def search_definition(name)
  .search_definitions[name.to_sym]
end

#search_identifierObject



59
60
61
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 59

def search_identifier
  search_name.to_s.tr('-', '_')
end

#search_param_name_stringObject



99
100
101
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 99

def search_param_name_string
  search_name
end

#search_param_namesObject



107
108
109
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 107

def search_param_names
  [search_name]
end

#search_param_names_arrayObject



111
112
113
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 111

def search_param_names_array
  array_of_strings(search_param_names)
end

#search_propertiesObject



170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 170

def search_properties
  {}.tap do |properties|
    properties[:first_search] = 'true' if first_search?
    properties[:fixed_value_search] = 'true' if fixed_value_search?
    properties[:resource_type] = "'#{resource_type}'"
    properties[:search_param_names] = search_param_names
    properties[:saves_delayed_references] = 'true' if saves_delayed_references?
    properties[:test_medication_inclusion] = 'true' if test_medication_inclusion?
    properties[:test_reference_variants] = 'true' if test_reference_variants?
    if required_multiple_or_search_params.present?
      properties[:multiple_or_search_params] =
        required_multiple_or_search_params_string
    end
    properties[:optional_multiple_or_search_params] = optional_multiple_or_search_params_string if optional_multiple_or_search_params.present?
    properties[:search_by_target_resource_data] = 'true' if Helpers.test_on_target_resource_data?(
      SpecialCases.multiple_or_and_search_by_target_resource,
      resource_type, search_param_names
    )
  end
end

#search_test_properties_stringObject



198
199
200
201
202
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 198

def search_test_properties_string
  search_properties
    .map { |key, value| "#{' ' * 8}#{key}: #{value}" }
    .join(",\n")
end

#search_titleObject



63
64
65
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 63

def search_title
  search_identifier
end

#templateObject



31
32
33
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 31

def template
  @template ||= File.read(File.join(__dir__, 'templates', 'multiple_or_search.rb.erb'))
end

#test_idObject



55
56
57
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 55

def test_id
  "au_core_#{.reformatted_version}_#{profile_identifier}_#{search_identifier}_multiple_or_search_test"
end

#test_medication_inclusion?Boolean

Returns:

  • (Boolean)


162
163
164
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 162

def test_medication_inclusion?
  %w[MedicationRequest MedicationDispense].include?(resource_type)
end

#test_post_search?Boolean

Returns:

  • (Boolean)


166
167
168
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 166

def test_post_search?
  first_search?
end

#test_reference_variants?Boolean

Returns:

  • (Boolean)


158
159
160
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 158

def test_reference_variants?
  first_search? && search_param_names.include?('patient')
end

#url_versionObject



191
192
193
194
195
196
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 191

def url_version
  case .version
  when 'v0.3.0-ballot'
    '0.3.0-ballot'
  end
end