entities/test/unittest_base.py
author Rémi Cardona <remi.cardona@logilab.fr>
Fri, 18 Sep 2015 12:35:10 +0200
changeset 10710 37d7a1187af7
parent 10662 10942ed172de
child 10847 ce5403611cbe
permissions -rw-r--r--
[tests] remove useless sort Useless in python 2, actively harmful in python 3 where arbitrary objects are no longer sortable.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
     1
# -*- coding: utf-8 -*-
9858
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
     2
# copyright 2003-2014 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4491
diff changeset
     3
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4491
diff changeset
     4
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4491
diff changeset
     5
# This file is part of CubicWeb.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4491
diff changeset
     6
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4491
diff changeset
     7
# CubicWeb is free software: you can redistribute it and/or modify it under the
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4491
diff changeset
     8
# terms of the GNU Lesser General Public License as published by the Free
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4491
diff changeset
     9
# Software Foundation, either version 2.1 of the License, or (at your option)
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4491
diff changeset
    10
# any later version.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4491
diff changeset
    11
#
5424
8ecbcbff9777 replace logilab-common by CubicWeb in disclaimer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5421
diff changeset
    12
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4491
diff changeset
    13
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4491
diff changeset
    14
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4491
diff changeset
    15
# details.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4491
diff changeset
    16
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4491
diff changeset
    17
# You should have received a copy of the GNU Lesser General Public License along
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4491
diff changeset
    18
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
1977
606923dff11b big bunch of copyright / docstring update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1642
diff changeset
    19
"""unit tests for cubicweb.entities.base module
606923dff11b big bunch of copyright / docstring update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1642
diff changeset
    20
"""
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    21
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    22
from logilab.common.testlib import unittest_main
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    23
from logilab.common.decorators import clear_cache
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    24
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2660
diff changeset
    25
from cubicweb.devtools.testlib import CubicWebTC
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    26
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    27
from cubicweb.entities import AnyEntity
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    28
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    29
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2660
diff changeset
    30
class BaseEntityTC(CubicWebTC):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    31
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    32
    def setup_database(self):
9858
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    33
        with self.admin_access.repo_cnx() as cnx:
9859
fc978ff7f381 [entitiestests/base] don't store an entity on the test case
Julien Cristau <julien.cristau@logilab.fr>
parents: 9858
diff changeset
    34
            self.membereid = self.create_user(cnx, 'member').eid
9858
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    35
            cnx.commit()
1642
12a98b17fb05 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    36
12a98b17fb05 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    37
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    38
class MetadataTC(BaseEntityTC):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    39
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    40
    def test_creator(self):
9858
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    41
        with self.new_access('member').repo_cnx() as cnx:
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    42
            entity = cnx.create_entity('Bookmark', title=u"hello", path=u'project/cubicweb')
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    43
            cnx.commit()
9859
fc978ff7f381 [entitiestests/base] don't store an entity on the test case
Julien Cristau <julien.cristau@logilab.fr>
parents: 9858
diff changeset
    44
            self.assertEqual(entity.creator.eid, self.membereid)
9858
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    45
            self.assertEqual(entity.dc_creator(), u'member')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    46
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    47
    def test_type(self):
8899
c7a95ebcc093 [entity] add an official ``cw_etype`` property for entity
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8694
diff changeset
    48
        #dc_type may be translated
9859
fc978ff7f381 [entitiestests/base] don't store an entity on the test case
Julien Cristau <julien.cristau@logilab.fr>
parents: 9858
diff changeset
    49
        with self.admin_access.client_cnx() as cnx:
fc978ff7f381 [entitiestests/base] don't store an entity on the test case
Julien Cristau <julien.cristau@logilab.fr>
parents: 9858
diff changeset
    50
            member = cnx.entity_from_eid(self.membereid)
fc978ff7f381 [entitiestests/base] don't store an entity on the test case
Julien Cristau <julien.cristau@logilab.fr>
parents: 9858
diff changeset
    51
            self.assertEqual(member.dc_type(), 'CWUser')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    52
