Class: DaVinciPASTestKit::Generator::MustSupportTestGenerator

Inherits:
Object
  • Object
show all
Defined in:
lib/davinci_pas_test_kit/generator/must_support_test_generator.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(group_metadata, base_output_dir, request_type, system = 'server') ⇒ MustSupportTestGenerator

Returns a new instance of MustSupportTestGenerator.



39
40
41
42
43
44
# File 'lib/davinci_pas_test_kit/generator/must_support_test_generator.rb', line 39

def initialize(, base_output_dir, request_type, system = 'server')
  self. = 
  self.base_output_dir = base_output_dir
  self.request_type = request_type
  self.system = system
end

Instance Attribute Details

#base_output_dirObject

Returns the value of attribute base_output_dir.



37
38
39
# File 'lib/davinci_pas_test_kit/generator/must_support_test_generator.rb', line 37

def base_output_dir
  @base_output_dir
end

#group_metadataObject

Returns the value of attribute group_metadata.



37
38
39
# File 'lib/davinci_pas_test_kit/generator/must_support_test_generator.rb', line 37

def 
  @group_metadata
end

#request_typeObject

Returns the value of attribute request_type.



37
38
39
# File 'lib/davinci_pas_test_kit/generator/must_support_test_generator.rb', line 37

def request_type
  @request_type
end

#systemObject

Returns the value of attribute system.



37
38
39
# File 'lib/davinci_pas_test_kit/generator/must_support_test_generator.rb', line 37

def system
  @system
end

Class Method Details

.generate(ig_metadata, base_output_dir) ⇒ 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
# File 'lib/davinci_pas_test_kit/generator/must_support_test_generator.rb', line 9

def generate(, base_output_dir)
  submit_request_groups = .groups.select do |group|
    MustSupportCheckProfiles.submit_request_group?(group)
  end
  submit_response_groups = .groups.select do |group|
    MustSupportCheckProfiles.submit_response_group?(group)
  end
  inquiry_request_groups = .groups.select do |group|
    MustSupportCheckProfiles.inquiry_request_group?(group)
  end
  inquiry_response_groups = .groups.select do |group|
    MustSupportCheckProfiles.inquiry_response_group?(group)
  end

  submit_request_groups.each do |group|
    new(group, base_output_dir, 'submit_request').generate
    new(group, base_output_dir, 'submit_request', 'client').generate
  end
  submit_response_groups.each { |group| new(group, base_output_dir, 'submit_response').generate }

  inquiry_request_groups.each do |group|
    new(group, base_output_dir, 'inquire_request').generate
    new(group, base_output_dir, 'inquire_request', 'client').generate
  end
  inquiry_response_groups.each { |group| new(group, base_output_dir, 'inquire_response').generate }
end

Instance Method Details

#base_output_file_nameObject



54
55
56
# File 'lib/davinci_pas_test_kit/generator/must_support_test_generator.rb', line 54

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

#build_must_support_list_string(uscdi_only) ⇒ Object



108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/davinci_pas_test_kit/generator/must_support_test_generator.rb', line 108

def build_must_support_list_string(uscdi_only)
  slice_names = .must_supports[:slices]
    .select { |slice| slice[:uscdi_only].presence == uscdi_only.presence }
    .map { |slice| slice[:slice_id] }

  element_names = .must_supports[:elements]
    .select { |element| element[:uscdi_only].presence == uscdi_only.presence }
    .map { |element| "#{resource_type}.#{element[:path]}" }

  extension_names = .must_supports[:extensions]
    .select { |extension| extension[:uscdi_only].presence == uscdi_only.presence }
    .map { |extension| extension[:id] }

  .must_supports[:choices]&.each do |choice|
    next unless choice[:uscdi_only].presence == uscdi_only.presence && choice.key?(:paths)

    choice[:paths].each { |path| element_names.delete("#{resource_type}.#{path}") }
    choice[:extension_ids].each { |id| extension_names.delete(id.to_s) } if choice[:extension_ids].present?

    element_paths = choice[:paths].map { |path| "#{resource_type}.#{path}" }.join(' or ')
    extension_ids = choice[:extension_ids].map(&:to_s).join(' or ')

    element_names << "#{element_paths} or #{extension_ids}"
  end

  (slice_names + element_names + extension_names)
    .uniq
    .sort
    .map { |name| "#{' ' * 8}* #{name}" }
    .join("\n")
