web/test/unittest_form.py
branchtls-sprint
changeset 1057 6636c75c4aa9
parent 1052 4f746935e6b1
child 1074 c07f3accf04a
equal deleted inserted replaced
1056:be43d95ebb52 1057:6636c75c4aa9
     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 *
     5 from cubicweb.web.views.baseforms import ChangeStateForm
     5 from cubicweb.web.views.baseforms import ChangeStateForm
     6 
     6 
     7 
     7 
     8 class CustomChangeStateForm(ChangeStateForm):
       
     9     hello = IntField(name='youlou')
       
    10     creation_date = DateTimeField(widget=DateTimePicker)
       
    11 
       
    12 
       
    13 class RTFForm(EntityFieldsForm):
       
    14     content = RichTextField()
       
    15 
       
    16 class FFForm(EntityFieldsForm):
       
    17     data = FileField(format_field=StringField(name='data_format'),
       
    18                      encoding_field=StringField(name='data_encoding'))
       
    19 
       
    20 class PFForm(EntityFieldsForm):
       
    21     upassword = StringField(widget=PasswordInput)
       
    22 
       
    23     
       
    24 class EntityFieldsFormTC(WebTest):
     8 class EntityFieldsFormTC(WebTest):
    25 
     9 
    26     def setUp(self):
    10     def setUp(self):
    27         super(EntityFieldsFormTC, self).setUp()
    11         super(EntityFieldsFormTC, self).setUp()
    28         self.req = self.request()
    12         self.req = self.request()
    29         self.entity = self.user(self.req)
    13         self.entity = self.user(self.req)
       
    14         self.renderer = FormRenderer()
    30         
    15         
       
    16     # form tests ##############################################################
       
    17     
    31     def test_form_inheritance(self):
    18     def test_form_inheritance(self):
       
    19         class CustomChangeStateForm(ChangeStateForm):
       
    20             hello = IntField(name='youlou')
       
    21             creation_date = DateTimeField(widget=DateTimePicker)
    32         form = CustomChangeStateForm(self.req, redirect_path='perdu.com',
    22         form = CustomChangeStateForm(self.req, redirect_path='perdu.com',
    33                                      entity=self.entity)
    23                                      entity=self.entity)
    34         self.assertTextEquals(form.form_render(state=123),
    24         self.assertTextEquals(form.form_render(state=123, trcomment=u''),
    35                               ''' ''')
    25                               ''' ''')
    36 
    26 
    37     def test_change_state_form(self):
    27     def test_change_state_form(self):
    38         form = ChangeStateForm(self.req, redirect_path='perdu.com',
    28         form = ChangeStateForm(self.req, redirect_path='perdu.com',
    39                                entity=self.entity)
    29                                entity=self.entity)
    40         self.assertTextEquals(form.form_render(state=123, trcomment=u''),
    30         self.assertTextEquals(form.form_render(state=123, trcomment=u''),
    41                               ''' ''')
    31                               ''' ''')
    42 
       
    43     def test_richtextfield(self):
       
    44         card = self.add_entity('Card', title=u"tls sprint fev 2009",
       
    45                                content=u'new widgets system')
       
    46         form = RTFForm(self.req, redirect_path='perdu.com',
       
    47                        entity=card)
       
    48         self.assertTextEquals(form.form_render(),
       
    49                               '''''')
       
    50 
       
    51     def test_filefield(self):
       
    52         file = self.add_entity('File', name=u"pouet.txt",
       
    53                                data=Binary('new widgets system'))
       
    54         form = FFForm(self.req, redirect_path='perdu.com',
       
    55                       entity=file)
       
    56         self.assertTextEquals(form.form_render(),
       
    57                               '''''')
       
    58 
       
    59     def test_passwordfield(self):
       
    60         form = PFForm(self.req, redirect_path='perdu.com',
       
    61                       entity=self.entity)
       
    62         self.assertTextEquals(form.form_render(),
       
    63                               '''''')
       
    64         
    32         
    65     def test_delete_conf_form_multi(self):
    33     def test_delete_conf_form_multi(self):
    66         rset = self.execute('EGroup X')
    34         rset = self.execute('EGroup X')
    67         self.assertTextEquals(self.view('deleteconf', rset, template=None).source,
    35         self.assertTextEquals(self.view('deleteconf', rset, template=None).source,
    68                               '')
    36                               '')
    69 
    37 
       
    38     # fields tests ############################################################
       
    39 
       
    40     def _render_entity_field(self, name, form):
       
    41         form.form_build_context({})
       
    42         form.form_add_entity_hiddens(form.entity.e_schema)
       
    43         return form.field_by_name(name).render(form, self.renderer)
       
    44     
       
    45     def _test_richtextfield(self, expected):
       
    46         class RTFForm(EntityFieldsForm):
       
    47             content = RichTextField()
       
    48         card = self.add_entity('Card', title=u"tls sprint fev 2009",
       
    49                                content=u'<h1>new widgets system</h1>',
       
    50                                content_format=u'text/html')
       
    51         form = RTFForm(self.req, redirect_path='perdu.com', entity=card)
       
    52         self.assertTextEquals(self._render_entity_field('content', form), expected)
       
    53         
       
    54     def test_richtextfield_1(self):
       
    55         self.req.use_fckeditor = lambda: False
       
    56         self._test_richtextfield('''<select name="content_format" id="content_format" tabindex="0">
       
    57 <option value="text/rest">text/rest</option>
       
    58 <option selected="selected" value="text/html">text/html</option>
       
    59 <option value="text/plain">text/plain</option>
       
    60 <option value="text/cubicweb-page-template">text/cubicweb-page-template</option>
       
    61 </select><textarea tabindex="1" id="content" name="content" onkeypress="autogrow(this)"/>''')
       
    62     
       
    63     def test_richtextfield_2(self):
       
    64         self.req.use_fckeditor = lambda: True
       
    65         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)"/>''')
       
    66 
       
    67 
       
    68     def test_filefield(self):
       
    69         class FFForm(EntityFieldsForm):
       
    70             data = FileField(format_field=StringField(name='data_format'),
       
    71                              encoding_field=StringField(name='data_encoding'))
       
    72         file = self.add_entity('File', name=u"pouet.txt",
       
    73                                data=Binary('new widgets system'))
       
    74         form = FFForm(self.req, redirect_path='perdu.com', entity=file)
       
    75         self.assertTextEquals(self._render_entity_field('data', form),
       
    76                               '''<input id="data" type="file" name="data" value="" tabindex="0"/>
       
    77 <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>
       
    78 <div id="data-advanced" class="hidden">
       
    79 <label for="data_format">data_format</label><input id="data_format" type="text" name="data_format" value="" tabindex="1"/><br/><br/>
       
    80 <label for="data_encoding">data_encoding</label><input id="data_encoding" type="text" name="data_encoding" value="" tabindex="2"/><br/><br/>
       
    81 </div>''')
       
    82 
       
    83         
       
    84     def test_editablefilefield(self):
       
    85         class EFFForm(EntityFieldsForm):
       
    86             data = EditableFileField(format_field=StringField(name='data_format'),
       
    87                                      encoding_field=StringField(name='data_encoding'))
       
    88             def form_field_encoding(self, field):
       
    89                 return 'ascii'
       
    90             def form_field_format(self, field):
       
    91                 return 'text/plain'
       
    92         file = self.add_entity('File', name=u"pouet.txt",
       
    93                                data=Binary('new widgets system'))
       
    94         form = EFFForm(self.req, redirect_path='perdu.com', entity=file)
       
    95         self.assertTextEquals(self._render_entity_field('data', form),
       
    96                               '''<input id="data" type="file" name="data" value="" tabindex="0"/>
       
    97 <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>
       
    98 <div id="data-advanced" class="hidden">
       
    99 <label for="data_format">data_format</label><input id="data_format" type="text" name="data_format" value="" tabindex="1"/><br/><br/>
       
   100 <label for="data_encoding">data_encoding</label><input id="data_encoding" type="text" name="data_encoding" value="" tabindex="2"/><br/><br/>
       
   101 </div>
       
   102 <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>
       
   103 <textarea tabindex="3" name="data" onkeypress="autogrow(this)">new widgets system</textarea>''')
       
   104 
       
   105     def test_passwordfield(self):
       
   106         class PFForm(EntityFieldsForm):
       
   107             upassword = StringField(widget=PasswordInput)
       
   108         form = PFForm(self.req, redirect_path='perdu.com', entity=self.entity)
       
   109         self.assertTextEquals(self._render_entity_field('upassword', form),
       
   110                               '''<input id="upassword" type="password" name="upassword" value="" tabindex="0"/>
       
   111 <br/>
       
   112 <input type="password" id="upassword" name="upassword-confirm" tabindex="0"/>
       
   113 &nbsp;
       
   114 <span class="emphasis">confirm password</span>''')
       
   115 
    70         
   116         
    71 if __name__ == '__main__':
   117 if __name__ == '__main__':
    72     unittest_main()
   118     unittest_main()