94 'login-subject:'+eid: u(user.login), |
94 'login-subject:'+eid: u(user.login), |
95 'surname-subject:'+eid: u'Th\xe9nault', |
95 'surname-subject:'+eid: u'Th\xe9nault', |
96 'firstname-subject:'+eid: u'Sylvain', |
96 'firstname-subject:'+eid: u'Sylvain', |
97 'in_group-subject:'+eid: groups, |
97 'in_group-subject:'+eid: groups, |
98 } |
98 } |
99 path, params = self.expect_redirect_publish(req, 'edit') |
99 path, params = self.expect_redirect_handle_request(req, 'edit') |
100 e = self.execute('Any X WHERE X eid %(x)s', {'x': user.eid}).get_entity(0, 0) |
100 e = self.execute('Any X WHERE X eid %(x)s', {'x': user.eid}).get_entity(0, 0) |
101 self.assertEqual(e.firstname, u'Sylvain') |
101 self.assertEqual(e.firstname, u'Sylvain') |
102 self.assertEqual(e.surname, u'Th\xe9nault') |
102 self.assertEqual(e.surname, u'Th\xe9nault') |
103 self.assertEqual(e.login, user.login) |
103 self.assertEqual(e.login, user.login) |
104 self.assertEqual([g.eid for g in e.in_group], groupeids) |
104 self.assertEqual([g.eid for g in e.in_group], groupeids) |
113 '__type:'+eid: 'CWUser', |
113 '__type:'+eid: 'CWUser', |
114 '_cw_entity_fields:'+eid: 'upassword-subject', |
114 '_cw_entity_fields:'+eid: 'upassword-subject', |
115 'upassword-subject:'+eid: 'tournicoton', |
115 'upassword-subject:'+eid: 'tournicoton', |
116 'upassword-subject-confirm:'+eid: 'tournicoton', |
116 'upassword-subject-confirm:'+eid: 'tournicoton', |
117 } |
117 } |
118 path, params = self.expect_redirect_publish(req, 'edit') |
118 path, params = self.expect_redirect_handle_request(req, 'edit') |
119 cnx.commit() # commit to check we don't get late validation error for instance |
119 cnx.commit() # commit to check we don't get late validation error for instance |
120 self.assertEqual(path, 'cwuser/user') |
120 self.assertEqual(path, 'cwuser/user') |
121 self.assertFalse('vid' in params) |
121 self.assertFalse('vid' in params) |
122 |
122 |
123 def test_user_editing_itself_no_relation(self): |
123 def test_user_editing_itself_no_relation(self): |
134 '_cw_entity_fields:'+eid: 'login-subject,firstname-subject,surname-subject', |
134 '_cw_entity_fields:'+eid: 'login-subject,firstname-subject,surname-subject', |
135 'login-subject:'+eid: u(user.login), |
135 'login-subject:'+eid: u(user.login), |
136 'firstname-subject:'+eid: u'Th\xe9nault', |
136 'firstname-subject:'+eid: u'Th\xe9nault', |
137 'surname-subject:'+eid: u'Sylvain', |
137 'surname-subject:'+eid: u'Sylvain', |
138 } |
138 } |
139 path, params = self.expect_redirect_publish(req, 'edit') |
139 path, params = self.expect_redirect_handle_request(req, 'edit') |
140 e = self.execute('Any X WHERE X eid %(x)s', {'x': user.eid}).get_entity(0, 0) |
140 e = self.execute('Any X WHERE X eid %(x)s', {'x': user.eid}).get_entity(0, 0) |
141 self.assertEqual(e.login, user.login) |
141 self.assertEqual(e.login, user.login) |
142 self.assertEqual(e.firstname, u'Th\xe9nault') |
142 self.assertEqual(e.firstname, u'Th\xe9nault') |
143 self.assertEqual(e.surname, u'Sylvain') |
143 self.assertEqual(e.surname, u'Sylvain') |
144 self.assertEqual([g.eid for g in e.in_group], groupeids) |
144 self.assertEqual([g.eid for g in e.in_group], groupeids) |
160 '__type:Y': 'EmailAddress', |
160 '__type:Y': 'EmailAddress', |
161 '_cw_entity_fields:Y': 'address-subject,use_email-object', |
161 '_cw_entity_fields:Y': 'address-subject,use_email-object', |
162 'address-subject:Y': u'dima@logilab.fr', |
162 'address-subject:Y': u'dima@logilab.fr', |
163 'use_email-object:Y': 'X', |
163 'use_email-object:Y': 'X', |
164 } |
164 } |
165 path, params = self.expect_redirect_publish(req, 'edit') |
165 path, params = self.expect_redirect_handle_request(req, 'edit') |
166 # should be redirected on the created person |
166 # should be redirected on the created person |
167 self.assertEqual(path, 'cwuser/adim') |
167 self.assertEqual(path, 'cwuser/adim') |
168 e = self.execute('Any P WHERE P surname "Di Mascio"').get_entity(0, 0) |
168 e = self.execute('Any P WHERE P surname "Di Mascio"').get_entity(0, 0) |
169 self.assertEqual(e.surname, 'Di Mascio') |
169 self.assertEqual(e.surname, 'Di Mascio') |
170 email = e.use_email[0] |
170 email = e.use_email[0] |
182 '__type:Y': u'EmailAddress', |
182 '__type:Y': u'EmailAddress', |
183 '_cw_entity_fields:Y': u'address-subject,use_email-object', |
183 '_cw_entity_fields:Y': u'address-subject,use_email-object', |
184 'address-subject:Y': u'dima@logilab.fr', |
184 'address-subject:Y': u'dima@logilab.fr', |
185 'use_email-object:Y': peid, |
185 'use_email-object:Y': peid, |
186 } |
186 } |
187 path, params = self.expect_redirect_publish(req, 'edit') |
187 path, params = self.expect_redirect_handle_request(req, 'edit') |
188 # should be redirected on the created person |
188 # should be redirected on the created person |
189 self.assertEqual(path, 'cwuser/adim') |
189 self.assertEqual(path, 'cwuser/adim') |
190 e = self.execute('Any P WHERE P surname "Di Masci"').get_entity(0, 0) |
190 e = self.execute('Any P WHERE P surname "Di Masci"').get_entity(0, 0) |
191 email = e.use_email[0] |
191 email = e.use_email[0] |
192 self.assertEqual(email.address, 'dima@logilab.fr') |
192 self.assertEqual(email.address, 'dima@logilab.fr') |
202 '__type:'+emaileid: u'EmailAddress', |
202 '__type:'+emaileid: u'EmailAddress', |
203 '_cw_entity_fields:'+emaileid: u'address-subject,use_email-object', |
203 '_cw_entity_fields:'+emaileid: u'address-subject,use_email-object', |
204 'address-subject:'+emaileid: u'adim@logilab.fr', |
204 'address-subject:'+emaileid: u'adim@logilab.fr', |
205 'use_email-object:'+emaileid: peid, |
205 'use_email-object:'+emaileid: peid, |
206 } |
206 } |
207 path, params = self.expect_redirect_publish(req, 'edit') |
207 path, params = self.expect_redirect_handle_request(req, 'edit') |
208 email.cw_clear_all_caches() |
208 email.cw_clear_all_caches() |
209 self.assertEqual(email.address, 'adim@logilab.fr') |
209 self.assertEqual(email.address, 'adim@logilab.fr') |
210 |
210 |
211 |
211 |
212 def test_password_confirm(self): |
212 def test_password_confirm(self): |
265 '__type:X': 'Salesterm', |
265 '__type:X': 'Salesterm', |
266 '_cw_entity_fields:X': 'amount-subject,described_by_test-subject', |
266 '_cw_entity_fields:X': 'amount-subject,described_by_test-subject', |
267 'amount-subject:X': u'10', |
267 'amount-subject:X': u'10', |
268 'described_by_test-subject:X': u(feid), |
268 'described_by_test-subject:X': u(feid), |
269 } |
269 } |
270 self.expect_redirect_publish(req, 'edit') |
270 self.expect_redirect_handle_request(req, 'edit') |
271 # should be redirected on the created |
271 # should be redirected on the created |
272 #eid = params['rql'].split()[-1] |
272 #eid = params['rql'].split()[-1] |
273 e = self.execute('Salesterm X').get_entity(0, 0) |
273 e = self.execute('Salesterm X').get_entity(0, 0) |
274 self.assertEqual(e.amount, 10) |
274 self.assertEqual(e.amount, 10) |
275 |
275 |
277 """make sure req's pending insertions are taken into account""" |
277 """make sure req's pending insertions are taken into account""" |
278 tmpgroup = self.request().create_entity('CWGroup', name=u"test") |
278 tmpgroup = self.request().create_entity('CWGroup', name=u"test") |
279 user = self.user() |
279 user = self.user() |
280 req = self.request(**req_form(user)) |
280 req = self.request(**req_form(user)) |
281 req.session.data['pending_insert'] = set([(user.eid, 'in_group', tmpgroup.eid)]) |
281 req.session.data['pending_insert'] = set([(user.eid, 'in_group', tmpgroup.eid)]) |
282 path, params = self.expect_redirect_publish(req, 'edit') |
282 path, params = self.expect_redirect_handle_request(req, 'edit') |
283 usergroups = [gname for gname, in |
283 usergroups = [gname for gname, in |
284 self.execute('Any N WHERE G name N, U in_group G, U eid %(u)s', {'u': user.eid})] |
284 self.execute('Any N WHERE G name N, U in_group G, U eid %(u)s', {'u': user.eid})] |
285 self.assertItemsEqual(usergroups, ['managers', 'test']) |
285 self.assertItemsEqual(usergroups, ['managers', 'test']) |
286 self.assertEqual(get_pending_inserts(req), []) |
286 self.assertEqual(get_pending_inserts(req), []) |
287 |
287 |
296 # just make sure everything was set correctly |
296 # just make sure everything was set correctly |
297 self.assertItemsEqual(usergroups, ['managers', 'test']) |
297 self.assertItemsEqual(usergroups, ['managers', 'test']) |
298 # now try to delete the relation |
298 # now try to delete the relation |
299 req = self.request(**req_form(user)) |
299 req = self.request(**req_form(user)) |
300 req.session.data['pending_delete'] = set([(user.eid, 'in_group', groupeid)]) |
300 req.session.data['pending_delete'] = set([(user.eid, 'in_group', groupeid)]) |
301 path, params = self.expect_redirect_publish(req, 'edit') |
301 path, params = self.expect_redirect_handle_request(req, 'edit') |
302 usergroups = [gname for gname, in |
302 usergroups = [gname for gname, in |
303 self.execute('Any N WHERE G name N, U in_group G, U eid %(u)s', {'u': user.eid})] |
303 self.execute('Any N WHERE G name N, U in_group G, U eid %(u)s', {'u': user.eid})] |
304 self.assertItemsEqual(usergroups, ['managers']) |
304 self.assertItemsEqual(usergroups, ['managers']) |
305 self.assertEqual(get_pending_deletes(req), []) |
305 self.assertEqual(get_pending_deletes(req), []) |
306 |
306 |
316 '__redirectvid': 'primary', |
316 '__redirectvid': 'primary', |
317 '__redirectparams': 'toto=tutu&tata=titi', |
317 '__redirectparams': 'toto=tutu&tata=titi', |
318 '__form_id': 'edition', |
318 '__form_id': 'edition', |
319 '__action_apply': '', |
319 '__action_apply': '', |
320 } |
320 } |
321 path, params = self.expect_redirect_publish(req, 'edit') |
321 path, params = self.expect_redirect_handle_request(req, 'edit') |
322 self.assertTrue(path.startswith('blogentry/')) |
322 self.assertTrue(path.startswith('blogentry/')) |
323 eid = path.split('/')[1] |
323 eid = path.split('/')[1] |
324 self.assertEqual(params['vid'], 'edition') |
324 self.assertEqual(params['vid'], 'edition') |
325 self.assertNotEqual(int(eid), 4012) |
325 self.assertNotEqual(int(eid), 4012) |
326 self.assertEqual(params['__redirectrql'], redirectrql) |
326 self.assertEqual(params['__redirectrql'], redirectrql) |
338 '__redirectrql': redirectrql, |
338 '__redirectrql': redirectrql, |
339 '__redirectvid': 'primary', |
339 '__redirectvid': 'primary', |
340 '__redirectparams': 'toto=tutu&tata=titi', |
340 '__redirectparams': 'toto=tutu&tata=titi', |
341 '__form_id': 'edition', |
341 '__form_id': 'edition', |
342 } |
342 } |
343 path, params = self.expect_redirect_publish(req, 'edit') |
343 path, params = self.expect_redirect_handle_request(req, 'edit') |
344 self.assertEqual(path, 'view') |
344 self.assertEqual(path, 'view') |
345 self.assertEqual(params['rql'], redirectrql) |
345 self.assertEqual(params['rql'], redirectrql) |
346 self.assertEqual(params['vid'], 'primary') |
346 self.assertEqual(params['vid'], 'primary') |
347 self.assertEqual(params['tata'], 'titi') |
347 self.assertEqual(params['tata'], 'titi') |
348 self.assertEqual(params['toto'], 'tutu') |
348 self.assertEqual(params['toto'], 'tutu') |
350 def test_redirect_delete_button(self): |
350 def test_redirect_delete_button(self): |
351 req = self.request() |
351 req = self.request() |
352 eid = req.create_entity('BlogEntry', title=u'hop', content=u'hop').eid |
352 eid = req.create_entity('BlogEntry', title=u'hop', content=u'hop').eid |
353 req.form = {'eid': u(eid), '__type:%s'%eid: 'BlogEntry', |
353 req.form = {'eid': u(eid), '__type:%s'%eid: 'BlogEntry', |
354 '__action_delete': ''} |
354 '__action_delete': ''} |
355 path, params = self.expect_redirect_publish(req, 'edit') |
355 path, params = self.expect_redirect_handle_request(req, 'edit') |
356 self.assertEqual(path, 'blogentry') |
356 self.assertEqual(path, 'blogentry') |
357 self.assertIn('_cwmsgid', params) |
357 self.assertIn('_cwmsgid', params) |
358 eid = req.create_entity('EmailAddress', address=u'hop@logilab.fr').eid |
358 eid = req.create_entity('EmailAddress', address=u'hop@logilab.fr').eid |
359 self.execute('SET X use_email E WHERE E eid %(e)s, X eid %(x)s', |
359 self.execute('SET X use_email E WHERE E eid %(e)s, X eid %(x)s', |
360 {'x': self.session.user.eid, 'e': eid}) |
360 {'x': self.session.user.eid, 'e': eid}) |
361 self.commit() |
361 self.commit() |
362 req = req |
362 req = req |
363 req.form = {'eid': u(eid), '__type:%s'%eid: 'EmailAddress', |
363 req.form = {'eid': u(eid), '__type:%s'%eid: 'EmailAddress', |
364 '__action_delete': ''} |
364 '__action_delete': ''} |
365 path, params = self.expect_redirect_publish(req, 'edit') |
365 path, params = self.expect_redirect_handle_request(req, 'edit') |
366 self.assertEqual(path, 'cwuser/admin') |
366 self.assertEqual(path, 'cwuser/admin') |
367 self.assertIn('_cwmsgid', params) |
367 self.assertIn('_cwmsgid', params) |
368 eid1 = req.create_entity('BlogEntry', title=u'hop', content=u'hop').eid |
368 eid1 = req.create_entity('BlogEntry', title=u'hop', content=u'hop').eid |
369 eid2 = req.create_entity('EmailAddress', address=u'hop@logilab.fr').eid |
369 eid2 = req.create_entity('EmailAddress', address=u'hop@logilab.fr').eid |
370 req = self.request() |
370 req = self.request() |
371 req.form = {'eid': [u(eid1), u(eid2)], |
371 req.form = {'eid': [u(eid1), u(eid2)], |
372 '__type:%s'%eid1: 'BlogEntry', |
372 '__type:%s'%eid1: 'BlogEntry', |
373 '__type:%s'%eid2: 'EmailAddress', |
373 '__type:%s'%eid2: 'EmailAddress', |
374 '__action_delete': ''} |
374 '__action_delete': ''} |
375 path, params = self.expect_redirect_publish(req, 'edit') |
375 path, params = self.expect_redirect_handle_request(req, 'edit') |
376 self.assertEqual(path, 'view') |
376 self.assertEqual(path, 'view') |
377 self.assertIn('_cwmsgid', params) |
377 self.assertIn('_cwmsgid', params) |
378 |
378 |
379 def test_simple_copy(self): |
379 def test_simple_copy(self): |
380 req = self.request() |
380 req = self.request() |
386 '__cloned_eid:X': blogentry.eid, '__type:X': 'BlogEntry', |
386 '__cloned_eid:X': blogentry.eid, '__type:X': 'BlogEntry', |
387 '_cw_entity_fields:X': 'title-subject,content-subject', |
387 '_cw_entity_fields:X': 'title-subject,content-subject', |
388 'title-subject:X': u'entry1-copy', |
388 'title-subject:X': u'entry1-copy', |
389 'content-subject:X': u'content1', |
389 'content-subject:X': u'content1', |
390 } |
390 } |
391 self.expect_redirect_publish(req, 'edit') |
391 self.expect_redirect_handle_request(req, 'edit') |
392 blogentry2 = req.find_one_entity('BlogEntry', title=u'entry1-copy') |
392 blogentry2 = req.find_one_entity('BlogEntry', title=u'entry1-copy') |
393 self.assertEqual(blogentry2.entry_of[0].eid, blog.eid) |
393 self.assertEqual(blogentry2.entry_of[0].eid, blog.eid) |
394 |
394 |
395 def test_skip_copy_for(self): |
395 def test_skip_copy_for(self): |
396 req = self.request() |
396 req = self.request() |
404 '__cloned_eid:X': blogentry.eid, '__type:X': 'BlogEntry', |
404 '__cloned_eid:X': blogentry.eid, '__type:X': 'BlogEntry', |
405 '_cw_entity_fields:X': 'title-subject,content-subject', |
405 '_cw_entity_fields:X': 'title-subject,content-subject', |
406 'title-subject:X': u'entry1-copy', |
406 'title-subject:X': u'entry1-copy', |
407 'content-subject:X': u'content1', |
407 'content-subject:X': u'content1', |
408 } |
408 } |
409 self.expect_redirect_publish(req, 'edit') |
409 self.expect_redirect_handle_request(req, 'edit') |
410 blogentry2 = req.find_one_entity('BlogEntry', title=u'entry1-copy') |
410 blogentry2 = req.find_one_entity('BlogEntry', title=u'entry1-copy') |
411 # entry_of should not be copied |
411 # entry_of should not be copied |
412 self.assertEqual(len(blogentry2.entry_of), 0) |
412 self.assertEqual(len(blogentry2.entry_of), 0) |
413 finally: |
413 finally: |
414 blogentry.__class__.cw_skip_copy_for = [] |
414 blogentry.__class__.cw_skip_copy_for = [] |
430 'final-subject:'+cwetypeeid: '', |
430 'final-subject:'+cwetypeeid: '', |
431 'description-subject:'+cwetypeeid: u'users group', |
431 'description-subject:'+cwetypeeid: u'users group', |
432 'read_permission-subject:'+cwetypeeid: groups, |
432 'read_permission-subject:'+cwetypeeid: groups, |
433 } |
433 } |
434 try: |
434 try: |
435 path, params = self.expect_redirect_publish(req, 'edit') |
435 path, params = self.expect_redirect_handle_request(req, 'edit') |
436 e = self.execute('Any X WHERE X eid %(x)s', {'x': cwetypeeid}).get_entity(0, 0) |
436 e = self.execute('Any X WHERE X eid %(x)s', {'x': cwetypeeid}).get_entity(0, 0) |
437 self.assertEqual(e.name, 'CWEType') |
437 self.assertEqual(e.name, 'CWEType') |
438 self.assertEqual(sorted(g.eid for g in e.read_permission), groupeids) |
438 self.assertEqual(sorted(g.eid for g in e.read_permission), groupeids) |
439 finally: |
439 finally: |
440 # restore |
440 # restore |
450 req.form = { |
450 req.form = { |
451 'eid': 'A', '__maineid' : 'A', |
451 'eid': 'A', '__maineid' : 'A', |
452 '__type:A': 'BlogEntry', '_cw_entity_fields:A': 'title-subject,content-subject', |
452 '__type:A': 'BlogEntry', '_cw_entity_fields:A': 'title-subject,content-subject', |
453 'title-subject:A': u'"13:03:40"', |
453 'title-subject:A': u'"13:03:40"', |
454 'content-subject:A': u'"13:03:43"',} |
454 'content-subject:A': u'"13:03:43"',} |
455 path, params = self.expect_redirect_publish(req, 'edit') |
455 path, params = self.expect_redirect_handle_request(req, 'edit') |
456 self.assertTrue(path.startswith('blogentry/')) |
456 self.assertTrue(path.startswith('blogentry/')) |
457 eid = path.split('/')[1] |
457 eid = path.split('/')[1] |
458 e = self.execute('Any C, T WHERE C eid %(x)s, C content T', {'x': eid}).get_entity(0, 0) |
458 e = self.execute('Any C, T WHERE C eid %(x)s, C content T', {'x': eid}).get_entity(0, 0) |
459 self.assertEqual(e.title, '"13:03:40"') |
459 self.assertEqual(e.title, '"13:03:40"') |
460 self.assertEqual(e.content, '"13:03:43"') |
460 self.assertEqual(e.content, '"13:03:43"') |
488 '__cloned_eid:X': user.eid, '__type:X': 'CWUser', |
488 '__cloned_eid:X': user.eid, '__type:X': 'CWUser', |
489 '_cw_entity_fields:X': 'login-subject,upassword-subject', |
489 '_cw_entity_fields:X': 'login-subject,upassword-subject', |
490 'login-subject:X': u'toto', |
490 'login-subject:X': u'toto', |
491 'upassword-subject:X': u'toto', 'upassword-subject-confirm:X': u'toto', |
491 'upassword-subject:X': u'toto', 'upassword-subject-confirm:X': u'toto', |
492 } |
492 } |
493 path, params = self.expect_redirect_publish(req, 'edit') |
493 path, params = self.expect_redirect_handle_request(req, 'edit') |
494 self.assertEqual(path, 'cwuser/toto') |
494 self.assertEqual(path, 'cwuser/toto') |
495 e = self.execute('Any X WHERE X is CWUser, X login "toto"').get_entity(0, 0) |
495 e = self.execute('Any X WHERE X is CWUser, X login "toto"').get_entity(0, 0) |
496 self.assertEqual(e.login, 'toto') |
496 self.assertEqual(e.login, 'toto') |
497 self.assertEqual(e.in_group[0].name, 'managers') |
497 self.assertEqual(e.in_group[0].name, 'managers') |
498 |
498 |
518 # try to emulate what really happens in the web application |
518 # try to emulate what really happens in the web application |
519 # 1/ validate form => EditController.publish raises a ValidationError |
519 # 1/ validate form => EditController.publish raises a ValidationError |
520 # which fires a Redirect |
520 # which fires a Redirect |
521 # 2/ When re-publishing the copy form, the publisher implicitly commits |
521 # 2/ When re-publishing the copy form, the publisher implicitly commits |
522 try: |
522 try: |
523 self.app_publish(req, 'edit') |
523 self.app_handle_request(req, 'edit') |
524 except Redirect: |
524 except Redirect: |
525 req = self.request() |
525 req = self.request() |
526 req.form['rql'] = 'Any X WHERE X eid %s' % p.eid |
526 req.form['rql'] = 'Any X WHERE X eid %s' % p.eid |
527 req.form['vid'] = 'copy' |
527 req.form['vid'] = 'copy' |
528 self.app_publish(req, 'view') |
528 self.app_handle_request(req, 'view') |
529 rset = self.execute('CWUser P WHERE P surname "Boom"') |
529 rset = self.execute('CWUser P WHERE P surname "Boom"') |
530 self.assertEqual(len(rset), 0) |
530 self.assertEqual(len(rset), 0) |
531 finally: |
531 finally: |
532 p.__class__.skip_copy_for = old_skips |
532 p.__class__.skip_copy_for = old_skips |
533 |
533 |