# HG changeset patch # User Thomas De Schampheleire # Date 1545853924 -3600 # Node ID 6952e88f8ded672dafd354a37291278e74ef53ef # Parent 22bc0f7cc2b4a4a44a87e63921f0fc1ceca8b615 tests: add basic tests for comment model diff -r 22bc0f7cc2b4 -r 6952e88f8ded kallithea/tests/models/test_comments.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kallithea/tests/models/test_comments.py Wed Dec 26 20:52:04 2018 +0100 @@ -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)