42 req = self.request() |
42 req = self.request() |
43 req.create_entity('Tag', name=u'x') |
43 req.create_entity('Tag', name=u'x') |
44 p = req.create_entity('Personne', nom=u'toto') |
44 p = req.create_entity('Personne', nom=u'toto') |
45 oe = req.create_entity('Note', type=u'x') |
45 oe = req.create_entity('Note', type=u'x') |
46 self.execute('SET T ecrit_par U WHERE T eid %(t)s, U eid %(u)s', |
46 self.execute('SET T ecrit_par U WHERE T eid %(t)s, U eid %(u)s', |
47 {'t': oe.eid, 'u': p.eid}, ('t','u')) |
47 {'t': oe.eid, 'u': p.eid}) |
48 self.execute('SET TAG tags X WHERE X eid %(x)s', {'x': oe.eid}, 'x') |
48 self.execute('SET TAG tags X WHERE X eid %(x)s', {'x': oe.eid}) |
49 e = req.create_entity('Note', type=u'z') |
49 e = req.create_entity('Note', type=u'z') |
50 e.copy_relations(oe.eid) |
50 e.copy_relations(oe.eid) |
51 self.assertEquals(len(e.ecrit_par), 1) |
51 self.assertEquals(len(e.ecrit_par), 1) |
52 self.assertEquals(e.ecrit_par[0].eid, p.eid) |
52 self.assertEquals(e.ecrit_par[0].eid, p.eid) |
53 self.assertEquals(len(e.reverse_tags), 1) |
53 self.assertEquals(len(e.reverse_tags), 1) |
58 req = self.request() |
58 req = self.request() |
59 p = req.create_entity('Personne', nom=u'toto') |
59 p = req.create_entity('Personne', nom=u'toto') |
60 oe = req.create_entity('Note', type=u'x') |
60 oe = req.create_entity('Note', type=u'x') |
61 self.schema['ecrit_par'].rdef('Note', 'Personne').composite = 'subject' |
61 self.schema['ecrit_par'].rdef('Note', 'Personne').composite = 'subject' |
62 self.execute('SET T ecrit_par U WHERE T eid %(t)s, U eid %(u)s', |
62 self.execute('SET T ecrit_par U WHERE T eid %(t)s, U eid %(u)s', |
63 {'t': oe.eid, 'u': p.eid}, ('t','u')) |
63 {'t': oe.eid, 'u': p.eid}) |
64 e = req.create_entity('Note', type=u'z') |
64 e = req.create_entity('Note', type=u'z') |
65 e.copy_relations(oe.eid) |
65 e.copy_relations(oe.eid) |
66 self.failIf(e.ecrit_par) |
66 self.failIf(e.ecrit_par) |
67 self.failUnless(oe.ecrit_par) |
67 self.failUnless(oe.ecrit_par) |
68 |
68 |
69 def test_copy_with_composite(self): |
69 def test_copy_with_composite(self): |
70 user = self.user() |
70 user = self.user() |
71 adeleid = self.execute('INSERT EmailAddress X: X address "toto@logilab.org", U use_email X WHERE U login "admin"')[0][0] |
71 adeleid = self.execute('INSERT EmailAddress X: X address "toto@logilab.org", U use_email X WHERE U login "admin"')[0][0] |
72 e = self.entity('Any X WHERE X eid %(x)s', {'x':user.eid}, 'x') |
72 e = self.execute('Any X WHERE X eid %(x)s', {'x': user.eid}).get_entity(0, 0) |
73 self.assertEquals(e.use_email[0].address, "toto@logilab.org") |
73 self.assertEquals(e.use_email[0].address, "toto@logilab.org") |
74 self.assertEquals(e.use_email[0].eid, adeleid) |
74 self.assertEquals(e.use_email[0].eid, adeleid) |
75 usereid = self.execute('INSERT CWUser X: X login "toto", X upassword "toto", X in_group G ' |
75 usereid = self.execute('INSERT CWUser X: X login "toto", X upassword "toto", X in_group G ' |
76 'WHERE G name "users"')[0][0] |
76 'WHERE G name "users"')[0][0] |
77 e = self.entity('Any X WHERE X eid %(x)s', {'x':usereid}, 'x') |
77 e = self.execute('Any X WHERE X eid %(x)s', {'x': usereid}).get_entity(0, 0) |
78 e.copy_relations(user.eid) |
78 e.copy_relations(user.eid) |
79 self.failIf(e.use_email) |
79 self.failIf(e.use_email) |
80 self.failIf(e.primary_email) |
80 self.failIf(e.primary_email) |
81 |
81 |
82 def test_copy_with_non_initial_state(self): |
82 def test_copy_with_non_initial_state(self): |
85 {'pwd': 'toto'}).get_entity(0, 0) |
85 {'pwd': 'toto'}).get_entity(0, 0) |
86 self.commit() |
86 self.commit() |
87 user.fire_transition('deactivate') |
87 user.fire_transition('deactivate') |
88 self.commit() |
88 self.commit() |
89 eid2 = self.execute('INSERT CWUser X: X login "tutu", X upassword %(pwd)s', {'pwd': 'toto'})[0][0] |
89 eid2 = self.execute('INSERT CWUser X: X login "tutu", X upassword %(pwd)s', {'pwd': 'toto'})[0][0] |
90 e = self.entity('Any X WHERE X eid %(x)s', {'x': eid2}, 'x') |
90 e = self.execute('Any X WHERE X eid %(x)s', {'x': eid2}).get_entity(0, 0) |
91 e.copy_relations(user.eid) |
91 e.copy_relations(user.eid) |
92 self.commit() |
92 self.commit() |
93 e.clear_related_cache('in_state', 'subject') |
93 e.clear_related_cache('in_state', 'subject') |
94 self.assertEquals(e.state, 'activated') |
94 self.assertEquals(e.state, 'activated') |
95 |
95 |
96 def test_related_cache_both(self): |
96 def test_related_cache_both(self): |
97 user = self.entity('Any X WHERE X eid %(x)s', {'x':self.user().eid}, 'x') |
97 user = self.execute('Any X WHERE X eid %(x)s', {'x':self.user().eid}).get_entity(0, 0) |
98 adeleid = self.execute('INSERT EmailAddress X: X address "toto@logilab.org", U use_email X WHERE U login "admin"')[0][0] |
98 adeleid = self.execute('INSERT EmailAddress X: X address "toto@logilab.org", U use_email X WHERE U login "admin"')[0][0] |
99 self.commit() |
99 self.commit() |
100 self.assertEquals(user._related_cache, {}) |
100 self.assertEquals(user._related_cache, {}) |
101 email = user.primary_email[0] |
101 email = user.primary_email[0] |
102 self.assertEquals(sorted(user._related_cache), ['primary_email_subject']) |
102 self.assertEquals(sorted(user._related_cache), ['primary_email_subject']) |
233 self.assertEquals(rql, 'Any S,AA,AB,AC,AD ORDERBY AA ASC ' |
233 self.assertEquals(rql, 'Any S,AA,AB,AC,AD ORDERBY AA ASC ' |
234 'WHERE NOT S use_email O, O eid %(x)s, S is CWUser, S login AA, S firstname AB, S surname AC, S modification_date AD') |
234 'WHERE NOT S use_email O, O eid %(x)s, S is CWUser, S login AA, S firstname AB, S surname AC, S modification_date AD') |
235 #rql = email.unrelated_rql('use_email', 'Person', 'object')[0] |
235 #rql = email.unrelated_rql('use_email', 'Person', 'object')[0] |
236 #self.assertEquals(rql, '') |
236 #self.assertEquals(rql, '') |
237 self.login('anon') |
237 self.login('anon') |
238 email = self.execute('Any X WHERE X eid %(x)s', {'x': email.eid}, 'x').get_entity(0, 0) |
238 email = self.execute('Any X WHERE X eid %(x)s', {'x': email.eid}).get_entity(0, 0) |
239 rql = email.unrelated_rql('use_email', 'CWUser', 'object')[0] |
239 rql = email.unrelated_rql('use_email', 'CWUser', 'object')[0] |
240 self.assertEquals(rql, 'Any S,AA,AB,AC,AD ORDERBY AA ' |
240 self.assertEquals(rql, 'Any S,AA,AB,AC,AD ORDERBY AA ' |
241 'WHERE NOT S use_email O, O eid %(x)s, S is CWUser, S login AA, S firstname AB, S surname AC, S modification_date AD, ' |
241 'WHERE NOT S use_email O, O eid %(x)s, S is CWUser, S login AA, S firstname AB, S surname AC, S modification_date AD, ' |
242 'A eid %(B)s, EXISTS(S identity A, NOT A in_group C, C name "guests", C is CWGroup)') |
242 'A eid %(B)s, EXISTS(S identity A, NOT A in_group C, C name "guests", C is CWGroup)') |
243 #rql = email.unrelated_rql('use_email', 'Person', 'object')[0] |
243 #rql = email.unrelated_rql('use_email', 'Person', 'object')[0] |
258 related = [r.eid for r in e.tags] |
258 related = [r.eid for r in e.tags] |
259 self.failUnlessEqual(related, []) |
259 self.failUnlessEqual(related, []) |
260 unrelated = [r[0] for r in e.unrelated('tags', 'Personne', 'subject')] |
260 unrelated = [r[0] for r in e.unrelated('tags', 'Personne', 'subject')] |
261 self.failUnless(p.eid in unrelated) |
261 self.failUnless(p.eid in unrelated) |
262 self.execute('SET X tags Y WHERE X is Tag, Y is Personne') |
262 self.execute('SET X tags Y WHERE X is Tag, Y is Personne') |
263 e = self.entity('Any X WHERE X is Tag') |
263 e = self.execute('Any X WHERE X is Tag').get_entity(0, 0) |
264 unrelated = [r[0] for r in e.unrelated('tags', 'Personne', 'subject')] |
264 unrelated = [r[0] for r in e.unrelated('tags', 'Personne', 'subject')] |
265 self.failIf(p.eid in unrelated) |
265 self.failIf(p.eid in unrelated) |
266 |
266 |
267 def test_unrelated_limit(self): |
267 def test_unrelated_limit(self): |
268 req = self.request() |
268 req = self.request() |
279 user = self.request().user |
279 user = self.request().user |
280 rset = user.unrelated('use_email', 'EmailAddress', 'subject') |
280 rset = user.unrelated('use_email', 'EmailAddress', 'subject') |
281 self.assertEquals([x.address for x in rset.entities()], [u'hop']) |
281 self.assertEquals([x.address for x in rset.entities()], [u'hop']) |
282 self.create_user('toto') |
282 self.create_user('toto') |
283 self.login('toto') |
283 self.login('toto') |
284 email = self.execute('Any X WHERE X eid %(x)s', {'x': email.eid}, 'x').get_entity(0, 0) |
284 email = self.execute('Any X WHERE X eid %(x)s', {'x': email.eid}).get_entity(0, 0) |
285 rset = email.unrelated('use_email', 'CWUser', 'object') |
285 rset = email.unrelated('use_email', 'CWUser', 'object') |
286 self.assertEquals([x.login for x in rset.entities()], ['toto']) |
286 self.assertEquals([x.login for x in rset.entities()], ['toto']) |
287 user = self.request().user |
287 user = self.request().user |
288 rset = user.unrelated('use_email', 'EmailAddress', 'subject') |
288 rset = user.unrelated('use_email', 'EmailAddress', 'subject') |
289 self.assertEquals([x.address for x in rset.entities()], ['hop']) |
289 self.assertEquals([x.address for x in rset.entities()], ['hop']) |
290 user = self.execute('Any X WHERE X login "admin"').get_entity(0, 0) |
290 user = self.execute('Any X WHERE X login "admin"').get_entity(0, 0) |
291 rset = user.unrelated('use_email', 'EmailAddress', 'subject') |
291 rset = user.unrelated('use_email', 'EmailAddress', 'subject') |
292 self.assertEquals([x.address for x in rset.entities()], []) |
292 self.assertEquals([x.address for x in rset.entities()], []) |
293 self.login('anon') |
293 self.login('anon') |
294 email = self.execute('Any X WHERE X eid %(x)s', {'x': email.eid}, 'x').get_entity(0, 0) |
294 email = self.execute('Any X WHERE X eid %(x)s', {'x': email.eid}).get_entity(0, 0) |
295 rset = email.unrelated('use_email', 'CWUser', 'object') |
295 rset = email.unrelated('use_email', 'CWUser', 'object') |
296 self.assertEquals([x.login for x in rset.entities()], []) |
296 self.assertEquals([x.login for x in rset.entities()], []) |
297 user = self.request().user |
297 user = self.request().user |
298 rset = user.unrelated('use_email', 'EmailAddress', 'subject') |
298 rset = user.unrelated('use_email', 'EmailAddress', 'subject') |
299 self.assertEquals([x.address for x in rset.entities()], []) |
299 self.assertEquals([x.address for x in rset.entities()], []) |
437 def test_complete_relation(self): |
437 def test_complete_relation(self): |
438 session = self.session |
438 session = self.session |
439 eid = session.execute( |
439 eid = session.execute( |
440 'INSERT TrInfo X: X comment "zou", X wf_info_for U, X from_state S1, X to_state S2 ' |
440 'INSERT TrInfo X: X comment "zou", X wf_info_for U, X from_state S1, X to_state S2 ' |
441 'WHERE U login "admin", S1 name "activated", S2 name "deactivated"')[0][0] |
441 'WHERE U login "admin", S1 name "activated", S2 name "deactivated"')[0][0] |
442 trinfo = self.entity('Any X WHERE X eid %(x)s', {'x': eid}, 'x') |
442 trinfo = self.execute('Any X WHERE X eid %(x)s', {'x': eid}).get_entity(0, 0) |
443 trinfo.complete() |
443 trinfo.complete() |
444 self.failUnless(isinstance(trinfo['creation_date'], datetime)) |
444 self.failUnless(isinstance(trinfo['creation_date'], datetime)) |
445 self.failUnless(trinfo.relation_cached('from_state', 'subject')) |
445 self.failUnless(trinfo.relation_cached('from_state', 'subject')) |
446 self.failUnless(trinfo.relation_cached('to_state', 'subject')) |
446 self.failUnless(trinfo.relation_cached('to_state', 'subject')) |
447 self.failUnless(trinfo.relation_cached('wf_info_for', 'subject')) |
447 self.failUnless(trinfo.relation_cached('wf_info_for', 'subject')) |
448 self.assertEquals(trinfo.by_transition, ()) |
448 self.assertEquals(trinfo.by_transition, ()) |
449 |
449 |
450 def test_request_cache(self): |
450 def test_request_cache(self): |
451 req = self.request() |
451 req = self.request() |
452 user = self.entity('CWUser X WHERE X login "admin"', req=req) |
452 user = self.execute('CWUser X WHERE X login "admin"', req=req).get_entity(0, 0) |
453 state = user.in_state[0] |
453 state = user.in_state[0] |
454 samestate = self.entity('State X WHERE X name "activated"', req=req) |
454 samestate = self.execute('State X WHERE X name "activated"', req=req).get_entity(0, 0) |
455 self.failUnless(state is samestate) |
455 self.failUnless(state is samestate) |
456 |
456 |
457 def test_rest_path(self): |
457 def test_rest_path(self): |
458 req = self.request() |
458 req = self.request() |
459 note = req.create_entity('Note', type=u'z') |
459 note = req.create_entity('Note', type=u'z') |
479 req = self.request() |
479 req = self.request() |
480 person = req.create_entity('Personne', nom=u'di mascio', prenom=u'adrien') |
480 person = req.create_entity('Personne', nom=u'di mascio', prenom=u'adrien') |
481 self.assertEquals(person.prenom, u'adrien') |
481 self.assertEquals(person.prenom, u'adrien') |
482 self.assertEquals(person.nom, u'di mascio') |
482 self.assertEquals(person.nom, u'di mascio') |
483 person.set_attributes(prenom=u'sylvain', nom=u'thénault') |
483 person.set_attributes(prenom=u'sylvain', nom=u'thénault') |
484 person = self.entity('Personne P') # XXX retreival needed ? |
484 person = self.execute('Personne P').get_entity(0, 0) # XXX retreival needed ? |
485 self.assertEquals(person.prenom, u'sylvain') |
485 self.assertEquals(person.prenom, u'sylvain') |
486 self.assertEquals(person.nom, u'thénault') |
486 self.assertEquals(person.nom, u'thénault') |
487 |
487 |
488 def test_metainformation_and_external_absolute_url(self): |
488 def test_metainformation_and_external_absolute_url(self): |
489 req = self.request() |
489 req = self.request() |