100 repo.close(cnxid) |
100 repo.close(cnxid) |
101 |
101 |
102 def test_login_upassword_accent(self): |
102 def test_login_upassword_accent(self): |
103 repo = self.repo |
103 repo = self.repo |
104 cnxid = repo.connect(*self.default_user_password()) |
104 cnxid = repo.connect(*self.default_user_password()) |
105 repo.execute(cnxid, 'INSERT CWUser X: X login %(login)s, X upassword %(passwd)s, X in_state S, X in_group G WHERE S name "activated", G name "users"', |
105 repo.execute(cnxid, 'INSERT CWUser X: X login %(login)s, X upassword %(passwd)s, X in_group G WHERE G name "users"', |
106 {'login': u"barnabé", 'passwd': u"héhéhé".encode('UTF8')}) |
106 {'login': u"barnabé", 'passwd': u"héhéhé".encode('UTF8')}) |
107 repo.commit(cnxid) |
107 repo.commit(cnxid) |
108 repo.close(cnxid) |
108 repo.close(cnxid) |
109 self.assert_(repo.connect(u"barnabé", u"héhéhé".encode('UTF8'))) |
109 self.assert_(repo.connect(u"barnabé", u"héhéhé".encode('UTF8'))) |
110 |
110 |
111 def test_invalid_entity_rollback(self): |
111 def test_invalid_entity_rollback(self): |
112 repo = self.repo |
112 repo = self.repo |
113 cnxid = repo.connect(*self.default_user_password()) |
113 cnxid = repo.connect(*self.default_user_password()) |
114 # no group |
114 # no group |
115 repo.execute(cnxid, 'INSERT CWUser X: X login %(login)s, X upassword %(passwd)s, X in_state S WHERE S name "activated"', |
115 repo.execute(cnxid, 'INSERT CWUser X: X login %(login)s, X upassword %(passwd)s', |
116 {'login': u"tutetute", 'passwd': 'tutetute'}) |
116 {'login': u"tutetute", 'passwd': 'tutetute'}) |
117 self.assertRaises(ValidationError, repo.commit, cnxid) |
117 self.assertRaises(ValidationError, repo.commit, cnxid) |
118 rset = repo.execute(cnxid, 'CWUser X WHERE X login "tutetute"') |
118 rset = repo.execute(cnxid, 'CWUser X WHERE X login "tutetute"') |
119 self.assertEquals(rset.rowcount, 0) |
119 self.assertEquals(rset.rowcount, 0) |
120 |
120 |
188 |
188 |
189 def test_transaction_base3(self): |
189 def test_transaction_base3(self): |
190 repo = self.repo |
190 repo = self.repo |
191 cnxid = repo.connect(*self.default_user_password()) |
191 cnxid = repo.connect(*self.default_user_password()) |
192 # rollback state change which trigger TrInfo insertion |
192 # rollback state change which trigger TrInfo insertion |
193 ueid = repo._get_session(cnxid).user.eid |
193 user = repo._get_session(cnxid).user |
194 rset = repo.execute(cnxid, 'TrInfo T WHERE T wf_info_for X, X eid %(x)s', {'x': ueid}) |
194 user.fire_transition('deactivate') |
|
195 rset = repo.execute(cnxid, 'TrInfo T WHERE T wf_info_for X, X eid %(x)s', {'x': user.eid}) |
195 self.assertEquals(len(rset), 1) |
196 self.assertEquals(len(rset), 1) |
196 repo.execute(cnxid, 'SET X in_state S WHERE X eid %(x)s, S name "deactivated"', |
|
197 {'x': ueid}, 'x') |
|
198 rset = repo.execute(cnxid, 'TrInfo T WHERE T wf_info_for X, X eid %(x)s', {'x': ueid}) |
|
199 self.assertEquals(len(rset), 2) |
|
200 repo.rollback(cnxid) |
197 repo.rollback(cnxid) |
201 rset = repo.execute(cnxid, 'TrInfo T WHERE T wf_info_for X, X eid %(x)s', {'x': ueid}) |
198 rset = repo.execute(cnxid, 'TrInfo T WHERE T wf_info_for X, X eid %(x)s', {'x': user.eid}) |
202 self.assertEquals(len(rset), 1) |
199 self.assertEquals(len(rset), 0) |
203 |
200 |
204 def test_transaction_interleaved(self): |
201 def test_transaction_interleaved(self): |
205 self.skip('implement me') |
202 self.skip('implement me') |
206 |
203 |
207 def test_close_wait_processing_request(self): |
204 def test_close_wait_processing_request(self): |
340 # self.create_user('toto') |
337 # self.create_user('toto') |
341 # finally: |
338 # finally: |
342 # self.set_debug(False) |
339 # self.set_debug(False) |
343 # print 'test time: %.3f (time) %.3f (cpu)' % ((time() - t), clock() - c) |
340 # print 'test time: %.3f (time) %.3f (cpu)' % ((time() - t), clock() - c) |
344 |
341 |
|
342 def test_delete_if_singlecard1(self): |
|
343 note = self.add_entity('Affaire') |
|
344 p1 = self.add_entity('Personne', nom=u'toto') |
|
345 self.execute('SET A todo_by P WHERE A eid %(x)s, P eid %(p)s', |
|
346 {'x': note.eid, 'p': p1.eid}) |
|
347 rset = self.execute('Any P WHERE A todo_by P, A eid %(x)s', |
|
348 {'x': note.eid}) |
|
349 self.assertEquals(len(rset), 1) |
|
350 p2 = self.add_entity('Personne', nom=u'tutu') |
|
351 self.execute('SET A todo_by P WHERE A eid %(x)s, P eid %(p)s', |
|
352 {'x': note.eid, 'p': p2.eid}) |
|
353 rset = self.execute('Any P WHERE A todo_by P, A eid %(x)s', |
|
354 {'x': note.eid}) |
|
355 self.assertEquals(len(rset), 1) |
|
356 self.assertEquals(rset.rows[0][0], p2.eid) |
|
357 |
345 |
358 |
346 class DataHelpersTC(RepositoryBasedTC): |
359 class DataHelpersTC(RepositoryBasedTC): |
347 |
360 |
348 def setUp(self): |
361 def setUp(self): |
349 """ called before each test from this class """ |
362 """ called before each test from this class """ |
483 self.execute('SET N ecrit_par Y WHERE N type "T", Y nom "toto"') |
496 self.execute('SET N ecrit_par Y WHERE N type "T", Y nom "toto"') |
484 self.assertEquals(self.called, [(eidn, 'ecrit_par', eidp,)]) |
497 self.assertEquals(self.called, [(eidn, 'ecrit_par', eidp,)]) |
485 |
498 |
486 def test_after_add_inline(self): |
499 def test_after_add_inline(self): |
487 """make sure after_<event>_relation hooks are deferred""" |
500 """make sure after_<event>_relation hooks are deferred""" |
|
501 p1 = self.add_entity('Personne', nom=u'toto') |
488 self.hm.register_hook(self._after_relation_hook, |
502 self.hm.register_hook(self._after_relation_hook, |
489 'after_add_relation', 'in_state') |
503 'after_add_relation', 'ecrit_par') |
490 eidp = self.execute('INSERT CWUser X: X login "toto", X upassword "tutu", X in_state S WHERE S name "activated"')[0][0] |
504 eidn = self.execute('INSERT Note N: N ecrit_par P WHERE P nom "toto"')[0][0] |
491 eids = self.execute('State X WHERE X name "activated"')[0][0] |
505 self.assertEquals(self.called, [(eidn, 'ecrit_par', p1.eid,)]) |
492 self.assertEquals(self.called, [(eidp, 'in_state', eids,)]) |
|
493 |
506 |
494 def test_before_delete_inline_relation(self): |
507 def test_before_delete_inline_relation(self): |
495 """make sure before_<event>_relation hooks are called directly""" |
508 """make sure before_<event>_relation hooks are called directly""" |
496 self.hm.register_hook(self._before_relation_hook, |
509 self.hm.register_hook(self._before_relation_hook, |
497 'before_delete_relation', 'ecrit_par') |
510 'before_delete_relation', 'ecrit_par') |