test/unittest_entity.py
author Julien Cristau <julien.cristau@logilab.fr>
Thu, 10 Dec 2015 16:58:45 +0100
changeset 10997 da712d3f0601
parent 10907 9ae707db5265
child 11047 bfd11ffa79f7
permissions -rw-r--r--
Bring back the separate web-side entity cache Prior to changeset 635cfac73d28 "[repoapi] fold ClientConnection into Connection", we had two entity caches: one on the client/dbapi/web side, and one on the server/repo side. This is a waste, but it is actually needed as long as we have the magic _cw attribute on entities which must sometimes be a request and sometimes a cnx. Removing the duplication caused weird problems with entity._cw alternating between both types of objects, which is unexpected by both the repo and the web sides. We add an entity cache on ConnectionCubicWebRequestBase, separate from the Connection's, and bring back the _cw_update_attr_cache/dont-cache-attrs mechanism, to let the server/edition code let caches know which attributes have been modified Entity.as_rset can be cached again, as ResultSet no longer modifies the entity when fetching it from a cache. Contrary to the pre-3.21 code, _cw_update_attr_cache now handles web requests and connections in the same way (otherwise the cache ends up with wrong values if a hook modifies attributes), but dont-cache-attrs is never set for (inlined) relations. Closes #6863543
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 -*-
9731
027bfc467a46 [cache] fix a cache issue with an entity created without relation cache prefill
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9432
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: 4835
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: 4835
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: 4835
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: 4835
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: 4835
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: 4835
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: 4835
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: 4835
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: 4835
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: 4835
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: 4835
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: 4835
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: 4835
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: 4835
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: 4835
diff changeset
    18
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
6173
eb386e473044 backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6142 6168
diff changeset
    19
"""unit tests for cubicweb.web.views.entities module"""
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    20
1016
26387b836099 use datetime instead of mx.DateTime
sylvain.thenault@logilab.fr
parents: 821
diff changeset
    21
from datetime import datetime
8161
6f4229eb8178 [test] fix test broken by 8158:2ee254e74382 and add a test for that change
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7973
diff changeset
    22
10707
3f4f190f8e35 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
    23
from six import text_type
3f4f190f8e35 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
    24
7154
5e2f93b88d86 [entity vocabulary] refactor unrelated rql to allow usage of RQLRewriter to insert schema constraints. Closes #1561806
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7153
diff changeset
    25
from logilab.common import tempattr
8161
6f4229eb8178 [test] fix test broken by 8158:2ee254e74382 and add a test for that change
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7973
diff changeset
    26
from logilab.common.decorators import clear_cache
6f4229eb8178 [test] fix test broken by 8158:2ee254e74382 and add a test for that change
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7973
diff changeset
    27
9877
4a604b6e3067 [test/entities] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9774
diff changeset
    28
from cubicweb import Binary
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2650
diff changeset
    29
from cubicweb.devtools.testlib import CubicWebTC
4023
eae23c40627a drop common subpackage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4015
diff changeset
    30
from cubicweb.mttransforms import HAS_TAL
9319
a68b8f423a8b [test] test can_use_rest_path directly
Julien Cristau <julien.cristau@logilab.fr>
parents: 9273
diff changeset
    31
from cubicweb.entity import can_use_rest_path
3241
1a6f7a0e7dbd unrelated_rql now considers relation's add perm
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3136
diff changeset
    32
from cubicweb.entities import fetch_config
6685
eeedb3575d25 [uilib] soup2xhtml uses now lxml.html.Cleaner
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6427
diff changeset
    33
from cubicweb.uilib import soup2xhtml
9877
4a604b6e3067 [test/entities] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9774
diff changeset
    34
from cubicweb.schema import  RRQLExpression
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    35
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2650
diff changeset
    36
class EntityTC(CubicWebTC):
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    37
7154
5e2f93b88d86 [entity vocabulary] refactor unrelated rql to allow usage of RQLRewriter to insert schema constraints. Closes #1561806
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7153
diff changeset
    38
    def setUp(self):
5e2f93b88d86 [entity vocabulary] refactor unrelated rql to allow usage of RQLRewriter to insert schema constraints. Closes #1561806
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7153
diff changeset
    39
        super(EntityTC, self).setUp()
5e2f93b88d86 [entity vocabulary] refactor unrelated rql to allow usage of RQLRewriter to insert schema constraints. Closes #1561806
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7153
diff changeset
    40
        self.backup_dict = {}
5e2f93b88d86 [entity vocabulary] refactor unrelated rql to allow usage of RQLRewriter to insert schema constraints. Closes #1561806
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7153
diff changeset
    41
        for cls in self.vreg['etypes'].iter_classes():
