summaryrefslogtreecommitdiff
path: root/spec/support/integration_test_helper.rb
blob: e05ef43ef3afd95ae1a55ed38f53529a67080ef8 (plain)
1
2
3
4
5
6
7
8
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
35
36
37
38
39
40
41
42
43
module IntegrationTestHelper
  class IntegrationTestRunner
    attr_reader :project_path

    def initialize(project_path = File.join(Dir.pwd, 'tmp', SecureRandom.uuid))
      FileUtils.mkdir_p(project_path)
      @project_path = project_path
    end

    def add_file(name, content = nil)
      full_path = Pathname.new("#{project_path}/#{name}")
      FileUtils.mkdir_p(full_path.dirname)
      IO.write(full_path, block_given? ? yield : content)
    end

    def clone(repo)
      execute({}, "git clone #{repo} #{project_path}")
    end

    def scan(env: {})
      return {} unless execute(env, './bin/test-local', project_path)

      report_path = "#{project_path}/gl-license-management-report.json"
      return {} unless File.exist?(report_path)

      JSON.parse(IO.read(report_path), symbolize_names: true)
    end

    def execute(env = {}, *args)
      Bundler.with_clean_env do
        system(env, *args)
      end
    end

    def cleanup
      FileUtils.rm_rf(project_path) if Dir.exist?(project_path)
    end
  end

  def runner(*args)
    @runner ||= IntegrationTestRunner.new(*args)
  end
end