Class: USCoreTestKit::Generator::MustSupportTestGenerator

Inherits:
Object
  • Object
show all
Defined in:
lib/us_core_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) ⇒ MustSupportTestGenerator

Returns a new instance of MustSupportTestGenerator.



17
18
19
20
# File 'lib/us_core_test_kit/generator/must_support_test_generator.rb', line 17

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

Instance Attribute Details

#base_output_dirObject

Returns the value of attribute base_output_dir.



15
16
17
# File 'lib/us_core_test_kit/generator/must_support_test_generator.rb', line 15

def base_output_dir
  @base_output_dir
end

#group_metadataObject

Returns the value of attribute group_metadata.



15
16
17
# File 'lib/us_core_test_kit/generator/must_support_test_generator.rb', line 15

def 
  
end

Class Method Details

.generate(ig_metadata, base_output_dir) ⇒ Object



8
9
10
11
12
# File 'lib/us_core_test_kit/generator/must_support_test_generator.rb', line 8

def generate(, base_output_dir)
  .groups
    .reject { |group| SpecialCases.exclude_group? group }
    .each { |group| new(group, base_output_dir).generate }
end

Instance Method Details

#base_output_file_nameObject



30
31
32
# File 'lib/us_core_test_kit/generator/must_support_test_generator.rb', line 30

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

#build_must_support_list_string(uscdi_only) ⇒ Object



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/us_core_test_kit/generator/must_support_test_generator.rb', line 78

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] }

  choice_names = []
  .must_supports[:choices]&.map do |choice|
    next unless choice[:uscdi_only].presence == uscdi_only.presence

    combined = []
    if choice.key?(:paths)
      choice[:paths].each { |path| element_names.delete("#{resource_type}.#{path}") }
      combined << choice[:paths].map { |path| "#{resource_type}.#{path}" }.join(' or ')
    end

    if choice.key?(:extension_ids)
      choice[:extension_ids].each { |extesnion_id| extension_names.delete(extesnion_id) }
      combined << choice[:extension_ids].join(' or ')
    end

    if choice.key?(:elements)
      choice[:elements].each { |element| element_names.delete("#{resource_type}.#{element[:path]}") }
      combined << choice[:elements].map { |element|
        "#{resource_type}.#{element[:path]}:#{element[:fixed_value]}"
      }.join(' or ')
    end

    choice_names << combined.join(' or ') if combined.any?
  end || []

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

#class_nameObject



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

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

#generateObject



124
125
126
127
128
129
130
131
132
# File 'lib/us_core_test_kit/generator/must_support_test_generator.rb', line 124

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



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

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

#must_support_list_stringObject



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

def must_support_list_string
  build_must_support_list_string(false)
end

#outputObject



26
27
28
# File 'lib/us_core_test_kit/generator/must_support_test_generator.rb', line 26

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

#output_file_directoryObject



34
35
36
# File 'lib/us_core_test_kit/generator/must_support_test_generator.rb', line 34

def output_file_directory
  File.join(base_output_dir, profile_identifier)
end

#output_file_nameObject



38
39
40
# File 'lib/us_core_test_kit/generator/must_support_test_generator.rb', line 38

def output_file_name
  File.join(output_file_directory, base_output_file_name)
end

#profile_identifierObject



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

def profile_identifier
  Naming.snake_case_for_profile()
end

#read_interactionObject



42
43
44
# File 'lib/us_core_test_kit/generator/must_support_test_generator.rb', line 42

def read_interaction
  self.class.read_interaction()
end

#resource_collection_stringObject



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

def resource_collection_string
  'all_scratch_resources'
end

#resource_typeObject



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

def resource_type
  .resource
end

#templateObject



22
23
24
# File 'lib/us_core_test_kit/generator/must_support_test_generator.rb', line 22

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

#test_idObject



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

def test_id
  "us_core_#{group_metadata.reformatted_version}_#{profile_identifier}_must_support_test"
end

#uscdi_list_stringObject



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

def uscdi_list_string
  build_must_support_list_string(true)
end