Module: ONCCertificationG10TestKit::TestProcedureRequirementsManager

Defined in:
lib/onc_certification_g10_test_kit/test_procedure_requirements_manager.rb

Overview

This module ensures that short test ids don’t change

Class Method Summary collapse

Class Method Details

.all_children(runnable) ⇒ Object



8
9
10
11
12
# File 'lib/onc_certification_g10_test_kit/test_procedure_requirements_manager.rb', line 8

def all_children(runnable)
  runnable
    .children
    .flat_map { |child| [child] + all_children(child) }
end

.assign_test_procedure_requirementsObject



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/onc_certification_g10_test_kit/test_procedure_requirements_manager.rb', line 22

def assign_test_procedure_requirements
  all_children(G10CertificationSuite).each do |runnable|
    short_id = get_short_id(runnable)
    test_procedure_requirements = current_procedure_requirements_map[short_id]
    if test_procedure_requirements.present?
      current_requirements = runnable.verifies_requirements
      new_requirements = test_procedure_requirements.map do |req|
        "170.315(g)(10)-test-procedure@#{req}"
      end
      updated_requirements = current_requirements + new_requirements
      runnable.verifies_requirements(*updated_requirements)
    end
  rescue KeyError
    Inferno::Application['logger'].warn(
      "No test procedure map defined for id #{short_id} (from runnable #{runnable.id})"
    )
  end
rescue Errno::ENOENT
  Inferno::Application['logger'].warn('No short id map found')
end

.current_procedure_requirements_mapObject



49
50
51
52
53
54
55
56
57
58
# File 'lib/onc_certification_g10_test_kit/test_procedure_requirements_manager.rb', line 49

def current_procedure_requirements_map
  @current_procedure_requirements_map ||=
    all_children(G10CertificationSuite).each_with_object({}) do |runnable, hash|
      short_id = get_short_id(runnable)
      test_procedure_requirement_list = requirements_for_short_id(short_id)
      next unless test_procedure_requirement_list.present?

      hash[short_id] = test_procedure_requirement_list
    end
end

.get_short_id(runnable) ⇒ Object



43
44
45
46
47
# File 'lib/onc_certification_g10_test_kit/test_procedure_requirements_manager.rb', line 43

def get_short_id(runnable)
  short_id_map.fetch(runnable.id)
rescue KeyError
  Inferno::Application['logger'].warn("No short id defined for #{runnable.id}")
end

.requirements_for_short_id(short_id) ⇒ Object



60
61
62
63
64
65
66
67
68
# File 'lib/onc_certification_g10_test_kit/test_procedure_requirements_manager.rb', line 60

def requirements_for_short_id(short_id)
  test_procedure_definition.sections.each_with_object([]) do |section, requirement_list|
    section.steps.each do |step|
      next unless step.inferno_tests.include?(short_id)

      requirement_list << step.id
    end
  end
end

.short_id_file_pathObject



14
15
16
# File 'lib/onc_certification_g10_test_kit/test_procedure_requirements_manager.rb', line 14

def short_id_file_path
  File.join(__dir__, 'g10_certification_suite_short_id_map.yml')
end

.short_id_mapObject



18
19
20
# File 'lib/onc_certification_g10_test_kit/test_procedure_requirements_manager.rb', line 18

def short_id_map
  @short_id_map ||= YAML.load_file(short_id_file_path)
end

.test_procedure_definitionObject



70
71
72
73
74
75
76
77
78
79
80
# File 'lib/onc_certification_g10_test_kit/test_procedure_requirements_manager.rb', line 70

def test_procedure_definition
  @test_procedure_definition ||=
    Tasks::TestProcedure.new(
      YAML.load_file(
        File.join(
          __dir__,
          'onc_program_procedure.yml'
        )
      ).deep_symbolize_keys
    )
end