diff --git a/reviewrot/gitlabstack.py b/reviewrot/gitlabstack.py index d711177..65298b6 100644 --- a/reviewrot/gitlabstack.py +++ b/reviewrot/gitlabstack.py @@ -74,12 +74,17 @@ def request_reviews( raise Exception( "Project %s not found for user %s" % (repo_name, user_name) ) + # get merge requests for specified username and project name res = self.get_reviews( uname=user_name, project=project, age=age, show_last_comment=show_last_comment, + image=( + project.avatar_url + or gl.groups.get(project.namespace["id"]).avatar_url + ), ) # extend in case of a non empty result if res: @@ -102,14 +107,19 @@ def request_reviews( for group_project in group_projects: project = gl.projects.get(group_project.id) - res = self.get_reviews(uname=user_name, project=project, age=age) + res = self.get_reviews( + uname=user_name, + project=project, + age=age, + image=project.avatar_url or group.avatar_url, + ) # extend in case of a non empty result if res: response.extend(res) return response - def get_reviews(self, uname, project, age=None, show_last_comment=None): + def get_reviews(self, uname, project, age=None, show_last_comment=None, image=None): """ Fetches merge requests for specified username(groupname) and repo(project) name. @@ -193,9 +203,7 @@ def get_reviews(self, uname, project, age=None, show_last_comment=None): time=mr_date, updated_time=mr_updated_date, comments=mr.user_notes_count, - # XXX - I don't know how to find gitlab avatars - # for now. Can we figure this out later? - image=GitlabReview.logo, + image=image or GitlabReview.logo, last_comment=last_comment, project_name=project.name, project_url=project.web_url, diff --git a/test/gitlab_tests/test_gitlab.py b/test/gitlab_tests/test_gitlab.py index 77071c0..fe1b628 100644 --- a/test/gitlab_tests/test_gitlab.py +++ b/test/gitlab_tests/test_gitlab.py @@ -318,13 +318,14 @@ def test_get_reviews_no_age_with_last_comment( def test_request_reviews_ssl_error_no_repo(self, mock_get_reviews, mock_gitlab): """Test 'request_reviews' function where there is an SSL error and no repos.""" # Set up mock return values and side effects + mock_gitlab_project = MagicMock() mock_gitlab_group = MagicMock(name="mock_gitlab_group") mock_gitlab_group.id = 1 mock_gitlab_group_projects = MagicMock() mock_gitlab_group_projects.projects.list.return_value = [mock_gitlab_group] mock_gitlab_instance = MagicMock(name="mock_gitlab_instance") mock_gitlab_instance.groups.get.return_value = mock_gitlab_group_projects - mock_gitlab_instance.projects.get.return_value = "dummy_project" + mock_gitlab_instance.projects.get.return_value = mock_gitlab_project mock_gitlab_instance.auth.side_effect = SSLError mock_get_reviews.return_value = "1" mock_gitlab.return_value = mock_gitlab_instance @@ -343,7 +344,10 @@ def test_request_reviews_ssl_error_no_repo(self, mock_get_reviews, mock_gitlab): mock_gitlab_instance.groups.get.assert_called_with("dummy_user") mock_gitlab_instance.projects.get.assert_called_with(1) mock_get_reviews.assert_called_with( - uname="dummy_user", project="dummy_project", age=None + uname="dummy_user", + project=mock_gitlab_project, + age=None, + image=mock_gitlab_project.avatar_url, ) self.assertEqual(["1"], response) @@ -411,7 +415,9 @@ def test_request_reviews_with_repo_success(self, mock_get_reviews, mock_gitlab): """Tests 'request_reviews' function where we have repos and no errors.""" # Set up mock return values and side effects mock_gitlab_instance = MagicMock(name="mock_gitlab_instance") - mock_gitlab_instance.projects.get.return_value = "dummy_project" + mock_gitlab_project = MagicMock() + mock_gitlab_instance.projects.get.return_value = mock_gitlab_project + mock_gitlab_instance.projects.namespace.return_value = {"id": 123} mock_gitlab.return_value = mock_gitlab_instance mock_get_reviews.return_value = "1" @@ -431,8 +437,9 @@ def test_request_reviews_with_repo_success(self, mock_get_reviews, mock_gitlab): mock_gitlab_instance.projects.get.assert_called_with("dummy_user/dummy_repo") mock_get_reviews.assert_called_with( uname="dummy_user", - project="dummy_project", + project=mock_gitlab_project, age=None, show_last_comment=None, + image=mock_gitlab_project.avatar_url, ) self.assertEqual(["1"], response)