web/test/unittest_form.py
branchtls-sprint
changeset 1570 5c40d9fb4e8d
parent 1398 5fe84a5f7035
child 1654 57b9fd2462b8
equal deleted inserted replaced
1569:99a19875ef1e 1570:5c40d9fb4e8d
    24     def setUp(self):
    24     def setUp(self):
    25         super(EntityFieldsFormTC, self).setUp()
    25         super(EntityFieldsFormTC, self).setUp()
    26         self.req = self.request()
    26         self.req = self.request()
    27         self.entity = self.user(self.req)
    27         self.entity = self.user(self.req)
    28         self.renderer = FormRenderer()
    28         self.renderer = FormRenderer()
    29         
    29 
    30     def test_form_field_vocabulary_unrelated(self):
    30     def test_form_field_vocabulary_unrelated(self):
    31         b = self.add_entity('BlogEntry', title=u'di mascii code', content=u'a best-seller')
    31         b = self.add_entity('BlogEntry', title=u'di mascii code', content=u'a best-seller')
    32         t = self.add_entity('Tag', name=u'x')
    32         t = self.add_entity('Tag', name=u'x')
    33         form1 = EntityFieldsForm(self.request(), None, entity=t)
    33         form1 = EntityFieldsForm(self.request(), None, entity=t)
    34         unrelated = [reid for rview, reid in form1.subject_relation_vocabulary('tags')]
    34         unrelated = [reid for rview, reid in form1.subject_relation_vocabulary('tags')]
    39         self.execute('SET X tags Y WHERE X is Tag, Y is BlogEntry')
    39         self.execute('SET X tags Y WHERE X is Tag, Y is BlogEntry')
    40         unrelated = [reid for rview, reid in form1.subject_relation_vocabulary('tags')]
    40         unrelated = [reid for rview, reid in form1.subject_relation_vocabulary('tags')]
    41         self.failIf(b.eid in unrelated, unrelated)
    41         self.failIf(b.eid in unrelated, unrelated)
    42         unrelated = [reid for rview, reid in form2.object_relation_vocabulary('tags')]
    42         unrelated = [reid for rview, reid in form2.object_relation_vocabulary('tags')]
    43         self.failIf(t.eid in unrelated, unrelated)
    43         self.failIf(t.eid in unrelated, unrelated)
    44         
    44 
    45     def test_form_field_vocabulary_new_entity(self):
    45     def test_form_field_vocabulary_new_entity(self):
    46         e = self.etype_instance('CWUser')
    46         e = self.etype_instance('CWUser')
    47         form = EntityFieldsForm(self.request(), None, entity=e)
    47         form = EntityFieldsForm(self.request(), None, entity=e)
    48         unrelated = [rview for rview, reid in form.subject_relation_vocabulary('in_group')]
    48         unrelated = [rview for rview, reid in form.subject_relation_vocabulary('in_group')]
    49         # should be default groups but owners, i.e. managers, users, guests
    49         # should be default groups but owners, i.e. managers, users, guests
    62         states = list(form.subject_in_state_vocabulary('in_state'))
    62         states = list(form.subject_in_state_vocabulary('in_state'))
    63         self.assertEquals(len(states), 1)
    63         self.assertEquals(len(states), 1)
    64         self.assertEquals(states[0][0], u'deactivated') # list of (combobox view, state eid)
    64         self.assertEquals(states[0][0], u'deactivated') # list of (combobox view, state eid)
    65 
    65 
    66 
    66 
    67         
    67 
    68     # form view tests #########################################################
    68     # form view tests #########################################################
    69         
    69 
    70     def test_massmailing_formview(self):
    70     def test_massmailing_formview(self):
    71         self.execute('INSERT EmailAddress X: X address L + "@cubicweb.org", '
    71         self.execute('INSERT EmailAddress X: X address L + "@cubicweb.org", '
    72                      'U use_email X WHERE U is CWUser, U login L')
    72                      'U use_email X WHERE U is CWUser, U login L')
    73         rset = self.execute('CWUser X')
    73         rset = self.execute('CWUser X')
    74         self.view('massmailing', rset, template=None)
    74         self.view('massmailing', rset, template=None)
    75         
    75 
    76 
    76 
    77     # form tests ##############################################################
    77     # form tests ##############################################################
    78     
    78 
    79     def test_form_inheritance(self):
    79     def test_form_inheritance(self):
    80         class CustomChangeStateForm(ChangeStateForm):
    80         class CustomChangeStateForm(ChangeStateForm):
    81             hello = IntField(name='youlou')
    81             hello = IntField(name='youlou')
    82             creation_date = DateTimeField(widget=DateTimePicker)
    82             creation_date = DateTimeField(widget=DateTimePicker)
    83         form = CustomChangeStateForm(self.req, redirect_path='perdu.com',
    83         form = CustomChangeStateForm(self.req, redirect_path='perdu.com',
    86 
    86 
    87     def test_change_state_form(self):
    87     def test_change_state_form(self):
    88         form = ChangeStateForm(self.req, redirect_path='perdu.com',
    88         form = ChangeStateForm(self.req, redirect_path='perdu.com',
    89                                entity=self.entity)
    89                                entity=self.entity)
    90         form.form_render(state=123, trcomment=u'')
    90         form.form_render(state=123, trcomment=u'')
    91         
    91 
    92     # fields tests ############################################################
    92     # fields tests ############################################################
    93 
    93 
    94     def _render_entity_field(self, name, form):
    94     def _render_entity_field(self, name, form):
    95         form.form_build_context({})
    95         form.form_build_context({})
    96         return form.field_by_name(name).render(form, self.renderer)
    96         return form.field_by_name(name).render(form, self.renderer)
    97     
    97 
    98     def _test_richtextfield(self, expected):
    98     def _test_richtextfield(self, expected):
    99         class RTFForm(EntityFieldsForm):
    99         class RTFForm(EntityFieldsForm):
   100             content = RichTextField()
   100             description = RichTextField()
   101         card = self.add_entity('Card', title=u"tls sprint fev 2009",
   101         state = self.execute('State X WHERE X name "activated", X state_of ET, ET name "CWUser"').get_entity(0, 0)
   102                                content=u'<h1>new widgets system</h1>',
   102         form = RTFForm(self.req, redirect_path='perdu.com', entity=state)
   103                                content_format=u'text/html')
   103         # make it think it can use fck editor anyway
   104         form = RTFForm(self.req, redirect_path='perdu.com', entity=card)
   104         form.form_field_format = lambda x: 'text/html'
   105         self.assertTextEquals(self._render_entity_field('content', form), expected % {'eid': card.eid})
   105         self.assertTextEquals(self._render_entity_field('description', form),
       
   106                               expected % {'eid': state.eid})
   106 
   107 
   107         
   108 
   108     def test_richtextfield_1(self):
   109     def test_richtextfield_1(self):
   109         self.req.use_fckeditor = lambda: False
   110         self.req.use_fckeditor = lambda: False
   110         self._test_richtextfield('''<select name="content_format:%(eid)s" id="content_format:%(eid)s" tabindex="0">
   111         self._test_richtextfield('''<select name="description_format:%(eid)s" size="1" id="description_format:%(eid)s" tabindex="0">
   111 <option value="text/cubicweb-page-template">text/cubicweb-page-template</option>
   112 <option value="text/cubicweb-page-template">text/cubicweb-page-template</option>
   112 <option selected="selected" value="text/html">text/html</option>
   113 <option value="text/html">text/html</option>
   113 <option value="text/plain">text/plain</option>
   114 <option value="text/plain">text/plain</option>
   114 <option value="text/rest">text/rest</option>
   115 <option selected="selected" value="text/rest">text/rest</option>
   115 </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>''')
   116 </select><textarea rows="5" name="description:564" onkeypress="autogrow(this)" cols="60" id="description:564" tabindex="1"/>''')
   116 
   117 
   117     
   118 
   118     def test_richtextfield_2(self):
   119     def test_richtextfield_2(self):
   119         self.req.use_fckeditor = lambda: True
   120         self.req.use_fckeditor = lambda: True
   120         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>''')
   121         self._test_richtextfield('<input type="hidden" name="description_format:%(eid)s" value="text/rest"/><textarea rows="20" name="description:564" onkeypress="autogrow(this)" cols="80" cubicweb:type="wysiwyg" id="description:564" tabindex="0"/>')
   121 
   122 
   122 
   123 
   123     def test_filefield(self):
   124     def test_filefield(self):
   124         class FFForm(EntityFieldsForm):
   125         class FFForm(EntityFieldsForm):
   125             data = FileField(format_field=StringField(name='data_format'),
   126             data = FileField(format_field=StringField(name='data_format'),
   133 <div id="data:%(eid)s-advanced" class="hidden">
   134 <div id="data:%(eid)s-advanced" class="hidden">
   134 <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/>
   135 <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/>
   135 <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/>
   136 <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/>
   136 </div>
   137 </div>
   137 <br/>
   138 <br/>
   138 <input type="checkbox" name="data:594__detach"/>
   139 <input type="checkbox" name="data:%(eid)s__detach"/>
   139 detach attached file
   140 detach attached file
   140 ''' % {'eid': file.eid})
   141 ''' % {'eid': file.eid})
   141 
   142 
   142         
   143 
   143     def test_editablefilefield(self):
   144     def test_editablefilefield(self):
   144         class EFFForm(EntityFieldsForm):
   145         class EFFForm(EntityFieldsForm):
   145             data = EditableFileField(format_field=StringField(name='data_format'),
   146             data = EditableFileField(format_field=StringField(name='data_format'),
   146                                      encoding_field=StringField(name='data_encoding'))
   147                                      encoding_field=StringField(name='data_encoding'))
   147             def form_field_encoding(self, field):
   148             def form_field_encoding(self, field):
   157 <div id="data:%(eid)s-advanced" class="hidden">
   158 <div id="data:%(eid)s-advanced" class="hidden">
   158 <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/>
   159 <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/>
   159 <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/>
   160 <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/>
   160 </div>
   161 </div>
   161 <br/>
   162 <br/>
   162 <input type="checkbox" name="data:594__detach"/>
   163 <input type="checkbox" name="data:%(eid)s__detach"/>
   163 detach attached file
   164 detach attached file
   164 <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>
   165 <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>
   165 <textarea tabindex="3" name="data:%(eid)s" onkeypress="autogrow(this)">new widgets system</textarea>''' % {'eid': file.eid})
   166 <textarea tabindex="3" rows="20" cols="80" name="data:%(eid)s" onkeypress="autogrow(this)">new widgets system</textarea>''' % {'eid': file.eid})
   166 
   167 
   167 
   168 
   168     def test_passwordfield(self):
   169     def test_passwordfield(self):
   169         class PFForm(EntityFieldsForm):
   170         class PFForm(EntityFieldsForm):
   170             upassword = StringField(widget=PasswordInput)
   171             upassword = StringField(widget=PasswordInput)
   174 <br/>
   175 <br/>
   175 <input type="password" name="upassword-confirm:%(eid)s" value="__cubicweb_internal_field__" tabindex="0"/>
   176 <input type="password" name="upassword-confirm:%(eid)s" value="__cubicweb_internal_field__" tabindex="0"/>
   176 &nbsp;
   177 &nbsp;
   177 <span class="emphasis">confirm password</span>''' % {'eid': self.entity.eid})
   178 <span class="emphasis">confirm password</span>''' % {'eid': self.entity.eid})
   178 
   179 
   179         
   180 
   180 if __name__ == '__main__':
   181 if __name__ == '__main__':
   181     unittest_main()
   182     unittest_main()