web/test/unittest_form.py
branchtls-sprint
changeset 1111 bcb81e7c41bc
parent 1074 c07f3accf04a
child 1147 402e8a8b1d6a
equal deleted inserted replaced
1110:c71997f514ba 1111:bcb81e7c41bc
     1 from logilab.common.testlib import unittest_main, mock_object
     1 from logilab.common.testlib import unittest_main, mock_object
     2 from cubicweb import Binary
     2 from cubicweb import Binary
     3 from cubicweb.devtools.testlib import WebTest
     3 from cubicweb.devtools.testlib import WebTest
     4 from cubicweb.web.form import *
     4 from cubicweb.web.form import EntityFieldsForm, FormRenderer
     5 from cubicweb.web.views.baseforms import ChangeStateForm
     5 from cubicweb.web.formfields import (IntField, StringField, RichTextField,
       
     6                                      DateTimeField, DateTimePicker,
       
     7                                      FileField, EditableFileField)
       
     8 from cubicweb.web.formwidgets import PasswordInput
       
     9 from cubicweb.web.views.workflow import ChangeStateForm
     6 
    10 
     7 
    11 
     8 class EntityFieldsFormTC(WebTest):
    12 class EntityFieldsFormTC(WebTest):
     9 
    13 
    10     def setUp(self):
    14     def setUp(self):
    43                               '')
    47                               '')
    44 
    48 
    45     # fields tests ############################################################
    49     # fields tests ############################################################
    46 
    50 
    47     def _render_entity_field(self, name, form):
    51     def _render_entity_field(self, name, form):
       
    52         form.form_add_entity_hiddens(form.entity.e_schema)
    48         form.form_build_context({})
    53         form.form_build_context({})
    49         form.form_add_entity_hiddens(form.entity.e_schema)
       
    50         return form.field_by_name(name).render(form, self.renderer)
    54         return form.field_by_name(name).render(form, self.renderer)
    51     
    55     
    52     def _test_richtextfield(self, expected):
    56     def _test_richtextfield(self, expected):
    53         class RTFForm(EntityFieldsForm):
    57         class RTFForm(EntityFieldsForm):
    54             content = RichTextField()
    58             content = RichTextField()
    55         card = self.add_entity('Card', title=u"tls sprint fev 2009",
    59         card = self.add_entity('Card', title=u"tls sprint fev 2009",
    56                                content=u'<h1>new widgets system</h1>',
    60                                content=u'<h1>new widgets system</h1>',
    57                                content_format=u'text/html')
    61                                content_format=u'text/html')
    58         form = RTFForm(self.req, redirect_path='perdu.com', entity=card)
    62         form = RTFForm(self.req, redirect_path='perdu.com', entity=card)
    59         self.assertTextEquals(self._render_entity_field('content', form), expected)
    63         self.assertTextEquals(self._render_entity_field('content', form), expected % {'eid': card.eid})
       
    64 
    60         
    65         
    61     def test_richtextfield_1(self):
    66     def test_richtextfield_1(self):
    62         self.req.use_fckeditor = lambda: False
    67         self.req.use_fckeditor = lambda: False
    63         self._test_richtextfield('''<select name="content_format" id="content_format" tabindex="0">
    68         self._test_richtextfield('''<select name="content_format:%(eid)s" id="content_format:%(eid)s" tabindex="0">
    64 <option value="text/rest">text/rest</option>
    69 <option value="text/rest">text/rest</option>
    65 <option selected="selected" value="text/html">text/html</option>
    70 <option selected="selected" value="text/html">text/html</option>
    66 <option value="text/plain">text/plain</option>
    71 <option value="text/plain">text/plain</option>
    67 <option value="text/cubicweb-page-template">text/cubicweb-page-template</option>
    72 <option value="text/cubicweb-page-template">text/cubicweb-page-template</option>
    68 </select><textarea tabindex="1" id="content" name="content" onkeypress="autogrow(this)"/>''')
    73 </select><textarea tabindex="1" id="content:%(eid)s" name="content:%(eid)s" onkeypress="autogrow(this)">&lt;h1&gt;new widgets system&lt;/h1&gt;</textarea>''')
       
    74 
    69     
    75     
    70     def test_richtextfield_2(self):
    76     def test_richtextfield_2(self):
    71         self.req.use_fckeditor = lambda: True
    77         self.req.use_fckeditor = lambda: True
    72         self._test_richtextfield('''<input type="hidden" name="content_format" value="text/html"/><textarea tabindex="0" cubicweb:type="wysiwyg" id="content" name="content" onkeypress="autogrow(this)"/>''')
    78         self._test_richtextfield('''<input type="hidden" name="content_format:%(eid)s" value="text/html"/><textarea tabindex="0" cubicweb:type="wysiwyg" id="content:%(eid)s" name="content:%(eid)s" onkeypress="autogrow(this)">&lt;h1&gt;new widgets system&lt;/h1&gt;</textarea>''')
    73 
    79 
    74 
    80 
    75     def test_filefield(self):
    81     def test_filefield(self):
    76         class FFForm(EntityFieldsForm):
    82         class FFForm(EntityFieldsForm):
    77             data = FileField(format_field=StringField(name='data_format'),
    83             data = FileField(format_field=StringField(name='data_format'),
    78                              encoding_field=StringField(name='data_encoding'))
    84                              encoding_field=StringField(name='data_encoding'))
    79         file = self.add_entity('File', name=u"pouet.txt",
    85         file = self.add_entity('File', name=u"pouet.txt",
    80                                data=Binary('new widgets system'))
    86                                data=Binary('new widgets system'))
    81         form = FFForm(self.req, redirect_path='perdu.com', entity=file)
    87         form = FFForm(self.req, redirect_path='perdu.com', entity=file)
    82         self.assertTextEquals(self._render_entity_field('data', form),
    88         self.assertTextEquals(self._render_entity_field('data', form),
    83                               '''<input id="data" type="file" name="data" value="" tabindex="0"/>
    89                               '''<input id="data:%(eid)s" type="file" name="data:%(eid)s" value="" tabindex="0"/>
    84 <a href="javascript: toggleVisibility(&#39;data-advanced&#39;)" title="show advanced fields"><img src="http://testing.fr/cubicweb/data/puce_down.png" alt="show advanced fields"/></a>
    90 <a href="javascript: toggleVisibility(&#39;data:%(eid)s-advanced&#39;)" title="show advanced fields"><img src="http://testing.fr/cubicweb/data/puce_down.png" alt="show advanced fields"/></a>
    85 <div id="data-advanced" class="hidden">
    91 <div id="data:%(eid)s-advanced" class="hidden">
    86 <label for="data_format">data_format</label><input id="data_format" type="text" name="data_format" value="" tabindex="1"/><br/><br/>
    92 <label for="data_format:%(eid)s">data_format</label><input id="data_format:%(eid)s" type="text" name="data_format:%(eid)s" value="text/plain" tabindex="1"/><br/><br/>
    87 <label for="data_encoding">data_encoding</label><input id="data_encoding" type="text" name="data_encoding" value="" tabindex="2"/><br/><br/>
    93 <label for="data_encoding:%(eid)s">data_encoding</label><input id="data_encoding:%(eid)s" type="text" name="data_encoding:%(eid)s" value="UTF-8" tabindex="2"/><br/><br/>
    88 </div>''')
    94 </div>
       
    95 <br/>
       
    96 <input type="checkbox" name="data:594__detach"/>
       
    97 detach attached file
       
    98 ''' % {'eid': file.eid})
    89 
    99 
    90         
   100         
    91     def test_editablefilefield(self):
   101     def test_editablefilefield(self):
    92         class EFFForm(EntityFieldsForm):
   102         class EFFForm(EntityFieldsForm):
    93             data = EditableFileField(format_field=StringField(name='data_format'),
   103             data = EditableFileField(format_field=StringField(name='data_format'),
    98                 return 'text/plain'
   108                 return 'text/plain'
    99         file = self.add_entity('File', name=u"pouet.txt",
   109         file = self.add_entity('File', name=u"pouet.txt",
   100                                data=Binary('new widgets system'))
   110                                data=Binary('new widgets system'))
   101         form = EFFForm(self.req, redirect_path='perdu.com', entity=file)
   111         form = EFFForm(self.req, redirect_path='perdu.com', entity=file)
   102         self.assertTextEquals(self._render_entity_field('data', form),
   112         self.assertTextEquals(self._render_entity_field('data', form),
   103                               '''<input id="data" type="file" name="data" value="" tabindex="0"/>
   113                               '''<input id="data:%(eid)s" type="file" name="data:%(eid)s" value="" tabindex="0"/>
   104 <a href="javascript: toggleVisibility(&#39;data-advanced&#39;)" title="show advanced fields"><img src="http://testing.fr/cubicweb/data/puce_down.png" alt="show advanced fields"/></a>
   114 <a href="javascript: toggleVisibility(&#39;data:%(eid)s-advanced&#39;)" title="show advanced fields"><img src="http://testing.fr/cubicweb/data/puce_down.png" alt="show advanced fields"/></a>
   105 <div id="data-advanced" class="hidden">
   115 <div id="data:%(eid)s-advanced" class="hidden">
   106 <label for="data_format">data_format</label><input id="data_format" type="text" name="data_format" value="" tabindex="1"/><br/><br/>
   116 <label for="data_format:%(eid)s">data_format</label><input id="data_format:%(eid)s" type="text" name="data_format:%(eid)s" value="text/plain" tabindex="1"/><br/><br/>
   107 <label for="data_encoding">data_encoding</label><input id="data_encoding" type="text" name="data_encoding" value="" tabindex="2"/><br/><br/>
   117 <label for="data_encoding:%(eid)s">data_encoding</label><input id="data_encoding:%(eid)s" type="text" name="data_encoding:%(eid)s" value="UTF-8" tabindex="2"/><br/><br/>
   108 </div>
   118 </div>
       
   119 <br/>
       
   120 <input type="checkbox" name="data:594__detach"/>
       
   121 detach attached file
   109 <p><b>You can either submit a new file using the browse button above, or choose to remove already uploaded file by checking the "detach attached file" check-box, or edit file content online with the widget below.</b></p>
   122 <p><b>You can either submit a new file using the browse button above, or choose to remove already uploaded file by checking the "detach attached file" check-box, or edit file content online with the widget below.</b></p>
   110 <textarea tabindex="3" name="data" onkeypress="autogrow(this)">new widgets system</textarea>''')
   123 <textarea tabindex="3" name="data:%(eid)s" onkeypress="autogrow(this)">new widgets system</textarea>''' % {'eid': file.eid})
       
   124 
   111 
   125 
   112     def test_passwordfield(self):
   126     def test_passwordfield(self):
   113         class PFForm(EntityFieldsForm):
   127         class PFForm(EntityFieldsForm):
   114             upassword = StringField(widget=PasswordInput)
   128             upassword = StringField(widget=PasswordInput)
   115         form = PFForm(self.req, redirect_path='perdu.com', entity=self.entity)
   129         form = PFForm(self.req, redirect_path='perdu.com', entity=self.entity)
   116         self.assertTextEquals(self._render_entity_field('upassword', form),
   130         self.assertTextEquals(self._render_entity_field('upassword', form),
   117                               '''<input id="upassword" type="password" name="upassword" value="" tabindex="0"/>
   131                               '''<input id="upassword:%(eid)s" type="password" name="upassword:%(eid)s" value="__cubicweb_internal_field__" tabindex="0"/>
   118 <br/>
   132 <br/>
   119 <input type="password" id="upassword" name="upassword-confirm" tabindex="0"/>
   133 <input type="password" name="upassword-confirm:%(eid)s" tabindex="0"/>
   120 &nbsp;
   134 &nbsp;
   121 <span class="emphasis">confirm password</span>''')
   135 <span class="emphasis">confirm password</span>''' % {'eid': self.entity.eid})
   122 
   136 
   123         
   137         
   124 if __name__ == '__main__':
   138 if __name__ == '__main__':
   125     unittest_main()
   139     unittest_main()