cubicweb/test/unittest_entity.py
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Fri, 30 Sep 2016 17:34:11 +0200
changeset 11762 7518cb58ab4c
parent 11759 7b7108eb8178
child 11764 6ab14a1afb65
permissions -rw-r--r--
[entity] Stop returning source information in cw_metainformation() We should not need that. It has been introduced to handle things we should not do and probably don't do anymore (e.g. attempting to grasp recursive import of several sites). Related to #15538288.
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
11261
9e926f2dc84d [entity] Exclude computed relations from Entity.copy_relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11047
diff changeset
   141
    def test_copy_exclude_computed_relations(self):
9e926f2dc84d [entity] Exclude computed relations from Entity.copy_relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11047
diff changeset
   142
        """The `CWUser buddies CWUser` (computed) relation should not be copied.
9e926f2dc84d [entity] Exclude computed relations from Entity.copy_relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11047
diff changeset
   143
        """
9e926f2dc84d [entity] Exclude computed relations from Entity.copy_relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11047
diff changeset
   144
        with self.admin_access.cnx() as cnx:
9e926f2dc84d [entity] Exclude computed relations from Entity.copy_relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11047
diff changeset
   145
            friends = cnx.create_entity('CWGroup', name=u'friends')
9e926f2dc84d [entity] Exclude computed relations from Entity.copy_relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11047
diff changeset
   146
            bob = self.create_user(cnx, u'bob', groups=('friends',))
9e926f2dc84d [entity] Exclude computed relations from Entity.copy_relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11047
diff changeset
   147
            cnx.create_entity('EmailAddress', address=u'bob@cubicweb.org',
9e926f2dc84d [entity] Exclude computed relations from Entity.copy_relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11047
diff changeset
   148
                              reverse_use_email=bob)
9e926f2dc84d [entity] Exclude computed relations from Entity.copy_relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11047
diff changeset
   149
            alice = self.create_user(cnx, u'alices', groups=('friends',))
9e926f2dc84d [entity] Exclude computed relations from Entity.copy_relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11047
diff changeset
   150
            cnx.commit()
9e926f2dc84d [entity] Exclude computed relations from Entity.copy_relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11047
diff changeset
   151
            charles = self.create_user(cnx, u'charles')
9e926f2dc84d [entity] Exclude computed relations from Entity.copy_relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11047
diff changeset
   152
            cnx.commit()
9e926f2dc84d [entity] Exclude computed relations from Entity.copy_relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11047
diff changeset
   153
            # Just ensure this does not crash (it would if computed relation
9e926f2dc84d [entity] Exclude computed relations from Entity.copy_relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11047
diff changeset
   154
            # attempted to be copied).
9e926f2dc84d [entity] Exclude computed relations from Entity.copy_relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11047
diff changeset
   155
            charles.copy_relations(bob.eid)
9e926f2dc84d [entity] Exclude computed relations from Entity.copy_relations
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11047
diff changeset
   156
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   157
    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
   158
        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
   159
            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
   160
            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
   161
            req.cnx.commit()
10997
da712d3f0601 Bring back the separate web-side entity cache
Julien Cristau <julien.cristau@logilab.fr>
parents: 10907
diff changeset
   162
            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
   163
            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
   164
            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
   165
            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
   166
            groups = user.in_group
10997
da712d3f0601 Bring back the separate web-side entity cache
Julien Cristau <julien.cristau@logilab.fr>
parents: 10907
diff changeset
   167
            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
   168
            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
   169
                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
   170
            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
   171
            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
   172
            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
   173
            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
   174
            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
   175
            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
   176
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   177
    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
   178
        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
   179
            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
   180
            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
   181
                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
   182
            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
   183
            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
   184
            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
   185
            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
   186
            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
   187
            self.assertEqual(len(p.related('tags', 'object', entities=True)), 4)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   188
