Module: PDQTest::Rspec

Defined in:
lib/pdqtest/rspec.rb

Constant Summary collapse

SPEC_DIR =
'./spec'
SPEC_CLASSES_DIR =
"#{SPEC_DIR}/classes"
MODULE_CACHE_DIR =
"#{Util::app_dir}/cache/modules"

Class Method Summary collapse

Class Method Details

.class2specfile(c) ⇒ Object



45
46
47
48
# File 'lib/pdqtest/rspec.rb', line 45

def self.class2specfile(c)
  pp = Puppet::class2filename(c)
  pp.gsub(Puppet::MANIFESTS_DIR, SPEC_CLASSES_DIR).gsub('.pp', '_spec.rb')
end

.gen_specsObject



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/pdqtest/rspec.rb', line 50

def self.gen_specs
  classes = PDQTest::Puppet::find_classes

  classes.each { |classname|
    spec_file = class2specfile(classname)
    if File.exists?(spec_file)
      Escort::Logger.output.puts "Skipped #{classname} - tests already exist at #{spec_file}"
    else
      # first ensure any nested directories exist
      base_dir = File.dirname(spec_file)
      if ! Dir.exists?(base_dir)
        FileUtils.mkdir_p(base_dir)
      end

      # process the rspec template into a new file
      template = File.read(Util::resource_path(File.join('templates', 'rspec.rb.erb')))
      testcase = ERB.new(template, nil, '-').result(binding)
      File.write(spec_file, testcase)
    end
  }
end

.runObject



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/pdqtest/rspec.rb', line 17

def self.run
  if ! Dir.exists?(MODULE_CACHE_DIR)
    FileUtils.mkdir_p(MODULE_CACHE_DIR)
  end

  PDQTest::Emoji.emoji_message("🐌", "I'm downloading The Internet, please hold...")
  cmd = "LIBRARIAN_PUPPET_TMP=#{MODULE_CACHE_DIR} bundle exec librarian-puppet install --path ./spec/fixtures/modules --destructive"
  status = system(cmd)
  if status
    PDQTest::Puppet.git_fixtures.each { |extra_mod_install_cmd|
      if status
        cmd = "bundle exec #{extra_mod_install_cmd}"
        status &= system(cmd)
      end
      if ! status
        Escort::Logger.error.error "Install git fixtures failed: #{cmd}"
      end
    }
    if status
      status &= system("bundle exec rake spec")
    end
  else
    Escort::Logger.error.error "Librarian command failed: #{cmd}"
  end
  PDQTest::Emoji.partial_status(status, 'RSpec-Puppet')
  status
end