web/test/unittest_application.py
changeset 4172 4d4cef034eec
parent 3890 d7a270f50f54
child 4252 6c4f109c2b03
equal deleted inserted replaced
4171:f1b9f0ed1253 4172:4d4cef034eec
   167         self.app.publish('view', req)
   167         self.app.publish('view', req)
   168 
   168 
   169     def test_publish_validation_error(self):
   169     def test_publish_validation_error(self):
   170         req = self.request()
   170         req = self.request()
   171         user = self.user()
   171         user = self.user()
       
   172         eid = unicode(user.eid)
   172         req.form = {
   173         req.form = {
   173             'eid':       `user.eid`,
   174             'eid':       eid,
   174             '__type:'+`user.eid`:    'CWUser',
   175             '__type:'+eid:    'CWUser', '_cw_edited_fields:'+eid: 'login-subject',
   175             'login:'+`user.eid`:     '', # ERROR: no login specified
   176             'login-subject:'+eid:     '', # ERROR: no login specified
   176             'edits-login:'+`user.eid`: unicode(user.login),
       
   177              # just a sample, missing some necessary information for real life
   177              # just a sample, missing some necessary information for real life
   178             '__errorurl': 'view?vid=edition...'
   178             '__errorurl': 'view?vid=edition...'
   179             }
   179             }
   180         path, params = self.expect_redirect(lambda x: self.app_publish(x, 'edit'), req)
   180         path, params = self.expect_redirect(lambda x: self.app_publish(x, 'edit'), req)
   181         forminfo = req.get_session_data('view?vid=edition...')
   181         forminfo = req.get_session_data('view?vid=edition...')
   182         eidmap = forminfo['eidmap']
   182         eidmap = forminfo['eidmap']
   183         self.assertEquals(eidmap, {})
   183         self.assertEquals(eidmap, {})
   184         values = forminfo['values']
   184         values = forminfo['values']
   185         self.assertEquals(values['login:'+`user.eid`], '')
   185         self.assertEquals(values['login-subject:'+eid], '')
   186         self.assertEquals(values['edits-login:'+`user.eid`], user.login)
   186         self.assertEquals(values['eid'], eid)
   187         self.assertEquals(values['eid'], `user.eid`)
       
   188         errors = forminfo['errors']
   187         errors = forminfo['errors']
   189         self.assertEquals(errors.entity, user.eid)
   188         self.assertEquals(errors.entity, user.eid)
   190         self.assertEquals(errors.errors['login'], 'required attribute')
   189         self.assertEquals(errors.errors['login'], 'required attribute')
   191 
   190 
   192 
   191 
   193     def test_validation_error_dont_loose_subentity_data(self):
   192     def test_validation_error_dont_loose_subentity_data(self):
   194         """test creation of two linked entities
   193         """test creation of two linked entities
   195         """
   194         """
   196         req = self.request()
   195         req = self.request()
   197         form = {'eid': ['X', 'Y'],
   196         form = {'eid': ['X', 'Y'], '__maineid': 'X',
   198                 '__type:X': 'CWUser',
   197                 '__type:X': 'CWUser', '_cw_edited_fields:X': 'login-subject,surname-subject',
   199                 # missing required field
   198                 # missing required field
   200                 'login:X': u'', 'edits-login:X': '',
   199                 'login-subject:X': u'',
   201                 'surname:X': u'Mr Ouaoua', 'edits-surname:X': '',
   200                 'surname-subject:X': u'Mr Ouaoua',
   202                 '__type:Y': 'EmailAddress',
       
   203                 # but email address is set
   201                 # but email address is set
   204                 'address:Y': u'bougloup@logilab.fr', 'edits-address:Y': '',
   202                 '__type:Y': 'EmailAddress', '_cw_edited_fields:Y': 'address-subject,alias-subject,use_email-object',
   205                 'alias:Y': u'', 'edits-alias:Y': '',
   203                 'address-subject:Y': u'bougloup@logilab.fr',
   206                 'use_email:X': 'Y', 'edits-use_email:X': INTERNAL_FIELD_VALUE,
   204                 'alias-subject:Y': u'',
       
   205                 'use_email-object:Y': 'X',
   207                 # necessary to get validation error handling
   206                 # necessary to get validation error handling
   208                 '__errorurl': 'view?vid=edition...',
   207                 '__errorurl': 'view?vid=edition...',
   209                 }
   208                 }
   210         req.form = form
   209         req.form = form
   211         # monkey patch edited_eid to ensure both entities are edited, not only X
   210         # monkey patch edited_eid to ensure both entities are edited, not only X
   212         req.edited_eids = lambda : ('Y', 'X')
   211         req.edited_eids = lambda : ('Y', 'X')
   213         path, params = self.expect_redirect(lambda x: self.app_publish(x, 'edit'), req)
   212         path, params = self.expect_redirect(lambda x: self.app_publish(x, 'edit'), req)
   214         forminfo = req.get_session_data('view?vid=edition...')
   213         forminfo = req.get_session_data('view?vid=edition...')
   215         self.assertUnorderedIterableEquals(forminfo['eidmap'].keys(), ['X', 'Y'])
   214         self.assertEquals(set(forminfo['eidmap']), set('XY'))
   216         self.assertEquals(forminfo['errors'].entity, forminfo['eidmap']['X'])
   215         self.assertEquals(forminfo['errors'].entity, forminfo['eidmap']['X'])
   217         self.assertEquals(forminfo['errors'].errors, {'login': 'required attribute',
   216         self.assertEquals(forminfo['errors'].errors, {'login': 'required attribute',
   218                                                       'upassword': 'required attribute'})
   217                                                       'upassword': 'required attribute'})
   219         self.assertEquals(forminfo['values'], form)
   218         self.assertEquals(forminfo['values'], form)
   220 
   219