Files @ 6d9b3ade3051
Branch filter:

Location: kallithea/rhodecode/tests/functional/test_changeset_comments.py - annotation

Zachary Auclair
Allowing multiple issue servers to be autolinked in the changeset view;
linking is now contingent on issue_server_link, issue_pat and issue_prefix
being defined; multiple servers can be used by specifying a common suffix on all
the above variables, ie ..

issue_server_link_1
issue_pat_1
issue_prefix_1

.. and ..

issue_server_link_other
issue_pat_other
issue_prefix_other

.. would be treated as two distinct servers, but ..

issue_pat_thing

.. would be ignored (since the other two requisite vars aren't present).

This patch is backwards compatible with existing variables (as a suffix
isn't needed).
e1e482093077
e1e482093077
e1e482093077
e1e482093077
50aa7cb78cfe
50aa7cb78cfe
e1e482093077
e1e482093077
e1e482093077
8ecc6b8229a5
8ecc6b8229a5
e1e482093077
e1e482093077
8ecc6b8229a5
8ecc6b8229a5
e1e482093077
e1e482093077
e1e482093077
8ecc6b8229a5
8ecc6b8229a5
e1e482093077
e1e482093077
8ecc6b8229a5
8ecc6b8229a5
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
50aa7cb78cfe
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
c4d8ed624728
c4d8ed624728
e1e482093077
50aa7cb78cfe
50aa7cb78cfe
e1e482093077
e1e482093077
e1e482093077
50aa7cb78cfe
a8c9c0094ddf
50aa7cb78cfe
50aa7cb78cfe
50aa7cb78cfe
50aa7cb78cfe
50aa7cb78cfe
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
50aa7cb78cfe
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
ec6691dd9e94
c4d8ed624728
ec6691dd9e94
ec6691dd9e94
ec6691dd9e94
ec6691dd9e94
ec6691dd9e94
ec6691dd9e94
ec6691dd9e94
e1e482093077
e1e482093077
50aa7cb78cfe
e1e482093077
50aa7cb78cfe
50aa7cb78cfe
a8c9c0094ddf
50aa7cb78cfe
50aa7cb78cfe
50aa7cb78cfe
50aa7cb78cfe
50aa7cb78cfe
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
c4d8ed624728
c4d8ed624728
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
64e91067b996
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
50aa7cb78cfe
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
64e91067b996
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
e1e482093077
c4d8ed624728
c4d8ed624728
from rhodecode.tests import *
from rhodecode.model.db import ChangesetComment, Notification, User, \
    UserNotification


class TestChangeSetCommentsController(TestController):

    def setUp(self):
        for x in ChangesetComment.query().all():
            self.Session.delete(x)
        self.Session.commit()

        for x in Notification.query().all():
            self.Session.delete(x)
        self.Session.commit()

    def tearDown(self):
        for x in ChangesetComment.query().all():
            self.Session.delete(x)
        self.Session.commit()

        for x in Notification.query().all():
            self.Session.delete(x)
        self.Session.commit()

    def test_create(self):
        self.log_user()
        rev = '27cd5cce30c96924232dffcd24178a07ffeb5dfc'
        text = u'CommentOnRevision'

        params = {'text': text}
        response = self.app.post(url(controller='changeset', action='comment',
                                     repo_name=HG_REPO, revision=rev),
                                     params=params)
        # Test response...
        self.assertEqual(response.status, '302 Found')
        response.follow()

        response = self.app.get(url(controller='changeset', action='index',
                                repo_name=HG_REPO, revision=rev))
        # test DB
        self.assertEqual(ChangesetComment.query().count(), 1)
        response.mustcontain('''<div class="comments-number">%s comment '''
                             '''(0 inline)</div>''' % 1)

        self.assertEqual(Notification.query().count(), 1)
        self.assertEqual(ChangesetComment.query().count(), 1)

        notification = Notification.query().all()[0]

        ID = ChangesetComment.query().first().comment_id
        self.assertEqual(notification.type_,
                         Notification.TYPE_CHANGESET_COMMENT)
        sbj = (u'/vcs_test_hg/changeset/'
               '27cd5cce30c96924232dffcd24178a07ffeb5dfc#comment-%s' % ID)
        print "%s vs %s" % (sbj, notification.subject)
        self.assertTrue(sbj in notification.subject)

    def test_create_inline(self):
        self.log_user()
        rev = '27cd5cce30c96924232dffcd24178a07ffeb5dfc'
        text = u'CommentOnRevision'
        f_path = 'vcs/web/simplevcs/views/repository.py'
        line = 'n1'

        params = {'text': text, 'f_path': f_path, 'line': line}
        response = self.app.post(url(controller='changeset', action='comment',
                                     repo_name=HG_REPO, revision=rev),
                                     params=params)
        # Test response...
        self.assertEqual(response.status, '302 Found')
        response.follow()

        response = self.app.get(url(controller='changeset', action='index',
                                repo_name=HG_REPO, revision=rev))
        #test DB
        self.assertEqual(ChangesetComment.query().count(), 1)
        response.mustcontain(
            '''<div class="comments-number">0 comments'''
            ''' (%s inline)</div>''' % 1
        )
        response.mustcontain(
            '''<div style="display:none" class="inline-comment-placeholder" '''
            '''path="vcs/web/simplevcs/views/repository.py" '''
            '''target_id="vcswebsimplevcsviewsrepositorypy">'''
        )

        self.assertEqual(Notification.query().count(), 1)
        self.assertEqual(ChangesetComment.query().count(), 1)

        notification = Notification.query().all()[0]
        ID = ChangesetComment.query().first().comment_id
        self.assertEqual(notification.type_,
                         Notification.TYPE_CHANGESET_COMMENT)
        sbj = (u'/vcs_test_hg/changeset/'
               '27cd5cce30c96924232dffcd24178a07ffeb5dfc#comment-%s' % ID)
        print "%s vs %s" % (sbj, notification.subject)
        self.assertTrue(sbj in notification.subject)

    def test_create_with_mention(self):
        self.log_user()

        rev = '27cd5cce30c96924232dffcd24178a07ffeb5dfc'
        text = u'@test_regular check CommentOnRevision'

        params = {'text':text}
        response = self.app.post(url(controller='changeset', action='comment',
                                     repo_name=HG_REPO, revision=rev),
                                     params=params)
        # Test response...
        self.assertEqual(response.status, '302 Found')
        response.follow()

        response = self.app.get(url(controller='changeset', action='index',
                                repo_name=HG_REPO, revision=rev))
        # test DB
        self.assertEqual(ChangesetComment.query().count(), 1)
        response.mustcontain('''<div class="comments-number">%s '''
                             '''comment (0 inline)</div>''' % 1)

        self.assertEqual(Notification.query().count(), 2)
        users = [x.user.username for x in UserNotification.query().all()]

        # test_regular get's notification by @mention
        self.assertEqual(sorted(users), [u'test_admin', u'test_regular'])

    def test_delete(self):
        self.log_user()
        rev = '27cd5cce30c96924232dffcd24178a07ffeb5dfc'
        text = u'CommentOnRevision'

        params = {'text': text}
        response = self.app.post(url(controller='changeset', action='comment',
                                     repo_name=HG_REPO, revision=rev),
                                     params=params)

        comments = ChangesetComment.query().all()
        self.assertEqual(len(comments), 1)
        comment_id = comments[0].comment_id

        self.app.delete(url(controller='changeset',
                                    action='delete_comment',
                                    repo_name=HG_REPO,
                                    comment_id=comment_id))

        comments = ChangesetComment.query().all()
        self.assertEqual(len(comments), 0)

        response = self.app.get(url(controller='changeset', action='index',
                                repo_name=HG_REPO, revision=rev))
        response.mustcontain('''<div class="comments-number">0 comments'''
                             ''' (0 inline)</div>''')