9293
723e2c586ea3 [entity] Entity.related(): add a targettypes argument (closes #2957313)
Aurelien Campeas
parents: 9283
diff changeset
   189
    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
   190
        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
   191
            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
   192
            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
   193
            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
   194
            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
   195
        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
   196
            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
   197
            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
   198
            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
   199
            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
   200
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
   201
    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
   202
        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
   203
            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
   204
            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
   205
            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
   206
            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
   207
            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
   208
            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
   209
            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
   210
            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
   211
            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
   212
            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
   213
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
   214
    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
   215
        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
   216
            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
   217
            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
   218
            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
   219
            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
   220
            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
   221
            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
   222
            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
   223
            self.assertCountEqual(p.reverse_tags, [t1, t2])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   224
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   225
    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
   226
        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
   227
        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
   228
        Note = self.vreg['etypes'].etype_class('Note')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   229
        peschema = Personne.e_schema
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   230
        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
   231
        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
   232
        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
   233
                           (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
   234
                           (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
   235
                           (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
   236
            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
   237
            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
   238
            torestore.append(cm)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   239
        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
   240
            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
   241
                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
   242
                # 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
   243
                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
   244
                                 '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
   245
                                 '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
   246
                # 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
   247
                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
   248
                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
   249
                # 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
   250
                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
   251
                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
   252
                                 '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
   253
                                 '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
   254
                # 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
   255
                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
   256
                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
   257
                                 '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
   258
                                 '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
   259
                                 '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
   260
                # 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
   261
                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
   262
                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
   263
                self.assertEqual(Personne.fetch_rql(user),
11047
bfd11ffa79f7 [entity] don't look at fetch order recursively
Julien Cristau <julien.cristau@logilab.fr>
parents: 10997
diff changeset
   264
                                 'Any X,AA,AB,AC,AD,AE,AF ORDERBY AA '
10467
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   265
                                 '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
   266
                                 '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
   267
                # 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
   268
                Personne.fetch_attrs = ('nom', 'connait')
10467
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   269
                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
   270
                                 '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
   271
                # 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
   272
                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
   273
                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
   274
                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
   275
                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
   276
                                 '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
   277
                # 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
   278
                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
   279
                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
   280
                                 '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
   281
                # XXX test unauthorized attribute
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   282
        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
   283
            # 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
   284
            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
   285
                cm.__exit__(None, None, None)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   286
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
   287
    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
   288
        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
   289
        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
   290
        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
   291
        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
   292
        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
   293
        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
   294
        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
   295
        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
   296
            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
   297
            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
   298
                             '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
   299
                             '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
   300
            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
   301
            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
   302
                                              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
   303
                             "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
   304
                             "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
   305
                             "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
   306
            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
   307
            # 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
   308
            self.assertEqual(p.cw_related_rql('evaluee'),
11271
fd177546bbea [entity] Add a cw_related_rqlst method returning the RQL select node of cw_related method
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11196
diff changeset
   309
                             'Any X,AA ORDERBY AA DESC '
fd177546bbea [entity] Add a cw_related_rqlst method returning the RQL select node of cw_related method
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11196
diff changeset
   310
                             '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
   311
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
   312
            tag = self.vreg['etypes'].etype_class('Tag')(req)
11271
fd177546bbea [entity] Add a cw_related_rqlst method returning the RQL select node of cw_related method
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11196
diff changeset
   313
            select = tag.cw_related_rqlst('tags', 'subject')
fd177546bbea [entity] Add a cw_related_rqlst method returning the RQL select node of cw_related method
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11196
diff changeset
   314
            self.assertEqual(select.as_string(),
fd177546bbea [entity] Add a cw_related_rqlst method returning the RQL select node of cw_related method
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11196
diff changeset
   315
                             'Any X,AA ORDERBY AA DESC '
fd177546bbea [entity] Add a cw_related_rqlst method returning the RQL select node of cw_related method
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11196
diff changeset
   316
                             'WHERE E eid %(x)s, E tags X, X modification_date AA')
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
   317
            self.assertEqual(tag.cw_related_rql('tags', 'subject', ('Personne',)),
11271
fd177546bbea [entity] Add a cw_related_rqlst method returning the RQL select node of cw_related method
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11196
diff changeset
   318
                             'Any X,AA,AB ORDERBY AB '
fd177546bbea [entity] Add a cw_related_rqlst method returning the RQL select node of cw_related method
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11196
diff changeset
   319
                             'WHERE E eid %(x)s, E tags X, X is Personne, X modification_date AA, '
fd177546bbea [entity] Add a cw_related_rqlst method returning the RQL select node of cw_related method
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11196
diff changeset
   320
                             'X nom AB')
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   321
11290
12d226a5bab9 [entity] Make it possible to specify sorting terms in cw_related_rqlst method
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11279
diff changeset
   322
    def test_related_rql_sort_terms(self):
12d226a5bab9 [entity] Make it possible to specify sorting terms in cw_related_rqlst method
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11279
diff changeset
   323
        with self.admin_access.web_request() as req:
12d226a5bab9 [entity] Make it possible to specify sorting terms in cw_related_rqlst method
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11279
diff changeset
   324
            tag = self.vreg['etypes'].etype_class('Tag')(req)
12d226a5bab9 [entity] Make it possible to specify sorting terms in cw_related_rqlst method
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11279
diff changeset
   325
            select = tag.cw_related_rqlst('tags', 'subject',
12d226a5bab9 [entity] Make it possible to specify sorting terms in cw_related_rqlst method
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11279
diff changeset
   326
                                          sort_terms=(('nom', True),
12d226a5bab9 [entity] Make it possible to specify sorting terms in cw_related_rqlst method
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11279
diff changeset
   327
                                                      ('modification_date', False)))
12d226a5bab9 [entity] Make it possible to specify sorting terms in cw_related_rqlst method
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11279
diff changeset
   328
            expected = (
12d226a5bab9 [entity] Make it possible to specify sorting terms in cw_related_rqlst method
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11279
diff changeset
   329
                'Any X,AA ORDERBY AB,AA DESC '
12d226a5bab9 [entity] Make it possible to specify sorting terms in cw_related_rqlst method
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11279
diff changeset
   330
                'WHERE E eid %(x)s, E tags X, X modification_date AA, X nom AB')
12d226a5bab9 [entity] Make it possible to specify sorting terms in cw_related_rqlst method
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11279
diff changeset
   331
            self.assertEqual(select.as_string(), expected)
12d226a5bab9 [entity] Make it possible to specify sorting terms in cw_related_rqlst method
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11279
diff changeset
   332
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
   333
    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
   334
        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
   335
            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
   336
            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
   337
                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
   338
            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
   339
                              '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
   340
                              '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
   341
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
   342
    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
   343
        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
   344
        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
   345
        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
   346
            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
   347
            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
   348
            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
   349
            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
   350
            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
   351
            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
   352
            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
   353
                             '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
   354
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
   355
    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
   356
        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
   357
            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
   358
            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
   359
            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
   360
                             '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
   361
                             '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
   362
                             '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
   363
                             '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
   364
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
   365
    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
   366
        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
   367
            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
   368
        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
   369
            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
   370
            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
   371
            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
   372
                             '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
   373
                             '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
   374
                             '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
   375
            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
   376
            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
   377
            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
   378
                             '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
   379
                             '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
   380
                             '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
   381
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
   382
    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
   383
        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
   384
            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
   385
            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
   386
            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
   387
                             '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
   388
                             '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
   389
                             '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
   390
1a6f7a0e7dbd unrelated_rql now considers relation's add perm
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3136
diff changeset
   391
    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
   392
        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
   393
            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
   394
            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
   395
            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
   396
                             '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
   397
                             '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
   398
            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
   399
        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
   400
        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
   401
        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
   402
        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
   403
        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
   404
            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
   405
                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
   406
                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
   407
                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
   408
                             '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
   409
                             '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
   410
                             '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
   411
        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
   412
            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
   413
            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
   414
            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
   415
9712
6c6cd8c4b256 [entity] add a new `cw_linkable_rql` method
Katia Saurfelt <katia.saurfelt@logilab.fr>
parents: 9638
diff changeset
   416
    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
   417
        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
   418
            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
   419
            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
   420
            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
   421
                             '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
   422
                             '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
   423
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
   424
    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
   425
        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
   426
            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
   427
            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
   428
            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
   429
                         'WHERE S is CWUser, '
10467
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   430
                         '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
   431
                         '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
   432
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
   433
    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
   434
        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
   435
            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
   436
            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
   437
            self.assertEqual(
10467
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   438
            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
   439
            '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
   440
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
   441
    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
   442
        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
   443
            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
   444
            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
   445
            self.assertEqual(
10467
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   446
            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
   447
            '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
   448
            '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
   449
            '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
   450
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
   451
    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
   452
        '''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
   453
        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
   454
        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
   455
        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
   456
        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
   457
            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
   458
                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
   459
                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
   460
                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
   461
                         '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
   462
                         '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
   463
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
   464
    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
   465
        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
   466
            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
   467
            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
   468
            self.assertEqual(
10467
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   469
                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
   470
            '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
   471
            '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
   472
            '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
   473
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
   474
    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
   475
        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
   476
            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
   477
            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
   478
            self.assertEqual(
10467
73ea636a5562 [entity] sort fetchattrs when generating rql
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10354
diff changeset
   479
            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
   480
            '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
   481
            '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
   482
            '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
   483
            '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
   484
7973
64639bc94e25 [entity] restrict creation form field vocabulary using __linkto information (closes #1799997)
Florent Cayré <florent.cayre@gmail.com>
parents: 7827
diff changeset
   485
    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
   486
        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
   487
            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
   488
            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
   489
            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
   490
            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
   491
            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
   492
                                            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
   493
            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
   494
                             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
   495
            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
   496
64639bc94e25 [entity] restrict creation form field vocabulary using __linkto information (closes #1799997)
Florent Cayré <florent.cayre@gmail.com>
parents: 7827
diff changeset
   497
    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
   498
        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
   499
            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
   500
            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
   501
            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
   502
            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
   503
            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
   504
                                                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
   505
            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
   506
                             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
   507
                             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
   508
            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
   509
64639bc94e25 [entity] restrict creation form field vocabulary using __linkto information (closes #1799997)
Florent Cayré <florent.cayre@gmail.com>
parents: 7827
diff changeset
   510
    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
   511
        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
   512
            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
   513
            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
   514
            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
   515
            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
   516
            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
   517
                                             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
   518
            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
   519
                             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
   520
                             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
   521
            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
   522
64639bc94e25 [entity] restrict creation form field vocabulary using __linkto information (closes #1799997)
Florent Cayré <florent.cayre@gmail.com>
parents: 7827
diff changeset
   523
    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
   524
        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
   525
            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
   526
            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
   527
            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
   528
            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
   529
            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
   530
                                             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
   531
            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
   532
                             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
   533
                             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
   534
            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
   535
64639bc94e25 [entity] restrict creation form field vocabulary using __linkto information (closes #1799997)
Florent Cayré <florent.cayre@gmail.com>
parents: 7827
diff changeset
   536
    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
   537
        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
   538
            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
   539
            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
   540
            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
   541
            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
   542
            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
   543
            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
   544
64639bc94e25 [entity] restrict creation form field vocabulary using __linkto information (closes #1799997)
Florent Cayré <florent.cayre@gmail.com>
parents: 7827
diff changeset
   545
    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
   546
        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
   547
            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
   548
            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
   549
            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
   550
            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
   551
            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
   552
                                                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
   553
            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
   554
3241
1a6f7a0e7dbd unrelated_rql now considers relation's add perm
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3136
diff changeset
   555
    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
   556
        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
   557
            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
   558
            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
   559
            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
   560
            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
   561
            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
   562
            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
   563
            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
   564
            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
   565
            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
   566
            self.assertNotIn(p.eid, unrelated)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   567
3241
1a6f7a0e7dbd unrelated_rql now considers relation's add perm
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3136
diff changeset
   568
    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
   569
        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
   570
            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
   571
            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
   572
            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
   573
            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
   574
                              1)
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   575
3241
1a6f7a0e7dbd unrelated_rql now considers relation's add perm
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3136
diff changeset
   576
    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
   577
        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
   578
        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
   579
        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
   580
        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
   581
        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
   582
            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
   583
                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
   584
                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
   585
                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
   586
                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
   587
                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
   588
                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
   589
                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
   590
            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
   591
                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
   592
                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
   593
                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
   594
                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
   595
                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
   596
                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
   597
                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
   598
                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
   599
                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
   600
            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
   601
                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
   602
                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
   603
                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
   604
                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
   605
                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
   606
                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
   607
        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
   608
            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
   609
            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
   610
            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
   611
1a6f7a0e7dbd unrelated_rql now considers relation's add perm
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3136
diff changeset
   612
    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
   613
        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
   614
            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
   615
            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
   616
            # 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
   617
            self.assertEqual(len(unrelated), 3)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   618
10012
8c2c6fdd8d56 [RichString] Add markdown support
Christophe de Vienne <christophe@unlish.com>
parents: 9978
diff changeset
   619
    def test_markdown_printable_value_string(self):
8c2c6fdd8d56 [RichString] Add markdown support
Christophe de Vienne <christophe@unlish.com>
parents: 9978
diff changeset
   620
        with self.admin_access.web_request() as req:
8c2c6fdd8d56 [RichString] Add markdown support
Christophe de Vienne <christophe@unlish.com>
parents: 9978
diff changeset
   621
            e = req.create_entity('Card', title=u'rest markdown',
8c2c6fdd8d56 [RichString] Add markdown support
Christophe de Vienne <christophe@unlish.com>
parents: 9978
diff changeset
   622
                                  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
   623
                                  content_format=u'text/markdown')
8c2c6fdd8d56 [RichString] Add markdown support
Christophe de Vienne <christophe@unlish.com>
parents: 9978
diff changeset
   624
            self.assertEqual(
8c2c6fdd8d56 [RichString] Add markdown support
Christophe de Vienne <christophe@unlish.com>
parents: 9978
diff changeset
   625
                u'<p>This is <a href="http://example.com/" '
8c2c6fdd8d56 [RichString] Add markdown support
Christophe de Vienne <christophe@unlish.com>
parents: 9978
diff changeset
   626
                u'title="Title">an example</a> inline link`</p>',
8c2c6fdd8d56 [RichString] Add markdown support
Christophe de Vienne <christophe@unlish.com>
parents: 9978
diff changeset
   627
                e.printable_value('content'))
8c2c6fdd8d56 [RichString] Add markdown support
Christophe de Vienne <christophe@unlish.com>
parents: 9978
diff changeset
   628
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   629
    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
   630
        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
   631
            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
   632
                                  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
   633
                                  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
   634
            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
   635
                             '<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
   636
            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
   637
            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
   638
            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
   639
                              '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
   640
            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
   641
            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
   642
            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
   643
                             '<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
   644
            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
   645
            e.cw_attr_cache['content'] = '''\
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   646
a title
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   647
=======
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   648
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
   649
            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
   650
            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
   651
                              e.cw_attr_cache['content'])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   652
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
            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
   654
            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
   655
            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
   656
                             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
   657
            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
   658
                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
   659
                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
   660
                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
   661
                                  '<h1>zou</h1>')
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   662
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_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
   665
        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
   666
            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
   667
                                  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
   668
            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
   669
            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
   670
                import pygments
11196
74b04a88d28a [test] fix test_printable_value_bytes with current pygments
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   671
                if tuple(int(i) for i in pygments.__version__.split('.')[:3]) >= (2, 1, 1):
74b04a88d28a [test] fix test_printable_value_bytes with current pygments
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   672
                    span = '<span/>'
74b04a88d28a [test] fix test_printable_value_bytes with current pygments
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   673
                else:
74b04a88d28a [test] fix test_printable_value_bytes with current pygments
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   674
                    span = ''
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
   675
                if tuple(int(i) for i in pygments.__version__.split('.')[:2]) >= (1, 3):
11196
74b04a88d28a [test] fix test_printable_value_bytes with current pygments
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   676
                    mi = 'mi'
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
   677
                else:
11196
74b04a88d28a [test] fix test_printable_value_bytes with current pygments
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   678
                    mi = 'mf'
74b04a88d28a [test] fix test_printable_value_bytes with current pygments
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   679
74b04a88d28a [test] fix test_printable_value_bytes with current pygments
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   680
                self.assertEqual(e.printable_value('data'),
74b04a88d28a [test] fix test_printable_value_bytes with current pygments
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   681
                                 '''<div class="highlight"><pre>%s<span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="%s">1</span>
74b04a88d28a [test] fix test_printable_value_bytes with current pygments
Julien Cristau <julien.cristau@logilab.fr>
parents: 11057
diff changeset
   682
</pre></div>''' % (span, mi))
5634
e01cf2013bf1 stop being dumb please
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5631
diff changeset
   683
            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
   684
                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
   685
                                  '''<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
   686
    <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
   687
</pre>''')
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   688
10704
73367a56ee41 [py3k] ensure Binary objects are initialized with bytes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10529
diff changeset
   689
            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
   690
                                  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
   691
                                  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
   692
                                  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
   693
            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
   694
                              u'<p><em>héhéhé</em></p>')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   695
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   696
    def test_printable_value_bad_html(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   697
        """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
   698
        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
   699
            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
   700
                                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
   701
            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
   702
            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
   703
                              '<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
   704
            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
   705
            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
   706
                              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
   707
            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
   708
            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
   709
            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
   710
            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
   711
            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
   712
            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
   713
                             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
   714
            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
   715
            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
   716
                             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
   717
            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
   718
            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
   719
                             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
   720
            # 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
   721
            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
   722
            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
   723
            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
   724
            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
   725
            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
   726
            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
   727
            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
   728
            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
   729
5b3725f315fc test fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3352
diff changeset
   730
    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
   731
        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
   732
            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
   733
                                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
   734
            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
   735
            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
   736
            # 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
   737
            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
   738
            self.assertMultiLineEqual(content, u'<div>ms orifice produces weird html</div>')
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   739
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   740
    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
   741
        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
   742
            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
   743
            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
   744
            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
   745
            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
   746
            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
   747
            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
   748
            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
   749
            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
   750
            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
   751
            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
   752
            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
   753
                             words)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   754
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   755
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   756
    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
   757
        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
   758
            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
   759
            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
   760
            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
   761
            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
   762
            self.assertFalse(p1.reverse_evaluee)
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   763
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   764
    def test_complete_relation(self):
9877
4a604b6e3067 [test/entities] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9774
diff changeset
   765
        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
   766
            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
   767
                '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
   768
                '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
   769
            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
   770
            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
   771
            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
   772
            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
   773
            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
   774
            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
   775
            self.assertEqual(trinfo.by_transition, ())
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   776
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   777
    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
   778
        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
   779
            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
   780
            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
   781
            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
   782
            self.assertIs(state, samestate)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   783
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   784
    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
   785
        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
   786
            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
   787
            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
   788
            # 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
   789
            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
   790
            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
   791
            # 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
   792
            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
   793
            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
   794
            # 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
   795
            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
   796
            person.cw_clear_all_caches()
10707
3f4f190f8e35 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   797
            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
   798
            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
   799
            # 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
   800
            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
   801
            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
   802
            # '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
   803
            # 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
   804
            # 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
   805
            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
   806
            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
   807
a68b8f423a8b [test] test can_use_rest_path directly
Julien Cristau <julien.cristau@logilab.fr>
parents: 9273
diff changeset
   808
    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
   809
        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
   810
        # 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
   811
        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
   812
        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
   813
        self.assertFalse(can_use_rest_path(u'zo?bi'))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   814
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
   815
    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
   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
            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
   818
            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
   819
            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
   820
            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
   821
            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
   822
            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
   823
            self.assertEqual(person.nom, u'thénault')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   824
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
   825
    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
   826
        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
   827
            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
   828
            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
   829
            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
   830
            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
   831
            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
   832
            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
   833
11759
7b7108eb8178 [entity] Stop linking to external site for external entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11290
diff changeset
   834
    def test_metainformation(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
   835
        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
   836
            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
   837
            metainf = note.cw_metainformation()
11762
7518cb58ab4c [entity] Stop returning source information in cw_metainformation()
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11759
diff changeset
   838
            self.assertEqual(metainf, {'type': u'Note', 'extid': None})
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   839
2125
19861294506f https://www.logilab.net/cwo/ticket/343724
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   840
    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
   841
        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
   842
            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
   843
            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
   844
                              '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
   845
9261
1dfe62a9da50 [entity] give a default reasonnable __eq__ and __hash__ to Entity
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9214
diff changeset
   846
    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
   847
        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
   848
        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
   849
            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
   850
            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
   851
            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
   852
            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
   853
                                  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
   854
                                  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
   855
            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
   856
            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
   857
            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
   858
            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
   859
            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
   860
        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
   861
            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
   862
            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
   863
            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
   864
            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
   865
            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
   866
            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
   867
            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
   868
            self.assertEqual(p2, auc)
3669
4eb33ee29c84 nicer create_entity implementation (and test)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3587
diff changeset
   869
3670
b7ec030a5e10 allow to link to multiple entities
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3669
diff changeset
   870
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   871
if __name__ == '__main__':
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   872
    from logilab.common.testlib import unittest_main
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   873
    unittest_main()