7827
9bbf83f68bcc [entity] upgrade fetch_[unrelated_]order to benefit from changes introduced in 3.14 (closes #1942758)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7798
diff changeset
    42
            self.backup_dict[cls] = (cls.fetch_attrs, cls.cw_fetch_order)
7154
5e2f93b88d86 [entity vocabulary] refactor unrelated rql to allow usage of RQLRewriter to insert schema constraints. Closes #1561806
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7153
diff changeset
    43
5e2f93b88d86 [entity vocabulary] refactor unrelated rql to allow usage of RQLRewriter to insert schema constraints. Closes #1561806
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7153
diff changeset
    44
    def tearDown(self):
5e2f93b88d86 [entity vocabulary] refactor unrelated rql to allow usage of RQLRewriter to insert schema constraints. Closes #1561806
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7153
diff changeset
    45
        super(EntityTC, self).tearDown()
5e2f93b88d86 [entity vocabulary] refactor unrelated rql to allow usage of RQLRewriter to insert schema constraints. Closes #1561806
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7153
diff changeset
    46
        for cls in self.vreg['etypes'].iter_classes():
7827
9bbf83f68bcc [entity] upgrade fetch_[unrelated_]order to benefit from changes introduced in 3.14 (closes #1942758)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7798
diff changeset
    47
            cls.fetch_attrs, cls.cw_fetch_order = self.backup_dict[cls]
7154
5e2f93b88d86 [entity vocabulary] refactor unrelated rql to allow usage of RQLRewriter to insert schema constraints. Closes #1561806
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7153
diff changeset
    48
9731
027bfc467a46 [cache] fix a cache issue with an entity created without relation cache prefill
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9432
diff changeset
    49
    def test_no_prefill_related_cache_bug(self):
9877
4a604b6e3067 [test/entities] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9774
diff changeset
    50
        with self.admin_access.repo_cnx() as cnx:
4a604b6e3067 [test/entities] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9774
diff changeset
    51
            usine = cnx.create_entity('Usine', lieu=u'Montbeliard')
4a604b6e3067 [test/entities] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9774
diff changeset
    52
            produit = cnx.create_entity('Produit')
4a604b6e3067 [test/entities] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9774
diff changeset
    53
            # usine was prefilled in glob_add_entity
4a604b6e3067 [test/entities] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9774
diff changeset
    54
            # let's simulate produit creation without prefill
4a604b6e3067 [test/entities] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9774
diff changeset
    55
            produit._cw_related_cache.clear()
4a604b6e3067 [test/entities] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9774
diff changeset
    56
            # use add_relations
4a604b6e3067 [test/entities] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9774
diff changeset
    57
            cnx.add_relations([('fabrique_par', [(produit.eid, usine.eid)])])
4a604b6e3067 [test/entities] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9774
diff changeset
    58
            self.assertEqual(1, len(usine.reverse_fabrique_par))
4a604b6e3067 [test/entities] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9774
diff changeset
    59
            self.assertEqual(1, len(produit.fabrique_par))
9731
027bfc467a46 [cache] fix a cache issue with an entity created without relation cache prefill
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9432
diff changeset
    60
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    61
    def test_boolean_value(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    62
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    63
            e = self.vreg['etypes'].etype_class('CWUser')(req)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    64
            self.assertTrue(e)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    65
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    66
    def test_yams_inheritance(self):
748
eec752381926 unittest_entity ok
sylvain.thenault@logilab.fr
parents: 744
diff changeset
    67
        from entities import Note
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    68
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    69
            e = self.vreg['etypes'].etype_class('SubNote')(req)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    70
            self.assertIsInstance(e, Note)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    71
            e2 = self.vreg['etypes'].etype_class('SubNote')(req)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    72
            self.assertIs(e.__class__, e2.__class__)
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
    def test_has_eid(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    75
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    76
            e = self.vreg['etypes'].etype_class('CWUser')(req)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    77
            self.assertEqual(e.eid, None)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    78
            self.assertEqual(e.has_eid(), False)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    79
            e.eid = 'X'
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    80
            self.assertEqual(e.has_eid(), False)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    81
            e.eid = 0
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    82
            self.assertEqual(e.has_eid(), True)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    83
            e.eid = 2
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    84
            self.assertEqual(e.has_eid(), True)
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    85
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    86
    def test_copy(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    87
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    88
            req.create_entity('Tag', name=u'x')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    89
            p = req.create_entity('Personne', nom=u'toto')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    90
            oe = req.create_entity('Note', type=u'x')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    91
            req.execute('SET T ecrit_par U WHERE T eid %(t)s, U eid %(u)s',
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    92
                         {'t': oe.eid, 'u': p.eid})
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    93
            req.execute('SET TAG tags X WHERE X eid %(x)s', {'x': oe.eid})
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    94
            e = req.create_entity('Note', type=u'z')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    95
            e.copy_relations(oe.eid)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    96
            self.assertEqual(len(e.ecrit_par), 1)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    97
            self.assertEqual(e.ecrit_par[0].eid, p.eid)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    98
            self.assertEqual(len(e.reverse_tags), 1)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
    99
            # check meta-relations are not copied, set on commit
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   100
            self.assertEqual(len(e.created_by), 0)
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   101
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   102
    def test_copy_with_nonmeta_composite_inlined(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   103
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   104
            p = req.create_entity('Personne', nom=u'toto')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   105
            oe = req.create_entity('Note', type=u'x')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   106
            self.schema['ecrit_par'].rdef('Note', 'Personne').composite = 'subject'
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   107
            req.execute('SET T ecrit_par U WHERE T eid %(t)s, U eid %(u)s',
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   108
                        {'t': oe.eid, 'u': p.eid})
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   109
            e = req.create_entity('Note', type=u'z')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   110
            e.copy_relations(oe.eid)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   111
            self.assertFalse(e.ecrit_par)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   112
            self.assertTrue(oe.ecrit_par)
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   113
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   114
    def test_copy_with_composite(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   115
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   116
            adeleid = req.execute('INSERT EmailAddress X: X address "toto@logilab.org", U use_email X WHERE U login "admin"')[0][0]
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   117
            e = req.execute('Any X WHERE X eid %(x)s', {'x': req.user.eid}).get_entity(0, 0)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   118
            self.assertEqual(e.use_email[0].address, "toto@logilab.org")
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   119
            self.assertEqual(e.use_email[0].eid, adeleid)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   120
            usereid = req.execute('INSERT CWUser X: X login "toto", X upassword "toto", X in_group G '
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   121
                                   'WHERE G name "users"')[0][0]
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   122
            e = req.execute('Any X WHERE X eid %(x)s', {'x': usereid}).get_entity(0, 0)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   123
            e.copy_relations(req.user.eid)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   124
            self.assertFalse(e.use_email)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   125
            self.assertFalse(e.primary_email)
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   126
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   127
    def test_copy_with_non_initial_state(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   128
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   129
            user = req.execute('INSERT CWUser X: X login "toto", X upassword %(pwd)s, X in_group G WHERE G name "users"',
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   130
                               {'pwd': 'toto'}).get_entity(0, 0)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   131
            req.cnx.commit()
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   132
            user.cw_adapt_to('IWorkflowable').fire_transition('deactivate')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   133
            req.cnx.commit()
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   134
            eid2 = req.execute('INSERT CWUser X: X login "tutu", X upassword %(pwd)s', {'pwd': 'toto'})[0][0]
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   135
            e = req.execute('Any X WHERE X eid %(x)s', {'x': eid2}).get_entity(0, 0)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   136
            e.copy_relations(user.eid)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   137
            req.cnx.commit()
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   138
            e.cw_clear_relation_cache('in_state', 'subject')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   139
            self.assertEqual(e.cw_adapt_to('IWorkflowable').state, 'activated')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   140
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   141
    def test_related_cache_both(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   142
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   143
            user = req.execute('Any X WHERE X eid %(x)s', {'x':req.user.eid}).get_entity(0, 0)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   144
            adeleid = req.execute('INSERT EmailAddress X: X address "toto@logilab.org", U use_email X WHERE U login "admin"')[0][0]
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   145
            req.cnx.commit()
10997
da712d3f0601 Bring back the separate web-side entity cache
Julien Cristau <julien.cristau@logilab.fr>
parents: 10907
diff changeset
   146
            self.assertEqual(user._cw_related_cache, {})
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   147
            email = user.primary_email[0]
10997
da712d3f0601 Bring back the separate web-side entity cache
Julien Cristau <julien.cristau@logilab.fr>
parents: 10907
diff changeset
   148
            self.assertEqual(sorted(user._cw_related_cache), ['primary_email_subject'])
da712d3f0601 Bring back the separate web-side entity cache
Julien Cristau <julien.cristau@logilab.fr>
parents: 10907
diff changeset
   149
            self.assertEqual(list(email._cw_related_cache), ['primary_email_object'])
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   150
            groups = user.in_group
10997
da712d3f0601 Bring back the separate web-side entity cache
Julien Cristau <julien.cristau@logilab.fr>
parents: 10907
diff changeset
   151
            self.assertEqual(sorted(user._cw_related_cache), ['in_group_subject', 'primary_email_subject'])
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   152
            for group in groups:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   153
                self.assertNotIn('in_group_subject', group._cw_related_cache)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   154
            user.cw_clear_all_caches()
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   155
            user.related('in_group', entities=True)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   156
            self.assertIn('in_group_subject', user._cw_related_cache)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   157
            user.cw_clear_all_caches()
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   158
            user.related('in_group', targettypes=('CWGroup',), entities=True)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   159
            self.assertNotIn('in_group_subject', user._cw_related_cache)
413
a7366dd3c33c fix bug in entity.related_rql(): fetch_attr list / fetchorder weren't computed correctly
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 0
diff changeset
   160
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   161
    def test_related_limit(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   162
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   163
            p = req.create_entity('Personne', nom=u'di mascio', prenom=u'adrien')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   164
            for tag in u'abcd':
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   165
                req.create_entity('Tag', name=tag)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   166
            req.execute('SET X tags Y WHERE X is Tag, Y is Personne')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   167
            self.assertEqual(len(p.related('tags', 'object', limit=2)), 2)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   168
            self.assertEqual(len(p.related('tags', 'object')), 4)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   169
            p.cw_clear_all_caches()
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   170
            self.assertEqual(len(p.related('tags', 'object', entities=True, limit=2)), 2)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   171
            self.assertEqual(len(p.related('tags', 'object', entities=True)), 4)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   172
9293
723e2c586ea3 [entity] Entity.related(): add a targettypes argument (closes #2957313)
Aurelien Campeas
parents: 9283
diff changeset
   173
    def test_related_targettypes(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   174
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   175
            p = req.create_entity('Personne', nom=u'Loxodonta', prenom=u'Babar')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   176
            n = req.create_entity('Note', type=u'scratch', ecrit_par=p)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   177
            t = req.create_entity('Tag', name=u'a tag', tags=(p, n))
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   178
            req.cnx.commit()
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   179
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   180
            t = req.entity_from_eid(t.eid)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   181
            self.assertEqual(2, t.related('tags').rowcount)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   182
            self.assertEqual(1, t.related('tags', targettypes=('Personne',)).rowcount)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   183
            self.assertEqual(1, t.related('tags', targettypes=('Note',)).rowcount)
9293
723e2c586ea3 [entity] Entity.related(): add a targettypes argument (closes #2957313)
Aurelien Campeas
parents: 9283
diff changeset
   184
7376
38524ca653e5 [entity] fix cw_instantiate w/ reverse_ relation crash when either multiple entities are given or an eid instead of an entity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7308
diff changeset
   185
    def test_cw_instantiate_relation(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   186
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   187
            p1 = req.create_entity('Personne', nom=u'di')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   188
            p2 = req.create_entity('Personne', nom=u'mascio')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   189
            t = req.create_entity('Tag', name=u't0', tags=[])
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   190
            self.assertCountEqual(t.tags, [])
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   191
            t = req.create_entity('Tag', name=u't1', tags=p1)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   192
            self.assertCountEqual(t.tags, [p1])
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   193
            t = req.create_entity('Tag', name=u't2', tags=p1.eid)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   194
            self.assertCountEqual(t.tags, [p1])
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   195
            t = req.create_entity('Tag', name=u't3', tags=[p1, p2.eid])
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   196
            self.assertCountEqual(t.tags, [p1, p2])
7376
38524ca653e5 [entity] fix cw_instantiate w/ reverse_ relation crash when either multiple entities are given or an eid instead of an entity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7308
diff changeset
   197
38524ca653e5 [entity] fix cw_instantiate w/ reverse_ relation crash when either multiple entities are given or an eid instead of an entity
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7308
diff changeset
   198
    def test_cw_instantiate_reverse_relation(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   199
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   200
            t1 = req.create_entity('Tag', name=u't1')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   201
            t2 = req.create_entity('Tag', name=u't2')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   202
            p = req.create_entity('Personne', nom=u'di mascio', reverse_tags=t1)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   203
            self.assertCountEqual(p.reverse_tags, [t1])
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   204
            p = req.create_entity('Personne', nom=u'di mascio', reverse_tags=t1.eid)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   205
            self.assertCountEqual(p.reverse_tags, [t1])
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   206
            p = req.create_entity('Personne', nom=u'di mascio', reverse_tags=[t1, t2.eid])
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   207
            self.assertCountEqual(p.reverse_tags, [t1, t2])
1640
65b60f177eb1 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
    def test_fetch_rql(self):
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: 2635
diff changeset
   210
        Personne = self.vreg['etypes'].etype_class('Personne')
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: 2635
diff changeset
   211
        Societe = self.vreg['etypes'].etype_class('Societe')
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: 2635
diff changeset
   212
        Note = self.vreg['etypes'].etype_class('Note')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   213
        peschema = Personne.e_schema
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   214
        seschema = Societe.e_schema
7154
5e2f93b88d86 [entity vocabulary] refactor unrelated rql to allow usage of RQLRewriter to insert schema constraints. Closes #1561806
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7153
diff changeset
   215
        torestore = []
5e2f93b88d86 [entity vocabulary] refactor unrelated rql to allow usage of RQLRewriter to insert schema constraints. Closes #1561806
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7153
diff changeset
   216
        for rdef, card in [(peschema.subjrels['travaille'].rdef(peschema, seschema), '1*'),
5e2f93b88d86 [entity vocabulary] refactor unrelated rql to allow usage of RQLRewriter to insert schema constraints. Closes #1561806
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7153
diff changeset
   217
                           (peschema.subjrels['connait'].rdef(peschema, peschema), '11'),
5e2f93b88d86 [entity vocabulary] refactor unrelated rql to allow usage of RQLRewriter to insert schema constraints. Closes #1561806
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7153
diff changeset
   218
                           (peschema.subjrels['evaluee'].rdef(peschema, Note.e_schema), '1*'),
5e2f93b88d86 [entity vocabulary] refactor unrelated rql to allow usage of RQLRewriter to insert schema constraints. Closes #1561806
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7153
diff changeset
   219
                           (seschema.subjrels['evaluee'].rdef(seschema, Note.e_schema), '1*')]:
5e2f93b88d86 [entity vocabulary] refactor unrelated rql to allow usage of RQLRewriter to insert schema constraints. Closes #1561806
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7153
diff changeset
   220
            cm = tempattr(rdef, 'cardinality', card)
5e2f93b88d86 [entity vocabulary] refactor unrelated rql to allow usage of RQLRewriter to insert schema constraints. Closes #1561806
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7153
diff changeset
   221
            cm.__enter__()
5e2f93b88d86 [entity vocabulary] refactor unrelated rql to allow usage of RQLRewriter to insert schema constraints. Closes #1561806
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7153
diff changeset
   222
            torestore.append(cm)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   223
        try:
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   224
            with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   225
                user = req.user
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   226
                # testing basic fetch_attrs attribute
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   227
                self.assertEqual(Personne.fetch_rql(user),
10467
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   228
                                 'Any X,AA,AB,AC ORDERBY AB '
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   229
                                 'WHERE X is_instance_of Personne, X modification_date AA, X nom AB, X prenom AC')
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   230
                # testing unknown attributes
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   231
                Personne.fetch_attrs = ('bloug', 'beep')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   232
                self.assertEqual(Personne.fetch_rql(user), 'Any X WHERE X is_instance_of Personne')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   233
                # testing one non final relation
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   234
                Personne.fetch_attrs = ('nom', 'prenom', 'travaille')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   235
                self.assertEqual(Personne.fetch_rql(user),
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   236
                                 'Any X,AA,AB,AC,AD ORDERBY AA '
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   237
                                 'WHERE X is_instance_of Personne, X nom AA, X prenom AB, X travaille AC?, AC nom AD')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   238
                # testing two non final relations
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   239
                Personne.fetch_attrs = ('nom', 'prenom', 'travaille', 'evaluee')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   240
                self.assertEqual(Personne.fetch_rql(user),
10467
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   241
                                 'Any X,AA,AB,AC,AD,AE ORDERBY AB '
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   242
                                 'WHERE X is_instance_of Personne, X evaluee AA?, X nom AB, X prenom AC, X travaille AD?, '
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   243
                                 'AD nom AE')
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   244
                # testing one non final relation with recursion
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   245
                Personne.fetch_attrs = ('nom', 'prenom', 'travaille')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   246
                Societe.fetch_attrs = ('nom', 'evaluee')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   247
                self.assertEqual(Personne.fetch_rql(user),
10467
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   248
                                 'Any X,AA,AB,AC,AD,AE,AF ORDERBY AA,AE DESC '
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   249
                                 'WHERE X is_instance_of Personne, X nom AA, X prenom AB, X travaille AC?, '
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   250
                                 'AC evaluee AD?, AD modification_date AE, AC nom AF')
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   251
                # testing symmetric relation
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   252
                Personne.fetch_attrs = ('nom', 'connait')
10467
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   253
                self.assertEqual(Personne.fetch_rql(user), 'Any X,AA,AB ORDERBY AB '
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   254
                                 'WHERE X is_instance_of Personne, X connait AA?, X nom AB')
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   255
                # testing optional relation
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   256
                peschema.subjrels['travaille'].rdef(peschema, seschema).cardinality = '?*'
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   257
                Personne.fetch_attrs = ('nom', 'prenom', 'travaille')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   258
                Societe.fetch_attrs = ('nom',)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   259
                self.assertEqual(Personne.fetch_rql(user),
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   260
                                 'Any X,AA,AB,AC,AD ORDERBY AA WHERE X is_instance_of Personne, X nom AA, X prenom AB, X travaille AC?, AC nom AD')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   261
                # testing relation with cardinality > 1
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   262
                peschema.subjrels['travaille'].rdef(peschema, seschema).cardinality = '**'
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   263
                self.assertEqual(Personne.fetch_rql(user),
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   264
                                 'Any X,AA,AB ORDERBY AA WHERE X is_instance_of Personne, X nom AA, X prenom AB')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   265
                # XXX test unauthorized attribute
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   266
        finally:
7154
5e2f93b88d86 [entity vocabulary] refactor unrelated rql to allow usage of RQLRewriter to insert schema constraints. Closes #1561806
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7153
diff changeset
   267
            # fetch_attrs restored by generic tearDown
5e2f93b88d86 [entity vocabulary] refactor unrelated rql to allow usage of RQLRewriter to insert schema constraints. Closes #1561806
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7153
diff changeset
   268
            for cm in torestore:
5e2f93b88d86 [entity vocabulary] refactor unrelated rql to allow usage of RQLRewriter to insert schema constraints. Closes #1561806
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7153
diff changeset
   269
                cm.__exit__(None, None, None)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   270
4630
528dee042927 fix #694445: related entity generates weird RQL which in turn generates weird SQL which fails on SQL Server
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
   271
    def test_related_rql_base(self):
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: 2635
diff changeset
   272
        Personne = self.vreg['etypes'].etype_class('Personne')
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: 2635
diff changeset
   273
        Note = self.vreg['etypes'].etype_class('Note')
4691
ae468fae9965 [test] fix test inter-dependancies pb. Pytest ok in each individual test dir, though not yet for whole cubicweb, but for different reasons
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4681
diff changeset
   274
        SubNote = self.vreg['etypes'].etype_class('SubNote')
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7554
diff changeset
   275
        self.assertTrue(issubclass(self.vreg['etypes'].etype_class('SubNote'), Note))
7827
9bbf83f68bcc [entity] upgrade fetch_[unrelated_]order to benefit from changes introduced in 3.14 (closes #1942758)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7798
diff changeset
   276
        Personne.fetch_attrs, Personne.cw_fetch_order = fetch_config(('nom', 'type'))
9bbf83f68bcc [entity] upgrade fetch_[unrelated_]order to benefit from changes introduced in 3.14 (closes #1942758)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7798
diff changeset
   277
        Note.fetch_attrs, Note.cw_fetch_order = fetch_config(('type',))
9bbf83f68bcc [entity] upgrade fetch_[unrelated_]order to benefit from changes introduced in 3.14 (closes #1942758)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7798
diff changeset
   278
        SubNote.fetch_attrs, SubNote.cw_fetch_order = fetch_config(('type',))
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   279
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   280
            p = req.create_entity('Personne', nom=u'pouet')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   281
            self.assertEqual(p.cw_related_rql('evaluee'),
10467
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   282
                             'Any X,AA,AB ORDERBY AB WHERE E eid %(x)s, E evaluee X, '
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   283
                             'X modification_date AA, X type AB')
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   284
            n = req.create_entity('Note')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   285
            self.assertEqual(n.cw_related_rql('evaluee', role='object',
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   286
                                              targettypes=('Societe', 'Personne')),
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   287
                             "Any X,AA ORDERBY AB DESC WHERE E eid %(x)s, X evaluee E, "
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   288
                             "X is IN(Personne, Societe), X nom AA, "
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   289
                             "X modification_date AB")
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   290
            Personne.fetch_attrs, Personne.cw_fetch_order = fetch_config(('nom', ))
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   291
            # XXX
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   292
            self.assertEqual(p.cw_related_rql('evaluee'),
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   293
                              'Any X,AA ORDERBY AA DESC '
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   294
                              'WHERE E eid %(x)s, E evaluee X, X modification_date AA')
3672
554a588ffaea [entity] make related_rql honors its targettypes argument
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3670
diff changeset
   295
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   296
            tag = self.vreg['etypes'].etype_class('Tag')(req)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   297
            self.assertEqual(tag.cw_related_rql('tags', 'subject'),
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   298
                              'Any X,AA ORDERBY AA DESC '
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   299
                              'WHERE E eid %(x)s, E tags X, X modification_date AA')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   300
            self.assertEqual(tag.cw_related_rql('tags', 'subject', ('Personne',)),
10467
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   301
                              'Any X,AA,AB ORDERBY AB '
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   302
                              'WHERE E eid %(x)s, E tags X, X is Personne, X modification_date AA, '
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   303
                              'X nom AB')
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   304
7425
7e9d1d6fcba7 [entity fetch_attrs] remove ambiguous relations on different etypes from fetched attrs or it may produce wrong related results; closes #1700896
Florent Cayré <florent.cayre@gmail.com>
parents: 7376
diff changeset
   305
    def test_related_rql_ambiguous_cant_use_fetch_order(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   306
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   307
            tag = self.vreg['etypes'].etype_class('Tag')(req)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   308
            for ttype in self.schema['tags'].objects():
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   309
                self.vreg['etypes'].etype_class(ttype).fetch_attrs = ('modification_date',)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   310
            self.assertEqual(tag.cw_related_rql('tags', 'subject'),
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   311
                              'Any X,AA ORDERBY AA DESC '
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   312
                              'WHERE E eid %(x)s, E tags X, X modification_date AA')
4630
528dee042927 fix #694445: related entity generates weird RQL which in turn generates weird SQL which fails on SQL Server
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4467
diff changeset
   313
7798
8930f7a284dd [entity fetchattrs] also fetch ambiguous rtypes even if we do not recurse on them (closes #1720823)
Florent Cayré <florent.cayre@gmail.com>
parents: 7794
diff changeset
   314
    def test_related_rql_fetch_ambiguous_rtype(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   315
        etvreg = self.vreg['etypes']
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   316
        soc_etype = etvreg.etype_class('Societe')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   317
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   318
            soc = soc_etype(req)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   319
            soc_etype.fetch_attrs = ('fournit',)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   320
            etvreg.etype_class('Service').fetch_attrs = ('fabrique_par',)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   321
            etvreg.etype_class('Produit').fetch_attrs = ('fabrique_par',)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   322
            etvreg.etype_class('Usine').fetch_attrs = ('lieu',)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   323
            etvreg.etype_class('Personne').fetch_attrs = ('nom',)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   324
            self.assertEqual(soc.cw_related_rql('fournit', 'subject'),
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   325
                             'Any X,A WHERE E eid %(x)s, E fournit X, X fabrique_par A')
7425
7e9d1d6fcba7 [entity fetch_attrs] remove ambiguous relations on different etypes from fetched attrs or it may produce wrong related results; closes #1700896
Florent Cayré <florent.cayre@gmail.com>
parents: 7376
diff changeset
   326
7139
20807d3d7cf6 [rql rewriter] to properly handle 'relation' rql expressions, rql rewriter must support multiple variables (eg S and O) at once to be given as varmap
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6685
diff changeset
   327
    def test_unrelated_rql_security_1_manager(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   328
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   329
            user = req.user
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   330
            rql = user.cw_unrelated_rql('use_email', 'EmailAddress', 'subject')[0]
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   331
            self.assertEqual(rql,
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   332
                             'Any O,AA,AB,AC ORDERBY AC DESC '
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   333
                             'WHERE NOT A use_email O, S eid %(x)s, '
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   334
                             'O is_instance_of EmailAddress, O address AA, O alias AB, '
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   335
                             'O modification_date AC')
7139
20807d3d7cf6 [rql rewriter] to properly handle 'relation' rql expressions, rql rewriter must support multiple variables (eg S and O) at once to be given as varmap
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6685
diff changeset
   336
20807d3d7cf6 [rql rewriter] to properly handle 'relation' rql expressions, rql rewriter must support multiple variables (eg S and O) at once to be given as varmap
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6685
diff changeset
   337
    def test_unrelated_rql_security_1_user(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   338
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   339
            self.create_user(req, 'toto')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   340
        with self.new_access('toto').web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   341
            user = req.user # XXX
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   342
            rql = user.cw_unrelated_rql('use_email', 'EmailAddress', 'subject')[0]
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   343
            self.assertEqual(rql,
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   344
                             'Any O,AA,AB,AC ORDERBY AC DESC '
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   345
                             'WHERE NOT A use_email O, S eid %(x)s, '
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   346
                             'O is_instance_of EmailAddress, O address AA, O alias AB, O modification_date AC')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   347
            user = req.execute('Any X WHERE X login "admin"').get_entity(0, 0)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   348
            rql = user.cw_unrelated_rql('use_email', 'EmailAddress', 'subject')[0]
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   349
            self.assertEqual(rql, 'Any O,AA,AB,AC ORDERBY AC DESC '
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   350
                             'WHERE NOT A use_email O, S eid %(x)s, '
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   351
                             'O is EmailAddress, O address AA, O alias AB, O modification_date AC, AD eid %(AE)s, '
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   352
                             'EXISTS(S identity AD, NOT AD in_group AF, AF name "guests", AF is CWGroup), A is CWUser')
7139
20807d3d7cf6 [rql rewriter] to properly handle 'relation' rql expressions, rql rewriter must support multiple variables (eg S and O) at once to be given as varmap
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6685
diff changeset
   353
20807d3d7cf6 [rql rewriter] to properly handle 'relation' rql expressions, rql rewriter must support multiple variables (eg S and O) at once to be given as varmap
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6685
diff changeset
   354
    def test_unrelated_rql_security_1_anon(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   355
        with self.new_access('anon').web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   356
            user = req.user
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   357
            rql = user.cw_unrelated_rql('use_email', 'EmailAddress', 'subject')[0]
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   358
            self.assertEqual(rql, 'Any O,AA,AB,AC ORDERBY AC DESC '
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   359
                             'WHERE NOT A use_email O, S eid %(x)s, '
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   360
                             'O is EmailAddress, O address AA, O alias AB, O modification_date AC, AD eid %(AE)s, '
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   361
                             'EXISTS(S identity AD, NOT AD in_group AF, AF name "guests", AF is CWGroup), A is CWUser')
3241
1a6f7a0e7dbd unrelated_rql now considers relation's add perm
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3136
diff changeset
   362
1a6f7a0e7dbd unrelated_rql now considers relation's add perm
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3136
diff changeset
   363
    def test_unrelated_rql_security_2(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   364
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   365
            email = req.execute('INSERT EmailAddress X: X address "hop"').get_entity(0, 0)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   366
            rql = email.cw_unrelated_rql('use_email', 'CWUser', 'object')[0]
10467
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   367
            self.assertEqual(rql, 'Any S,AA,AB,AC,AD ORDERBY AB '
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   368
                             'WHERE NOT S use_email O, O eid %(x)s, S is_instance_of CWUser, '
10467
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   369
                             'S firstname AA, S login AB, S modification_date AC, S surname AD')
9774
b7b71be569cf deprecate get/set_shared_data API
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9770
diff changeset
   370
            req.cnx.commit()
8161
6f4229eb8178 [test] fix test broken by 8158:2ee254e74382 and add a test for that change
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7973
diff changeset
   371
        rperms = self.schema['EmailAddress'].permissions['read']
6f4229eb8178 [test] fix test broken by 8158:2ee254e74382 and add a test for that change
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7973
diff changeset
   372
        clear_cache(self.schema['EmailAddress'], 'get_groups')
6f4229eb8178 [test] fix test broken by 8158:2ee254e74382 and add a test for that change
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7973
diff changeset
   373
        clear_cache(self.schema['EmailAddress'], 'get_rqlexprs')
6f4229eb8178 [test] fix test broken by 8158:2ee254e74382 and add a test for that change
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7973
diff changeset
   374
        self.schema['EmailAddress'].permissions['read'] = ('managers', 'users', 'guests',)
6f4229eb8178 [test] fix test broken by 8158:2ee254e74382 and add a test for that change
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7973
diff changeset
   375
        try:
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   376
            with self.new_access('anon').web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   377
                email = req.execute('Any X WHERE X eid %(x)s', {'x': email.eid}).get_entity(0, 0)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   378
                rql = email.cw_unrelated_rql('use_email', 'CWUser', 'object')[0]
10467
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   379
                self.assertEqual(rql, 'Any S,AA,AB,AC,AD ORDERBY AB '
8161
6f4229eb8178 [test] fix test broken by 8158:2ee254e74382 and add a test for that change
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7973
diff changeset
   380
                             'WHERE NOT S use_email O, O eid %(x)s, S is CWUser, '
10467
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   381
                             'S firstname AA, S login AB, S modification_date AC, S surname AD, '
8161
6f4229eb8178 [test] fix test broken by 8158:2ee254e74382 and add a test for that change
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7973
diff changeset
   382
                             'AE eid %(AF)s, EXISTS(S identity AE, NOT AE in_group AG, AG name "guests", AG is CWGroup)')
6f4229eb8178 [test] fix test broken by 8158:2ee254e74382 and add a test for that change
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7973
diff changeset
   383
        finally:
6f4229eb8178 [test] fix test broken by 8158:2ee254e74382 and add a test for that change
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7973
diff changeset
   384
            clear_cache(self.schema['EmailAddress'], 'get_groups')
6f4229eb8178 [test] fix test broken by 8158:2ee254e74382 and add a test for that change
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7973
diff changeset
   385
            clear_cache(self.schema['EmailAddress'], 'get_rqlexprs')
6f4229eb8178 [test] fix test broken by 8158:2ee254e74382 and add a test for that change
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7973
diff changeset
   386
            self.schema['EmailAddress'].permissions['read'] = rperms
6f4229eb8178 [test] fix test broken by 8158:2ee254e74382 and add a test for that change
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7973
diff changeset
   387
9712
6c6cd8c4b256 [entity] add a new `cw_linkable_rql` method
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 9638
diff changeset
   388
    def test_cw_linkable_rql(self):
6c6cd8c4b256 [entity] add a new `cw_linkable_rql` method
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 9638
diff changeset
   389
        with self.admin_access.web_request() as req:
6c6cd8c4b256 [entity] add a new `cw_linkable_rql` method
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 9638
diff changeset
   390
            email = req.execute('INSERT EmailAddress X: X address "hop"').get_entity(0, 0)
6c6cd8c4b256 [entity] add a new `cw_linkable_rql` method
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 9638
diff changeset
   391
            rql = email.cw_linkable_rql('use_email', 'CWUser', 'object')[0]
10467
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   392
            self.assertEqual(rql, 'Any S,AA,AB,AC,AD ORDERBY AB '
9712
6c6cd8c4b256 [entity] add a new `cw_linkable_rql` method
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 9638
diff changeset
   393
                             'WHERE O eid %(x)s, S is_instance_of CWUser, '
10467
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   394
                             'S firstname AA, S login AB, S modification_date AC, S surname AD')
3241
1a6f7a0e7dbd unrelated_rql now considers relation's add perm
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3136
diff changeset
   395
3826
0c0c051863cb close #511810: bad rql generated when looking for vocabulary for a relation on an entity which doesn't exist (yet)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3771
diff changeset
   396
    def test_unrelated_rql_security_nonexistant(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   397
        with self.new_access('anon').web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   398
            email = self.vreg['etypes'].etype_class('EmailAddress')(req)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   399
            rql = email.cw_unrelated_rql('use_email', 'CWUser', 'object')[0]
10467
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   400
            self.assertEqual(rql, 'Any S,AA,AB,AC,AD ORDERBY AB '
7177
0f2905cbe443 [entity vocab] fix bug introduced in 3.12 vs/ entity vocabulary, leading to some unexpected empty vocabulary. Fix test accordingly.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7154
diff changeset
   401
                         'WHERE S is CWUser, '
10467
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   402
                         'S firstname AA, S login AB, S modification_date AC, S surname AD, '
7794
aed065b97f12 refactor entity fetch_rql method to use a RQL syntax tree instead of RQL strings ; closes #1585650
Florent Cayré <florent.cayre@gmail.com>
parents: 7791
diff changeset
   403
                         'AE eid %(AF)s, EXISTS(S identity AE, NOT AE in_group AG, AG name "guests", AG is CWGroup)')
3826
0c0c051863cb close #511810: bad rql generated when looking for vocabulary for a relation on an entity which doesn't exist (yet)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3771
diff changeset
   404
7153
7df83a6d17c0 [entity vocabulary] fix unrelated rql generation to skip rql constraints that don't make sense
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7139
diff changeset
   405
    def test_unrelated_rql_constraints_creation_subject(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   406
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   407
            person = self.vreg['etypes'].etype_class('Personne')(req)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   408
            rql = person.cw_unrelated_rql('connait', 'Personne', 'subject')[0]
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   409
            self.assertEqual(
10467
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   410
            rql, 'Any O,AA,AB,AC ORDERBY AA DESC WHERE '
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   411
            'O is_instance_of Personne, O modification_date AA, O nom AB, O prenom AC')
7153
7df83a6d17c0 [entity vocabulary] fix unrelated rql generation to skip rql constraints that don't make sense
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7139
diff changeset
   412
7df83a6d17c0 [entity vocabulary] fix unrelated rql generation to skip rql constraints that don't make sense
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7139
diff changeset
   413
    def test_unrelated_rql_constraints_creation_object(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   414
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   415
            person = self.vreg['etypes'].etype_class('Personne')(req)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   416
            rql = person.cw_unrelated_rql('connait', 'Personne', 'object')[0]
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   417
            self.assertEqual(
10467
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   418
            rql, 'Any S,AA,AB,AC ORDERBY AA DESC WHERE '
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   419
            'S is Personne, S modification_date AA, S nom AB, S prenom AC, '
7794
aed065b97f12 refactor entity fetch_rql method to use a RQL syntax tree instead of RQL strings ; closes #1585650
Florent Cayré <florent.cayre@gmail.com>
parents: 7791
diff changeset
   420
            'NOT (S connait AD, AD nom "toto"), AD is Personne, '
aed065b97f12 refactor entity fetch_rql method to use a RQL syntax tree instead of RQL strings ; closes #1585650
Florent Cayré <florent.cayre@gmail.com>
parents: 7791
diff changeset
   421
            'EXISTS(S travaille AE, AE nom "tutu")')
7153
7df83a6d17c0 [entity vocabulary] fix unrelated rql generation to skip rql constraints that don't make sense
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7139
diff changeset
   422
8472
444a8e25c940 [entity] fix unrelated_rql for creation form vocabulary for relation with specific permissions (closes #2423854)
Florent Cayré <florent.cayre@logilab.fr>
parents: 8307
diff changeset
   423
    def test_unrelated_rql_security_rel_perms(self):
444a8e25c940 [entity] fix unrelated_rql for creation form vocabulary for relation with specific permissions (closes #2423854)
Florent Cayré <florent.cayre@logilab.fr>
parents: 8307
diff changeset
   424
        '''check `connait` add permission has no effect for a new entity on the
444a8e25c940 [entity] fix unrelated_rql for creation form vocabulary for relation with specific permissions (closes #2423854)
Florent Cayré <florent.cayre@logilab.fr>
parents: 8307
diff changeset
   425
        unrelated rql'''
444a8e25c940 [entity] fix unrelated_rql for creation form vocabulary for relation with specific permissions (closes #2423854)
Florent Cayré <florent.cayre@logilab.fr>
parents: 8307
diff changeset
   426
        rdef = self.schema['Personne'].rdef('connait')
444a8e25c940 [entity] fix unrelated_rql for creation form vocabulary for relation with specific permissions (closes #2423854)
Florent Cayré <florent.cayre@logilab.fr>
parents: 8307
diff changeset
   427
        perm_rrqle = RRQLExpression('U has_update_permission S')
444a8e25c940 [entity] fix unrelated_rql for creation form vocabulary for relation with specific permissions (closes #2423854)
Florent Cayré <florent.cayre@logilab.fr>
parents: 8307
diff changeset
   428
        with self.temporary_permissions((rdef, {'add': (perm_rrqle,)})):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   429
            with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   430
                person = self.vreg['etypes'].etype_class('Personne')(req)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   431
                rql = person.cw_unrelated_rql('connait', 'Personne', 'subject')[0]
10467
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   432
                self.assertEqual(rql, 'Any O,AA,AB,AC ORDERBY AA DESC WHERE '
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   433
                         'O is_instance_of Personne, O modification_date AA, O nom AB, '
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   434
                         'O prenom AC')
8472
444a8e25c940 [entity] fix unrelated_rql for creation form vocabulary for relation with specific permissions (closes #2423854)
Florent Cayré <florent.cayre@logilab.fr>
parents: 8307
diff changeset
   435
7153
7df83a6d17c0 [entity vocabulary] fix unrelated rql generation to skip rql constraints that don't make sense
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7139
diff changeset
   436
    def test_unrelated_rql_constraints_edition_subject(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   437
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   438
            person = req.create_entity('Personne', nom=u'sylvain')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   439
            rql = person.cw_unrelated_rql('connait', 'Personne', 'subject')[0]
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   440
            self.assertEqual(
10467
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   441
                rql, 'Any O,AA,AB,AC ORDERBY AA DESC WHERE '
7794
aed065b97f12 refactor entity fetch_rql method to use a RQL syntax tree instead of RQL strings ; closes #1585650
Florent Cayré <florent.cayre@gmail.com>
parents: 7791
diff changeset
   442
            'NOT S connait O, S eid %(x)s, O is Personne, '
10467
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   443
            'O modification_date AA, O nom AB, O prenom AC, '
7154
5e2f93b88d86 [entity vocabulary] refactor unrelated rql to allow usage of RQLRewriter to insert schema constraints. Closes #1561806
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7153
diff changeset
   444
            'NOT S identity O')
7153
7df83a6d17c0 [entity vocabulary] fix unrelated rql generation to skip rql constraints that don't make sense
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7139
diff changeset
   445
7df83a6d17c0 [entity vocabulary] fix unrelated rql generation to skip rql constraints that don't make sense
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7139
diff changeset
   446
    def test_unrelated_rql_constraints_edition_object(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   447
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   448
            person = req.create_entity('Personne', nom=u'sylvain')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   449
            rql = person.cw_unrelated_rql('connait', 'Personne', 'object')[0]
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   450
            self.assertEqual(
10467
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   451
            rql, 'Any S,AA,AB,AC ORDERBY AA DESC WHERE '
7794
aed065b97f12 refactor entity fetch_rql method to use a RQL syntax tree instead of RQL strings ; closes #1585650
Florent Cayré <florent.cayre@gmail.com>
parents: 7791
diff changeset
   452
            'NOT S connait O, O eid %(x)s, S is Personne, '
10467
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   453
            'S modification_date AA, S nom AB, S prenom AC, '
7794
aed065b97f12 refactor entity fetch_rql method to use a RQL syntax tree instead of RQL strings ; closes #1585650
Florent Cayré <florent.cayre@gmail.com>
parents: 7791
diff changeset
   454
            'NOT S identity O, NOT (S connait AD, AD nom "toto"), '
aed065b97f12 refactor entity fetch_rql method to use a RQL syntax tree instead of RQL strings ; closes #1585650
Florent Cayré <florent.cayre@gmail.com>
parents: 7791
diff changeset
   455
            'EXISTS(S travaille AE, AE nom "tutu")')
7153
7df83a6d17c0 [entity vocabulary] fix unrelated rql generation to skip rql constraints that don't make sense
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7139
diff changeset
   456
7973
64639bc94e25 [entity] restrict creation form field vocabulary using __linkto information (closes #1799997)
Florent Cayré <florent.cayre@gmail.com>
parents: 7827
diff changeset
   457
    def test_unrelated_rql_s_linkto_s(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   458
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   459
            person = self.vreg['etypes'].etype_class('Personne')(req)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   460
            self.vreg['etypes'].etype_class('Personne').fetch_attrs = ()
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   461
            soc = req.create_entity('Societe', nom=u'logilab')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   462
            lt_infos = {('actionnaire', 'subject'): [soc.eid]}
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   463
            rql, args = person.cw_unrelated_rql('associe', 'Personne', 'subject',
7973
64639bc94e25 [entity] restrict creation form field vocabulary using __linkto information (closes #1799997)
Florent Cayré <florent.cayre@gmail.com>
parents: 7827
diff changeset
   464
                                            lt_infos=lt_infos)
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   465
            self.assertEqual(u'Any O ORDERBY O WHERE O is Personne, '
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   466
                             u'EXISTS(AA eid %(SOC)s, O actionnaire AA)', rql)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   467
            self.assertEqual({'SOC': soc.eid}, args)
7973
64639bc94e25 [entity] restrict creation form field vocabulary using __linkto information (closes #1799997)
Florent Cayré <florent.cayre@gmail.com>
parents: 7827
diff changeset
   468
64639bc94e25 [entity] restrict creation form field vocabulary using __linkto information (closes #1799997)
Florent Cayré <florent.cayre@gmail.com>
parents: 7827
diff changeset
   469
    def test_unrelated_rql_s_linkto_o(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   470
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   471
            person = self.vreg['etypes'].etype_class('Personne')(req)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   472
            self.vreg['etypes'].etype_class('Societe').fetch_attrs = ()
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   473
            soc = req.create_entity('Societe', nom=u'logilab')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   474
            lt_infos = {('contrat_exclusif', 'object'): [soc.eid]}
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   475
            rql, args = person.cw_unrelated_rql('actionnaire', 'Societe', 'subject',
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   476
                                                lt_infos=lt_infos)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   477
            self.assertEqual(u'Any O ORDERBY O WHERE NOT A actionnaire O, '
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   478
                             u'O is_instance_of Societe, NOT EXISTS(O eid %(O)s), '
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   479
                             u'A is Personne', rql)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   480
            self.assertEqual({'O': soc.eid}, args)
7973
64639bc94e25 [entity] restrict creation form field vocabulary using __linkto information (closes #1799997)
Florent Cayré <florent.cayre@gmail.com>
parents: 7827
diff changeset
   481
64639bc94e25 [entity] restrict creation form field vocabulary using __linkto information (closes #1799997)
Florent Cayré <florent.cayre@gmail.com>
parents: 7827
diff changeset
   482
    def test_unrelated_rql_o_linkto_s(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   483
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   484
            soc = self.vreg['etypes'].etype_class('Societe')(req)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   485
            self.vreg['etypes'].etype_class('Personne').fetch_attrs = ()
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   486
            person = req.create_entity('Personne', nom=u'florent')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   487
            lt_infos = {('contrat_exclusif', 'subject'): [person.eid]}
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   488
            rql, args = soc.cw_unrelated_rql('actionnaire', 'Personne', 'object',
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   489
                                             lt_infos=lt_infos)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   490
            self.assertEqual(u'Any S ORDERBY S WHERE NOT S actionnaire A, '
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   491
                             u'S is_instance_of Personne, NOT EXISTS(S eid %(S)s), '
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   492
                             u'A is Societe', rql)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   493
            self.assertEqual({'S': person.eid}, args)
7973
64639bc94e25 [entity] restrict creation form field vocabulary using __linkto information (closes #1799997)
Florent Cayré <florent.cayre@gmail.com>
parents: 7827
diff changeset
   494
64639bc94e25 [entity] restrict creation form field vocabulary using __linkto information (closes #1799997)
Florent Cayré <florent.cayre@gmail.com>
parents: 7827
diff changeset
   495
    def test_unrelated_rql_o_linkto_o(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   496
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   497
            soc = self.vreg['etypes'].etype_class('Societe')(req)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   498
            self.vreg['etypes'].etype_class('Personne').fetch_attrs = ()
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   499
            person = req.create_entity('Personne', nom=u'florent')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   500
            lt_infos = {('actionnaire', 'object'): [person.eid]}
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   501
            rql, args = soc.cw_unrelated_rql('dirige', 'Personne', 'object',
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   502
                                             lt_infos=lt_infos)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   503
            self.assertEqual(u'Any S ORDERBY S WHERE NOT S dirige A, '
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   504
                             u'S is_instance_of Personne, EXISTS(S eid %(S)s), '
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   505
                             u'A is Societe', rql)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   506
            self.assertEqual({'S': person.eid}, args)
7973
64639bc94e25 [entity] restrict creation form field vocabulary using __linkto information (closes #1799997)
Florent Cayré <florent.cayre@gmail.com>
parents: 7827
diff changeset
   507
64639bc94e25 [entity] restrict creation form field vocabulary using __linkto information (closes #1799997)
Florent Cayré <florent.cayre@gmail.com>
parents: 7827
diff changeset
   508
    def test_unrelated_rql_s_linkto_s_no_info(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   509
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   510
            person = self.vreg['etypes'].etype_class('Personne')(req)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   511
            self.vreg['etypes'].etype_class('Personne').fetch_attrs = ()
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   512
            soc = req.create_entity('Societe', nom=u'logilab')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   513
            rql, args = person.cw_unrelated_rql('associe', 'Personne', 'subject')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   514
            self.assertEqual(u'Any O ORDERBY O WHERE O is_instance_of Personne', rql)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   515
            self.assertEqual({}, args)
7973
64639bc94e25 [entity] restrict creation form field vocabulary using __linkto information (closes #1799997)
Florent Cayré <florent.cayre@gmail.com>
parents: 7827
diff changeset
   516
64639bc94e25 [entity] restrict creation form field vocabulary using __linkto information (closes #1799997)
Florent Cayré <florent.cayre@gmail.com>
parents: 7827
diff changeset
   517
    def test_unrelated_rql_s_linkto_s_unused_info(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   518
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   519
            person = self.vreg['etypes'].etype_class('Personne')(req)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   520
            self.vreg['etypes'].etype_class('Personne').fetch_attrs = ()
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   521
            other_p = req.create_entity('Personne', nom=u'titi')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   522
            lt_infos = {('dirige', 'subject'): [other_p.eid]}
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   523
            rql, args = person.cw_unrelated_rql('associe', 'Personne', 'subject',
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   524
                                                lt_infos=lt_infos)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   525
            self.assertEqual(u'Any O ORDERBY O WHERE O is_instance_of Personne', rql)
7973
64639bc94e25 [entity] restrict creation form field vocabulary using __linkto information (closes #1799997)
Florent Cayré <florent.cayre@gmail.com>
parents: 7827
diff changeset
   526
3241
1a6f7a0e7dbd unrelated_rql now considers relation's add perm
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3136
diff changeset
   527
    def test_unrelated_base(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   528
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   529
            p = req.create_entity('Personne', nom=u'di mascio', prenom=u'adrien')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   530
            e = req.create_entity('Tag', name=u'x')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   531
            related = [r.eid for r in e.tags]
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   532
            self.assertEqual(related, [])
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   533
            unrelated = [r[0] for r in e.unrelated('tags', 'Personne', 'subject')]
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   534
            self.assertIn(p.eid, unrelated)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   535
            req.execute('SET X tags Y WHERE X is Tag, Y is Personne')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   536
            e = req.execute('Any X WHERE X is Tag').get_entity(0, 0)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   537
            unrelated = [r[0] for r in e.unrelated('tags', 'Personne', 'subject')]
9638
3046bae3ce31 [test] replace some assert{True,False} with more specific method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9637
diff changeset
   538
            self.assertNotIn(p.eid, unrelated)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   539
3241
1a6f7a0e7dbd unrelated_rql now considers relation's add perm
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3136
diff changeset
   540
    def test_unrelated_limit(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   541
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   542
            e = req.create_entity('Tag', name=u'x')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   543
            req.create_entity('Personne', nom=u'di mascio', prenom=u'adrien')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   544
            req.create_entity('Personne', nom=u'thenault', prenom=u'sylvain')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   545
            self.assertEqual(len(e.unrelated('tags', 'Personne', 'subject', limit=1)),
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   546
                              1)
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   547
3241
1a6f7a0e7dbd unrelated_rql now considers relation's add perm
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3136
diff changeset
   548
    def test_unrelated_security(self):
8161
6f4229eb8178 [test] fix test broken by 8158:2ee254e74382 and add a test for that change
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7973
diff changeset
   549
        rperms = self.schema['EmailAddress'].permissions['read']
6f4229eb8178 [test] fix test broken by 8158:2ee254e74382 and add a test for that change
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7973
diff changeset
   550
        clear_cache(self.schema['EmailAddress'], 'get_groups')
6f4229eb8178 [test] fix test broken by 8158:2ee254e74382 and add a test for that change
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7973
diff changeset
   551
        clear_cache(self.schema['EmailAddress'], 'get_rqlexprs')
6f4229eb8178 [test] fix test broken by 8158:2ee254e74382 and add a test for that change
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7973
diff changeset
   552
        self.schema['EmailAddress'].permissions['read'] = ('managers', 'users', 'guests',)
6f4229eb8178 [test] fix test broken by 8158:2ee254e74382 and add a test for that change
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7973
diff changeset
   553
        try:
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   554
            with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   555
                email = req.execute('INSERT EmailAddress X: X address "hop"').get_entity(0, 0)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   556
                rset = email.unrelated('use_email', 'CWUser', 'object')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   557
                self.assertEqual([x.login for x in rset.entities()], [u'admin', u'anon'])
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   558
                user = req.user
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   559
                rset = user.unrelated('use_email', 'EmailAddress', 'subject')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   560
                self.assertEqual([x.address for x in rset.entities()], [u'hop'])
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   561
                self.create_user(req, 'toto')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   562
            with self.new_access('toto').web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   563
                email = req.execute('Any X WHERE X eid %(x)s', {'x': email.eid}).get_entity(0, 0)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   564
                rset = email.unrelated('use_email', 'CWUser', 'object')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   565
                self.assertEqual([x.login for x in rset.entities()], ['toto'])
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   566
                user = req.user
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   567
                rset = user.unrelated('use_email', 'EmailAddress', 'subject')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   568
                self.assertEqual([x.address for x in rset.entities()], ['hop'])
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   569
                user = req.execute('Any X WHERE X login "admin"').get_entity(0, 0)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   570
                rset = user.unrelated('use_email', 'EmailAddress', 'subject')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   571
                self.assertEqual([x.address for x in rset.entities()], [])
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   572
            with self.new_access('anon').web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   573
                email = req.execute('Any X WHERE X eid %(x)s', {'x': email.eid}).get_entity(0, 0)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   574
                rset = email.unrelated('use_email', 'CWUser', 'object')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   575
                self.assertEqual([x.login for x in rset.entities()], [])
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   576
                user = req.user
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   577
                rset = user.unrelated('use_email', 'EmailAddress', 'subject')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   578
                self.assertEqual([x.address for x in rset.entities()], [])
8161
6f4229eb8178 [test] fix test broken by 8158:2ee254e74382 and add a test for that change
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7973
diff changeset
   579
        finally:
6f4229eb8178 [test] fix test broken by 8158:2ee254e74382 and add a test for that change
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7973
diff changeset
   580
            clear_cache(self.schema['EmailAddress'], 'get_groups')
6f4229eb8178 [test] fix test broken by 8158:2ee254e74382 and add a test for that change
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7973
diff changeset
   581
            clear_cache(self.schema['EmailAddress'], 'get_rqlexprs')
6f4229eb8178 [test] fix test broken by 8158:2ee254e74382 and add a test for that change
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7973
diff changeset
   582
            self.schema['EmailAddress'].permissions['read'] = rperms
3241
1a6f7a0e7dbd unrelated_rql now considers relation's add perm
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3136
diff changeset
   583
1a6f7a0e7dbd unrelated_rql now considers relation's add perm
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3136
diff changeset
   584
    def test_unrelated_new_entity(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   585
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   586
            e = self.vreg['etypes'].etype_class('CWUser')(req)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   587
            unrelated = [r[0] for r in e.unrelated('in_group', 'CWGroup', 'subject')]
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   588
            # should be default groups but owners, i.e. managers, users, guests
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   589
            self.assertEqual(len(unrelated), 3)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   590
10012
8c2c6fdd8d56 [RichString] Add markdown support
Christophe de Vienne <christophe@unlish.com>
parents: 9978
diff changeset
   591
    def test_markdown_printable_value_string(self):
8c2c6fdd8d56 [RichString] Add markdown support
Christophe de Vienne <christophe@unlish.com>
parents: 9978
diff changeset
   592
        with self.admin_access.web_request() as req:
8c2c6fdd8d56 [RichString] Add markdown support
Christophe de Vienne <christophe@unlish.com>
parents: 9978
diff changeset
   593
            e = req.create_entity('Card', title=u'rest markdown',
8c2c6fdd8d56 [RichString] Add markdown support
Christophe de Vienne <christophe@unlish.com>
parents: 9978
diff changeset
   594
                                  content=u'This is [an example](http://example.com/ "Title") inline link`',
8c2c6fdd8d56 [RichString] Add markdown support
Christophe de Vienne <christophe@unlish.com>
parents: 9978
diff changeset
   595
                                  content_format=u'text/markdown')
8c2c6fdd8d56 [RichString] Add markdown support
Christophe de Vienne <christophe@unlish.com>
parents: 9978
diff changeset
   596
            self.assertEqual(
8c2c6fdd8d56 [RichString] Add markdown support
Christophe de Vienne <christophe@unlish.com>
parents: 9978
diff changeset
   597
                u'<p>This is <a href="http://example.com/" '
8c2c6fdd8d56 [RichString] Add markdown support
Christophe de Vienne <christophe@unlish.com>
parents: 9978
diff changeset
   598
                u'title="Title">an example</a> inline link`</p>',
8c2c6fdd8d56 [RichString] Add markdown support
Christophe de Vienne <christophe@unlish.com>
parents: 9978
diff changeset
   599
                e.printable_value('content'))
8c2c6fdd8d56 [RichString] Add markdown support
Christophe de Vienne <christophe@unlish.com>
parents: 9978
diff changeset
   600
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   601
    def test_printable_value_string(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   602
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   603
            e = req.create_entity('Card', title=u'rest test',
10116
4e9738f5c798 [test] fixes to make tests pass with recent lxml
David Douard <david.douard@logilab.fr>
parents: 9978
diff changeset
   604
                                  content=u'du :eid:`1:*ReST*`',
4e9738f5c798 [test] fixes to make tests pass with recent lxml
David Douard <david.douard@logilab.fr>
parents: 9978
diff changeset
   605
                                  content_format=u'text/rest')
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   606
            self.assertEqual(e.printable_value('content'),
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   607
                             '<p>du <a class="reference" href="http://testing.fr/cubicweb/cwsource/system">*ReST*</a></p>')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   608
            e.cw_attr_cache['content'] = 'du <em>html</em> <ref rql="CWUser X">users</ref>'
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   609
            e.cw_attr_cache['content_format'] = 'text/html'
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   610
            self.assertEqual(e.printable_value('content'),
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   611
                              'du <em>html</em> <a href="http://testing.fr/cubicweb/view?rql=CWUser%20X">users</a>')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   612
            e.cw_attr_cache['content'] = 'du *texte*'
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   613
            e.cw_attr_cache['content_format'] = 'text/plain'
10116
4e9738f5c798 [test] fixes to make tests pass with recent lxml
David Douard <david.douard@logilab.fr>
parents: 9978
diff changeset
   614
            self.assertEqual(e.printable_value('content').replace("\n", ""),
4e9738f5c798 [test] fixes to make tests pass with recent lxml
David Douard <david.douard@logilab.fr>
parents: 9978
diff changeset
   615
                             '<p>du *texte*<br/></p>')
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   616
            e.cw_attr_cache['title'] = 'zou'
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   617
            e.cw_attr_cache['content'] = '''\
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   618
a title
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   619
=======
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   620
du :eid:`1:*ReST*`'''
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   621
            e.cw_attr_cache['content_format'] = 'text/rest'
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   622
            self.assertEqual(e.printable_value('content', format='text/plain'),
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   623
                              e.cw_attr_cache['content'])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   624
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   625
            e.cw_attr_cache['content'] = u'<b>yo (zou éà ;)</b>'
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   626
            e.cw_attr_cache['content_format'] = 'text/html'
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   627
            self.assertEqual(e.printable_value('content', format='text/plain').strip(),
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   628
                             u'**yo (zou éà ;)**')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   629
            if HAS_TAL:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   630
                e.cw_attr_cache['content'] = '<h1 tal:content="self/title">titre</h1>'
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   631
                e.cw_attr_cache['content_format'] = 'text/cubicweb-page-template'
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   632
                self.assertEqual(e.printable_value('content'),
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   633
                                  '<h1>zou</h1>')
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   634
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   635
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   636
    def test_printable_value_bytes(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   637
        with self.admin_access.web_request() as req:
10704
73367a56ee41 [py3k] ensure Binary objects are initialized with bytes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10529
diff changeset
   638
            e = req.create_entity('FakeFile', data=Binary(b'lambda x: 1'), data_format=u'text/x-python',
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   639
                                  data_encoding=u'ascii', data_name=u'toto.py')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   640
            from cubicweb import mttransforms
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   641
            if mttransforms.HAS_PYGMENTS_TRANSFORMS:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   642
                import pygments
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   643
                if tuple(int(i) for i in pygments.__version__.split('.')[:2]) >= (1, 3):
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   644
                    self.assertEqual(e.printable_value('data'),
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   645
                                      '''<div class="highlight"><pre><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="mi">1</span>
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   646
</pre></div>''')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   647
                else:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   648
                    self.assertEqual(e.printable_value('data'),
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   649
                                      '''<div class="highlight"><pre><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="mf">1</span>
9432
030745ac9873 [entities] unconditionnally sanitize the html output of printable_value
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9319
diff changeset
   650
</pre></div>''')
5634
e01cf2013bf1 stop being dumb please
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5631
diff changeset
   651
            else:
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6168
diff changeset
   652
                self.assertEqual(e.printable_value('data'),
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   653
                                  '''<pre class="python">
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   654
    <span style="color: #C00000;">lambda</span> <span style="color: #000000;">x</span><span style="color: #0000C0;">:</span> <span style="color: #0080C0;">1</span>
9432
030745ac9873 [entities] unconditionnally sanitize the html output of printable_value
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9319
diff changeset
   655
</pre>''')
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   656
10704
73367a56ee41 [py3k] ensure Binary objects are initialized with bytes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10529
diff changeset
   657
            e = req.create_entity('FakeFile',
73367a56ee41 [py3k] ensure Binary objects are initialized with bytes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10529
diff changeset
   658
                                  data=Binary(u'*héhéhé*'.encode('utf-8')),
73367a56ee41 [py3k] ensure Binary objects are initialized with bytes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10529
diff changeset
   659
                                  data_format=u'text/rest',
73367a56ee41 [py3k] ensure Binary objects are initialized with bytes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10529
diff changeset
   660
                                  data_encoding=u'utf-8', data_name=u'toto.txt')
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   661
            self.assertEqual(e.printable_value('data'),
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   662
                              u'<p><em>héhéhé</em></p>')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   663
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   664
    def test_printable_value_bad_html(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   665
        """make sure we don't crash if we try to render invalid XHTML strings"""
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   666
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   667
            e = req.create_entity('Card', title=u'bad html', content=u'<div>R&D<br>',
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   668
                                content_format=u'text/html')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   669
            tidy = lambda x: x.replace('\n', '')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   670
            self.assertEqual(tidy(e.printable_value('content')),
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   671
                              '<div>R&amp;D<br/></div>')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   672
            e.cw_attr_cache['content'] = u'yo !! R&D <div> pas fermé'
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   673
            self.assertEqual(tidy(e.printable_value('content')),
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   674
                              u'yo !! R&amp;D <div> pas fermé</div>')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   675
            e.cw_attr_cache['content'] = u'R&D'
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   676
            self.assertEqual(tidy(e.printable_value('content')), u'R&amp;D')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   677
            e.cw_attr_cache['content'] = u'R&D;'
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   678
            self.assertEqual(tidy(e.printable_value('content')), u'R&amp;D;')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   679
            e.cw_attr_cache['content'] = u'yo !! R&amp;D <div> pas fermé'
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   680
            self.assertEqual(tidy(e.printable_value('content')),
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   681
                             u'yo !! R&amp;D <div> pas fermé</div>')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   682
            e.cw_attr_cache['content'] = u'été <div> été'
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   683
            self.assertEqual(tidy(e.printable_value('content')),
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   684
                             u'été <div> été</div>')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   685
            e.cw_attr_cache['content'] = u'C&apos;est un exemple s&eacute;rieux'
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   686
            self.assertEqual(tidy(e.printable_value('content')),
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   687
                             u"C'est un exemple sérieux")
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   688
            # make sure valid xhtml is left untouched
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   689
            e.cw_attr_cache['content'] = u'<div>R&amp;D<br/></div>'
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   690
            self.assertEqual(e.printable_value('content'), e.cw_attr_cache['content'])
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   691
            e.cw_attr_cache['content'] = u'<div>été</div>'
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   692
            self.assertEqual(e.printable_value('content'), e.cw_attr_cache['content'])
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   693
            e.cw_attr_cache['content'] = u'été'
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   694
            self.assertEqual(e.printable_value('content'), e.cw_attr_cache['content'])
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   695
            e.cw_attr_cache['content'] = u'hop\r\nhop\nhip\rmomo'
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   696
            self.assertEqual(e.printable_value('content'), u'hop\nhop\nhip\nmomo')
3587
5b3725f315fc test fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3352
diff changeset
   697
5b3725f315fc test fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3352
diff changeset
   698
    def test_printable_value_bad_html_ms(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   699
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   700
            e = req.create_entity('Card', title=u'bad html', content=u'<div>R&D<br>',
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   701
                                content_format=u'text/html')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   702
            tidy = lambda x: x.replace('\n', '')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   703
            e.cw_attr_cache['content'] = u'<div x:foo="bar">ms orifice produces weird html</div>'
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   704
            # Caution! current implementation of soup2xhtml strips first div element
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   705
            content = soup2xhtml(e.printable_value('content'), 'utf-8')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   706
            self.assertMultiLineEqual(content, u'<div>ms orifice produces weird html</div>')
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   707
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   708
    def test_fulltextindex(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   709
        with self.admin_access.web_request() as req:
10529
747eded13c68 [test] use FakeFile instead of File in test_fulltextindex
Julien Cristau <julien.cristau@logilab.fr>
parents: 10467
diff changeset
   710
            e = self.vreg['etypes'].etype_class('FakeFile')(req)
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   711
            e.cw_attr_cache['description'] = 'du <em>html</em>'
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   712
            e.cw_attr_cache['description_format'] = 'text/html'
10704
73367a56ee41 [py3k] ensure Binary objects are initialized with bytes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10529
diff changeset
   713
            e.cw_attr_cache['data'] = Binary(b'some <em>data</em>')
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   714
            e.cw_attr_cache['data_name'] = 'an html file'
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   715
            e.cw_attr_cache['data_format'] = 'text/html'
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   716
            e.cw_attr_cache['data_encoding'] = 'ascii'
9774
b7b71be569cf deprecate get/set_shared_data API
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9770
diff changeset
   717
            e._cw.transaction_data.clear()
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   718
            words = e.cw_adapt_to('IFTIndexable').get_words()
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   719
            words['C'].sort()
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   720
            self.assertEqual({'C': sorted(['an', 'html', 'file', 'du', 'html', 'some', 'data'])},
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   721
                             words)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   722
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   723
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   724
    def test_nonregr_relation_cache(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   725
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   726
            p1 = req.create_entity('Personne', nom=u'di mascio', prenom=u'adrien')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   727
            p2 = req.create_entity('Personne', nom=u'toto')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   728
            req.execute('SET X evaluee Y WHERE X nom "di mascio", Y nom "toto"')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   729
            self.assertEqual(p1.evaluee[0].nom, "toto")
9638
3046bae3ce31 [test] replace some assert{True,False} with more specific method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9637
diff changeset
   730
            self.assertFalse(p1.reverse_evaluee)
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   731
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   732
    def test_complete_relation(self):
9877
4a604b6e3067 [test/entities] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9774
diff changeset
   733
        with self.admin_access.repo_cnx() as cnx:
4a604b6e3067 [test/entities] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9774
diff changeset
   734
            eid = cnx.execute(
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   735
                'INSERT TrInfo X: X comment "zou", X wf_info_for U, X from_state S1, X to_state S2 '
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   736
                'WHERE U login "admin", S1 name "activated", S2 name "deactivated"')[0][0]
9877
4a604b6e3067 [test/entities] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9774
diff changeset
   737
            trinfo = cnx.execute('Any X WHERE X eid %(x)s', {'x': eid}).get_entity(0, 0)
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   738
            trinfo.complete()
9638
3046bae3ce31 [test] replace some assert{True,False} with more specific method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9637
diff changeset
   739
            self.assertIsInstance(trinfo.cw_attr_cache['creation_date'], datetime)
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   740
            self.assertTrue(trinfo.cw_relation_cached('from_state', 'subject'))
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   741
            self.assertTrue(trinfo.cw_relation_cached('to_state', 'subject'))
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   742
            self.assertTrue(trinfo.cw_relation_cached('wf_info_for', 'subject'))
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   743
            self.assertEqual(trinfo.by_transition, ())
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   744
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   745
    def test_request_cache(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   746
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   747
            user = req.execute('CWUser X WHERE X login "admin"').get_entity(0, 0)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   748
            state = user.in_state[0]
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   749
            samestate = req.execute('State X WHERE X name "activated"').get_entity(0, 0)
9638
3046bae3ce31 [test] replace some assert{True,False} with more specific method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9637
diff changeset
   750
            self.assertIs(state, samestate)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   751
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   752
    def test_rest_path(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   753
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   754
            note = req.create_entity('Note', type=u'z')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   755
            self.assertEqual(note.rest_path(), 'note/%s' % note.eid)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   756
            # unique attr
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   757
            tag = req.create_entity('Tag', name=u'x')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   758
            self.assertEqual(tag.rest_path(), 'tag/x')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   759
            # test explicit rest_attr
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   760
            person = req.create_entity('Personne', prenom=u'john', nom=u'doe')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   761
            self.assertEqual(person.rest_path(), 'personne/doe')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   762
            # ambiguity test
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   763
            person2 = req.create_entity('Personne', prenom=u'remi', nom=u'doe')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   764
            person.cw_clear_all_caches()
10707
3f4f190f8e35 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   765
            self.assertEqual(person.rest_path(), text_type(person.eid))
3f4f190f8e35 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   766
            self.assertEqual(person2.rest_path(), text_type(person2.eid))
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   767
            # unique attr with None value (nom in this case)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   768
            friend = req.create_entity('Ami', prenom=u'bob')
10707
3f4f190f8e35 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   769
            self.assertEqual(friend.rest_path(), text_type(friend.eid))
9978
8f4b15e5b300 [entities] cw_rest_attr_info() should only consider required attributes (closes #3766717)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9877
diff changeset
   770
            # 'ref' below is created without the unique but not required
8f4b15e5b300 [entities] cw_rest_attr_info() should only consider required attributes (closes #3766717)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9877
diff changeset
   771
            # attribute, make sur that the unique _and_ required 'ean' is used
8f4b15e5b300 [entities] cw_rest_attr_info() should only consider required attributes (closes #3766717)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9877
diff changeset
   772
            # as the rest attribute
8f4b15e5b300 [entities] cw_rest_attr_info() should only consider required attributes (closes #3766717)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9877
diff changeset
   773
            ref = req.create_entity('Reference', ean=u'42-1337-42')
8f4b15e5b300 [entities] cw_rest_attr_info() should only consider required attributes (closes #3766717)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 9877
diff changeset
   774
            self.assertEqual(ref.rest_path(), 'reference/42-1337-42')
9319
a68b8f423a8b [test] test can_use_rest_path directly
Julien Cristau <julien.cristau@logilab.fr>
parents: 9273
diff changeset
   775
a68b8f423a8b [test] test can_use_rest_path directly
Julien Cristau <julien.cristau@logilab.fr>
parents: 9273
diff changeset
   776
    def test_can_use_rest_path(self):
a68b8f423a8b [test] test can_use_rest_path directly
Julien Cristau <julien.cristau@logilab.fr>
parents: 9273
diff changeset
   777
        self.assertTrue(can_use_rest_path(u'zobi'))
6099
b22a4a3895df work around Apache's mod_proxy limitation with special chars in URLs by not using Rest urls when such a case is detected
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 5768
diff changeset
   778
        # don't use rest if we have /, ? or & in the path (breaks mod_proxy)
9319
a68b8f423a8b [test] test can_use_rest_path directly
Julien Cristau <julien.cristau@logilab.fr>
parents: 9273
diff changeset
   779
        self.assertFalse(can_use_rest_path(u'zo/bi'))
a68b8f423a8b [test] test can_use_rest_path directly
Julien Cristau <julien.cristau@logilab.fr>
parents: 9273
diff changeset
   780
        self.assertFalse(can_use_rest_path(u'zo&bi'))
a68b8f423a8b [test] test can_use_rest_path directly
Julien Cristau <julien.cristau@logilab.fr>
parents: 9273
diff changeset
   781
        self.assertFalse(can_use_rest_path(u'zo?bi'))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   782
8483
4ba11607d84a [entity api] unify set_attributes / set_relations into a cw_set method. Closes #2423719
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8307
diff changeset
   783
    def test_cw_set_attributes(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   784
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   785
            person = req.create_entity('Personne', nom=u'di mascio', prenom=u'adrien')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   786
            self.assertEqual(person.prenom, u'adrien')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   787
            self.assertEqual(person.nom, u'di mascio')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   788
            person.cw_set(prenom=u'sylvain', nom=u'thénault')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   789
            person = req.execute('Personne P').get_entity(0, 0) # XXX retreival needed ?
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   790
            self.assertEqual(person.prenom, u'sylvain')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   791
            self.assertEqual(person.nom, u'thénault')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   792
8483
4ba11607d84a [entity api] unify set_attributes / set_relations into a cw_set method. Closes #2423719
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8307
diff changeset
   793
    def test_cw_set_relations(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   794
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   795
            person = req.create_entity('Personne', nom=u'chauvat', prenom=u'nicolas')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   796
            note = req.create_entity('Note', type=u'x')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   797
            note.cw_set(ecrit_par=person)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   798
            note = req.create_entity('Note', type=u'y')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   799
            note.cw_set(ecrit_par=person.eid)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   800
            self.assertEqual(len(person.reverse_ecrit_par), 2)
7308
ff8d6ae076c4 [entity] make set_relations() accept entities and eids (closes #1631391)
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 7302
diff changeset
   801
1905
9c96dd7cc624 [tests] fix test after absolute_url got changed for external entities
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 1640
diff changeset
   802
    def test_metainformation_and_external_absolute_url(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   803
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   804
            note = req.create_entity('Note', type=u'z')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   805
            metainf = note.cw_metainformation()
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   806
            self.assertEqual(metainf, {'source': {'type': 'native', 'uri': 'system',
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   807
                                                  'use-cwuri-as-url': False},
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   808
                                       'type': u'Note', 'extid': None})
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   809
            self.assertEqual(note.absolute_url(), 'http://testing.fr/cubicweb/note/%s' % note.eid)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   810
            metainf['source'] = metainf['source'].copy()
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   811
            metainf['source']['base-url']  = 'http://cubicweb2.com/'
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   812
            metainf['extid']  = 1234
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   813
            self.assertEqual(note.absolute_url(), 'http://cubicweb2.com/note/1234')
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   814
2125
19861294506f https://www.logilab.net/cwo/ticket/343724
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   815
    def test_absolute_url_empty_field(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   816
        with self.admin_access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   817
            card = req.create_entity('Card', wikiid=u'', title=u'test')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   818
            self.assertEqual(card.absolute_url(),
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   819
                              'http://testing.fr/cubicweb/%s' % card.eid)
2125
19861294506f https://www.logilab.net/cwo/ticket/343724
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   820
9261
1dfe62a9da50 [entity] give a default reasonnable __eq__ and __hash__ to Entity
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9214
diff changeset
   821
    def test_create_and_compare_entity(self):
9637
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   822
        access = self.admin_access
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   823
        with access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   824
            p1 = req.create_entity('Personne', nom=u'fayolle', prenom=u'alexandre')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   825
            p2 = req.create_entity('Personne', nom=u'campeas', prenom=u'aurelien')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   826
            note = req.create_entity('Note', type=u'z')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   827
            p = req.create_entity('Personne', nom=u'di mascio', prenom=u'adrien',
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   828
                                  connait=p1, evaluee=[p1, p2],
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   829
                                  reverse_ecrit_par=note)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   830
            self.assertEqual(p.nom, 'di mascio')
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   831
            self.assertEqual([c.nom for c in p.connait], ['fayolle'])
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   832
            self.assertEqual(sorted([c.nom for c in p.evaluee]), ['campeas', 'fayolle'])
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   833
            self.assertEqual([c.type for c in p.reverse_ecrit_par], ['z'])
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   834
            req.cnx.commit()
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   835
        with access.web_request() as req:
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   836
            auc = req.execute('Personne P WHERE P prenom "aurelien"').get_entity(0,0)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   837
            persons = set()
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   838
            persons.add(p1)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   839
            persons.add(p2)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   840
            persons.add(auc)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   841
            self.assertEqual(2, len(persons))
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   842
            self.assertNotEqual(p1, p2)
c6132d36e55d [test] silence warnings for unittest_entity by upgrading to new 3.19 API
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9629
diff changeset
   843
            self.assertEqual(p2, auc)
3669
4eb33ee29c84 nicer create_entity implementation (and test)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3587
diff changeset
   844
3670
b7ec030a5e10 allow to link to multiple entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3669
diff changeset
   845
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   846
if __name__ == '__main__':
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   847
    from logilab.common.testlib import unittest_main
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   848
    unittest_main()