Skip to content
Snippets Groups Projects
unittest_comment.py 6.64 KiB
Newer Older
Nicolas Chauvat's avatar
Nicolas Chauvat committed
import re
Arthur Lutz's avatar
Arthur Lutz committed
from cubicweb.devtools.testlib import CubicWebTC
Nicolas Chauvat's avatar
Nicolas Chauvat committed
from cubicweb.web.views import actions

from cubes.comment import views

Arthur Lutz's avatar
Arthur Lutz committed
class CommentTC(CubicWebTC):
Nicolas Chauvat's avatar
Nicolas Chauvat committed
    """Comment"""
    def test_schema(self):
        self.assertEquals(self.schema['comments'].rdef('Comment', 'BlogEntry').composite,
Nicolas Chauvat's avatar
Nicolas Chauvat committed
                          'object')
sylvain thenault's avatar
sylvain thenault committed

Nicolas Chauvat's avatar
Nicolas Chauvat committed
    def setup_database(self):
        super(CommentTC, self).setup_database()
        self.b = self.execute('INSERT BlogEntry X: X title "yo", X content "qu\'il est beau"').get_entity(0, 0)
        self.c = self.execute('INSERT Comment X: X content "bouh!", X comments B WHERE B is BlogEntry')
        self.create_user('user')

    def test_possible_views(self):
        # comment primary view priority
Sylvain Thénault's avatar
Sylvain Thénault committed
        req = self.request()
        rset = req.execute('Comment X')
Sylvain Thénault's avatar
Sylvain Thénault committed
        self.assertIsInstance(self.vreg['views'].select('primary', req, rset=rset),
Nicolas Chauvat's avatar
Nicolas Chauvat committed
                             views.CommentPrimaryView)
Sylvain Thénault's avatar
Sylvain Thénault committed
        self.assertIsInstance(self.vreg['views'].select('tree', req, rset=rset),
Nicolas Chauvat's avatar
Nicolas Chauvat committed
                             views.CommentThreadView)
sylvain thenault's avatar
sylvain thenault committed

Nicolas Chauvat's avatar
Nicolas Chauvat committed
    def test_possible_actions(self):
Sylvain Thénault's avatar
Sylvain Thénault committed
        req = self.request()
        rset = req.execute('Any X WHERE X is BlogEntry')
        actions = self.pactions(req, rset)
        self.failUnless(('reply_comment', views.AddCommentAction) in actions)
        self.failIf(('edit_comment', views.EditCommentAction) in actions)
        rset = req.execute('Any X WHERE X is Comment')
        actions = self.pactions(req, rset)
        self.failUnless(('reply_comment', views.ReplyCommentAction) in actions)
        self.failUnless(('edit_comment', views.EditCommentAction) in actions)
Nicolas Chauvat's avatar
Nicolas Chauvat committed
        cnx = self.login('user')
Sylvain Thénault's avatar
Sylvain Thénault committed
        req = self.request()
        rset = req.execute('Any X WHERE X is Comment')
        actions = self.pactions(req, rset)
        self.failUnless(('reply_comment', views.ReplyCommentAction) in actions)
        self.failIf(('edit_comment', views.EditCommentAction) in actions)
Nicolas Chauvat's avatar
Nicolas Chauvat committed
        rset = self.execute('INSERT Comment X: X content "ho bah non!", X comments B WHERE B is Comment')
        cnx.commit()
Sylvain Thénault's avatar
Sylvain Thénault committed
        actions = self.pactions(req, rset)
        self.failUnless(('reply_comment', views.ReplyCommentAction) in actions)
        self.failUnless(('edit_comment', views.EditCommentAction) in actions)
Nicolas Chauvat's avatar
Nicolas Chauvat committed
        cnx.rollback()
        cnx = self.login('anon')
Sylvain Thénault's avatar
Sylvain Thénault committed
        req = self.request()
        rset = req.execute('Any X WHERE X is Comment')
Nicolas Chauvat's avatar
Nicolas Chauvat committed
        self.failUnlessEqual(self.pactions(req, rset), [])
        cnx.rollback()

    def test_nonregr_possible_actions(self):
Sylvain Thénault's avatar
Sylvain Thénault committed
        req = self.request()
        rset = req.execute('Any B WHERE B is BlogEntry')
Nicolas Chauvat's avatar
Nicolas Chauvat committed
        beid = rset[0][0]
        self.execute('INSERT Comment X: X content "Yooo !", X comments B WHERE B eid %s' % beid)
        # now two comments are commenting this blog
Sylvain Thénault's avatar
Sylvain Thénault committed
        rset = req.execute('Any C WHERE C comments X, X eid %s' % beid)
Nicolas Chauvat's avatar
Nicolas Chauvat committed
        self.assertEquals(len(rset), 2)
Sylvain Thénault's avatar
Sylvain Thénault committed
        self.failUnless(self.vreg['actions'].select('reply_comment', req, rset=rset, row=0))
        self.failUnless(self.vreg['actions'].select('reply_comment', req, rset=rset, row=1))
sylvain thenault's avatar
sylvain thenault committed

