Class: AUCoreTestKit::Generator::ChainSearchTestGenerator

Inherits:
Object
  • Object
show all
Defined in:
lib/au_core_test_kit/generator/chain_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, chain_item) ⇒ ChainSearchTestGenerator

Returns a new instance of ChainSearchTestGenerator.



34
35
36
37
38
39
40
# File 'lib/au_core_test_kit/generator/chain_search_test_generator.rb', line 34

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

Instance Attribute Details

#base_output_dirObject

Returns the value of attribute base_output_dir.



32
33
34
# File 'lib/au_core_test_kit/generator/chain_search_test_generator.rb', line 32

def base_output_dir
  @base_output_dir
end

#chain_itemObject

Returns the value of attribute chain_item.



32
33
34
# File 'lib/au_core_test_kit/generator/chain_search_test_generator.rb', line 32

def chain_item
  @chain_item
end

#group_metadataObject

Returns the value of attribute group_metadata.



32
33
34
# File 'lib/au_core_test_kit/generator/chain_search_test_generator.rb', line 32

def 
  
end

#search_metadataObject

Returns the value of attribute search_metadata.



32
33
34
# File 'lib/au_core_test_kit/generator/chain_search_test_generator.rb', line 32

def 
  
end

#search_nameObject

Returns the value of attribute search_name.



32
33
34
# File 'lib/au_core_test_kit/generator/chain_search_test_generator.rb', line 32

def search_name
  @search_name
end

Class Method Details

.generate(ig_metadata, base_output_dir) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/au_core_test_kit/generator/chain_search_test_generator.rb', line 10

def generate(, base_output_dir)
  .groups
             .select { |group| group.searches.present? }
             .each do |group|
    group.search_definitions.each_key do |search_key|
      current_search_definition = group.search_definitions[search_key]
      next unless current_search_definition.key?(:chain) && current_search_definition[:chain].length.positive?

      current_search_definition[:chain].each do |chain_item|
        new(
          search_key.to_s,
          group,
          group.search_definitions[search_key],
          base_output_dir,
          chain_item
        ).generate
      end
    end
  end
end

Instance Method Details

#array_of_strings(array) ⇒ Object



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

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

#attribute_pathsObject



114
115
116
# File 'lib/au_core_test_kit/generator/chain_search_test_generator.rb', line 114

def attribute_paths
  [:paths]
end

#base_output_file_nameObject



50
51
52
# File 'lib/au_core_test_kit/generator/chain_search_test_generator.rb', line 50

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

#class_nameObject



78
79
80
# File 'lib/au_core_test_kit/generator/chain_search_test_generator.rb', line 78

def class_name
  "#{Naming.upper_camel_case_for_profile(group_metadata)}#{search_title}ChainSearchTest"
end

#conformance_expectationObject



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

def conformance_expectation
  chain_item[:expectation]
end

#descriptionObject



158
159
160
161
162
163
164
165
166
# File 'lib/au_core_test_kit/generator/chain_search_test_generator.rb', line 158

def description
  "    A server \#{conformance_expectation} support searching by\n    \#{search_param_names.first} on the \#{resource_type} resource. This test\n    will pass if the server returns a success response to the request.\n\n    [AU Core Server CapabilityStatement](http://hl7.org.au/fhir/core/\#{url_version}/CapabilityStatement-au-core-server.html)\n  DESCRIPTION\nend\n".gsub(/\n{3,}/, "\n\n")

#generateObject



144
145
146
147
148
149
150
151
152
# File 'lib/au_core_test_kit/generator/chain_search_test_generator.rb', line 144

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



82
83
84
# File 'lib/au_core_test_kit/generator/chain_search_test_generator.rb', line 82

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

#optional?Boolean

Returns:

  • (Boolean)


118
119
120
# File 'lib/au_core_test_kit/generator/chain_search_test_generator.rb', line 118

def optional?
  conformance_expectation != 'SHALL'
end

#outputObject



46
47
48
# File 'lib/au_core_test_kit/generator/chain_search_test_generator.rb', line 46

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

#output_file_directoryObject



54
55
56
# File 'lib/au_core_test_kit/generator/chain_search_test_generator.rb', line 54

def output_file_directory
  File.join(base_output_dir, profile_identifier)
end

#output_file_nameObject



58
59
60
# File 'lib/au_core_test_kit/generator/chain_search_test_generator.rb', line 58

def output_file_name
  File.join(output_file_directory, base_output_file_name)
end

#profile_identifierObject



62
63
64
# File 'lib/au_core_test_kit/generator/chain_search_test_generator.rb', line 62

def profile_identifier
  Naming.snake_case_for_profile()
end

#resource_typeObject



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

def resource_type
  .resource
end

#search_definition(name) ⇒ Object



122
123
124
# File 'lib/au_core_test_kit/generator/chain_search_test_generator.rb', line 122

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

#search_identifierObject



70
71
72
# File 'lib/au_core_test_kit/generator/chain_search_test_generator.rb', line 70

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

#search_param_name_stringObject



102
103
104
# File 'lib/au_core_test_kit/generator/chain_search_test_generator.rb', line 102

def search_param_name_string
  search_name
end

#search_param_namesObject



94
95
96
# File 'lib/au_core_test_kit/generator/chain_search_test_generator.rb', line 94

def search_param_names
  ["#{search_name}:#{chain_item[:target]}.#{chain_item[:chain]}"]
end

#search_param_names_arrayObject



98
99
100
# File 'lib/au_core_test_kit/generator/chain_search_test_generator.rb', line 98

def search_param_names_array
  array_of_strings(search_param_names)
end

#search_propertiesObject



106
107
108
109
110
111
112
# File 'lib/au_core_test_kit/generator/chain_search_test_generator.rb', line 106

def search_properties
  {}.tap do |properties|
    properties[:resource_type] = "'#{resource_type}'"
    properties[:search_param_names] = search_param_names_array
    properties[:attr_paths] = attribute_paths
  end
end

#search_test_properties_stringObject



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

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

#search_titleObject



74
75
76
# File 'lib/au_core_test_kit/generator/chain_search_test_generator.rb', line 74

def search_title
  search_identifier.camelize
end

#templateObject



42
43
44
# File 'lib/au_core_test_kit/generator/chain_search_test_generator.rb', line 42

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

#test_idObject



66
67
68
# File 'lib/au_core_test_kit/generator/chain_search_test_generator.rb', line 66

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

#titleObject



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

def title
  "Server returns valid results for #{resource_type} search by #{search_param_name_string} (chained parameters)"
end

#url_versionObject



137
138
139
140
141
142
# File 'lib/au_core_test_kit/generator/chain_search_test_generator.rb', line 137

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