Example #1
0
 def setup(self):
     self.cls = BuildInfo('me/myrepo', run_local=True,
                          https_clone_url='https_url',
                          ssh_clone_url='ssh_url')
Example #2
0
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">&nbsp;</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">&nbsp;</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() == '&nbsp;'