[PATCH 2 of 2] api: add possibility to optionally return comments from get_changeset()
Manuel Jacob
me at manueljacob.de
Wed Mar 29 10:06:08 UTC 2023
# HG changeset patch
# User Manuel Jacob <me at manueljacob.de>
# Date 1680083947 -7200
# Wed Mar 29 11:59:07 2023 +0200
# Node ID d2166e7ea65797fdccb548cd9cf416c8ed02fc6b
# Parent 2704d3ca4210e14e559b2a1f23dacdd988989533
# EXP-Topic api-comments
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
@@ -2323,7 +2323,7 @@
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):
repo = get_repo_or_error(repoid)
if not HasRepoPermissionLevel('read')(repo.repo_name):
raise JSONRPCError('Access denied to repo %s' % repo.repo_name)
@@ -2338,6 +2338,16 @@
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
@@ -2374,6 +2374,8 @@
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")
@@ -2384,6 +2386,8 @@
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 = {
@@ -2393,6 +2397,47 @@
}
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
@@ -327,6 +327,11 @@
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
More information about the kallithea-general
mailing list