# HG changeset patch # User Manuel Jacob # Date 2023-03-29 09:59:07 # Node ID a136383459ef8a8b1938d5282b379138b8480773 # Parent ea1a656702ab481e45f6651f0b5f914cdc716c89 api: add possibility to optionally return comments from get_changeset() diff --git a/kallithea/controllers/api/api.py b/kallithea/controllers/api/api.py --- a/kallithea/controllers/api/api.py +++ b/kallithea/controllers/api/api.py @@ -1847,7 +1847,7 @@ class ApiController(JSONRPCController): raise JSONRPCError('Repository is empty') # permission check inside - def get_changeset(self, repoid, raw_id, with_reviews=False): + def get_changeset(self, repoid, raw_id, with_reviews=False, with_comments=False, with_inline_comments=False): """ TODO """ @@ -1865,6 +1865,16 @@ class ApiController(JSONRPCController): repo.repo_name, changeset.raw_id) info["reviews"] = reviews + if with_comments: + comments = ChangesetCommentsModel().get_comments( + repo.repo_id, changeset.raw_id) + info["comments"] = comments + + if with_inline_comments: + inline_comments = ChangesetCommentsModel().get_inline_comments( + repo.repo_id, changeset.raw_id) + info["inline_comments"] = inline_comments + return info # permission check inside diff --git a/kallithea/tests/api/api_base.py b/kallithea/tests/api/api_base.py --- a/kallithea/tests/api/api_base.py +++ b/kallithea/tests/api/api_base.py @@ -2478,6 +2478,8 @@ class _BaseTestApi(object): result = ext_json.loads(response.body)["result"] assert result["raw_id"] == self.TEST_REVISION assert "reviews" not in result + assert "comments" not in result + assert "inline_comments" not in result def test_api_get_changeset_with_reviews(self): reviewobjs = fixture.review_changeset(self.REPO, self.TEST_REVISION, "approved") @@ -2488,6 +2490,8 @@ class _BaseTestApi(object): result = ext_json.loads(response.body)["result"] assert result["raw_id"] == self.TEST_REVISION assert "reviews" in result + assert "comments" not in result + assert "inline_comments" not in result assert len(result["reviews"]) == 1 review = result["reviews"][0] expected = { @@ -2497,6 +2501,47 @@ class _BaseTestApi(object): } assert review == expected + def test_api_get_changeset_with_comments(self): + commentobj = fixture.add_changeset_comment(self.REPO, self.TEST_REVISION, "example changeset comment") + id_, params = _build_data(self.apikey, 'get_changeset', + repoid=self.REPO, raw_id=self.TEST_REVISION, + with_comments=True) + response = api_call(self, params) + result = ext_json.loads(response.body)["result"] + assert result["raw_id"] == self.TEST_REVISION + assert "reviews" not in result + assert "comments" in result + assert "inline_comments" not in result + comment = result["comments"][-1] + expected = { + 'comment_id': commentobj.comment_id, + 'text': 'example changeset comment', + 'username': 'test_admin', + } + assert comment == expected + + def test_api_get_changeset_with_inline_comments(self): + commentobj = fixture.add_changeset_comment(self.REPO, self.TEST_REVISION, "example inline comment", f_path='vcs/__init__.py', line_no="n3") + id_, params = _build_data(self.apikey, 'get_changeset', + repoid=self.REPO, raw_id=self.TEST_REVISION, + with_inline_comments=True) + response = api_call(self, params) + result = ext_json.loads(response.body)["result"] + assert result["raw_id"] == self.TEST_REVISION + assert "reviews" not in result + assert "comments" not in result + assert "inline_comments" in result + expected = [ + ['vcs/__init__.py', { + 'n3': [{ + 'comment_id': commentobj.comment_id, + 'text': 'example inline comment', + 'username': 'test_admin', + }] + }] + ] + assert result["inline_comments"] == expected + def test_api_get_changeset_that_does_not_exist(self): """ Fetch changeset status for non-existant changeset. revision id is the above git hash used in the test above with the diff --git a/kallithea/tests/fixture.py b/kallithea/tests/fixture.py --- a/kallithea/tests/fixture.py +++ b/kallithea/tests/fixture.py @@ -329,6 +329,11 @@ class Fixture(object): meta.Session().commit() return csm + def add_changeset_comment(self, repo, revision, text, author=TEST_USER_ADMIN_LOGIN, f_path=None, line_no=None): + comment = ChangesetCommentsModel().create(text, repo, author, revision=revision, f_path=f_path, line_no=line_no, send_email=False) + meta.Session().commit() + return comment + def create_pullrequest(self, testcontroller, repo_name, pr_src_rev, pr_dst_rev, title='title'): org_ref = 'branch:stable:%s' % pr_src_rev other_ref = 'branch:default:%s' % pr_dst_rev