end

#class_nameObject



78
79
80
81
82
# File 'lib/davinci_pas_test_kit/generator/must_support_test_generator.rb', line 78

def class_name
  # rubocop:disable Layout/LineLength
  "#{system.capitalize}#{request_type.camelize}#{Naming.upper_camel_case_for_profile()}MustSupportTest"
  # rubocop:enable Layout/LineLength
end

#generateObject



153
154
155
156
157
158
159
160
161
# File 'lib/davinci_pas_test_kit/generator/must_support_test_generator.rb', line 153

def generate
  FileUtils.mkdir_p(output_file_directory)
  File.write(output_file_name, output)

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

#module_nameObject



84
85
86
# File 'lib/davinci_pas_test_kit/generator/must_support_test_generator.rb', line 84

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

#must_support_list_stringObject



100
101
102
# File 'lib/davinci_pas_test_kit/generator/must_support_test_generator.rb', line 100

def must_support_list_string
  build_must_support_list_string(false)
end

#optional?Boolean

Returns:

  • (Boolean)


149
150
151
# File 'lib/davinci_pas_test_kit/generator/must_support_test_generator.rb', line 149

def optional?
  MustSupportCheckProfiles.optional_group?()
end

#outputObject



50
51
52
# File 'lib/davinci_pas_test_kit/generator/must_support_test_generator.rb', line 50

def output
  @output ||= ERB.new(template, trim_mode: '-').result(binding)
end

#output_file_directoryObject



58
59
60
# File 'lib/davinci_pas_test_kit/generator/must_support_test_generator.rb', line 58

def output_file_directory
  File.join(base_output_dir, profile_identifier)
end

#output_file_nameObject



62
63
64
# File 'lib/davinci_pas_test_kit/generator/must_support_test_generator.rb', line 62

def output_file_name
  File.join(output_file_directory, base_output_file_name)
end

#profile_identifierObject



70
71
72
# File 'lib/davinci_pas_test_kit/generator/must_support_test_generator.rb', line 70

def profile_identifier
  Naming.snake_case_for_profile()
end

#profile_nameObject



92
93
94
# File 'lib/davinci_pas_test_kit/generator/must_support_test_generator.rb', line 92

def profile_name
  .profile_name
end

#read_interactionObject



66
67
68
# File 'lib/davinci_pas_test_kit/generator/must_support_test_generator.rb', line 66

def read_interaction
  self.class.read_interaction()
end

#resource_collection_stringObject



96
97
98
# File 'lib/davinci_pas_test_kit/generator/must_support_test_generator.rb', line 96

def resource_collection_string
  'all_scratch_resources'
end

#resource_typeObject



88
89
90
# File 'lib/davinci_pas_test_kit/generator/must_support_test_generator.rb', line 88

def resource_type
  .resource
end

#templateObject



46
47
48
# File 'lib/davinci_pas_test_kit/generator/must_support_test_generator.rb', line 46

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

#test_idObject



74
75
76
# File 'lib/davinci_pas_test_kit/generator/must_support_test_generator.rb', line 74

def test_id
  "pas_#{system}_#{request_type}_#{.reformatted_version}_#{profile_identifier}_must_support_test"
end

#uscdi_list_stringObject



104
105
106
# File 'lib/davinci_pas_test_kit/generator/must_support_test_generator.rb', line 104

def uscdi_list_string
  build_must_support_list_string(true)
end

#verifies_requirementsObject



140
141
142
143
144
145
146
147
# File 'lib/davinci_pas_test_kit/generator/must_support_test_generator.rb', line 140

def verifies_requirements
  case test_id
  when 'pas_server_submit_response_v201_claimresponse_must_support_test'
    ['hl7.fhir.us.davinci-pas_2.0.1@37', 'hl7.fhir.us.davinci-pas_2.0.1@110']
  when 'pas_server_inquire_response_v201_claiminquiryresponse_must_support_test'
    ['hl7.fhir.us.davinci-pas_2.0.1@38']
  end
end