34 |
34 |
35 def test_validation_unique(self): |
35 def test_validation_unique(self): |
36 """test creation of two linked entities |
36 """test creation of two linked entities |
37 """ |
37 """ |
38 user = self.user() |
38 user = self.user() |
39 self.req.form = {'eid': 'X', '__type:X': 'EUser', |
39 self.req.form = {'eid': 'X', '__type:X': 'CWUser', |
40 'login:X': u'admin', 'edits-login:X': u'', |
40 'login:X': u'admin', 'edits-login:X': u'', |
41 'upassword:X': u'toto', 'upassword-confirm:X': u'toto', 'edits-upassword:X': u'', |
41 'upassword:X': u'toto', 'upassword-confirm:X': u'toto', 'edits-upassword:X': u'', |
42 } |
42 } |
43 self.assertRaises(ValidationError, self.publish, self.req) |
43 self.assertRaises(ValidationError, self.publish, self.req) |
44 |
44 |
45 |
45 |
46 def test_user_editing_itself(self): |
46 def test_user_editing_itself(self): |
47 """checking that a manager user can edit itself |
47 """checking that a manager user can edit itself |
48 """ |
48 """ |
49 user = self.user() |
49 user = self.user() |
50 basegroups = [str(eid) for eid, in self.execute('EGroup G WHERE X in_group G, X eid %(x)s', {'x': user.eid})] |
50 basegroups = [str(eid) for eid, in self.execute('CWGroup G WHERE X in_group G, X eid %(x)s', {'x': user.eid})] |
51 groupeids = [eid for eid, in self.execute('EGroup G WHERE G name in ("managers", "users")')] |
51 groupeids = [eid for eid, in self.execute('CWGroup G WHERE G name in ("managers", "users")')] |
52 groups = [str(eid) for eid in groupeids] |
52 groups = [str(eid) for eid in groupeids] |
53 stateeid = [eid for eid, in self.execute('State S WHERE S name "activated"')][0] |
53 stateeid = [eid for eid, in self.execute('State S WHERE S name "activated"')][0] |
54 self.req.form = { |
54 self.req.form = { |
55 'eid': `user.eid`, |
55 'eid': `user.eid`, |
56 '__type:'+`user.eid`: 'EUser', |
56 '__type:'+`user.eid`: 'CWUser', |
57 'login:'+`user.eid`: unicode(user.login), |
57 'login:'+`user.eid`: unicode(user.login), |
58 'firstname:'+`user.eid`: u'Th\xe9nault', |
58 'firstname:'+`user.eid`: u'Th\xe9nault', |
59 'surname:'+`user.eid`: u'Sylvain', |
59 'surname:'+`user.eid`: u'Sylvain', |
60 'in_group:'+`user.eid`: groups, |
60 'in_group:'+`user.eid`: groups, |
61 'in_state:'+`user.eid`: `stateeid`, |
61 'in_state:'+`user.eid`: `stateeid`, |
184 def test_password_confirm(self): |
184 def test_password_confirm(self): |
185 """test creation of two linked entities |
185 """test creation of two linked entities |
186 """ |
186 """ |
187 user = self.user() |
187 user = self.user() |
188 self.req.form = {'__cloned_eid:X': user.eid, |
188 self.req.form = {'__cloned_eid:X': user.eid, |
189 'eid': 'X', '__type:X': 'EUser', |
189 'eid': 'X', '__type:X': 'CWUser', |
190 'login:X': u'toto', 'edits-login:X': u'', |
190 'login:X': u'toto', 'edits-login:X': u'', |
191 'upassword:X': u'toto', 'edits-upassword:X': u'', |
191 'upassword:X': u'toto', 'edits-upassword:X': u'', |
192 } |
192 } |
193 self.assertRaises(ValidationError, self.publish, self.req) |
193 self.assertRaises(ValidationError, self.publish, self.req) |
194 self.req.form = {'__cloned_eid:X': user.eid, |
194 self.req.form = {'__cloned_eid:X': user.eid, |
195 'eid': 'X', '__type:X': 'EUser', |
195 'eid': 'X', '__type:X': 'CWUser', |
196 'login:X': u'toto', 'edits-login:X': u'', |
196 'login:X': u'toto', 'edits-login:X': u'', |
197 'upassword:X': u'toto', 'upassword-confirm:X': u'tutu', 'edits-upassword:X': u'', |
197 'upassword:X': u'toto', 'upassword-confirm:X': u'tutu', 'edits-upassword:X': u'', |
198 } |
198 } |
199 self.assertRaises(ValidationError, self.publish, self.req) |
199 self.assertRaises(ValidationError, self.publish, self.req) |
200 |
200 |
256 |
256 |
257 def test_custom_attribute_handler(self): |
257 def test_custom_attribute_handler(self): |
258 def custom_login_edit(self, formparams, value, relations): |
258 def custom_login_edit(self, formparams, value, relations): |
259 formparams['login'] = value.upper() |
259 formparams['login'] = value.upper() |
260 relations.append('X login %(login)s') |
260 relations.append('X login %(login)s') |
261 EUser.custom_login_edit = custom_login_edit |
261 CWUser.custom_login_edit = custom_login_edit |
262 try: |
262 try: |
263 user = self.user() |
263 user = self.user() |
264 eid = repr(user.eid) |
264 eid = repr(user.eid) |
265 self.req.form = { |
265 self.req.form = { |
266 'eid': eid, |
266 'eid': eid, |
267 '__type:'+eid: 'EUser', |
267 '__type:'+eid: 'CWUser', |
268 'login:'+eid: u'foo', |
268 'login:'+eid: u'foo', |
269 'edits-login:'+eid: unicode(user.login), |
269 'edits-login:'+eid: unicode(user.login), |
270 } |
270 } |
271 path, params = self.expect_redirect_publish() |
271 path, params = self.expect_redirect_publish() |
272 rset = self.execute('Any L WHERE X eid %(x)s, X login L', {'x': user.eid}, 'x') |
272 rset = self.execute('Any L WHERE X eid %(x)s, X login L', {'x': user.eid}, 'x') |
273 self.assertEquals(rset[0][0], 'FOO') |
273 self.assertEquals(rset[0][0], 'FOO') |
274 finally: |
274 finally: |
275 del EUser.custom_login_edit |
275 del CWUser.custom_login_edit |
276 |
276 |
277 def test_redirect_apply_button(self): |
277 def test_redirect_apply_button(self): |
278 redirectrql = rql_for_eid(4012) # whatever |
278 redirectrql = rql_for_eid(4012) # whatever |
279 self.req.form = { |
279 self.req.form = { |
280 'eid': 'A', '__type:A': 'BlogEntry', |
280 'eid': 'A', '__type:A': 'BlogEntry', |
340 path, params = self.expect_redirect_publish() |
340 path, params = self.expect_redirect_publish() |
341 self.assertEquals(path, 'view') |
341 self.assertEquals(path, 'view') |
342 self.assertEquals(params, {u'__message': u'entities deleted'}) |
342 self.assertEquals(params, {u'__message': u'entities deleted'}) |
343 |
343 |
344 def test_nonregr_egroup_etype_editing(self): |
344 def test_nonregr_egroup_etype_editing(self): |
345 """non-regression test checking that a manager user can edit a EEType entity (EGroup) |
345 """non-regression test checking that a manager user can edit a CWEType entity (CWGroup) |
346 """ |
346 """ |
347 groupeids = [eid for eid, in self.execute('EGroup G WHERE G name "managers"')] |
347 groupeids = [eid for eid, in self.execute('CWGroup G WHERE G name "managers"')] |
348 groups = [str(eid) for eid in groupeids] |
348 groups = [str(eid) for eid in groupeids] |
349 eeetypeeid = self.execute('EEType X WHERE X name "EGroup"')[0][0] |
349 eeetypeeid = self.execute('CWEType X WHERE X name "CWGroup"')[0][0] |
350 basegroups = [str(eid) for eid, in self.execute('EGroup G WHERE X read_permission G, X eid %(x)s', {'x': eeetypeeid})] |
350 basegroups = [str(eid) for eid, in self.execute('CWGroup G WHERE X read_permission G, X eid %(x)s', {'x': eeetypeeid})] |
351 self.req.form = { |
351 self.req.form = { |
352 'eid': `eeetypeeid`, |
352 'eid': `eeetypeeid`, |
353 '__type:'+`eeetypeeid`: 'EEType', |
353 '__type:'+`eeetypeeid`: 'CWEType', |
354 'name:'+`eeetypeeid`: u'EGroup', |
354 'name:'+`eeetypeeid`: u'CWGroup', |
355 'final:'+`eeetypeeid`: False, |
355 'final:'+`eeetypeeid`: False, |
356 'meta:'+`eeetypeeid`: True, |
356 'meta:'+`eeetypeeid`: True, |
357 'description:'+`eeetypeeid`: u'users group', |
357 'description:'+`eeetypeeid`: u'users group', |
358 'read_permission:'+`eeetypeeid`: groups, |
358 'read_permission:'+`eeetypeeid`: groups, |
359 # |
359 # |
360 'edits-name:'+`eeetypeeid`: u'EGroup', |
360 'edits-name:'+`eeetypeeid`: u'CWGroup', |
361 'edits-final:'+`eeetypeeid`: False, |
361 'edits-final:'+`eeetypeeid`: False, |
362 'edits-meta:'+`eeetypeeid`: True, |
362 'edits-meta:'+`eeetypeeid`: True, |
363 'edits-description:'+`eeetypeeid`: u'users group', |
363 'edits-description:'+`eeetypeeid`: u'users group', |
364 'edits-read_permission:'+`eeetypeeid`: basegroups, |
364 'edits-read_permission:'+`eeetypeeid`: basegroups, |
365 } |
365 } |
366 try: |
366 try: |
367 path, params = self.expect_redirect_publish() |
367 path, params = self.expect_redirect_publish() |
368 e = self.execute('Any X WHERE X eid %(x)s', {'x': eeetypeeid}, 'x').get_entity(0, 0) |
368 e = self.execute('Any X WHERE X eid %(x)s', {'x': eeetypeeid}, 'x').get_entity(0, 0) |
369 self.assertEquals(e.name, 'EGroup') |
369 self.assertEquals(e.name, 'CWGroup') |
370 self.assertEquals([g.eid for g in e.read_permission], groupeids) |
370 self.assertEquals([g.eid for g in e.read_permission], groupeids) |
371 finally: |
371 finally: |
372 # restore |
372 # restore |
373 self.execute('SET X read_permission Y WHERE X name "EGroup", Y eid IN (%s), NOT X read_permission Y' % (','.join(basegroups))) |
373 self.execute('SET X read_permission Y WHERE X name "CWGroup", Y eid IN (%s), NOT X read_permission Y' % (','.join(basegroups))) |
374 self.commit() |
374 self.commit() |
375 |
375 |
376 def test_nonregr_eetype_etype_editing(self): |
376 def test_nonregr_eetype_etype_editing(self): |
377 """non-regression test checking that a manager user can edit a EEType entity (EEType) |
377 """non-regression test checking that a manager user can edit a CWEType entity (CWEType) |
378 """ |
378 """ |
379 groupeids = sorted(eid for eid, in self.execute('EGroup G WHERE G name in ("managers", "users")')) |
379 groupeids = sorted(eid for eid, in self.execute('CWGroup G WHERE G name in ("managers", "users")')) |
380 groups = [str(eid) for eid in groupeids] |
380 groups = [str(eid) for eid in groupeids] |
381 eeetypeeid = self.execute('EEType X WHERE X name "EEType"')[0][0] |
381 eeetypeeid = self.execute('CWEType X WHERE X name "CWEType"')[0][0] |
382 basegroups = [str(eid) for eid, in self.execute('EGroup G WHERE X read_permission G, X eid %(x)s', {'x': eeetypeeid})] |
382 basegroups = [str(eid) for eid, in self.execute('CWGroup G WHERE X read_permission G, X eid %(x)s', {'x': eeetypeeid})] |
383 self.req.form = { |
383 self.req.form = { |
384 'eid': `eeetypeeid`, |
384 'eid': `eeetypeeid`, |
385 '__type:'+`eeetypeeid`: 'EEType', |
385 '__type:'+`eeetypeeid`: 'CWEType', |
386 'name:'+`eeetypeeid`: u'EEType', |
386 'name:'+`eeetypeeid`: u'CWEType', |
387 'final:'+`eeetypeeid`: False, |
387 'final:'+`eeetypeeid`: False, |
388 'meta:'+`eeetypeeid`: True, |
388 'meta:'+`eeetypeeid`: True, |
389 'description:'+`eeetypeeid`: u'users group', |
389 'description:'+`eeetypeeid`: u'users group', |
390 'read_permission:'+`eeetypeeid`: groups, |
390 'read_permission:'+`eeetypeeid`: groups, |
391 |
391 |
392 'edits-name:'+`eeetypeeid`: u'EEType', |
392 'edits-name:'+`eeetypeeid`: u'CWEType', |
393 'edits-final:'+`eeetypeeid`: False, |
393 'edits-final:'+`eeetypeeid`: False, |
394 'edits-meta:'+`eeetypeeid`: True, |
394 'edits-meta:'+`eeetypeeid`: True, |
395 'edits-description:'+`eeetypeeid`: u'users group', |
395 'edits-description:'+`eeetypeeid`: u'users group', |
396 'edits-read_permission:'+`eeetypeeid`: basegroups, |
396 'edits-read_permission:'+`eeetypeeid`: basegroups, |
397 } |
397 } |
398 try: |
398 try: |
399 path, params = self.expect_redirect_publish() |
399 path, params = self.expect_redirect_publish() |
400 e = self.execute('Any X WHERE X eid %(x)s', {'x': eeetypeeid}, 'x').get_entity(0, 0) |
400 e = self.execute('Any X WHERE X eid %(x)s', {'x': eeetypeeid}, 'x').get_entity(0, 0) |
401 self.assertEquals(e.name, 'EEType') |
401 self.assertEquals(e.name, 'CWEType') |
402 self.assertEquals(sorted(g.eid for g in e.read_permission), groupeids) |
402 self.assertEquals(sorted(g.eid for g in e.read_permission), groupeids) |
403 finally: |
403 finally: |
404 # restore |
404 # restore |
405 self.execute('SET X read_permission Y WHERE X name "EEType", Y eid IN (%s), NOT X read_permission Y' % (','.join(basegroups))) |
405 self.execute('SET X read_permission Y WHERE X name "CWEType", Y eid IN (%s), NOT X read_permission Y' % (','.join(basegroups))) |
406 self.commit() |
406 self.commit() |
407 |
407 |
408 def test_nonregr_strange_text_input(self): |
408 def test_nonregr_strange_text_input(self): |
409 """non-regression test checking text input containing "13:03:43" |
409 """non-regression test checking text input containing "13:03:43" |
410 |
410 |
422 self.assertEquals(e.title, '"13:03:40"') |
422 self.assertEquals(e.title, '"13:03:40"') |
423 self.assertEquals(e.content, '"13:03:43"') |
423 self.assertEquals(e.content, '"13:03:43"') |
424 |
424 |
425 |
425 |
426 def test_nonregr_multiple_empty_email_addr(self): |
426 def test_nonregr_multiple_empty_email_addr(self): |
427 gueid = self.execute('EGroup G WHERE G name "users"')[0][0] |
427 gueid = self.execute('CWGroup G WHERE G name "users"')[0][0] |
428 self.req.form = {'eid': ['X', 'Y'], |
428 self.req.form = {'eid': ['X', 'Y'], |
429 |
429 |
430 '__type:X': 'EUser', |
430 '__type:X': 'CWUser', |
431 'login:X': u'adim', 'edits-login:X': u'', |
431 'login:X': u'adim', 'edits-login:X': u'', |
432 'upassword:X': u'toto', 'upassword-confirm:X': u'toto', 'edits-upassword:X': u'', |
432 'upassword:X': u'toto', 'upassword-confirm:X': u'toto', 'edits-upassword:X': u'', |
433 'in_group:X': `gueid`, 'edits-in_group:X': INTERNAL_FIELD_VALUE, |
433 'in_group:X': `gueid`, 'edits-in_group:X': INTERNAL_FIELD_VALUE, |
434 |
434 |
435 '__type:Y': 'EmailAddress', |
435 '__type:Y': 'EmailAddress', |
440 self.assertRaises(ValidationError, self.publish, self.req) |
440 self.assertRaises(ValidationError, self.publish, self.req) |
441 |
441 |
442 def test_nonregr_copy(self): |
442 def test_nonregr_copy(self): |
443 user = self.user() |
443 user = self.user() |
444 self.req.form = {'__cloned_eid:X': user.eid, |
444 self.req.form = {'__cloned_eid:X': user.eid, |
445 'eid': 'X', '__type:X': 'EUser', |
445 'eid': 'X', '__type:X': 'CWUser', |
446 '__maineid' : 'X', |
446 '__maineid' : 'X', |
447 'login:X': u'toto', 'edits-login:X': u'', |
447 'login:X': u'toto', 'edits-login:X': u'', |
448 'upassword:X': u'toto', 'upassword-confirm:X': u'toto', 'edits-upassword:X': u'', |
448 'upassword:X': u'toto', 'upassword-confirm:X': u'toto', 'edits-upassword:X': u'', |
449 } |
449 } |
450 path, params = self.expect_redirect_publish() |
450 path, params = self.expect_redirect_publish() |
451 self.assertEquals(path, 'euser/toto') |
451 self.assertEquals(path, 'euser/toto') |
452 e = self.execute('Any X WHERE X is EUser, X login "toto"').get_entity(0, 0) |
452 e = self.execute('Any X WHERE X is CWUser, X login "toto"').get_entity(0, 0) |
453 self.assertEquals(e.login, 'toto') |
453 self.assertEquals(e.login, 'toto') |
454 self.assertEquals(e.in_group[0].name, 'managers') |
454 self.assertEquals(e.in_group[0].name, 'managers') |
455 |
455 |
456 |
456 |
457 def test_nonregr_rollback_on_validation_error(self): |
457 def test_nonregr_rollback_on_validation_error(self): |
540 |
540 |
541 def test_remote_add_existing_tag(self): |
541 def test_remote_add_existing_tag(self): |
542 self.remote_call('tag_entity', self.john.eid, ['python']) |
542 self.remote_call('tag_entity', self.john.eid, ['python']) |
543 self.assertUnorderedIterableEquals([tname for tname, in self.execute('Any N WHERE T is Tag, T name N')], |
543 self.assertUnorderedIterableEquals([tname for tname, in self.execute('Any N WHERE T is Tag, T name N')], |
544 ['python', 'cubicweb']) |
544 ['python', 'cubicweb']) |
545 self.assertEquals(self.execute('Any N WHERE T tags P, P is EUser, T name N').rows, |
545 self.assertEquals(self.execute('Any N WHERE T tags P, P is CWUser, T name N').rows, |
546 [['python']]) |
546 [['python']]) |
547 |
547 |
548 def test_remote_add_new_tag(self): |
548 def test_remote_add_new_tag(self): |
549 self.remote_call('tag_entity', self.john.eid, ['javascript']) |
549 self.remote_call('tag_entity', self.john.eid, ['javascript']) |
550 self.assertUnorderedIterableEquals([tname for tname, in self.execute('Any N WHERE T is Tag, T name N')], |
550 self.assertUnorderedIterableEquals([tname for tname, in self.execute('Any N WHERE T is Tag, T name N')], |
551 ['python', 'cubicweb', 'javascript']) |
551 ['python', 'cubicweb', 'javascript']) |
552 self.assertEquals(self.execute('Any N WHERE T tags P, P is EUser, T name N').rows, |
552 self.assertEquals(self.execute('Any N WHERE T tags P, P is CWUser, T name N').rows, |
553 [['javascript']]) |
553 [['javascript']]) |
554 |
554 |
555 def test_edit_field(self): |
555 def test_edit_field(self): |
556 nbusers = len(self.execute('EUser P')) |
556 nbusers = len(self.execute('CWUser P')) |
557 eid = self.john.eid |
557 eid = self.john.eid |
558 self.remote_call('edit_field', 'apply', |
558 self.remote_call('edit_field', 'apply', |
559 ('eid', 'firstname:%s' % eid, '__maineid', '__type:%s'% eid, 'edits-firstname:%s' % eid ), |
559 ('eid', 'firstname:%s' % eid, '__maineid', '__type:%s'% eid, 'edits-firstname:%s' % eid ), |
560 (str(eid), u'Remi', str(eid), 'EUser', self.john.firstname), |
560 (str(eid), u'Remi', str(eid), 'CWUser', self.john.firstname), |
561 'firstname', |
561 'firstname', |
562 eid) |
562 eid) |
563 self.commit() |
563 self.commit() |
564 rset = self.execute('EUser P') |
564 rset = self.execute('CWUser P') |
565 # make sure we did not insert a new euser here |
565 # make sure we did not insert a new euser here |
566 self.assertEquals(len(rset), nbusers) |
566 self.assertEquals(len(rset), nbusers) |
567 john = self.execute('Any X WHERE X eid %(x)s', {'x': self.john.eid}, 'x').get_entity(0, 0) |
567 john = self.execute('Any X WHERE X eid %(x)s', {'x': self.john.eid}, 'x').get_entity(0, 0) |
568 self.assertEquals(john.eid, self.john.eid) |
568 self.assertEquals(john.eid, self.john.eid) |
569 self.assertEquals(john.firstname, 'Remi') |
569 self.assertEquals(john.firstname, 'Remi') |