--- a/web/test/unittest_application.py Fri Mar 26 13:23:25 2010 +0100
+++ b/web/test/unittest_application.py Fri Mar 26 13:33:32 2010 +0100
@@ -186,37 +186,66 @@
self.assertEquals(values['eid'], eid)
error = forminfo['error']
self.assertEquals(error.entity, user.eid)
- self.assertEquals(error.errors['login-subject'], 'required attribute')
+ self.assertEquals(error.errors['login-subject'], 'required field')
- def test_validation_error_dont_loose_subentity_data(self):
+ def test_validation_error_dont_loose_subentity_data_ctrl(self):
"""test creation of two linked entities
+
+ error occurs on the web controller
"""
req = self.request()
- form = {'eid': ['X', 'Y'], '__maineid': 'X',
- '__type:X': 'CWUser', '_cw_edited_fields:X': 'login-subject,surname-subject',
- # missing required field
- 'login-subject:X': u'',
- 'surname-subject:X': u'Mr Ouaoua',
- # but email address is set
- '__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...',
- }
- req.form = form
- # monkey patch edited_eid to ensure both entities are edited, not only X
- req.edited_eids = lambda : ('Y', 'X')
+ # set Y before X to ensure both entities are edited, not only X
+ req.form = {'eid': ['Y', 'X'], '__maineid': 'X',
+ '__type:X': 'CWUser', '_cw_edited_fields:X': 'login-subject',
+ # missing required field
+ 'login-subject:X': u'',
+ # but email address is set
+ '__type:Y': 'EmailAddress', '_cw_edited_fields:Y': 'address-subject',
+ 'address-subject:Y': u'bougloup@logilab.fr',
+ 'use_email-object:Y': 'X',
+ # necessary to get validation error handling
+ '__errorurl': 'view?vid=edition...',
+ }
path, params = self.expect_redirect(lambda x: self.app_publish(x, 'edit'), req)
forminfo = req.get_session_data('view?vid=edition...')
self.assertEquals(set(forminfo['eidmap']), set('XY'))
+ self.assertEquals(forminfo['eidmap']['X'], None)
+ self.assertIsInstance(forminfo['eidmap']['Y'], int)
+ self.assertEquals(forminfo['error'].entity, 'X')
+ self.assertEquals(forminfo['error'].errors,
+ {'login-subject': 'required field'})
+ self.assertEquals(forminfo['values'], req.form)
+
+
+ def test_validation_error_dont_loose_subentity_data_repo(self):
+ """test creation of two linked entities
+
+ error occurs on the repository
+ """
+ req = self.request()
+ # set Y before X to ensure both entities are edited, not only X
+ req.form = {'eid': ['Y', 'X'], '__maineid': 'X',
+ '__type:X': 'CWUser', '_cw_edited_fields:X': 'login-subject,upassword-subject',
+ # already existent user
+ 'login-subject:X': u'admin',
+ 'upassword-subject:X': u'admin', 'upassword-subject-confirm:X': u'admin',
+ '__type:Y': 'EmailAddress', '_cw_edited_fields:Y': 'address-subject',
+ 'address-subject:Y': u'bougloup@logilab.fr',
+ 'use_email-object:Y': 'X',
+ # necessary to get validation error handling
+ '__errorurl': 'view?vid=edition...',
+ }
+ path, params = self.expect_redirect(lambda x: self.app_publish(x, 'edit'), req)
+ forminfo = req.get_session_data('view?vid=edition...')
+ self.assertEquals(set(forminfo['eidmap']), set('XY'))
+ self.assertIsInstance(forminfo['eidmap']['X'], int)
+ self.assertIsInstance(forminfo['eidmap']['Y'], int)
self.assertEquals(forminfo['error'].entity, forminfo['eidmap']['X'])
self.assertEquals(forminfo['error'].errors,
- {'login-subject': 'required attribute',
- 'upassword-subject': 'required attribute'})
- self.assertEquals(forminfo['values'], form)
+ {'login-subject': u'the value "admin" is already used, use another one'})
+ self.assertEquals(forminfo['values'], req.form)
+
def _test_cleaned(self, kwargs, injected, cleaned):
req = self.request(**kwargs)