[PATCH 1 of 2] tests: add basic tests for comment model

Thomas De Schampheleire patrickdepinguin at gmail.com
Thu Dec 27 11:25:38 UTC 2018


# HG changeset patch
# User Thomas De Schampheleire <thomas.de_schampheleire at nokia.com>
# Date 1545853924 -3600
#      Wed Dec 26 20:52:04 2018 +0100
# Node ID 1235dd8c18cb1f3fe525a7997effe23acba6de94
# Parent  f5841b61a5821094faf033b13400d58f5d372199
tests: add basic tests for comment model

diff --git a/kallithea/tests/models/test_comments.py b/kallithea/tests/models/test_comments.py
new file mode 100644
--- /dev/null
+++ b/kallithea/tests/models/test_comments.py
@@ -0,0 +1,155 @@
+from kallithea.tests.base import *
+from kallithea.model.comment import ChangesetCommentsModel
+from kallithea.model.db import Repository
+
+from tg.util.webtest import test_context
+
+class TestComments(TestController):
+
+    def _check_comment_count(self, repo_id, revision, expected_len_comments, expected_len_inline_comments):
+        comments = ChangesetCommentsModel().get_comments(repo_id,
+                revision=revision)
+        assert len(comments) == expected_len_comments
+        inline_comments = ChangesetCommentsModel().get_inline_comments(repo_id,
+                revision=revision)
+        assert len(inline_comments) == expected_len_inline_comments
+
+        return comments, inline_comments
+
+    def test_create_delete_general_comment(self):
+        with test_context(self.app):
+            repo_id = Repository.get_by_repo_name(HG_REPO).repo_id
+            revision = '9a7b4ff9e8b40bbda72fc75f162325b9baa45cda'
+
+            self._check_comment_count(repo_id, revision,
+                    expected_len_comments=0, expected_len_inline_comments=0)
+
+            text = u'a comment'
+            new_comment = ChangesetCommentsModel().create(
+                    text=text,
+                    repo=HG_REPO,
+                    author=TEST_USER_REGULAR_LOGIN,
+                    revision=revision,
+                    send_email=False)
+
+            self._check_comment_count(repo_id, revision,
+                    expected_len_comments=1, expected_len_inline_comments=0)
+
+            ChangesetCommentsModel().delete(new_comment)
+
+            self._check_comment_count(repo_id, revision,
+                    expected_len_comments=0, expected_len_inline_comments=0)
+
+    def test_create_delete_inline_comment(self):
+        with test_context(self.app):
+            repo_id = Repository.get_by_repo_name(HG_REPO).repo_id
+            revision = '9a7b4ff9e8b40bbda72fc75f162325b9baa45cda'
+
+            self._check_comment_count(repo_id, revision,
+                    expected_len_comments=0, expected_len_inline_comments=0)
+
+            text = u'an inline comment'
+            f_path = u'vcs/tests/base.py'
+            line_no = u'n50'
+            new_comment = ChangesetCommentsModel().create(
+                    text=text,
+                    repo=HG_REPO,
+                    author=TEST_USER_REGULAR_LOGIN,
+                    revision=revision,
+                    f_path=f_path,
+                    line_no=line_no,
+                    send_email=False)
+
+            comments, inline_comments = self._check_comment_count(repo_id, revision,
+                    expected_len_comments=0, expected_len_inline_comments=1)
+            # inline_comments is a list of tuples (file_path, dict)
+            # where the dict keys are line numbers and values are lists of comments
+            assert inline_comments[0][0] == f_path
+            assert len(inline_comments[0][1]) == 1
+            assert line_no in inline_comments[0][1]
+            assert inline_comments[0][1][line_no][0].text == text
+
+            ChangesetCommentsModel().delete(new_comment)
+
+            self._check_comment_count(repo_id, revision,
+                    expected_len_comments=0, expected_len_inline_comments=0)
+
+    def test_create_delete_multiple_inline_comments(self):
+        with test_context(self.app):
+            repo_id = Repository.get_by_repo_name(HG_REPO).repo_id
+            revision = '9a7b4ff9e8b40bbda72fc75f162325b9baa45cda'
+
+            self._check_comment_count(repo_id, revision,
+                    expected_len_comments=0, expected_len_inline_comments=0)
+
+            text = u'an inline comment'
+            f_path = u'vcs/tests/base.py'
+            line_no = u'n50'
+            new_comment = ChangesetCommentsModel().create(
+                    text=text,
+                    repo=HG_REPO,
+                    author=TEST_USER_REGULAR_LOGIN,
+                    revision=revision,
+                    f_path=f_path,
+                    line_no=line_no,
+                    send_email=False)
+
+            text2 = u'another inline comment, same file'
+            line_no2 = u'o41'
+            new_comment2 = ChangesetCommentsModel().create(
+                    text=text2,
+                    repo=HG_REPO,
+                    author=TEST_USER_REGULAR_LOGIN,
+                    revision=revision,
+                    f_path=f_path,
+                    line_no=line_no2,
+                    send_email=False)
+
+            text3 = u'another inline comment, same file'
+            f_path3 = u'vcs/tests/test_hg.py'
+            line_no3 = u'n159'
+            new_comment3 = ChangesetCommentsModel().create(
+                    text=text3,
+                    repo=HG_REPO,
+                    author=TEST_USER_REGULAR_LOGIN,
+                    revision=revision,
+                    f_path=f_path3,
+                    line_no=line_no3,
+                    send_email=False)
+
+            comments, inline_comments = self._check_comment_count(repo_id, revision,
+                    expected_len_comments=0, expected_len_inline_comments=2)
+            # inline_comments is a list of tuples (file_path, dict)
+            # where the dict keys are line numbers and values are lists of comments
+            assert inline_comments[1][0] == f_path
+            assert len(inline_comments[1][1]) == 2
+            assert inline_comments[1][1][line_no][0].text == text
+            assert inline_comments[1][1][line_no2][0].text == text2
+
+            assert inline_comments[0][0] == f_path3
+            assert len(inline_comments[0][1]) == 1
+            assert line_no3 in inline_comments[0][1]
+            assert inline_comments[0][1][line_no3][0].text == text3
+
+            # now delete only one comment
+            ChangesetCommentsModel().delete(new_comment2)
+
+            comments, inline_comments = self._check_comment_count(repo_id, revision,
+                    expected_len_comments=0, expected_len_inline_comments=2)
+            # inline_comments is a list of tuples (file_path, dict)
+            # where the dict keys are line numbers and values are lists of comments
+            assert inline_comments[1][0] == f_path
+            assert len(inline_comments[1][1]) == 1
+            assert inline_comments[1][1][line_no][0].text == text
+
+            assert inline_comments[0][0] == f_path3
+            assert len(inline_comments[0][1]) == 1
+            assert line_no3 in inline_comments[0][1]
+            assert inline_comments[0][1][line_no3][0].text == text3
+
+            # now delete all others
+            ChangesetCommentsModel().delete(new_comment)
+            ChangesetCommentsModel().delete(new_comment3)
+
+            self._check_comment_count(repo_id, revision,
+                    expected_len_comments=0, expected_len_inline_comments=0)


More information about the kallithea-general mailing list