Newer
Older
from lxml import etree
from cubicweb_comment import views
Sylvain Thénault
committed
def setup_database(self):
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()
Sylvain Thénault
committed
self.assertEqual(self.schema['comments'].rdef('Comment', 'BlogEntry').composite,
'object')
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),
views.CommentPrimaryView)
self.assertIsInstance(self.vreg['views'].select('tree', req, rset=rset),
views.CommentThreadView)
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), [])
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))
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), [])
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 Thénault
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],
[c1.eid, c2.eid])
self.assertEqual([c.eid for c in c1.cw_adapt_to('ITree').children()],
[c11.eid, c12.eid])
Sylvain Thénault
committed
def test_subcomments_count(self):
with self.admin_access.repo_cnx() as cnx:
c1 = cnx.create_entity('Comment', content=u"one", comments=self.b)
cnx.create_entity('Comment', content=u"one-one", comments=c1)
c12 = cnx.create_entity('Comment', content=u"one-two", comments=c1)
cnx.create_entity('Comment', content=u"two-one", comments=c12)
self.assertEqual(c1.subcomments_count(), 3)
Sylvain Thénault
committed
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"""
some long <b>HTML</b> text which <em>should not</em> fit on 80 characters, so i'll add some extra xxxxxxx.
Sylvain Thénault
committed
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,
> 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 :
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')))
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
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)

Philippe Pepiot
committed
def test_edit_comment_form(self):
def render_comment_form(req):
rset = req.create_entity('Comment', content=u'test').as_rset()
view = self.vreg['views'].select('editcommentform', req, rset=rset)
return view.render()
with self.new_access('anon').web_request() as req:
body = render_comment_form(req)
self.assertIn('You are not authenticated. Your comment will be anonymous', body)
with self.admin_access.web_request() as req:
body = render_comment_form(req)
self.assertNotIn('You are not authenticated. Your comment will be anonymous', body)
def test_rssitem_view(self):
with self.admin_access.web_request() as req:
c1 = req.create_entity('Comment', content=u'foo', comments=self.b)
c2 = req.create_entity('Comment', content=u'foo', comments=c1)
c1.cw_set(comments=c2)
xmldata = '<items>' + c1.view('rssitem') + '</items>'
doc = etree.fromstring(xmldata, etree.XMLParser(recover=True))
self.assertEqual(
[node.text for node in doc.xpath('//guid')], [
'http://testing.fr/cubicweb/comment/{}'.format(c1.eid),
'http://testing.fr/cubicweb/comment/{}'.format(c2.eid),
])
import unittest
unittest.main()