test/unittest_entity.py
changeset 5174 78438ad513ca
parent 4835 13b0b96d7982
child 5423 e15abfdcce38
equal deleted inserted replaced
5173:73760bbb66bd 5174:78438ad513ca
    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()