class TestBuildInfo(object): def setup(self): self.cls = BuildInfo('me/myrepo', run_local=True, https_clone_url='https_url', ssh_clone_url='ssh_url') def test_is_done_travis_true(self): self.cls.travis_build_id = 1 self.cls.travis_build_finished = True self.cls.run_local = False assert self.cls.is_done is True def test_is_done_local_true(self): self.cls.travis_build_id = 1 self.cls.travis_build_finished = True self.cls.run_local = True self.cls.local_build_finished = True assert self.cls.is_done is True def test_is_done_local_false(self): self.cls.travis_build_id = 1 self.cls.travis_build_finished = True self.cls.run_local = True assert self.cls.is_done is False def test_is_done_travis_false(self): self.cls.travis_build_id = 1 self.cls.run_local = False assert self.cls.is_done is False def test_set_travis_trigger_error(self): ex = Exception("foo") self.cls.set_travis_trigger_error(ex) assert self.cls.travis_trigger_error == ex def test_set_travis_build_ids(self): self.cls.set_travis_build_ids(123, 456) assert self.cls.travis_last_build_id == 123 assert self.cls.travis_build_id == 456 def test_set_travis_build_finished(self): bld = Mock() type(bld).state = 'state' type(bld).color = 'color' type(bld).duration = 123 type(bld).errored = False type(bld).number = 456 type(bld).id = 789 with patch('%s.Travis.url_for_build' % pbm) as mock_url: mock_url.return_value = 'mybuildurl' self.cls.set_travis_build_finished(bld) assert self.cls.travis_build_result == bld assert self.cls.travis_build_state == 'state' assert self.cls.travis_build_color == 'color' assert self.cls.travis_build_duration == 123 assert self.cls.travis_build_errored is False assert self.cls.travis_build_number == 456 assert self.cls.travis_build_url == 'mybuildurl' assert mock_url.mock_calls == [ call('me/myrepo', 789) ] def test_set_local_build(self): self.cls.set_local_build(return_code=2, output='myoutput') assert self.cls.local_build_return_code == 2 assert self.cls.local_build_output == 'myoutput' assert self.cls.local_build_exception is None assert self.cls.local_build_finished is True assert self.cls.local_build_duration is None assert self.cls.local_build_start is None assert self.cls.local_build_end is None assert self.cls.local_build_repo_str is None def test_set_local_build_duration(self): s = datetime(2015, 1, 1, 1, 10, 11) e = datetime(2015, 1, 1, 1, 12, 11) self.cls.set_local_build(return_code=2, output='myoutput', start_dt=s, end_dt=e, repo_str='myrepostr') assert self.cls.local_build_return_code == 2 assert self.cls.local_build_output == 'myoutput' assert self.cls.local_build_exception is None assert self.cls.local_build_finished is True assert self.cls.local_build_start == s assert self.cls.local_build_end == e assert self.cls.local_build_duration == timedelta(0, 120) assert self.cls.local_build_repo_str == 'myrepostr' def test_set_local_build_exception(self): ex = Exception("foo") tb = Mock() ex_type = Mock() self.cls.set_local_build(excinfo=ex, ex_type=ex_type, traceback=tb) assert self.cls.local_build_return_code is None assert self.cls.local_build_output is None assert self.cls.local_build_exception == ex assert self.cls.local_build_ex_type == ex_type assert self.cls.local_build_traceback == tb assert self.cls.local_build_finished is True def test_set_dry_run(self): self.cls.set_dry_run() assert self.cls.slug == 'me/myrepo' assert self.cls.https_clone_url == 'https_url' assert self.cls.ssh_clone_url == 'ssh_url' assert self.cls.run_travis is False assert self.cls.travis_trigger_error is None assert self.cls.travis_build_id == -1 assert self.cls.travis_build_result is None assert self.cls.local_build_return_code is None assert self.cls.local_build_output is None assert self.cls.local_build_exception is None assert self.cls.local_build_ex_type is None assert self.cls.local_build_traceback is None assert self.cls.local_build_finished is False assert self.cls.local_build_start is None assert self.cls.local_build_end is None assert self.cls.local_build_duration is None assert self.cls.local_build_s3_link is None assert self.cls.run_local is True assert self.cls.travis_build_result is None assert self.cls.travis_build_state == 'DRY RUN' assert self.cls.travis_build_color == 'black' assert self.cls.travis_build_duration == -1 assert self.cls.travis_build_errored is False assert self.cls.travis_build_number == -1 assert self.cls.travis_build_url == '#' assert self.cls.travis_build_finished is True assert self.cls.local_build_repo_str is None def test_local_build_output_str_no_duration(self): self.cls.local_build_output = 'my output' self.cls.local_build_return_code = 3 self.cls.local_build_duration = None res = self.cls.local_build_output_str assert res == "=> Build of me/myrepo \nmy output\n\n==> Build exited 3" def test_local_build_output_str(self): self.cls.local_build_output = 'my output' self.cls.slug = 'foo/bar' self.cls.local_build_return_code = 3 self.cls.local_build_start = datetime(2015, 1, 1, 0, 0, 0) self.cls.local_build_end = datetime(2015, 1, 1, 1, 2, 3) self.cls.local_build_duration = timedelta(hours=1, minutes=2, seconds=3) self.cls.local_build_repo_str = 'myrepostr' res = self.cls.local_build_output_str expected = "=> Build of foo/bar myrepostr starts at " \ "2015-01-01 00:00:00\n" \ "my output\n\n" \ "=> Build ends at 2015-01-01 01:02:03\n" \ "==> Build exited 3 in 1:02:03" assert res == expected def test_local_build_output_str_exception(self): # get an exception with a traceback try: raise Exception("foo") except Exception: ex_type, ex, tb = sys.exc_info() self.cls.local_build_exception = ex self.cls.local_build_ex_type = ex_type self.cls.local_build_traceback = tb res = self.cls.local_build_output_str assert res == "Build raised exception:\n" + ''.join( traceback.format_exception(ex_type, ex, tb) ) def test_set_local_build_s3_link(self): self.cls.set_local_build_s3_link('foo') assert self.cls.local_build_s3_link == 'foo' def test_make_travis_html(self): self.cls.travis_build_url = 'myurl' self.cls.travis_build_number = 123 self.cls.travis_build_duration = 1057 # 0:17:37 with patch('%s.travis_build_icon' % pb, new_callable=PropertyMock) as mock_icon: mock_icon.return_value = 'foo' res = self.cls.make_travis_html() expected = '<span class="icon foo"> </span>' expected += '<a href="myurl">#123</a> ran in 0:17:37' assert res == expected def test_make_travis_html_no_build(self): with patch('%s.travis_build_icon' % pb, new_callable=PropertyMock) as mock_icon: mock_icon.return_value = 'foo' res = self.cls.make_travis_html() assert res == 'n/a' def test_travis_build_icon_canceled(self): self.cls.travis_build_state = 'canceled' assert self.cls.travis_build_icon == 'errored' def test_travis_build_icon_errored(self): self.cls.travis_build_state = 'errored' assert self.cls.travis_build_icon == 'errored' def test_travis_build_icon_failed(self): self.cls.travis_build_state = 'failed' assert self.cls.travis_build_icon == 'failed' def test_travis_build_icon_passed(self): self.cls.travis_build_state = 'passed' assert self.cls.travis_build_icon == 'passed' def test_travis_build_icon_other(self): self.cls.travis_build_state = 'foo' assert self.cls.travis_build_icon == '' def test_local_build_icon_exception(self): self.cls.local_build_exception = Mock() assert self.cls.local_build_icon == 'errored' def test_local_build_icon_passed(self): self.cls.local_build_return_code = 0 assert self.cls.local_build_icon == 'passed' def test_local_build_icon_failed(self): self.cls.local_build_return_code = 4 assert self.cls.local_build_icon == 'failed' def test_make_local_build_html(self): self.cls.run_local = True self.cls.local_build_s3_link = 's3link' self.cls.local_build_duration = timedelta(hours=1, minutes=2, seconds=3) with patch('%s.local_build_icon' % pb, new_callable=PropertyMock) as mock_icon: mock_icon.return_value = 'bar' res = self.cls.make_local_build_html() assert res == '<span class="icon bar"> </span>' \ '<a href="s3link">Local Build</a> ran in 1:02:03' def test_make_local_build_html_run_local_false(self): self.cls.run_local = False assert self.cls.make_local_build_html() == ' '