8899
c7a95ebcc093 [entity] add an official ``cw_etype`` property for entity
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8694
diff changeset
    53
    def test_cw_etype(self):
c7a95ebcc093 [entity] add an official ``cw_etype`` property for entity
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8694
diff changeset
    54
        #cw_etype is never translated
9859
fc978ff7f381 [entitiestests/base] don't store an entity on the test case
Julien Cristau <julien.cristau@logilab.fr>
parents: 9858
diff changeset
    55
        with self.admin_access.client_cnx() as cnx:
fc978ff7f381 [entitiestests/base] don't store an entity on the test case
Julien Cristau <julien.cristau@logilab.fr>
parents: 9858
diff changeset
    56
            member = cnx.entity_from_eid(self.membereid)
fc978ff7f381 [entitiestests/base] don't store an entity on the test case
Julien Cristau <julien.cristau@logilab.fr>
parents: 9858
diff changeset
    57
            self.assertEqual(member.cw_etype, 'CWUser')
8899
c7a95ebcc093 [entity] add an official ``cw_etype`` property for entity
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8694
diff changeset
    58
1102
054dfee29bfc some test for meta attributes (XXX should be in yams)
sylvain.thenault@logilab.fr
parents: 1016
diff changeset
    59
    def test_entity_meta_attributes(self):
054dfee29bfc some test for meta attributes (XXX should be in yams)
sylvain.thenault@logilab.fr
parents: 1016
diff changeset
    60
        # XXX move to yams
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5578
diff changeset
    61
        self.assertEqual(self.schema['CWUser'].meta_attributes(), {})
9858
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    62
        self.assertEqual(dict((str(k), v)
10662
10942ed172de [py3k] dict.iteritems → dict.items
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10411
diff changeset
    63
                              for k, v in self.schema['State'].meta_attributes().items()),
1642
12a98b17fb05 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    64
                          {'description_format': ('format', 'description')})
