Skip to content
Snippets Groups Projects
unittest_comment.py 8.03 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 cubicweb_comment import views
Arthur Lutz's avatar
Arthur Lutz committed
class CommentTC(CubicWebTC):
Nicolas Chauvat's avatar
Nicolas Chauvat committed
    """Comment"""
        with self.admin_access.repo_cnx() as cnx:
            self.b = cnx.create_entity('BlogEntry', title=u"yo", content=u"qu\'il est beau").eid
            cnx.commit()
Nicolas Chauvat's avatar
Nicolas Chauvat committed
    def test_schema(self):
        self.assertEqual(self.schema['comments'].rdef('Comment', 'BlogEntry').composite,
sylvain thenault's avatar
sylvain thenault committed

Nicolas Chauvat's avatar
Nicolas Chauvat committed
    def test_possible_views(self):
        # comment primary view priority
        with self.admin_access.web_request() as req:
            rset = req.create_entity('Comment', content=u"bouh!", comments=self.b).as_rset()
            self.assertIsInstance(self.vreg['views'].select('primary', req, rset=rset),
            self.assertIsInstance(self.vreg['views'].select('tree', req, rset=rset),
sylvain thenault's avatar
sylvain thenault committed

Nicolas Chauvat's avatar
Nicolas Chauvat committed
    def test_possible_actions(self):
        with self.admin_access.web_request() as req:
            req.create_entity('Comment', content=u"bouh!", comments=self.b)
            self.create_user(req, 'user')  # will commit
            rset = req.execute('Any X WHERE X is BlogEntry')
            actions = self.pactions(req, rset)
            self.assertIn(('reply_comment', views.AddCommentAction), actions)
            self.assertNotIn(('edit_comment', views.EditCommentAction), actions)
            rset = req.execute('Any X WHERE X is Comment')
            actions = self.pactions(req, rset)
            self.assertIn(('reply_comment', views.ReplyCommentAction), actions)
            self.assertIn(('edit_comment', views.EditCommentAction), actions)
            req.cnx.commit()

        with self.new_access('user').web_request() as req:
            rset = req.execute('Any X WHERE X is Comment')
            actions = self.pactions(req, rset)
            self.assertIn(('reply_comment', views.ReplyCommentAction), actions)
            self.assertNotIn(('edit_comment', views.EditCommentAction), actions)
            rset = req.execute('INSERT Comment X: X content "ho bah non!", X comments B WHERE B is Comment')
            req.cnx.commit()
            actions = self.pactions(req, rset)
            self.assertIn(('reply_comment', views.ReplyCommentAction), actions)
            self.assertIn(('edit_comment', views.EditCommentAction), actions)

        with self.new_access('anon').web_request() as req:
            rset = req.execute('Any X WHERE X is Comment')
            self.assertEqual(self.pactions(req, rset), [])
Nicolas Chauvat's avatar
Nicolas Chauvat committed

    def test_nonregr_possible_actions(self):
        with self.admin_access.web_request() as req:
            req.create_entity('Comment', content=u"bouh!", comments=self.b)
            req.create_entity('Comment', content=u"Yooo!", comments=self.b)
            # now two comments are commenting the blog
            b = req.entity_from_eid(self.b)
            rset = b.related('comments', 'object')
            self.assertEqual(len(rset), 2)
            self.assertTrue(self.vreg['actions'].select('reply_comment', req, rset=rset, row=0))
            self.assertTrue(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):
        with self.admin_access.web_request() as req:
            req.create_entity('Comment', content=u"bouh!", comments=self.b)
            self.create_user(req, 'user')  # will comit
            rset = req.execute('Any X WHERE X is Comment')
            self.assertEqual(self.pactions_by_cats(req, rset), [])
            req.cnx.commit()

        with self.new_access('user').web_request() as req:
            rset = req.execute('Any X WHERE X is Comment')
            self.assertEqual(self.pactions_by_cats(req, rset), [])

        with self.new_access('anon').web_request() as req:
            rset = req.execute('Any X WHERE X is Comment')
            self.assertEqual(self.pactions_by_cats(req, rset), [])
Nicolas Chauvat's avatar
Nicolas Chauvat committed

    def test_path(self):
        with self.admin_access.repo_cnx() as cnx:
            c1 = cnx.create_entity('Comment', content=u"oijzr", comments=self.b)
            itreec1 = c1.cw_adapt_to('ITree')
            c11 = cnx.create_entity('Comment', content=u"duh?", comments=c1)
            itreec11 = c11.cw_adapt_to('ITree')
            self.assertEqual(itreec1.path(), [self.b, c1.eid])
            self.assertEqual(itreec1.root().eid, self.b)
            self.assertEqual(itreec11.path(), [self.b, c1.eid, c11.eid])
            self.assertEqual(itreec11.root().eid, self.b)
sylvain thenault's avatar
sylvain thenault committed

    def test_comments_ascending_order(self):
        with self.admin_access.repo_cnx() as cnx:
            b = cnx.entity_from_eid(self.b)
            c1 = cnx.create_entity('Comment', content=u"one", comments=self.b)
            c11 = cnx.create_entity('Comment', content=u"one-one", comments=c1)
            c12 = cnx.create_entity('Comment', content=u"one-two", comments=c1)
            c2 = cnx.create_entity('Comment', content=u"two", comments=self.b)
            self.assertEqual([c.eid for c in b.reverse_comments],
            self.assertEqual([c.eid for c in c1.cw_adapt_to('ITree').children()],
        with self.admin_access.repo_cnx() as cnx:
            c1 = cnx.create_entity('Comment', content=u"one", comments=self.b)
            c11 = cnx.create_entity('Comment', content=u"one-one", comments=c1)
            c12 = cnx.create_entity('Comment', content=u"one-two", comments=c1)
            c21 = cnx.create_entity('Comment', content=u"two-one", comments=c12)
            self.assertEqual(c1.subcomments_count(), 3)
Nicolas Chauvat's avatar
Nicolas Chauvat committed
    def test_fullthreadtext_views(self):
        with self.admin_access.web_request() as req:
            c = req.create_entity('Comment', content=u"bouh!", comments=self.b)
            c2 = req.create_entity('Comment', content=u"""
Nicolas Chauvat's avatar
Nicolas Chauvat committed
some long <b>HTML</b> text which <em>should not</em> fit on 80 characters, so i'll add some extra xxxxxxx.
Yeah !""", content_format=u"text/html", comments=c)
            req.cnx.commit()  # needed to set author
            content = c2.view('fullthreadtext')
            # remove date
            content = re.sub('..../../.. ..:..', '', content)
            self.assertMultiLineEqual(content,
Nicolas Chauvat's avatar
Nicolas Chauvat committed
                          """\
> 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)
            # fullthreadtext_descending view
            self.assertMultiLineEqual('''On  - admin wrote :
Nicolas Chauvat's avatar
Nicolas Chauvat committed
bouh!
> On  - admin wrote :
> some long **HTML** text which _should not_ fit on 80 characters, so i\'ll add
> some extra xxxxxxx. Yeah !
> 

''',
                                  re.sub('..../../.. ..:..', '', c.view('fullthreadtext_descending')))
sylvain thenault's avatar
sylvain thenault committed

    def test_fulltext_view_markdown(self):
        with self.admin_access.web_request() as req:
            content = u'\n'.join([
                (u'some long *Markdown* text which **should not** fit on 80 '
                 u'characters, so i\'ll add some extra xxxxxxx. Yeah !'),
                u'',
                u'* and a',
                u'* list',
            ])

            comment = req.create_entity('Comment', content=content,
                                        content_format=u'text/markdown',
                                        comments=self.b)
            req.cnx.commit()
            content = comment.view('fulltext')
            content = re.sub('..../../.. ..:..', '', content)
            expected = '\n'.join([
                'On  - admin wrote :',
                'some long *Markdown* text which **should not** fit on 80 characters, so i\'ll add',
                'some extra xxxxxxx. Yeah !',
                '',
                '* and a',
                '* list',
                '',
            ])
            self.assertMultiLineEqual(content, expected)

sylvain thenault's avatar
sylvain thenault committed

Nicolas Chauvat's avatar
Nicolas Chauvat committed
if __name__ == '__main__':
    import unittest
    unittest.main()