entities/test/unittest_base.py
changeset 10974 6557833657d6
parent 10973 0939ad2edf63
child 11044 00c5ee272a6d
equal deleted inserted replaced
10973:0939ad2edf63 10974:6557833657d6
     1 # -*- coding: utf-8 -*-
     1 # -*- coding: utf-8 -*-
     2 # copyright 2003-2014 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
     2 # copyright 2003-2015 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
     3 # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
     3 # contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
     4 #
     4 #
     5 # This file is part of CubicWeb.
     5 # This file is part of CubicWeb.
     6 #
     6 #
     7 # CubicWeb is free software: you can redistribute it and/or modify it under the
     7 # CubicWeb is free software: you can redistribute it and/or modify it under the
    44             cnx.commit()
    44             cnx.commit()
    45             self.assertEqual(entity.creator.eid, self.membereid)
    45             self.assertEqual(entity.creator.eid, self.membereid)
    46             self.assertEqual(entity.dc_creator(), u'member')
    46             self.assertEqual(entity.dc_creator(), u'member')
    47 
    47 
    48     def test_type(self):
    48     def test_type(self):
    49         #dc_type may be translated
    49         # dc_type may be translated
    50         with self.admin_access.client_cnx() as cnx:
    50         with self.admin_access.client_cnx() as cnx:
    51             member = cnx.entity_from_eid(self.membereid)
    51             member = cnx.entity_from_eid(self.membereid)
    52             self.assertEqual(member.dc_type(), 'CWUser')
    52             self.assertEqual(member.dc_type(), 'CWUser')
    53 
    53 
    54     def test_cw_etype(self):
    54     def test_cw_etype(self):
    55         #cw_etype is never translated
    55         # cw_etype is never translated
    56         with self.admin_access.client_cnx() as cnx:
    56         with self.admin_access.client_cnx() as cnx:
    57             member = cnx.entity_from_eid(self.membereid)
    57             member = cnx.entity_from_eid(self.membereid)
    58             self.assertEqual(member.cw_etype, 'CWUser')
    58             self.assertEqual(member.cw_etype, 'CWUser')
    59 
    59 
    60     def test_entity_meta_attributes(self):
    60     def test_entity_meta_attributes(self):
    61         # XXX move to yams
    61         # XXX move to yams
    62         self.assertEqual(self.schema['CWUser'].meta_attributes(), {})
    62         self.assertEqual(self.schema['CWUser'].meta_attributes(), {})
    63         self.assertEqual(dict((str(k), v)
    63         self.assertEqual(dict((str(k), v)
    64                               for k, v in self.schema['State'].meta_attributes().items()),
    64                               for k, v in self.schema['State'].meta_attributes().items()),
    65                           {'description_format': ('format', 'description')})
    65                          {'description_format': ('format', 'description')})
    66 
    66 
    67     def test_fti_rql_method(self):
    67     def test_fti_rql_method(self):
    68         class EmailAddress(AnyEntity):
    68         class EmailAddress(AnyEntity):
    69             __regid__ = 'EmailAddress'
    69             __regid__ = 'EmailAddress'
    70             __select__ = AnyEntity.__select__ & yes(2)
    70             __select__ = AnyEntity.__select__ & yes(2)
       
    71 
    71             @classmethod
    72             @classmethod
    72             def cw_fti_index_rql_queries(cls, req):
    73             def cw_fti_index_rql_queries(cls, req):
    73                 return ['EmailAddress Y']
    74                 return ['EmailAddress Y']
       
    75 
    74         with self.admin_access.web_request() as req:
    76         with self.admin_access.web_request() as req:
    75             req.create_entity('EmailAddress', address=u'foo@bar.com')
    77             req.create_entity('EmailAddress', address=u'foo@bar.com')
    76             eclass = self.vreg['etypes'].etype_class('EmailAddress')
    78             eclass = self.vreg['etypes'].etype_class('EmailAddress')
    77             # deprecated
    79             # deprecated
    78             self.assertEqual(['Any X, ADDRESS, ALIAS WHERE X is EmailAddress, '
    80             self.assertEqual(['Any X, ADDRESS, ALIAS WHERE X is EmailAddress, '
   105             self.assertEqual(email1.prefered.eid, email2.eid)
   107             self.assertEqual(email1.prefered.eid, email2.eid)
   106             self.assertEqual(email2.prefered.eid, email2.eid)
   108             self.assertEqual(email2.prefered.eid, email2.eid)
   107             self.assertEqual(email3.prefered.eid, email3.eid)
   109             self.assertEqual(email3.prefered.eid, email3.eid)
   108 
   110 
   109     def test_mangling(self):
   111     def test_mangling(self):
   110         with self.admin_access.repo_cnx() as cnx:
   112         query = 'INSERT EmailAddress X: X address "maarten.ter.huurne@philips.com"'
   111             email = cnx.execute('INSERT EmailAddress X: X address "maarten.ter.huurne@philips.com"').get_entity(0, 0)
   113         with self.admin_access.repo_cnx() as cnx:
       
   114             email = cnx.execute(query).get_entity(0, 0)
   112             self.assertEqual(email.display_address(), 'maarten.ter.huurne@philips.com')
   115             self.assertEqual(email.display_address(), 'maarten.ter.huurne@philips.com')
   113             self.assertEqual(email.printable_value('address'), 'maarten.ter.huurne@philips.com')
   116             self.assertEqual(email.printable_value('address'), 'maarten.ter.huurne@philips.com')
   114             self.vreg.config.global_set_option('mangle-emails', True)
   117             self.vreg.config.global_set_option('mangle-emails', True)
   115             try:
   118             try:
   116                 self.assertEqual(email.display_address(), 'maarten.ter.huurne at philips dot com')
   119                 self.assertEqual(email.display_address(), 'maarten.ter.huurne at philips dot com')
   117                 self.assertEqual(email.printable_value('address'), 'maarten.ter.huurne at philips dot com')
   120                 self.assertEqual(email.printable_value('address'),
       
   121                                  'maarten.ter.huurne at philips dot com')
   118                 email = cnx.execute('INSERT EmailAddress X: X address "syt"').get_entity(0, 0)
   122                 email = cnx.execute('INSERT EmailAddress X: X address "syt"').get_entity(0, 0)
   119                 self.assertEqual(email.display_address(), 'syt')
   123                 self.assertEqual(email.display_address(), 'syt')
   120                 self.assertEqual(email.printable_value('address'), 'syt')
   124                 self.assertEqual(email.printable_value('address'), 'syt')
   121             finally:
   125             finally:
   122                 self.vreg.config.global_set_option('mangle-emails', False)
   126                 self.vreg.config.global_set_option('mangle-emails', False)
   127                                 'X address "maarten&ter@philips.com"').get_entity(0, 0)
   131                                 'X address "maarten&ter@philips.com"').get_entity(0, 0)
   128             self.assertEqual(email.printable_value('address'),
   132             self.assertEqual(email.printable_value('address'),
   129                              'maarten&ter@philips.com')
   133                              'maarten&ter@philips.com')
   130             self.assertEqual(email.printable_value('address', format='text/plain'),
   134             self.assertEqual(email.printable_value('address', format='text/plain'),
   131                              'maarten&ter@philips.com')
   135                              'maarten&ter@philips.com')
       
   136 
   132 
   137 
   133 class CWUserTC(BaseEntityTC):
   138 class CWUserTC(BaseEntityTC):
   134 
   139 
   135     def test_complete(self):
   140     def test_complete(self):
   136         with self.admin_access.repo_cnx() as cnx:
   141         with self.admin_access.repo_cnx() as cnx:
   165 
   170 
   166     def test_allowed_massmail_keys(self):
   171     def test_allowed_massmail_keys(self):
   167         with self.admin_access.repo_cnx() as cnx:
   172         with self.admin_access.repo_cnx() as cnx:
   168             e = cnx.execute('CWUser U WHERE U login "member"').get_entity(0, 0)
   173             e = cnx.execute('CWUser U WHERE U login "member"').get_entity(0, 0)
   169             # Bytes/Password attributes should be omitted
   174             # Bytes/Password attributes should be omitted
   170             self.assertEqual(e.cw_adapt_to('IEmailable').allowed_massmail_keys(),
   175             self.assertEqual(
   171                               set(('surname', 'firstname', 'login', 'last_login_time',
   176                 e.cw_adapt_to('IEmailable').allowed_massmail_keys(),
   172                                    'creation_date', 'modification_date', 'cwuri', 'eid'))
   177                 set(('surname', 'firstname', 'login', 'last_login_time',
   173                               )
   178                      'creation_date', 'modification_date', 'cwuri', 'eid'))
       
   179             )
   174 
   180 
   175     def test_cw_instantiate_object_relation(self):
   181     def test_cw_instantiate_object_relation(self):
   176         """ a weird non regression test """
   182         """ a weird non regression test """
   177         with self.admin_access.repo_cnx() as cnx:
   183         with self.admin_access.repo_cnx() as cnx:
   178             e = cnx.execute('CWUser U WHERE U login "member"').get_entity(0, 0)
   184             e = cnx.execute('CWUser U WHERE U login "member"').get_entity(0, 0)
   211 
   217 
   212     def test_etype_class_selection_and_specialization(self):
   218     def test_etype_class_selection_and_specialization(self):
   213         # no specific class for Subdivisions, the default one should be selected
   219         # no specific class for Subdivisions, the default one should be selected
   214         eclass = self.select_eclass('SubDivision')
   220         eclass = self.select_eclass('SubDivision')
   215         self.assertTrue(eclass.__autogenerated__)
   221         self.assertTrue(eclass.__autogenerated__)
   216         #self.assertEqual(eclass.__bases__, (AnyEntity,))
   222         # self.assertEqual(eclass.__bases__, (AnyEntity,))
   217         # build class from most generic to most specific and make
   223         # build class from most generic to most specific and make
   218         # sure the most specific is always selected
   224         # sure the most specific is always selected
   219         self.vreg._loadedmods[__name__] = {}
   225         self.vreg._loadedmods[__name__] = {}
   220         for etype in ('Company', 'Division', 'SubDivision'):
   226         for etype in ('Company', 'Division', 'SubDivision'):
   221             class Foo(AnyEntity):
   227             class Foo(AnyEntity):