test/unittest_entity.py
changeset 6142 8bc6eac1fac1
parent 6099 b22a4a3895df
child 6173 eb386e473044
equal deleted inserted replaced
6141:b8287e54b528 6142:8bc6eac1fac1
   320     def test_printable_value_string(self):
   320     def test_printable_value_string(self):
   321         e = self.request().create_entity('Card', title=u'rest test', content=u'du :eid:`1:*ReST*`',
   321         e = self.request().create_entity('Card', title=u'rest test', content=u'du :eid:`1:*ReST*`',
   322                             content_format=u'text/rest')
   322                             content_format=u'text/rest')
   323         self.assertEquals(e.printable_value('content'),
   323         self.assertEquals(e.printable_value('content'),
   324                           '<p>du <a class="reference" href="http://testing.fr/cubicweb/cwgroup/guests">*ReST*</a></p>\n')
   324                           '<p>du <a class="reference" href="http://testing.fr/cubicweb/cwgroup/guests">*ReST*</a></p>\n')
   325         e['content'] = 'du <em>html</em> <ref rql="CWUser X">users</ref>'
   325         e.cw_attr_cache['content'] = 'du <em>html</em> <ref rql="CWUser X">users</ref>'
   326         e['content_format'] = 'text/html'
   326         e.cw_attr_cache['content_format'] = 'text/html'
   327         self.assertEquals(e.printable_value('content'),
   327         self.assertEquals(e.printable_value('content'),
   328                           'du <em>html</em> <a href="http://testing.fr/cubicweb/view?rql=CWUser%20X">users</a>')
   328                           'du <em>html</em> <a href="http://testing.fr/cubicweb/view?rql=CWUser%20X">users</a>')
   329         e['content'] = 'du *texte*'
   329         e.cw_attr_cache['content'] = 'du *texte*'
   330         e['content_format'] = 'text/plain'
   330         e.cw_attr_cache['content_format'] = 'text/plain'
   331         self.assertEquals(e.printable_value('content'),
   331         self.assertEquals(e.printable_value('content'),
   332                           '<p>\ndu *texte*\n</p>')
   332                           '<p>\ndu *texte*\n</p>')
   333         e['title'] = 'zou'
   333         e.cw_attr_cache['title'] = 'zou'
   334         e['content'] = '''\
   334         e.cw_attr_cache['content'] = '''\
   335 a title
   335 a title
   336 =======
   336 =======
   337 du :eid:`1:*ReST*`'''
   337 du :eid:`1:*ReST*`'''
   338         e['content_format'] = 'text/rest'
   338         e.cw_attr_cache['content_format'] = 'text/rest'
   339         self.assertEquals(e.printable_value('content', format='text/plain'),
   339         self.assertEquals(e.printable_value('content', format='text/plain'),
   340                           e['content'])
   340                           e.cw_attr_cache['content'])
   341 
   341 
   342         e['content'] = u'<b>yo (zou éà ;)</b>'
   342         e.cw_attr_cache['content'] = u'<b>yo (zou éà ;)</b>'
   343         e['content_format'] = 'text/html'
   343         e.cw_attr_cache['content_format'] = 'text/html'
   344         self.assertEquals(e.printable_value('content', format='text/plain').strip(),
   344         self.assertEquals(e.printable_value('content', format='text/plain').strip(),
   345                           u'**yo (zou éà ;)**')
   345                           u'**yo (zou éà ;)**')
   346         if HAS_TAL:
   346         if HAS_TAL:
   347             e['content'] = '<h1 tal:content="self/title">titre</h1>'
   347             e.cw_attr_cache['content'] = '<h1 tal:content="self/title">titre</h1>'
   348             e['content_format'] = 'text/cubicweb-page-template'
   348             e.cw_attr_cache['content_format'] = 'text/cubicweb-page-template'
   349             self.assertEquals(e.printable_value('content'),
   349             self.assertEquals(e.printable_value('content'),
   350                               '<h1>zou</h1>')
   350                               '<h1>zou</h1>')
   351 
   351 
   352 
   352 
   353     def test_printable_value_bytes(self):
   353     def test_printable_value_bytes(self):
   385         e = req.create_entity('Card', title=u'bad html', content=u'<div>R&D<br>',
   385         e = req.create_entity('Card', title=u'bad html', content=u'<div>R&D<br>',
   386                             content_format=u'text/html')
   386                             content_format=u'text/html')
   387         tidy = lambda x: x.replace('\n', '')
   387         tidy = lambda x: x.replace('\n', '')
   388         self.assertEquals(tidy(e.printable_value('content')),
   388         self.assertEquals(tidy(e.printable_value('content')),
   389                           '<div>R&amp;D<br/></div>')
   389                           '<div>R&amp;D<br/></div>')
   390         e['content'] = u'yo !! R&D <div> pas fermé'
   390         e.cw_attr_cache['content'] = u'yo !! R&D <div> pas fermé'
   391         self.assertEquals(tidy(e.printable_value('content')),
   391         self.assertEquals(tidy(e.printable_value('content')),
   392                           u'yo !! R&amp;D <div> pas fermé</div>')
   392                           u'yo !! R&amp;D <div> pas fermé</div>')
   393         e['content'] = u'R&D'
   393         e.cw_attr_cache['content'] = u'R&D'
   394         self.assertEquals(tidy(e.printable_value('content')), u'R&amp;D')
   394         self.assertEquals(tidy(e.printable_value('content')), u'R&amp;D')
   395         e['content'] = u'R&D;'
   395         e.cw_attr_cache['content'] = u'R&D;'
   396         self.assertEquals(tidy(e.printable_value('content')), u'R&amp;D;')
   396         self.assertEquals(tidy(e.printable_value('content')), u'R&amp;D;')
   397         e['content'] = u'yo !! R&amp;D <div> pas fermé'
   397         e.cw_attr_cache['content'] = u'yo !! R&amp;D <div> pas fermé'
   398         self.assertEquals(tidy(e.printable_value('content')),
   398         self.assertEquals(tidy(e.printable_value('content')),
   399                           u'yo !! R&amp;D <div> pas fermé</div>')
   399                           u'yo !! R&amp;D <div> pas fermé</div>')
   400         e['content'] = u'été <div> été'
   400         e.cw_attr_cache['content'] = u'été <div> été'
   401         self.assertEquals(tidy(e.printable_value('content')),
   401         self.assertEquals(tidy(e.printable_value('content')),
   402                           u'été <div> été</div>')
   402                           u'été <div> été</div>')
   403         e['content'] = u'C&apos;est un exemple s&eacute;rieux'
   403         e.cw_attr_cache['content'] = u'C&apos;est un exemple s&eacute;rieux'
   404         self.assertEquals(tidy(e.printable_value('content')),
   404         self.assertEquals(tidy(e.printable_value('content')),
   405                           u"C'est un exemple sérieux")
   405                           u"C'est un exemple sérieux")
   406         # make sure valid xhtml is left untouched
   406         # make sure valid xhtml is left untouched
   407         e['content'] = u'<div>R&amp;D<br/></div>'
   407         e.cw_attr_cache['content'] = u'<div>R&amp;D<br/></div>'
   408         self.assertEquals(e.printable_value('content'), e['content'])
   408         self.assertEquals(e.printable_value('content'), e.cw_attr_cache['content'])
   409         e['content'] = u'<div>été</div>'
   409         e.cw_attr_cache['content'] = u'<div>été</div>'
   410         self.assertEquals(e.printable_value('content'), e['content'])
   410         self.assertEquals(e.printable_value('content'), e.cw_attr_cache['content'])
   411         e['content'] = u'été'
   411         e.cw_attr_cache['content'] = u'été'
   412         self.assertEquals(e.printable_value('content'), e['content'])
   412         self.assertEquals(e.printable_value('content'), e.cw_attr_cache['content'])
   413         e['content'] = u'hop\r\nhop\nhip\rmomo'
   413         e.cw_attr_cache['content'] = u'hop\r\nhop\nhip\rmomo'
   414         self.assertEquals(e.printable_value('content'), u'hop\nhop\nhip\nmomo')
   414         self.assertEquals(e.printable_value('content'), u'hop\nhop\nhip\nmomo')
   415 
   415 
   416     def test_printable_value_bad_html_ms(self):
   416     def test_printable_value_bad_html_ms(self):
   417         self.skip('fix soup2xhtml to handle this test')
   417         self.skip('fix soup2xhtml to handle this test')
   418         req = self.request()
   418         req = self.request()
   419         e = req.create_entity('Card', title=u'bad html', content=u'<div>R&D<br>',
   419         e = req.create_entity('Card', title=u'bad html', content=u'<div>R&D<br>',
   420                             content_format=u'text/html')
   420                             content_format=u'text/html')
   421         tidy = lambda x: x.replace('\n', '')
   421         tidy = lambda x: x.replace('\n', '')
   422         e['content'] = u'<div x:foo="bar">ms orifice produces weird html</div>'
   422         e.cw_attr_cache['content'] = u'<div x:foo="bar">ms orifice produces weird html</div>'
   423         self.assertEquals(tidy(e.printable_value('content')),
   423         self.assertEquals(tidy(e.printable_value('content')),
   424                           u'<div>ms orifice produces weird html</div>')
   424                           u'<div>ms orifice produces weird html</div>')
   425         import tidy as tidymod # apt-get install python-tidy
   425         import tidy as tidymod # apt-get install python-tidy
   426         tidy = lambda x: str(tidymod.parseString(x.encode('utf-8'),
   426         tidy = lambda x: str(tidymod.parseString(x.encode('utf-8'),
   427                                                  **{'drop_proprietary_attributes': True,
   427                                                  **{'drop_proprietary_attributes': True,
   433                           u'<div>ms orifice produces weird html</div>')
   433                           u'<div>ms orifice produces weird html</div>')
   434 
   434 
   435 
   435 
   436     def test_fulltextindex(self):
   436     def test_fulltextindex(self):
   437         e = self.vreg['etypes'].etype_class('File')(self.request())
   437         e = self.vreg['etypes'].etype_class('File')(self.request())
   438         e['description'] = 'du <em>html</em>'
   438         e.cw_attr_cache['description'] = 'du <em>html</em>'
   439         e['description_format'] = 'text/html'
   439         e.cw_attr_cache['description_format'] = 'text/html'
   440         e['data'] = Binary('some <em>data</em>')
   440         e.cw_attr_cache['data'] = Binary('some <em>data</em>')
   441         e['data_name'] = 'an html file'
   441         e.cw_attr_cache['data_name'] = 'an html file'
   442         e['data_format'] = 'text/html'
   442         e.cw_attr_cache['data_format'] = 'text/html'
   443         e['data_encoding'] = 'ascii'
   443         e.cw_attr_cache['data_encoding'] = 'ascii'
   444         e._cw.transaction_data = {} # XXX req should be a session
   444         e._cw.transaction_data = {} # XXX req should be a session
   445         self.assertEquals(e.cw_adapt_to('IFTIndexable').get_words(),
   445         self.assertEquals(e.cw_adapt_to('IFTIndexable').get_words(),
   446                           {'C': [u'du', u'html', 'an', 'html', 'file', u'some', u'data']})
   446                           {'C': [u'du', u'html', 'an', 'html', 'file', u'some', u'data']})
   447 
   447 
   448 
   448 
   459         eid = session.execute(
   459         eid = session.execute(
   460             'INSERT TrInfo X: X comment "zou", X wf_info_for U, X from_state S1, X to_state S2 '
   460             'INSERT TrInfo X: X comment "zou", X wf_info_for U, X from_state S1, X to_state S2 '
   461             'WHERE U login "admin", S1 name "activated", S2 name "deactivated"')[0][0]
   461             'WHERE U login "admin", S1 name "activated", S2 name "deactivated"')[0][0]
   462         trinfo = self.execute('Any X WHERE X eid %(x)s', {'x': eid}).get_entity(0, 0)
   462         trinfo = self.execute('Any X WHERE X eid %(x)s', {'x': eid}).get_entity(0, 0)
   463         trinfo.complete()
   463         trinfo.complete()
   464         self.failUnless(isinstance(trinfo['creation_date'], datetime))
   464         self.failUnless(isinstance(trinfo.cw_attr_cache['creation_date'], datetime))
   465         self.failUnless(trinfo.cw_relation_cached('from_state', 'subject'))
   465         self.failUnless(trinfo.cw_relation_cached('from_state', 'subject'))
   466         self.failUnless(trinfo.cw_relation_cached('to_state', 'subject'))
   466         self.failUnless(trinfo.cw_relation_cached('to_state', 'subject'))
   467         self.failUnless(trinfo.cw_relation_cached('wf_info_for', 'subject'))
   467         self.failUnless(trinfo.cw_relation_cached('wf_info_for', 'subject'))
   468         self.assertEquals(trinfo.by_transition, ())
   468         self.assertEquals(trinfo.by_transition, ())
   469 
   469