web/test/unittest_widgets.py
branchtls-sprint
changeset 1802 d628defebc17
parent 1398 5fe84a5f7035
child 1977 606923dff11b
equal deleted inserted replaced
1801:672acc730ce5 1802:d628defebc17
     1 """cubicweb.common.widget unit tests
     1 """cubicweb.common.widget unit tests"""
     2 
       
     3 """
       
     4 
     2 
     5 from datetime import datetime
     3 from datetime import datetime
     6 NOW = datetime.now()
     4 NOW = datetime.now()
     7 
     5 
     8 from logilab.common.testlib import unittest_main
     6 from logilab.common.testlib import unittest_main
    11 from cubicweb.common.mttransforms import HAS_TAL
     9 from cubicweb.common.mttransforms import HAS_TAL
    12 from cubicweb.web.widgets import widget, AutoCompletionWidget
    10 from cubicweb.web.widgets import widget, AutoCompletionWidget
    13 
    11 
    14 
    12 
    15 class WidgetsTC(EnvBasedTC):
    13 class WidgetsTC(EnvBasedTC):
    16         
    14 
    17     def get_widget(self, etype, rname, rtype):
    15     def get_widget(self, etype, rname, rtype):
    18         rschema = self.schema[rname]
    16         rschema = self.schema[rname]
    19         return widget(self.vreg, etype, rschema, rtype, role='subject')
    17         return widget(self.vreg, etype, rschema, rtype, role='subject')
    20     
    18 
    21 
    19 
    22     def test_hidden_widget(self):
    20     def test_hidden_widget(self):
    23         w = self.get_widget('State', 'eid', 'Int')
    21         w = self.get_widget('State', 'eid', 'Int')
    24         self.assertEquals(w.name, 'eid')
    22         self.assertEquals(w.name, 'eid')
    25         self.assertEquals(w.render_example(self.request()), '')
    23         self.assertEquals(w.render_example(self.request()), '')
   185                           '<input type="text" name="tel:X" value="0123456789" accesskey="t" id="tel:X" maxlength="15" size="5" tabindex="0"/>')
   183                           '<input type="text" name="tel:X" value="0123456789" accesskey="t" id="tel:X" maxlength="15" size="5" tabindex="0"/>')
   186 
   184 
   187     def test_datetime_widget(self):
   185     def test_datetime_widget(self):
   188         w = self.get_widget('Personne', 'datenaiss', 'Datetime')
   186         w = self.get_widget('Personne', 'datenaiss', 'Datetime')
   189         self.assertEquals(w.name, 'datenaiss')
   187         self.assertEquals(w.name, 'datenaiss')
   190         example = '%s, or without time: %s' % (        
   188         example = '%s, or without time: %s' % (
   191             NOW.strftime(self.vreg.property_value('ui.datetime-format')),
   189             NOW.strftime(self.vreg.property_value('ui.datetime-format')),
   192             NOW.strftime(self.vreg.property_value('ui.date-format')))
   190             NOW.strftime(self.vreg.property_value('ui.date-format')))
   193         self.assertEquals(w.render_example(self.request()), example)
   191         self.assertEquals(w.render_example(self.request()), example)
   194         self.assertDictEquals(w.attrs, {'accesskey': 'd', 'maxlength': 16, 'size': 16})
   192         self.assertDictEquals(w.attrs, {'accesskey': 'd', 'maxlength': 16, 'size': 16})
   195         entity = self.etype_instance('Personne')
   193         entity = self.etype_instance('Personne')
   229         self.assertEquals(w.required(entity), False)
   227         self.assertEquals(w.required(entity), False)
   230         self.assertEquals(w.render(entity), '')
   228         self.assertEquals(w.render(entity), '')
   231         self.assertEquals(w.edit_render(entity),
   229         self.assertEquals(w.edit_render(entity),
   232                           u'<input type="hidden" name="edits-salary:X" value="__cubicweb_internal_field__"/>\n'
   230                           u'<input type="hidden" name="edits-salary:X" value="__cubicweb_internal_field__"/>\n'
   233                           '<input type="text" name="salary:X" value="" accesskey="s" id="salary:X" maxlength="15" size="5" tabindex="0"/>')
   231                           '<input type="text" name="salary:X" value="" accesskey="s" id="salary:X" maxlength="15" size="5" tabindex="0"/>')
   234                           
   232 
   235                           
   233 
   236     def test_float_widget_previous_value(self):
   234     def test_float_widget_previous_value(self):
   237         w = self.get_widget('Personne', 'salary', 'Float')
   235         w = self.get_widget('Personne', 'salary', 'Float')
   238         self.assertEquals(w.name, 'salary')
   236         self.assertEquals(w.name, 'salary')
   239         format = self.vreg.property_value('ui.float-format')
   237         format = self.vreg.property_value('ui.float-format')
   240         self.assertEquals(w.render_example(self.request()), format % 1.23)
   238         self.assertEquals(w.render_example(self.request()), format % 1.23)
   312             self.assertEquals(w.render(entity), '')
   310             self.assertEquals(w.render(entity), '')
   313 
   311 
   314             self.assertTextEquals(w.edit_render(entity),
   312             self.assertTextEquals(w.edit_render(entity),
   315                                   u'<input type="hidden" name="edits-nom:X" value="__cubicweb_internal_field__"/>\n'
   313                                   u'<input type="hidden" name="edits-nom:X" value="__cubicweb_internal_field__"/>\n'
   316                                   u'<input type="text" name="nom:X" value="" cubicweb:dataurl="http://testing.fr/cubicweb/json?pageid=None&amp;mode=remote&amp;fname=getnames" class="widget required" id="nom:X" tabindex="0" cubicweb:loadtype="auto" cubicweb:wdgtype="SuggestField"  cubicweb:accesskey="n" cubicweb:maxlength="64" cubicweb:size="40" />')
   314                                   u'<input type="text" name="nom:X" value="" cubicweb:dataurl="http://testing.fr/cubicweb/json?pageid=None&amp;mode=remote&amp;fname=getnames" class="widget required" id="nom:X" tabindex="0" cubicweb:loadtype="auto" cubicweb:wdgtype="SuggestField"  cubicweb:accesskey="n" cubicweb:maxlength="64" cubicweb:size="40" />')
   317                                   
   315 
   318         finally:
   316         finally:
   319             del entity.widgets['nom']
   317             del entity.widgets['nom']
   320 
   318 
   321 
   319 
   322     def test_autocompletion_widget_previous_value(self):
   320     def test_autocompletion_widget_previous_value(self):
   335             self.assertEquals(w.required(entity), True)
   333             self.assertEquals(w.required(entity), True)
   336             self.assertEquals(w.render(entity), '')
   334             self.assertEquals(w.render(entity), '')
   337             self.assertTextEquals(w.edit_render(entity),
   335             self.assertTextEquals(w.edit_render(entity),
   338                                   u'<input type="hidden" name="edits-nom:X" value="__cubicweb_internal_field__"/>\n'
   336                                   u'<input type="hidden" name="edits-nom:X" value="__cubicweb_internal_field__"/>\n'
   339                                   u'<input type="text" name="nom:X" value="a name" cubicweb:dataurl="http://testing.fr/cubicweb/json?pageid=None&amp;mode=remote&amp;fname=getnames" class="widget required" id="nom:X" tabindex="0" cubicweb:loadtype="auto" cubicweb:wdgtype="SuggestField"  cubicweb:accesskey="n" cubicweb:maxlength="64" cubicweb:size="40" />')
   337                                   u'<input type="text" name="nom:X" value="a name" cubicweb:dataurl="http://testing.fr/cubicweb/json?pageid=None&amp;mode=remote&amp;fname=getnames" class="widget required" id="nom:X" tabindex="0" cubicweb:loadtype="auto" cubicweb:wdgtype="SuggestField"  cubicweb:accesskey="n" cubicweb:maxlength="64" cubicweb:size="40" />')
   340             
   338 
   341         finally:
   339         finally:
   342             del entity.widgets['nom']
   340             del entity.widgets['nom']
   343 
   341 
   344 
   342 
   345     def test_nonregr_float_widget_with_none(self):
   343     def test_nonregr_float_widget_with_none(self):
   363         entity = self.etype_instance('Personne', self.request())
   361         entity = self.etype_instance('Personne', self.request())
   364         entity.widgets['travaille'] = 'AutoCompletionWidget'
   362         entity.widgets['travaille'] = 'AutoCompletionWidget'
   365         entity.autocomplete_initfuncs = {'nom' : 'getnames'}
   363         entity.autocomplete_initfuncs = {'nom' : 'getnames'}
   366         w = self.get_widget(entity, 'travaille', 'Societe')
   364         w = self.get_widget(entity, 'travaille', 'Societe')
   367         self.failUnless(isinstance(w, AutoCompletionWidget))
   365         self.failUnless(isinstance(w, AutoCompletionWidget))
   368         
   366 
   369         
   367 
   370 if __name__ == '__main__':
   368 if __name__ == '__main__':
   371     unittest_main()
   369     unittest_main()