aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/test/test_cmd_testbot.rb
blob: d762448d1b4a7aa75f5760a73a1ccf63d58a68b5 (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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
require "pathname"

require "testing_env"
require "dev-cmd/test-bot"

class TestbotCommandTests < Homebrew::TestCase
  def test_resolve_test_tap
    tap = Homebrew.resolve_test_tap
    assert_nil tap, "Should return nil if no tap slug provided"

    slug = "spam/homebrew-eggs"
    url = "https://github.com/#{slug}.git"
    environments = [
      { "TRAVIS_REPO_SLUG" => slug },
      { "UPSTREAM_BOT_PARAMS" => "--tap=#{slug}" },
      { "UPSTREAM_BOT_PARAMS" => "--tap=spam/eggs" },
      { "UPSTREAM_GIT_URL" => url },
      { "GIT_URL" => url },
    ]

    predicate = proc do |message|
      tap = Homebrew.resolve_test_tap
      assert_kind_of Tap, tap, message
      assert_equal tap.user, "spam", message
      assert_equal tap.repo, "eggs", message
    end

    environments.each do |pair|
      with_environment(pair) do
        predicate.call pair.to_s
      end
    end

    ARGV.expects(:value).with("tap").returns(slug)
    predicate.call "ARGV"
  end
end

class TestbotStepTests < Homebrew::TestCase
  def run
    [nil, "1"].each do |travis|
      with_environment("TRAVIS" => travis) { super }
    end
    self
  end

  def teardown
    unless passed?
      raise "INFO: Previous test failed with ENV['TRAVIS'] = #{ENV["TRAVIS"].inspect}"
    end
  end

  def stub_test_instance
    stub(
      category: "stub",
      log_root: Pathname.pwd
    )
  end

  def test_step_run_measures_execution_time
    step = Homebrew::Step.new stub_test_instance, %w[sleep 0.1]
    shutup do
      step.run
    end
    assert_operator step.time, :>, 0.1
    assert_operator step.time, :<, 1
    assert_equal step.passed?, true
  end

  def test_step_run_observes_failure
    step = Homebrew::Step.new stub_test_instance, ["false", ""]
    shutup do
      step.run
    end
    assert_equal step.passed?, false
    assert_equal step.failed?, true
  end

  def test_step_dry_run_is_dry_and_always_succeeds
    step = Homebrew::Step.new stub_test_instance, ["false", ""]
    ARGV.expects(:include?).with("--dry-run").returns(true)
    step.stubs(:fork).raises("Dry run isn't dry!")
    shutup do
      step.run
    end
    assert_equal step.passed?, true
  end

  def test_step_fail_fast_exits_on_failure
    step = Homebrew::Step.new stub_test_instance, ["false", ""]
    ARGV.stubs(:include?).returns(false)
    ARGV.expects(:include?).with("--fail-fast").returns(true)
    step.expects(:exit).with(1).returns(nil)
    shutup do
      step.run
    end
    assert_equal step.passed?, false
  end
end