def setup(self): self.mock_github = Mock(spec_set=Github) with patch('%s.__init__' % pb, Mock(return_value=None)): self.cls = GitHubWrapper() self.cls.github = self.mock_github self.cls.token = 'mytoken'
class TestGitHubWrapper(object): def setup(self): self.mock_github = Mock(spec_set=Github) with patch('%s.__init__' % pb, Mock(return_value=None)): self.cls = GitHubWrapper() self.cls.github = self.mock_github self.cls.token = 'mytoken' def test_find_projects(self): def se_404(fname): raise UnknownObjectException(404, 'some data') mock_repo1 = Mock(spec_set=Repository) type(mock_repo1).full_name = 'myuser/foo' mock_repo1.get_file_contents.return_value = True type(mock_repo1).clone_url = 'cloneurl' type(mock_repo1).ssh_url = 'sshurl' mock_repo2 = Mock(spec_set=Repository) type(mock_repo2).full_name = 'myuser/bar' mock_repo3 = Mock(spec_set=Repository) type(mock_repo3).full_name = 'myuser/baz' mock_repo3.get_file_contents.side_effect = se_404 with patch('%s.get_repos' % pb) as mock_get_repos, \ patch('%s.repo_commit_in_last_day' % pb) as mock_last_day, \ patch('%s.logger' % pbm) as mock_logger: mock_get_repos.return_value = [ mock_repo1, mock_repo2, mock_repo3 ] mock_last_day.side_effect = [False, True, False] res = self.cls.find_projects() assert res == { 'myuser/foo': ('cloneurl', 'sshurl') } assert mock_logger.mock_calls == [ call.debug("Skipping repository '%s' - commit on master in " "last day", 'myuser/bar'), call.debug("Skipping repository '%s' - .rebuildbot.sh not " "present", 'myuser/baz'), call.debug("Found %d repos: %s", 1, ['myuser/foo']) ] def test_find_projects_no_date_check(self): def se_404(fname): raise UnknownObjectException(404, 'some data') mock_repo1 = Mock(spec_set=Repository) type(mock_repo1).full_name = 'myuser/foo' mock_repo1.get_file_contents.return_value = True type(mock_repo1).clone_url = 'cloneurl' type(mock_repo1).ssh_url = 'sshurl' mock_repo2 = Mock(spec_set=Repository) type(mock_repo2).full_name = 'myuser/bar' mock_repo2.get_file_contents.return_value = True type(mock_repo2).clone_url = 'cloneurl2' type(mock_repo2).ssh_url = 'sshurl2' mock_repo3 = Mock(spec_set=Repository) type(mock_repo3).full_name = 'myuser/baz' mock_repo3.get_file_contents.side_effect = se_404 with patch('%s.get_repos' % pb) as mock_get_repos, \ patch('%s.repo_commit_in_last_day' % pb) as mock_last_day, \ patch('%s.logger' % pbm) as mock_logger: mock_get_repos.return_value = [ mock_repo1, mock_repo2, mock_repo3 ] mock_last_day.side_effect = [False, True, False] res = self.cls.find_projects(date_check=False) assert res == { 'myuser/foo': ('cloneurl', 'sshurl'), 'myuser/bar': ('cloneurl2', 'sshurl2'), } assert mock_logger.mock_calls == [ call.debug("Skipping repository '%s' - .rebuildbot.sh not " "present", 'myuser/baz'), call.debug("Found %d repos: %s", 2, ['myuser/bar', 'myuser/foo']) ] def test_get_project_config(self): mock_repo1 = Mock(spec_set=Repository) type(mock_repo1).full_name = 'myuser/foo' mock_repo1.get_file_contents.return_value = True type(mock_repo1).clone_url = 'cloneurl' type(mock_repo1).ssh_url = 'sshurl' self.cls.github.get_repo.return_value = mock_repo1 res = self.cls.get_project_config('me/myrepo') assert res == ('cloneurl', 'sshurl') assert self.cls.github.mock_calls == [ call.get_repo('me/myrepo'), call.get_repo().get_file_contents('.rebuildbot.sh', ref='master') ] assert mock_repo1.mock_calls == [ call.get_file_contents('.rebuildbot.sh', ref='master') ] def test_get_project_config_404(self): def se_404(fname, ref='master'): raise UnknownObjectException(404, 'some data') mock_repo1 = Mock(spec_set=Repository) type(mock_repo1).full_name = 'myuser/foo' mock_repo1.get_file_contents.side_effect = se_404 self.cls.github.get_repo.return_value = mock_repo1 res = self.cls.get_project_config('me/myrepo') assert res == (None, None) assert self.cls.github.mock_calls == [ call.get_repo('me/myrepo'), call.get_repo().get_file_contents('.rebuildbot.sh', ref='master') ] assert mock_repo1.mock_calls == [ call.get_file_contents('.rebuildbot.sh', ref='master') ] def test_get_repos(self): mock_user = Mock(spec_set=AuthenticatedUser) type(mock_user).login = '******' mock_repo1 = Mock(spec_set=Repository) type(mock_repo1).full_name = 'myuser/foo' type(mock_repo1).owner = Mock(login='******') mock_repo2 = Mock(spec_set=Repository) type(mock_repo2).full_name = 'someorg/foo' type(mock_repo2).owner = Mock(login='******') mock_repo3 = Mock(spec_set=Repository) type(mock_repo3).full_name = 'myuser/bar' type(mock_repo3).owner = Mock(login='******') mock_user.get_repos.return_value = [mock_repo1, mock_repo2, mock_repo3] self.cls.github.get_user.return_value = mock_user res = self.cls.get_repos() assert res == [mock_repo1, mock_repo3] @freeze_time('2015-01-10 12:13:14') def test_repo_commit_in_last_day_false(self): mock_repo = Mock(spec_set=Repository) type(mock_repo).full_name = 'myuser/foo' type(mock_repo).owner = Mock(login='******') mock_author = Mock(spec_set=GitAuthor) type(mock_author).date = datetime.datetime(2015, 1, 1, 2, 3, 4) mock_commit_commit = Mock(spec_set=GitCommit) type(mock_commit_commit).author = mock_author mock_commit = Mock(spec_set=Commit) type(mock_commit).sha = 'myCommitSHA' type(mock_commit).commit = mock_commit_commit mock_branch = Mock(spec_set=Branch) type(mock_branch).commit = mock_commit mock_repo.get_branch.return_value = mock_branch res = self.cls.repo_commit_in_last_day(mock_repo) assert res is False assert mock_repo.mock_calls == [call.get_branch('master')] @freeze_time('2015-01-10 12:13:14') def test_repo_commit_in_last_day_true(self): mock_repo = Mock(spec_set=Repository) type(mock_repo).full_name = 'myuser/foo' type(mock_repo).owner = Mock(login='******') mock_author = Mock(spec_set=GitAuthor) type(mock_author).date = datetime.datetime(2015, 1, 10, 10, 1, 2) mock_commit_commit = Mock(spec_set=GitCommit) type(mock_commit_commit).author = mock_author mock_commit = Mock(spec_set=Commit) type(mock_commit).sha = 'myCommitSHA' type(mock_commit).commit = mock_commit_commit mock_branch = Mock(spec_set=Branch) type(mock_branch).commit = mock_commit mock_repo.get_branch.return_value = mock_branch res = self.cls.repo_commit_in_last_day(mock_repo) assert res is True assert mock_repo.mock_calls == [call.get_branch('master')] @freeze_time('2015-01-10 12:13:14') def test_repo_commit_in_last_day_exception(self): def se_exc(foo): raise GithubException("foo", "bar") mock_repo = Mock(spec_set=Repository) type(mock_repo).full_name = 'myuser/foo' type(mock_repo).owner = Mock(login='******') mock_repo.get_branch.side_effect = se_exc with patch('%s.logger' % pbm) as mock_logger: res = self.cls.repo_commit_in_last_day(mock_repo) assert res is True assert mock_repo.mock_calls == [call.get_branch('master')] assert mock_logger.mock_calls == [ call.exception("Unable to get branch %s for repo %s", 'master', 'myuser/foo') ]