Nicolas Chauvat's avatar
Nicolas Chauvat committed
    def test_add_related_actions(self):
Sylvain Thénault's avatar
Sylvain Thénault committed
        req = self.request()
        rset = req.execute('Any X WHERE X is Comment')
sylvain thenault's avatar
sylvain thenault committed
        self.failUnlessEqual(self.pactions_by_cats(req, rset), [])
Nicolas Chauvat's avatar
Nicolas Chauvat committed
        cnx = self.login('user')
Sylvain Thénault's avatar
Sylvain Thénault committed
        rset = req.execute('Any X WHERE X is Comment')
sylvain thenault's avatar
sylvain thenault committed
        self.failUnlessEqual(self.pactions_by_cats(req, rset), [])
Nicolas Chauvat's avatar
Nicolas Chauvat committed
        cnx.rollback()
        cnx = self.login('anon')
Sylvain Thénault's avatar
Sylvain Thénault committed
        rset = req.execute('Any X WHERE X is Comment')
sylvain thenault's avatar
sylvain thenault committed
        self.failUnlessEqual(self.pactions_by_cats(req, rset), [])
Nicolas Chauvat's avatar
Nicolas Chauvat committed
        cnx.rollback()

    def test_path(self):
        teid = self.execute('BlogEntry X')[0][0]
        eid1 = self.execute('INSERT Comment X: X content "oijzr", X comments Y WHERE Y is BlogEntry')[0][0]
        eid2 = self.execute('INSERT Comment X: X content "duh?", X comments Y WHERE Y eid %s'%eid1)[0][0]
        comment1 = self.entity('Any X WHERE X eid %(x)s', {'x':eid1}, 'x')
        self.assertEquals(comment1.path(), [teid, eid1])
        self.assertEquals(comment1.root().eid, teid)
        comment2 = self.entity('Any X WHERE X eid %(x)s', {'x':eid2}, 'x')
        self.assertEquals(comment2.path(), [teid, eid1, eid2])
        self.assertEquals(comment2.root().eid, teid)
sylvain thenault's avatar
sylvain thenault committed

Nicolas Chauvat's avatar
Nicolas Chauvat committed
    def test_fullthreadtext_views(self):
        c = self.entity('Comment X')
        c2eid = self.execute('INSERT Comment X: X content %(text)s, X content_format "text/html", '
                              'X comments %(x)s',
                            {'x': c.eid, 'text': u"""
some long <b>HTML</b> text which <em>should not</em> fit on 80 characters, so i'll add some extra xxxxxxx.
Yeah !"""})[0][0]
        self.commit()
        c2rset= self.execute('Any X WHERE X eid %(x)s', {'x': c2eid}, 'x')
Sylvain Thénault's avatar
Sylvain Thénault committed
        v = self.vreg['views'].select('fullthreadtext', self.request(),
                                      rset=c2rset, row=0)
        content = v.render(row=0)
Nicolas Chauvat's avatar
Nicolas Chauvat committed
        # remove date
        content = re.sub('..../../.. ..:..', '', content)
        self.assertTextEquals(content,
                          """\
> On  - admin wrote :
> bouh!

some long **HTML** text which _should not_ fit on 80 characters, so i'll add
some extra xxxxxxx. Yeah !


i18n_by_author_field: admin
url: http://testing.fr/cubicweb/blogentry/%s""" % self.b.eid)
        # fullthreadtext_descending view
        self.assertTextEquals(re.sub('..../../.. ..:..', '', c.view('fullthreadtext_descending')),
                              '''On  - admin wrote :
bouh!
> On  - admin wrote :
> some long **HTML** text which _should not_ fit on 80 characters, so i\'ll add
> some extra xxxxxxx. Yeah !

''')
sylvain thenault's avatar
sylvain thenault committed

Arthur Lutz's avatar
Arthur Lutz committed
class CommentJsonControllerExtensionsTC(CubicWebTC):
Nicolas Chauvat's avatar
Nicolas Chauvat committed

    def setup_database(self):
        self.john = self.create_user(u'John')

    def test_add_and_edit_comment(self):
        # add comment
        self.remote_call('add_comment', self.john.eid, u'yo', u'text/plain')
        comment = self.entity('Any C,CT,F WHERE C content CT, C content_format F, '
                              'C comments P, P eid %s' % self.john.eid)
        self.assertEquals(comment.content, u'yo')
        self.assertEquals(comment.content_format, u'text/plain')
        # edit comment
        self.remote_call('edit_comment', comment.eid, u'yipee', u'text/plain')
        comment2 = self.entity('Any C,CT,F WHERE C content CT, C content_format F, '
                               'C comments P, P eid %s' % self.john.eid)
        self.assertEquals(comment.eid, comment2.eid)
        self.assertEquals(comment2.content, u'yipee')
        self.assertEquals(comment2.content_format, u'text/plain')
sylvain thenault's avatar
sylvain thenault committed


Nicolas Chauvat's avatar
Nicolas Chauvat committed
if __name__ == '__main__':
    from logilab.common.testlib import unittest_main
    unittest_main()