12a98b17fb05 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    65
8450
11063635c4e4 [fti] allow usage of custom RQL to fetch entities to index (closes #2410509)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7980
diff changeset
    66
    def test_fti_rql_method(self):
9858
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    67
        with self.admin_access.web_request() as req:
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    68
            eclass = self.vreg['etypes'].etype_class('EmailAddress')
10251
2daa5c6dea4d [entities] make cw_fti_index_rql_queries predictable
Julien Cristau <julien.cristau@logilab.fr>
parents: 9859
diff changeset
    69
            self.assertEqual(['Any X, ADDRESS, ALIAS WHERE X is EmailAddress, '
2daa5c6dea4d [entities] make cw_fti_index_rql_queries predictable
Julien Cristau <julien.cristau@logilab.fr>
parents: 9859
diff changeset
    70
                              'X address ADDRESS, X alias ALIAS'],
9858
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    71
                             eclass.cw_fti_index_rql_queries(req))
8450
11063635c4e4 [fti] allow usage of custom RQL to fetch entities to index (closes #2410509)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7980
diff changeset
    72
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    73
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    74
class EmailAddressTC(BaseEntityTC):
9858
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    75
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    76
    def test_canonical_form(self):
9858
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    77
        with self.admin_access.repo_cnx() as cnx:
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    78
            email1 = cnx.execute('INSERT EmailAddress X: '
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    79
                                 'X address "maarten.ter.huurne@philips.com"').get_entity(0, 0)
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    80
            email2 = cnx.execute('INSERT EmailAddress X: '
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    81
                                 'X address "maarten@philips.com"').get_entity(0, 0)
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    82
            email3 = cnx.execute('INSERT EmailAddress X: '
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    83
                                 'X address "toto@logilab.fr"').get_entity(0, 0)
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    84
            email1.cw_set(prefered_form=email2)
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    85
            self.assertEqual(email1.prefered.eid, email2.eid)
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    86
            self.assertEqual(email2.prefered.eid, email2.eid)
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    87
            self.assertEqual(email3.prefered.eid, email3.eid)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    88
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    89
    def test_mangling(self):
9858
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    90
        with self.admin_access.repo_cnx() as cnx:
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    91
            email = cnx.execute('INSERT EmailAddress X: X address "maarten.ter.huurne@philips.com"').get_entity(0, 0)
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    92
            self.assertEqual(email.display_address(), 'maarten.ter.huurne@philips.com')
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    93
            self.assertEqual(email.printable_value('address'), 'maarten.ter.huurne@philips.com')
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    94
            self.vreg.config.global_set_option('mangle-emails', True)
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    95
            try:
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    96
                self.assertEqual(email.display_address(), 'maarten.ter.huurne at philips dot com')
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    97
                self.assertEqual(email.printable_value('address'), 'maarten.ter.huurne at philips dot com')
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    98
                email = cnx.execute('INSERT EmailAddress X: X address "syt"').get_entity(0, 0)
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    99
                self.assertEqual(email.display_address(), 'syt')
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   100
                self.assertEqual(email.printable_value('address'), 'syt')
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   101
            finally:
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   102
                self.vreg.config.global_set_option('mangle-emails', False)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   103
9211
d45d66d94baa [entities] properly escape in EmailAddress.printable_value when format is html. Closes #3064025
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8930
diff changeset
   104
    def test_printable_value_escape(self):
9858
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   105
        with self.admin_access.repo_cnx() as cnx:
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   106
            email = cnx.execute('INSERT EmailAddress X: '
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   107
                                'X address "maarten&ter@philips.com"').get_entity(0, 0)
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   108
            self.assertEqual(email.printable_value('address'),
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   109
                             'maarten&amp;ter@philips.com')
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   110
            self.assertEqual(email.printable_value('address', format='text/plain'),
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   111
                             'maarten&ter@philips.com')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   112
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1358
diff changeset
   113
class CWUserTC(BaseEntityTC):
1642
12a98b17fb05 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   114
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   115
    def test_complete(self):
9858
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   116
        with self.admin_access.repo_cnx() as cnx:
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   117
            e = cnx.execute('CWUser X WHERE X login "admin"').get_entity(0, 0)
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   118
            e.complete()
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   119
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   120
    def test_matching_groups(self):
9858
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   121
        with self.admin_access.repo_cnx() as cnx:
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   122
            e = cnx.execute('CWUser X WHERE X login "admin"').get_entity(0, 0)
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   123
            self.assertTrue(e.matching_groups('managers'))
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   124
            self.assertFalse(e.matching_groups('xyz'))
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   125
            self.assertTrue(e.matching_groups(('xyz', 'managers')))
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   126
            self.assertFalse(e.matching_groups(('xyz', 'abcd')))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   127
3830
3b6bbb3a3c3e close #472361: omit password and bytes attributes in allowed mass-mailing keys
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3316
diff changeset
   128
    def test_dc_title_and_name(self):
9858
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   129
        with self.admin_access.repo_cnx() as cnx:
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   130
            e = cnx.execute('CWUser U WHERE U login "member"').get_entity(0, 0)
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   131
            self.assertEqual(e.dc_title(), 'member')
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   132
            self.assertEqual(e.name(), 'member')
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   133
            e.cw_set(firstname=u'bouah')
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   134
            self.assertEqual(e.dc_title(), 'member')
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   135
            self.assertEqual(e.name(), u'bouah')
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   136
            e.cw_set(surname=u'lôt')
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   137
            self.assertEqual(e.dc_title(), 'member')
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   138
            self.assertEqual(e.name(), u'bouah lôt')
3830
3b6bbb3a3c3e close #472361: omit password and bytes attributes in allowed mass-mailing keys
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3316
diff changeset
   139
10396
33e44293b0eb [entities] fix dc_title output for bool(value) == False
Aurelien Campeas <aurelien.campeas@pythonian.fr>
parents: 9859
diff changeset
   140
    def test_falsey_dc_title(self):
33e44293b0eb [entities] fix dc_title output for bool(value) == False
Aurelien Campeas <aurelien.campeas@pythonian.fr>
parents: 9859
diff changeset
   141
        with self.admin_access.repo_cnx() as cnx:
33e44293b0eb [entities] fix dc_title output for bool(value) == False
Aurelien Campeas <aurelien.campeas@pythonian.fr>
parents: 9859
diff changeset
   142
            e = cnx.create_entity('Company', order=0, name=u'pythonian')
33e44293b0eb [entities] fix dc_title output for bool(value) == False
Aurelien Campeas <aurelien.campeas@pythonian.fr>
parents: 9859
diff changeset
   143
            cnx.commit()
33e44293b0eb [entities] fix dc_title output for bool(value) == False
Aurelien Campeas <aurelien.campeas@pythonian.fr>
parents: 9859
diff changeset
   144
            self.assertEqual(u'0', e.dc_title())
33e44293b0eb [entities] fix dc_title output for bool(value) == False
Aurelien Campeas <aurelien.campeas@pythonian.fr>
parents: 9859
diff changeset
   145
3830
3b6bbb3a3c3e close #472361: omit password and bytes attributes in allowed mass-mailing keys
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3316
diff changeset
   146
    def test_allowed_massmail_keys(self):
9858
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   147
        with self.admin_access.repo_cnx() as cnx:
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   148
            e = cnx.execute('CWUser U WHERE U login "member"').get_entity(0, 0)
10402
e3c20f4d1a7c [test] typo in entities test comment
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10396
diff changeset
   149
            # Bytes/Password attributes should be omitted
9858
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   150
            self.assertEqual(e.cw_adapt_to('IEmailable').allowed_massmail_keys(),
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   151
                              set(('surname', 'firstname', 'login', 'last_login_time',
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   152
                                   'creation_date', 'modification_date', 'cwuri', 'eid'))
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   153
                              )
3830
3b6bbb3a3c3e close #472361: omit password and bytes attributes in allowed mass-mailing keys
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3316
diff changeset
   154
7212
040d3597444f [entities/test] add failing test for cw_instantiate
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6340
diff changeset
   155
    def test_cw_instantiate_object_relation(self):
040d3597444f [entities/test] add failing test for cw_instantiate
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6340
diff changeset
   156
        """ a weird non regression test """
9858
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   157
        with self.admin_access.repo_cnx() as cnx:
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   158
            e = cnx.execute('CWUser U WHERE U login "member"').get_entity(0, 0)
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   159
            cnx.create_entity('CWGroup', name=u'logilab', reverse_in_group=e)
7212
040d3597444f [entities/test] add failing test for cw_instantiate
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6340
diff changeset
   160
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   161
9432
030745ac9873 [entities] unconditionnally sanitize the html output of printable_value
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9211
diff changeset
   162
class HTMLtransformTC(BaseEntityTC):
030745ac9873 [entities] unconditionnally sanitize the html output of printable_value
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9211
diff changeset
   163
030745ac9873 [entities] unconditionnally sanitize the html output of printable_value
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9211
diff changeset
   164
    def test_sanitized_html(self):
9858
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   165
        with self.admin_access.repo_cnx() as cnx:
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   166
            c = cnx.create_entity('Company', name=u'Babar',
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   167
                                  description=u"""
9432
030745ac9873 [entities] unconditionnally sanitize the html output of printable_value
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9211
diff changeset
   168
Title
030745ac9873 [entities] unconditionnally sanitize the html output of printable_value
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9211
diff changeset
   169
=====
030745ac9873 [entities] unconditionnally sanitize the html output of printable_value
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9211
diff changeset
   170
030745ac9873 [entities] unconditionnally sanitize the html output of printable_value
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9211
diff changeset
   171
Elephant management best practices.
030745ac9873 [entities] unconditionnally sanitize the html output of printable_value
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9211
diff changeset
   172
030745ac9873 [entities] unconditionnally sanitize the html output of printable_value
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9211
diff changeset
   173
.. raw:: html
030745ac9873 [entities] unconditionnally sanitize the html output of printable_value
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9211
diff changeset
   174
030745ac9873 [entities] unconditionnally sanitize the html output of printable_value
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9211
diff changeset
   175
   <script>alert("coucou")</script>
030745ac9873 [entities] unconditionnally sanitize the html output of printable_value
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9211
diff changeset
   176
""", description_format=u'text/rest')
9858
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   177
            cnx.commit()
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   178
            c.cw_clear_all_caches()
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   179
            self.assertIn('alert',
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   180
                          c.printable_value('description', format='text/plain'))
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   181
            self.assertNotIn('alert',
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   182
                             c.printable_value('description', format='text/html'))
9432
030745ac9873 [entities] unconditionnally sanitize the html output of printable_value
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9211
diff changeset
   183
030745ac9873 [entities] unconditionnally sanitize the html output of printable_value
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9211
diff changeset
   184
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2660
diff changeset
   185
class SpecializedEntityClassesTC(CubicWebTC):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   186
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   187
    def select_eclass(self, etype):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   188
        # clear selector cache
2650
18aec79ec3a3 R [vreg] important refactoring of the vregistry, moving behaviour to end dictionnary (and so leaving room for more flexibility ; keep bw compat ; update api usage in cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   189
        clear_cache(self.vreg['etypes'], 'etype_class')
18aec79ec3a3 R [vreg] important refactoring of the vregistry, moving behaviour to end dictionnary (and so leaving room for more flexibility ; keep bw compat ; update api usage in cw
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   190
        return self.vreg['etypes'].etype_class(etype)
1642
12a98b17fb05 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   191
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   192
    def test_etype_class_selection_and_specialization(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   193
        # no specific class for Subdivisions, the default one should be selected
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   194
        eclass = self.select_eclass('SubDivision')
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7244
diff changeset
   195
        self.assertTrue(eclass.__autogenerated__)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5578
diff changeset
   196
        #self.assertEqual(eclass.__bases__, (AnyEntity,))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   197
        # build class from most generic to most specific and make
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   198
        # sure the most specific is always selected
1358
a7438eb2420c test update
sylvain.thenault@logilab.fr
parents: 1102
diff changeset
   199
        self.vreg._loadedmods[__name__] = {}
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   200
        for etype in ('Company', 'Division', 'SubDivision'):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   201
            class Foo(AnyEntity):
3450
265331a0920c use __regid__
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3369
diff changeset
   202
                __regid__ = etype
4491
a0f48c31b58a kill register_appobject_class method, simplifying autoregistration. Update test accordingly (test which manually registers object should also properly call there __register__ method). Drop the disable-appobjects config file entry: no one used it since its introduction years ago.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   203
            self.vreg.register(Foo)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   204
            eclass = self.select_eclass('SubDivision')
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7244
diff changeset
   205
            self.assertTrue(eclass.__autogenerated__)
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7244
diff changeset
   206
            self.assertFalse(eclass is Foo)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   207
            if etype == 'SubDivision':
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5578
diff changeset
   208
                self.assertEqual(eclass.__bases__, (Foo,))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   209
            else:
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5578
diff changeset
   210
                self.assertEqual(eclass.__bases__[0].__bases__, (Foo,))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   211
        # check Division eclass is still selected for plain Division entities
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   212
        eclass = self.select_eclass('Division')
8899
c7a95ebcc093 [entity] add an official ``cw_etype`` property for entity
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8694
diff changeset
   213
        self.assertEqual(eclass.cw_etype, 'Division')
1642
12a98b17fb05 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   214
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   215
if __name__ == '__main__':
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   216
    unittest_main()