diff --git a/lib/boxen/reporter.rb b/lib/boxen/reporter.rb index 8b88f33..d290246 100644 --- a/lib/boxen/reporter.rb +++ b/lib/boxen/reporter.rb @@ -32,12 +32,16 @@ module Boxen end def record_failure + return unless issues? + title = "Failed for #{config.user}" config.api.create_issue(config.reponame, title, failure_details, :labels => [failure_label]) end def close_failures + return unless issues? + comment = "Succeeded at version #{checkout.sha}." failures.each do |issue| config.api.add_comment(config.reponame, issue.number, comment) @@ -46,6 +50,8 @@ module Boxen end def failures + return [] unless issues? + issues = config.api.list_issues(config.reponame, :state => 'open', :labels => failure_label, :creator => config.login) issues.reject! {|i| i.labels.collect(&:name).include?(ongoing_label)} @@ -86,5 +92,12 @@ module Boxen @ongoing_label ||= 'ongoing' end attr_writer :ongoing_label + + def issues? + return unless config.reponame + return if config.reponame == 'boxen/our-boxen' + + config.api.repository(config.reponame).has_issues + end end end diff --git a/test/boxen_reporter_test.rb b/test/boxen_reporter_test.rb index b1c3c88..bbed771 100644 --- a/test/boxen_reporter_test.rb +++ b/test/boxen_reporter_test.rb @@ -49,6 +49,8 @@ class BoxenReporterTest < Boxen::Test end def test_record_failure + @reporter.stubs(:issues?).returns(true) + details = 'Everything went wrong.' @reporter.stubs(:failure_details).returns(details) @@ -63,6 +65,15 @@ class BoxenReporterTest < Boxen::Test @reporter.record_failure end + def test_record_failure_no_issues + @reporter.stubs(:issues?).returns(false) + + @config.api = api = mock('api') + api.expects(:create_issue).never + + @reporter.record_failure + end + def test_failure_label default = 'failure' assert_equal default, @reporter.failure_label @@ -139,6 +150,8 @@ class BoxenReporterTest < Boxen::Test Label = Struct.new(:name) def test_close_failures + @reporter.stubs(:issues?).returns(true) + @config.reponame = repo = 'some/repo' issues = Array.new(3) { |i| Issue.new(i*2 + 2) } @@ -156,7 +169,21 @@ class BoxenReporterTest < Boxen::Test @reporter.close_failures end + def test_close_failures_no_issues + @reporter.stubs(:issues?).returns(false) + + @reporter.expects(:failures).never + + @config.api = api = mock('api') + api.expects(:add_comment).never + api.expects(:close_issue).never + + @reporter.close_failures + end + def test_failures + @reporter.stubs(:issues?).returns(true) + @config.reponame = repo = 'some/repo' @config.login = user = 'hapless' @@ -180,4 +207,36 @@ class BoxenReporterTest < Boxen::Test assert_equal issues.values_at(0,1,3), @reporter.failures end + + def test_failures_no_issues + @reporter.stubs(:issues?).returns(false) + + @config.api = api = mock('api') + api.expects(:list_issues).never + + assert_equal [], @reporter.failures + end + + RepoInfo = Struct.new(:has_issues) + def test_issues? + @config.reponame = repo = 'some/repo' + + repo_info = RepoInfo.new(true) + + @config.api = api = mock('api') + api.stubs(:repository).with(repo).returns(repo_info) + assert @reporter.issues? + + repo_info = RepoInfo.new(false) + api.stubs(:repository).with(repo).returns(repo_info) + refute @reporter.issues? + + @config.stubs(:reponame) # to ensure the returned value is nil + api.stubs(:repository).returns(RepoInfo.new(true)) + refute @reporter.issues? + + @config.stubs(:reponame).returns('boxen/our-boxen') # our main public repo + api.stubs(:repository).returns(RepoInfo.new(true)) + refute @reporter.issues? + end end