# HG changeset patch # User Sylvain Thénault # Date 1261423688 -3600 # Node ID 4d4cef034eec5f3335c9b730ae31f3fbb32e27fc # Parent f1b9f0ed1253fbfb1965203dcb857b73b59a93aa all web tests OK diff -r f1b9f0ed1253 -r 4d4cef034eec web/test/unittest_application.py --- a/web/test/unittest_application.py Mon Dec 21 20:28:01 2009 +0100 +++ b/web/test/unittest_application.py Mon Dec 21 20:28:08 2009 +0100 @@ -169,11 +169,11 @@ def test_publish_validation_error(self): req = self.request() user = self.user() + eid = unicode(user.eid) req.form = { - 'eid': `user.eid`, - '__type:'+`user.eid`: 'CWUser', - 'login:'+`user.eid`: '', # ERROR: no login specified - 'edits-login:'+`user.eid`: unicode(user.login), + 'eid': eid, + '__type:'+eid: 'CWUser', '_cw_edited_fields:'+eid: 'login-subject', + 'login-subject:'+eid: '', # ERROR: no login specified # just a sample, missing some necessary information for real life '__errorurl': 'view?vid=edition...' } @@ -182,9 +182,8 @@ eidmap = forminfo['eidmap'] self.assertEquals(eidmap, {}) values = forminfo['values'] - self.assertEquals(values['login:'+`user.eid`], '') - self.assertEquals(values['edits-login:'+`user.eid`], user.login) - self.assertEquals(values['eid'], `user.eid`) + self.assertEquals(values['login-subject:'+eid], '') + self.assertEquals(values['eid'], eid) errors = forminfo['errors'] self.assertEquals(errors.entity, user.eid) self.assertEquals(errors.errors['login'], 'required attribute') @@ -194,16 +193,16 @@ """test creation of two linked entities """ req = self.request() - form = {'eid': ['X', 'Y'], - '__type:X': 'CWUser', + form = {'eid': ['X', 'Y'], '__maineid': 'X', + '__type:X': 'CWUser', '_cw_edited_fields:X': 'login-subject,surname-subject', # missing required field - 'login:X': u'', 'edits-login:X': '', - 'surname:X': u'Mr Ouaoua', 'edits-surname:X': '', - '__type:Y': 'EmailAddress', + 'login-subject:X': u'', + 'surname-subject:X': u'Mr Ouaoua', # but email address is set - 'address:Y': u'bougloup@logilab.fr', 'edits-address:Y': '', - 'alias:Y': u'', 'edits-alias:Y': '', - 'use_email:X': 'Y', 'edits-use_email:X': INTERNAL_FIELD_VALUE, + '__type:Y': 'EmailAddress', '_cw_edited_fields:Y': 'address-subject,alias-subject,use_email-object', + 'address-subject:Y': u'bougloup@logilab.fr', + 'alias-subject:Y': u'', + 'use_email-object:Y': 'X', # necessary to get validation error handling '__errorurl': 'view?vid=edition...', } @@ -212,7 +211,7 @@ req.edited_eids = lambda : ('Y', 'X') path, params = self.expect_redirect(lambda x: self.app_publish(x, 'edit'), req) forminfo = req.get_session_data('view?vid=edition...') - self.assertUnorderedIterableEquals(forminfo['eidmap'].keys(), ['X', 'Y']) + self.assertEquals(set(forminfo['eidmap']), set('XY')) self.assertEquals(forminfo['errors'].entity, forminfo['eidmap']['X']) self.assertEquals(forminfo['errors'].errors, {'login': 'required attribute', 'upassword': 'required attribute'}) diff -r f1b9f0ed1253 -r 4d4cef034eec web/test/unittest_breadcrumbs.py --- a/web/test/unittest_breadcrumbs.py Mon Dec 21 20:28:01 2009 +0100 +++ b/web/test/unittest_breadcrumbs.py Mon Dec 21 20:28:08 2009 +0100 @@ -3,8 +3,9 @@ class BreadCrumbsTC(CubicWebTC): def test_base(self): - f1 = self.add_entity('Folder', name=u'par&ent') - f2 = self.add_entity('Folder', name=u'chi&ld') + req = self.request() + f1 = req.create_entity('Folder', name=u'par&ent') + f2 = req.create_entity('Folder', name=u'chi&ld') self.execute('SET F2 filed_under F1 WHERE F1 eid %(f1)s, F2 eid %(f2)s', {'f1' : f1.eid, 'f2' : f2.eid}) self.commit() @@ -15,3 +16,7 @@ self.assertEquals(ibc.render(), """ > folder_plural > par&ent >  chi&ld""" % f1.eid) + +if __name__ == '__main__': + from logilab.common.testlib import unittest_main + unittest_main() diff -r f1b9f0ed1253 -r 4d4cef034eec web/test/unittest_form.py --- a/web/test/unittest_form.py Mon Dec 21 20:28:01 2009 +0100 +++ b/web/test/unittest_form.py Mon Dec 21 20:28:08 2009 +0100 @@ -15,7 +15,7 @@ from cubicweb import Binary from cubicweb.devtools.testlib import CubicWebTC from cubicweb.web.formfields import (IntField, StringField, RichTextField, - DateTimeField, DateTimePicker, + PasswordField, DateTimeField, DateTimePicker, FileField, EditableFileField) from cubicweb.web.formwidgets import PasswordInput, Input from cubicweb.web.views.forms import EntityFieldsForm, FieldsForm @@ -27,10 +27,10 @@ def test_form_field_format(self): form = FieldsForm(self.request(), None) - self.assertEquals(form.form_field_format(None), 'text/html') + self.assertEquals(StringField().format(form), 'text/html') self.execute('INSERT CWProperty X: X pkey "ui.default-text-format", X value "text/rest", X for_user U WHERE U login "admin"') self.commit() - self.assertEquals(form.form_field_format(None), 'text/rest') + self.assertEquals(StringField().format(form), 'text/rest') class EntityFieldsFormTC(CubicWebTC): @@ -41,42 +41,28 @@ self.entity = self.user(self.req) def test_form_field_vocabulary_unrelated(self): - b = self.add_entity('BlogEntry', title=u'di mascii code', content=u'a best-seller') - t = self.add_entity('Tag', name=u'x') - form1 = EntityFieldsForm(self.request(), None, entity=t) - unrelated = [reid for rview, reid in form1.subject_relation_vocabulary('tags')] + b = self.req.create_entity('BlogEntry', title=u'di mascii code', content=u'a best-seller') + t = self.req.create_entity('Tag', name=u'x') + form1 = self.vreg['forms'].select('edition', self.req, entity=t) + unrelated = [reid for rview, reid in form1.field_by_name('tags', 'subject', t.e_schema).choices(form1)] self.failUnless(b.eid in unrelated, unrelated) - form2 = EntityFieldsForm(self.request(), None, entity=b) - unrelated = [reid for rview, reid in form2.object_relation_vocabulary('tags')] + form2 = self.vreg['forms'].select('edition', self.req, entity=b) + unrelated = [reid for rview, reid in form2.field_by_name('tags', 'object', t.e_schema).choices(form2)] self.failUnless(t.eid in unrelated, unrelated) self.execute('SET X tags Y WHERE X is Tag, Y is BlogEntry') - unrelated = [reid for rview, reid in form1.subject_relation_vocabulary('tags')] + unrelated = [reid for rview, reid in form1.field_by_name('tags', 'subject', t.e_schema).choices(form1)] self.failIf(b.eid in unrelated, unrelated) - unrelated = [reid for rview, reid in form2.object_relation_vocabulary('tags')] + unrelated = [reid for rview, reid in form2.field_by_name('tags', 'object', t.e_schema).choices(form2)] self.failIf(t.eid in unrelated, unrelated) def test_form_field_vocabulary_new_entity(self): e = self.vreg['etypes'].etype_class('CWUser')(self.request()) - form = EntityFieldsForm(e.req, None, entity=e) - unrelated = [rview for rview, reid in form.subject_relation_vocabulary('in_group')] + form = self.vreg['forms'].select('edition', self.req, entity=e) + unrelated = [rview for rview, reid in form.field_by_name('in_group', 'subject').choices(form)] # should be default groups but owners, i.e. managers, users, guests self.assertEquals(unrelated, [u'guests', u'managers', u'users']) - # def test_subject_in_state_vocabulary(self): - # # on a new entity - # e = self.etype_instance('CWUser') - # form = EntityFieldsForm(self.request(), None, entity=e) - # states = list(form.subject_in_state_vocabulary('in_state')) - # self.assertEquals(len(states), 1) - # self.assertEquals(states[0][0], u'activated') # list of (combobox view, state eid) - # # on an existant entity - # e = self.user() - # form = EntityFieldsForm(self.request(), None, entity=e) - # states = list(form.subject_in_state_vocabulary('in_state')) - # self.assertEquals(len(states), 1) - # self.assertEquals(states[0][0], u'deactivated') # list of (combobox view, state eid) - def test_consider_req_form_params(self): e = self.vreg['etypes'].etype_class('CWUser')(self.request()) e.eid = 'A' @@ -84,20 +70,20 @@ field = StringField(name='login', eidparam=True) form.append_field(field) form.build_context({}) - self.assertEquals(form.form_field_display_value(field, {}), 'toto') + self.assertEquals(field.display_value(form), 'toto') def test_linkto_field_duplication(self): e = self.vreg['etypes'].etype_class('CWUser')(self.request()) e.eid = 'A' - e.req = self.req + e._cw = self.req geid = self.execute('CWGroup X WHERE X name "users"')[0][0] self.req.form['__linkto'] = 'in_group:%s:subject' % geid form = self.vreg['forms'].select('edition', self.req, entity=e) form.content_type = 'text/html' pageinfo = self._check_html(form.render(), form, template=None) inputs = pageinfo.find_tag('select', False) - self.failUnless(any(attrs for t, attrs in inputs if attrs.get('name') == 'in_group:A')) + self.failUnless(any(attrs for t, attrs in inputs if attrs.get('name') == 'in_group-subject:A')) inputs = pageinfo.find_tag('input', False) self.failIf(any(attrs for t, attrs in inputs if attrs.get('name') == '__linkto')) @@ -106,8 +92,7 @@ form = self.vreg['views'].select('doreledit', self.request(), rset=rset, row=0, rtype='content') data = form.render(row=0, rtype='content') - self.failUnless('edits-content' in data) - self.failUnless('edits-content_format' in data) + self.failUnless('content_format' in data) # form view tests ######################################################### @@ -140,98 +125,102 @@ def _render_entity_field(self, name, form): form.build_context({}) renderer = FormRenderer(self.req) - return form.field_by_name(name).render(form, renderer) + return form.field_by_name(name, 'subject').render(form, renderer) def _test_richtextfield(self, expected): class RTFForm(EntityFieldsForm): - description = RichTextField() + description = RichTextField(eidparam=True, role='subject') state = self.execute('State X WHERE X name "activated", X state_of WF, WF workflow_of ET, ET name "CWUser"').get_entity(0, 0) form = RTFForm(self.req, redirect_path='perdu.com', entity=state) # make it think it can use fck editor anyway - form.form_field_format = lambda x: 'text/html' + form.field_by_name('description', 'subject').format = lambda x: 'text/html' self.assertTextEquals(self._render_entity_field('description', form), expected % {'eid': state.eid}) def test_richtextfield_1(self): self.req.use_fckeditor = lambda: False - self._test_richtextfield(''' - + - -''') + +''') def test_richtextfield_2(self): self.req.use_fckeditor = lambda: True - self._test_richtextfield('') + self._test_richtextfield('') def test_filefield(self): class FFForm(EntityFieldsForm): - data = FileField(format_field=StringField(name='data_format', max_length=50), - encoding_field=StringField(name='data_encoding', max_length=20)) - file = self.add_entity('File', data_name=u"pouet.txt", data_encoding=u'UTF-8', + data = FileField( + format_field=StringField(name='data_format', max_length=50, + eidparam=True, role='subject'), + encoding_field=StringField(name='data_encoding', max_length=20, + eidparam=True, role='subject'), + eidparam=True, role='subject') + file = self.req.create_entity('File', data_name=u"pouet.txt", data_encoding=u'UTF-8', data=Binary('new widgets system')) form = FFForm(self.req, redirect_path='perdu.com', entity=file) self.assertTextEquals(self._render_entity_field('data', form), - ''' -show advanced fields -