entities/test/unittest_base.py
author Aurelien Campeas <aurelien.campeas@logilab.fr>
Tue, 27 May 2014 18:47:24 +0200
changeset 10087 ed0b076c119b
parent 9859 fc978ff7f381
child 10251 2daa5c6dea4d
child 10396 33e44293b0eb
permissions -rw-r--r--
[rset] kill the rset._rqlst cache Right now it "works" for the standard, internal uses. However when we will fold ClientConnection and Connection, it will hurt, because suddenly we get more cache hits, and the following situation would become commonplace: * there is an un-annotated _rqlst given by the querier * some view (e.g. facets) requests the .syntax_tree, which takes a copy of _rqlst * the view actually expects the rql syntax tree to be annotated, but it was not, hence we crash. Related to #3837233.
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)
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    63
                              for k, v in self.schema['State'].meta_attributes().iteritems()),
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')
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    69
            self.assertEqual(['Any X, ALIAS, ADDRESS WHERE X is EmailAddress, '
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
    70
                              'X alias ALIAS, X address ADDRESS'],
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
3b6bbb3a3c3e close #472361: omit password and bytes attributes in allowed mass-mailing keys
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3316
diff changeset
   140
    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
   141
        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
   142
            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
   143
            # Bytes/Password attributes should be omited
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   144
            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
   145
                              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
   146
                                   'creation_date', 'modification_date', 'cwuri', 'eid'))
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   147
                              )
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
   148
7212
040d3597444f [entities/test] add failing test for cw_instantiate
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6340
diff changeset
   149
    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
   150
        """ a weird non regression test """
9858
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   151
        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
   152
            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
   153
            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
   154
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   155
9432
030745ac9873 [entities] unconditionnally sanitize the html output of printable_value
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9211
diff changeset
   156
class HTMLtransformTC(BaseEntityTC):
030745ac9873 [entities] unconditionnally sanitize the html output of printable_value
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9211
diff changeset
   157
030745ac9873 [entities] unconditionnally sanitize the html output of printable_value
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9211
diff changeset
   158
    def test_sanitized_html(self):
9858
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   159
        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
   160
            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
   161
                                  description=u"""
9432
030745ac9873 [entities] unconditionnally sanitize the html output of printable_value
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9211
diff changeset
   162
Title
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
030745ac9873 [entities] unconditionnally sanitize the html output of printable_value
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9211
diff changeset
   165
Elephant management best practices.
030745ac9873 [entities] unconditionnally sanitize the html output of printable_value
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9211
diff changeset
   166
030745ac9873 [entities] unconditionnally sanitize the html output of printable_value
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9211
diff changeset
   167
.. raw:: html
030745ac9873 [entities] unconditionnally sanitize the html output of printable_value
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9211
diff changeset
   168
030745ac9873 [entities] unconditionnally sanitize the html output of printable_value
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9211
diff changeset
   169
   <script>alert("coucou")</script>
030745ac9873 [entities] unconditionnally sanitize the html output of printable_value
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9211
diff changeset
   170
""", description_format=u'text/rest')
9858
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   171
            cnx.commit()
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   172
            c.cw_clear_all_caches()
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   173
            self.assertIn('alert',
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   174
                          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
   175
            self.assertNotIn('alert',
4266e13fd5c1 [entitiestests/base] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9440
diff changeset
   176
                             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
   177
030745ac9873 [entities] unconditionnally sanitize the html output of printable_value
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9211
diff changeset
   178
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2660
diff changeset
   179
class SpecializedEntityClassesTC(CubicWebTC):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   180
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   181
    def select_eclass(self, etype):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   182
        # 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
   183
        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
   184
        return self.vreg['etypes'].etype_class(etype)
1642
12a98b17fb05 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   185
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   186
    def test_etype_class_selection_and_specialization(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   187
        # no specific class for Subdivisions, the default one should be selected
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   188
        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
   189
        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
   190
        #self.assertEqual(eclass.__bases__, (AnyEntity,))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   191
        # build class from most generic to most specific and make
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   192
        # sure the most specific is always selected
1358
a7438eb2420c test update
sylvain.thenault@logilab.fr
parents: 1102
diff changeset
   193
        self.vreg._loadedmods[__name__] = {}
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   194
        for etype in ('Company', 'Division', 'SubDivision'):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   195
            class Foo(AnyEntity):
3450
265331a0920c use __regid__
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3369
diff changeset
   196
                __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
   197
            self.vreg.register(Foo)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   198
            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
   199
            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
   200
            self.assertFalse(eclass is Foo)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   201
            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
   202
                self.assertEqual(eclass.__bases__, (Foo,))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   203
            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
   204
                self.assertEqual(eclass.__bases__[0].__bases__, (Foo,))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   205
        # check Division eclass is still selected for plain Division entities
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   206
        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
   207
        self.assertEqual(eclass.cw_etype, 'Division')
1642
12a98b17fb05 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   208
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   209
if __name__ == '__main__':
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   210
    unittest_main()