Class: AUCoreTestKit::Generator::MultipleOrSearchTestGenerator
- Inherits:
-
Object
- Object
- AUCoreTestKit::Generator::MultipleOrSearchTestGenerator
- Defined in:
- lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb
Instance Attribute Summary collapse
-
#base_output_dir ⇒ Object
Returns the value of attribute base_output_dir.
-
#group_metadata ⇒ Object
Returns the value of attribute group_metadata.
-
#search_metadata ⇒ Object
Returns the value of attribute search_metadata.
-
#search_name ⇒ Object
Returns the value of attribute search_name.
Class Method Summary collapse
Instance Method Summary collapse
- #array_of_strings(array) ⇒ Object
- #base_output_file_name ⇒ Object
- #class_name ⇒ Object
- #conformance_expectation ⇒ Object
- #description ⇒ Object
- #first_search? ⇒ Boolean
- #fixed_value_search? ⇒ Boolean
- #fixed_value_search_param_name ⇒ Object
- #generate ⇒ Object
-
#initialize(search_name, group_metadata, search_metadata, base_output_dir) ⇒ MultipleOrSearchTestGenerator
constructor
A new instance of MultipleOrSearchTestGenerator.
- #module_name ⇒ Object
- #needs_patient_id? ⇒ Boolean
- #optional? ⇒ Boolean
- #optional_multiple_or_search_params ⇒ Object
- #optional_multiple_or_search_params_string ⇒ Object
- #output ⇒ Object
- #output_file_directory ⇒ Object
- #output_file_name ⇒ Object
- #path_for_value(path) ⇒ Object
- #profile_identifier ⇒ Object
- #required_comparators_string ⇒ Object
- #required_multiple_or_search_params ⇒ Object
- #required_multiple_or_search_params_string ⇒ Object
- #resource_type ⇒ Object
- #saves_delayed_references? ⇒ Boolean
- #search_definition(name) ⇒ Object
- #search_identifier ⇒ Object
- #search_param_name_string ⇒ Object
- #search_param_names ⇒ Object
- #search_param_names_array ⇒ Object
- #search_properties ⇒ Object
- #search_test_properties_string ⇒ Object
- #search_title ⇒ Object
- #template ⇒ Object
- #test_id ⇒ Object
- #test_medication_inclusion? ⇒ Boolean
- #test_post_search? ⇒ Boolean
- #test_reference_variants? ⇒ Boolean
- #url_version ⇒ Object
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_dir ⇒ Object
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_metadata ⇒ Object
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_metadata ⇒ Object
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_name ⇒ Object
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_name ⇒ Object
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_name ⇒ Object
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_expectation ⇒ Object
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 |
#description ⇒ Object
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
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
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_name ⇒ Object
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 |
#generate ⇒ Object
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_name ⇒ Object
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
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
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_params ⇒ Object
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_string ⇒ Object
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 |
#output ⇒ Object
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_directory ⇒ Object
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_name ⇒ Object
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_identifier ⇒ Object
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_string ⇒ Object
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_params ⇒ Object
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_string ⇒ Object
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_type ⇒ Object
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
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_identifier ⇒ Object
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_string ⇒ Object
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_names ⇒ Object
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_array ⇒ Object
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_properties ⇒ Object
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_string ⇒ Object
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_title ⇒ Object
63 64 65 |
# File 'lib/au_core_test_kit/generator/multiple_or_search_test_generator.rb', line 63 def search_title search_identifier end |
#template ⇒ Object
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_id ⇒ Object
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
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
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
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_version ⇒ Object
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 |