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 |