cubicweb/test/unittest_rset.py
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Mon, 23 Jan 2017 11:02:21 +0100
changeset 11913 4516c3956d46
parent 11892 08cf02efc7ce
child 12063 4bcb58aa103a
permissions -rw-r--r--
Drop support for https-url in all-in-one.conf This feature allowing an instance to have both anonymous and authenticated (https) url is not used anymore, let's drop it.
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
11870
3a84a79c4ed5 Flake8 bits with some copyright updates
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11171
diff changeset
     2
# copyright 2003-2016 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: 4951
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: 4951
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: 4951
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: 4951
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: 4951
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: 4951
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: 4951
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: 4951
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: 4951
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: 4951
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: 4951
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: 4951
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: 4951
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: 4951
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: 4951
diff changeset
    18
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
6366
1806148d6ce8 backport stable
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6225 6340
diff changeset
    19
"""unit tests for module cubicweb.utils"""
4536
02d0803a60b8 cleanup 2.5 __future__ imports
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4461
diff changeset
    20
10612
84468b90e9c1 [py3k] basestring → six.string_types
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10603
diff changeset
    21
from six import string_types
10602
4845012cfc8e [py3k] import 'pickle' using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10600
diff changeset
    22
from six.moves import cPickle as pickle
10603
65ad6980976e [py3k] import URL mangling functions using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10602
diff changeset
    23
from six.moves.urllib.parse import urlsplit
4536
02d0803a60b8 cleanup 2.5 __future__ imports
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4461
diff changeset
    24
02d0803a60b8 cleanup 2.5 __future__ imports
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4461
diff changeset
    25
from rql import parse
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    26
4850
bd640b137f50 [refactor] drop rset.vreg attribute, vreg should be accessed through rset.req. Also kill decorate_rset, simply set rset.req where we were calling this method.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4536
diff changeset
    27
from logilab.common.testlib import TestCase, unittest_main, mock_object
631
99f5852f8604 major selector refactoring (mostly to avoid looking for select parameters on the target class), start accept / interface unification)
sylvain.thenault@logilab.fr
parents: 572
diff changeset
    28
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2635
diff changeset
    29
from cubicweb.devtools.testlib import CubicWebTC
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    30
from cubicweb.rset import NotAnEntity, ResultSet, attr_desc_iterator
9347
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
    31
from cubicweb import NoResultError, MultipleResultsError
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
    32
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    33
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    34
def pprelcachedict(d):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    35
    res = {}
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    36
    for k, (rset, related) in d.items():
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    37
        res[k] = sorted(v.eid for v in related)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    38
    return sorted(res.items())
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    39
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    40
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    41
class AttrDescIteratorTC(TestCase):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    42
    """TestCase for cubicweb.rset.attr_desc_iterator"""
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    43
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    44
    def test_relations_description(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    45
        """tests relations_description() function"""
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    46
        queries = {
11870
3a84a79c4ed5 Flake8 bits with some copyright updates
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11171
diff changeset
    47
            'Any U,L,M where U is CWUser, U login L, U mail M': [(1, 'login', 'subject'), (2, 'mail', 'subject')],
3a84a79c4ed5 Flake8 bits with some copyright updates
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11171
diff changeset
    48
            'Any U,L,M where U is CWUser, L is Foo, U mail M': [(2, 'mail', 'subject')],
3a84a79c4ed5 Flake8 bits with some copyright updates
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11171
diff changeset
    49
            'Any C,P where C is Company, C employs P': [(1, 'employs', 'subject')],
3a84a79c4ed5 Flake8 bits with some copyright updates
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11171
diff changeset
    50
            'Any C,P where C is Company, P employed_by P': [],
3a84a79c4ed5 Flake8 bits with some copyright updates
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11171
diff changeset
    51
            'Any C where C is Company, C employs P': [],
3a84a79c4ed5 Flake8 bits with some copyright updates
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11171
diff changeset
    52
        }
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    53
        for rql, relations in queries.items():
6915
99eb71b311e4 [rset] fix entity building for some result set with UNION and subqueries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6857
diff changeset
    54
            result = list(attr_desc_iterator(parse(rql).children[0], 0, 0))
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6195
diff changeset
    55
            self.assertEqual((rql, result), (rql, relations))
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    56
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    57
    def test_relations_description_indexed(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    58
        """tests relations_description() function"""
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    59
        queries = {
11870
3a84a79c4ed5 Flake8 bits with some copyright updates
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11171
diff changeset
    60
            'Any C,U,P,L,M where C is Company, C employs P, U is CWUser, U login L, U mail M':
3a84a79c4ed5 Flake8 bits with some copyright updates
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11171
diff changeset
    61
            {0: [(2, 'employs', 'subject')],
3a84a79c4ed5 Flake8 bits with some copyright updates
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11171
diff changeset
    62
             1: [(3, 'login', 'subject'), (4, 'mail', 'subject')]},
3a84a79c4ed5 Flake8 bits with some copyright updates
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11171
diff changeset
    63
        }
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    64
        for rql, results in queries.items():
6915
99eb71b311e4 [rset] fix entity building for some result set with UNION and subqueries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6857
diff changeset
    65
            for idx, relations in results.items():
99eb71b311e4 [rset] fix entity building for some result set with UNION and subqueries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6857
diff changeset
    66
                result = list(attr_desc_iterator(parse(rql).children[0], idx, idx))
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6195
diff changeset
    67
                self.assertEqual(result, relations)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    68
7395
09ffcc04bd21 [rset] close #1683703: rset.get_entity crash on rql query with subquery and aggregat
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7298
diff changeset
    69
    def test_subquery_callfunc(self):
09ffcc04bd21 [rset] close #1683703: rset.get_entity crash on rql query with subquery and aggregat
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7298
diff changeset
    70
        rql = ('Any A,B,C,COUNT(D) GROUPBY A,B,C WITH A,B,C,D BEING '
09ffcc04bd21 [rset] close #1683703: rset.get_entity crash on rql query with subquery and aggregat
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7298
diff changeset
    71
               '(Any YEAR(CD), MONTH(CD), S, X WHERE X is CWUser, X creation_date CD, X in_state S)')
09ffcc04bd21 [rset] close #1683703: rset.get_entity crash on rql query with subquery and aggregat
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7298
diff changeset
    72
        rqlst = parse(rql)
09ffcc04bd21 [rset] close #1683703: rset.get_entity crash on rql query with subquery and aggregat
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7298
diff changeset
    73
        select, col = rqlst.locate_subquery(2, 'CWUser', None)
09ffcc04bd21 [rset] close #1683703: rset.get_entity crash on rql query with subquery and aggregat
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7298
diff changeset
    74
        result = list(attr_desc_iterator(select, col, 2))
09ffcc04bd21 [rset] close #1683703: rset.get_entity crash on rql query with subquery and aggregat
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7298
diff changeset
    75
        self.assertEqual(result, [])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    76
8085
51929d531aff [rset] fix crash while building entity from rset w/ some subquery. Closes #2089055
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8048
diff changeset
    77
    def test_subquery_callfunc_2(self):
51929d531aff [rset] fix crash while building entity from rset w/ some subquery. Closes #2089055
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8048
diff changeset
    78
        rql = ('Any X,S,L WHERE X in_state S WITH X, L BEING (Any X,MAX(L) GROUPBY X WHERE X is CWUser, T wf_info_for X, T creation_date L)')
51929d531aff [rset] fix crash while building entity from rset w/ some subquery. Closes #2089055
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8048
diff changeset
    79
        rqlst = parse(rql)
51929d531aff [rset] fix crash while building entity from rset w/ some subquery. Closes #2089055
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8048
diff changeset
    80
        select, col = rqlst.locate_subquery(0, 'CWUser', None)
51929d531aff [rset] fix crash while building entity from rset w/ some subquery. Closes #2089055
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8048
diff changeset
    81
        result = list(attr_desc_iterator(select, col, 0))
51929d531aff [rset] fix crash while building entity from rset w/ some subquery. Closes #2089055
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8048
diff changeset
    82
        self.assertEqual(result, [(1, 'in_state', 'subject')])
51929d531aff [rset] fix crash while building entity from rset w/ some subquery. Closes #2089055
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8048
diff changeset
    83
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    84
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2635
diff changeset
    85
class ResultSetTC(CubicWebTC):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    86
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    87
    def setUp(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    88
        super(ResultSetTC, self).setUp()
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    89
        self.rset = ResultSet([[12, 'adim'], [13, 'syt']],
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 692
diff changeset
    90
                              'Any U,L where U is CWUser, U login L',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 692
diff changeset
    91
                              description=[['CWUser', 'String'], ['Bar', 'String']])
4850
bd640b137f50 [refactor] drop rset.vreg attribute, vreg should be accessed through rset.req. Also kill decorate_rset, simply set rset.req where we were calling this method.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4536
diff changeset
    92
        self.rset.req = mock_object(vreg=self.vreg)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    93
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    94
    def compare_urls(self, url1, url2):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    95
        info1 = urlsplit(url1)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    96
        info2 = urlsplit(url2)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6195
diff changeset
    97
        self.assertEqual(info1[:3], info2[:3])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    98
        if info1[3] != info2[3]:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    99
            params1 = dict(pair.split('=') for pair in info1[3].split('&'))
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   100
            params2 = dict(pair.split('=') for pair in info1[3].split('&'))
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6195
diff changeset
   101
            self.assertDictEqual(params1, params2)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   102
5740
46207f491a51 [rset] make rsets picklable (again ?) #1056422
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 5667
diff changeset
   103
    def test_pickle(self):
5747
d6ac0cd30fde [rset] do not filter rsets with __getstate__, ensure whatever flies with pyro has no .req attribute, also set the ._rqlst to None since it will be reconstructed later on demand
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 5740
diff changeset
   104
        del self.rset.req
10722
1d0b5aef7523 [tests] Stop counting pickle bytes in ResultSet tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10691
diff changeset
   105
        rs2 = pickle.loads(pickle.dumps(self.rset))
1d0b5aef7523 [tests] Stop counting pickle bytes in ResultSet tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10691
diff changeset
   106
        self.assertEqual(self.rset.rows, rs2.rows)
1d0b5aef7523 [tests] Stop counting pickle bytes in ResultSet tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10691
diff changeset
   107
        self.assertEqual(self.rset.rowcount, rs2.rowcount)
1d0b5aef7523 [tests] Stop counting pickle bytes in ResultSet tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10691
diff changeset
   108
        self.assertEqual(self.rset.rql, rs2.rql)
1d0b5aef7523 [tests] Stop counting pickle bytes in ResultSet tests
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10691
diff changeset
   109
        self.assertEqual(self.rset.description, rs2.description)
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   110
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   111
    def test_build_url(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   112
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   113
            baseurl = req.base_url()
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   114
            self.compare_urls(req.build_url('view', vid='foo', rql='yo'),
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   115
                              '%sview?vid=foo&rql=yo' % baseurl)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   116
            self.compare_urls(req.build_url('view', _restpath='task/title/go'),
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   117
                              '%stask/title/go' % baseurl)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   118
            #self.compare_urls(req.build_url('view', _restpath='/task/title/go'),
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   119
            #                  '%stask/title/go' % baseurl)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   120
            # empty _restpath should not crash
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   121
            self.compare_urls(req.build_url('view', _restpath=''), baseurl)
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   122
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   123
8048
10a0f73d834d [rset] replace entity cw_rset on .limit(inplace=True) will avoid pb if the entity is still referenced by some other entity relations cache. Closes #2065643
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7395
diff changeset
   124
    def test_build(self):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   125
        """test basic build of a ResultSet"""
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 692
diff changeset
   126
        rs = ResultSet([1,2,3], 'CWGroup X', description=['CWGroup', 'CWGroup', 'CWGroup'])
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6195
diff changeset
   127
        self.assertEqual(rs.rowcount, 3)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6195
diff changeset
   128
        self.assertEqual(rs.rows, [1,2,3])
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6195
diff changeset
   129
        self.assertEqual(rs.description, ['CWGroup', 'CWGroup', 'CWGroup'])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   130
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   131
8048
10a0f73d834d [rset] replace entity cw_rset on .limit(inplace=True) will avoid pb if the entity is still referenced by some other entity relations cache. Closes #2065643
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7395
diff changeset
   132
    def test_limit(self):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   133
        rs = ResultSet([[12000, 'adim'], [13000, 'syt'], [14000, 'nico']],
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 692
diff changeset
   134
                       'Any U,L where U is CWUser, U login L',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 692
diff changeset
   135
                       description=[['CWUser', 'String']] * 3)
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   136
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   137
            rs.req = req
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   138
            rs.vreg = self.vreg
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   139
            self.assertEqual(rs.limit(2).rows, [[12000, 'adim'], [13000, 'syt']])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   140
            rs2 = rs.limit(2, offset=1)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   141
            self.assertEqual(rs2.rows, [[13000, 'syt'], [14000, 'nico']])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   142
            self.assertEqual(rs2.get_entity(0, 0).cw_row, 0)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   143
            self.assertEqual(rs.limit(2, offset=2).rows, [[14000, 'nico']])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   144
            self.assertEqual(rs.limit(2, offset=3).rows, [])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   145
8048
10a0f73d834d [rset] replace entity cw_rset on .limit(inplace=True) will avoid pb if the entity is still referenced by some other entity relations cache. Closes #2065643
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7395
diff changeset
   146
    def test_limit_2(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   147
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   148
            rs = req.execute('Any E,U WHERE E is CWEType, E created_by U')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   149
            # get entity on row 9. This will fill its created_by relation cache,
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   150
            # with cwuser on row 9 as well
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   151
            e1 = rs.get_entity(9, 0)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   152
            # get entity on row 10. This will fill its created_by relation cache,
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   153
            # with cwuser built on row 9
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   154
            e2 = rs.get_entity(10, 0)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   155
            # limit result set from row 10
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   156
            rs.limit(1, 10, inplace=True)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   157
            # get back eid
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   158
            e = rs.get_entity(0, 0)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   159
            self.assertTrue(e2 is e)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   160
            # rs.limit has properly removed cwuser for request cache, but it's
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   161
            # still referenced by e/e2 relation cache
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   162
            u = e.created_by[0]
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   163
            # now ensure this doesn't trigger IndexError because cwuser.cw_row is 9
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   164
            # while now rset has only one row
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   165
            u.cw_rset[u.cw_row]
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   166
8048
10a0f73d834d [rset] replace entity cw_rset on .limit(inplace=True) will avoid pb if the entity is still referenced by some other entity relations cache. Closes #2065643
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7395
diff changeset
   167
    def test_filter(self):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   168
        rs = ResultSet([[12000, 'adim'], [13000, 'syt'], [14000, 'nico']],
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 692
diff changeset
   169
                       'Any U,L where U is CWUser, U login L',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 692
diff changeset
   170
                       description=[['CWUser', 'String']] * 3)
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   171
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   172
            rs.req = req
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   173
            rs.vreg = self.vreg
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   174
            def test_filter(entity):
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   175
                return entity.login != 'nico'
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   176
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   177
            rs2 = rs.filtered_rset(test_filter)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   178
            self.assertEqual(len(rs2), 2)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   179
            self.assertEqual([login for _, login in rs2], ['adim', 'syt'])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   180
            self.assertEqual(rs2.description, rs.description[1:])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   181
8048
10a0f73d834d [rset] replace entity cw_rset on .limit(inplace=True) will avoid pb if the entity is still referenced by some other entity relations cache. Closes #2065643
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7395
diff changeset
   182
    def test_transform(self):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   183
        rs = ResultSet([[12, 'adim'], [13, 'syt'], [14, 'nico']],
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 692
diff changeset
   184
                       'Any U,L where U is CWUser, U login L',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 692
diff changeset
   185
                       description=[['CWUser', 'String']] * 3)
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   186
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   187
            rs.req = req
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   188
            def test_transform(row, desc):
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   189
                return row[1:], desc[1:]
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   190
            rs2 = rs.transformed_rset(test_transform)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   191
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   192
            self.assertEqual(len(rs2), 3)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   193
            self.assertEqual(list(rs2), [['adim'],['syt'],['nico']])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   194
8048
10a0f73d834d [rset] replace entity cw_rset on .limit(inplace=True) will avoid pb if the entity is still referenced by some other entity relations cache. Closes #2065643
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7395
diff changeset
   195
    def test_sort(self):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   196
        rs = ResultSet([[12000, 'adim'], [13000, 'syt'], [14000, 'nico']],
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 692
diff changeset
   197
                       'Any U,L where U is CWUser, U login L',
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 692
diff changeset
   198
                       description=[['CWUser', 'String']] * 3)
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   199
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   200
            rs.req = req
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   201
            rs.vreg = self.vreg
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   202
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   203
            rs2 = rs.sorted_rset(lambda e:e.cw_attr_cache['login'])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   204
            self.assertEqual(len(rs2), 3)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   205
            self.assertEqual([login for _, login in rs2], ['adim', 'nico', 'syt'])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   206
            # make sure rs is unchanged
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   207
            self.assertEqual([login for _, login in rs], ['adim', 'syt', 'nico'])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   208
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   209
            rs2 = rs.sorted_rset(lambda e:e.cw_attr_cache['login'], reverse=True)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   210
            self.assertEqual(len(rs2), 3)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   211
            self.assertEqual([login for _, login in rs2], ['syt', 'nico', 'adim'])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   212
            # make sure rs is unchanged
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   213
            self.assertEqual([login for _, login in rs], ['adim', 'syt', 'nico'])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   214
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   215
            rs3 = rs.sorted_rset(lambda row: row[1], col=-1)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   216
            self.assertEqual(len(rs3), 3)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   217
            self.assertEqual([login for _, login in rs3], ['adim', 'nico', 'syt'])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   218
            # make sure rs is unchanged
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   219
            self.assertEqual([login for _, login in rs], ['adim', 'syt', 'nico'])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   220
8048
10a0f73d834d [rset] replace entity cw_rset on .limit(inplace=True) will avoid pb if the entity is still referenced by some other entity relations cache. Closes #2065643
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7395
diff changeset
   221
    def test_split(self):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   222
        rs = ResultSet([[12000, 'adim', u'Adim chez les pinguins'],
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   223
                        [12000, 'adim', u'Jardiner facile'],
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   224
                        [13000, 'syt',  u'Le carrelage en 42 leçons'],
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   225
                        [14000, 'nico', u'La tarte tatin en 15 minutes'],
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   226
                        [14000, 'nico', u"L'épluchage du castor commun"]],
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 692
diff changeset
   227
                       'Any U, L, T WHERE U is CWUser, U login L,'\
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   228
                       'D created_by U, D title T',
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 692
diff changeset
   229
                       description=[['CWUser', 'String', 'String']] * 5)
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   230
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   231
            rs.req = req
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   232
            rs.vreg = self.vreg
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   233
            rsets = rs.split_rset(lambda e:e.cw_attr_cache['login'])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   234
            self.assertEqual(len(rsets), 3)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   235
            self.assertEqual([login for _, login,_ in rsets[0]], ['adim', 'adim'])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   236
            self.assertEqual([login for _, login,_ in rsets[1]], ['syt'])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   237
            self.assertEqual([login for _, login,_ in rsets[2]], ['nico', 'nico'])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   238
            # make sure rs is unchanged
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   239
            self.assertEqual([login for _, login,_ in rs], ['adim', 'adim', 'syt', 'nico', 'nico'])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   240
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   241
            rsets = rs.split_rset(lambda e:e.cw_attr_cache['login'], return_dict=True)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   242
            self.assertEqual(len(rsets), 3)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   243
            self.assertEqual([login for _, login,_ in rsets['nico']], ['nico', 'nico'])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   244
            self.assertEqual([login for _, login,_ in rsets['adim']], ['adim', 'adim'])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   245
            self.assertEqual([login for _, login,_ in rsets['syt']], ['syt'])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   246
            # make sure rs is unchanged
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   247
            self.assertEqual([login for _, login,_ in rs], ['adim', 'adim', 'syt', 'nico', 'nico'])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   248
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   249
            rsets = rs.split_rset(lambda s: s.count('d'), col=2)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   250
            self.assertEqual(len(rsets), 2)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   251
            self.assertEqual([title for _, _, title in rsets[0]],
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   252
                              [u"Adim chez les pinguins",
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   253
                               u"Jardiner facile",
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   254
                               u"L'épluchage du castor commun",])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   255
            self.assertEqual([title for _, _, title in rsets[1]],
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   256
                              [u"Le carrelage en 42 leçons",
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   257
                               u"La tarte tatin en 15 minutes",])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   258
            # make sure rs is unchanged
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   259
            self.assertEqual([title for _, _, title in rs],
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   260
                              [u'Adim chez les pinguins',
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   261
                               u'Jardiner facile',
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   262
                               u'Le carrelage en 42 leçons',
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   263
                               u'La tarte tatin en 15 minutes',
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   264
                               u"L'épluchage du castor commun"])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   265
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   266
    def test_cached_syntax_tree(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   267
        """make sure syntax tree is cached"""
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   268
        rqlst1 = self.rset.syntax_tree()
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   269
        rqlst2 = self.rset.syntax_tree()
10600
180aa08cad48 [tests] Replace use of deprecated TestCase.assert_
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10187
diff changeset
   270
        self.assertIs(rqlst1, rqlst2)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   271
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   272
    def test_get_entity_simple(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   273
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   274
            req.create_entity('CWUser', login=u'adim', upassword='adim',
11870
3a84a79c4ed5 Flake8 bits with some copyright updates
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11171
diff changeset
   275
                              surname=u'di mascio', firstname=u'adrien')
10997
da712d3f0601 Bring back the separate web-side entity cache
Julien Cristau <julien.cristau@logilab.fr>
parents: 10722
diff changeset
   276
            req.drop_entity_cache()
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   277
            e = req.execute('Any X,T WHERE X login "adim", X surname T').get_entity(0, 0)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   278
            self.assertEqual(e.cw_attr_cache['surname'], 'di mascio')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   279
            self.assertRaises(KeyError, e.cw_attr_cache.__getitem__, 'firstname')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   280
            self.assertRaises(KeyError, e.cw_attr_cache.__getitem__, 'creation_date')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   281
            self.assertEqual(pprelcachedict(e._cw_related_cache), [])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   282
            e.complete()
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   283
            self.assertEqual(e.cw_attr_cache['firstname'], 'adrien')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   284
            self.assertEqual(pprelcachedict(e._cw_related_cache), [])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   285
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   286
    def test_get_entity_advanced(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   287
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   288
            req.create_entity('Bookmark', title=u'zou', path=u'/view')
10997
da712d3f0601 Bring back the separate web-side entity cache
Julien Cristau <julien.cristau@logilab.fr>
parents: 10722
diff changeset
   289
            req.drop_entity_cache()
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   290
            req.execute('SET X bookmarked_by Y WHERE X is Bookmark, Y login "anon"')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   291
            rset = req.execute('Any X,Y,XT,YN WHERE X bookmarked_by Y, X title XT, Y login YN')
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   292
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   293
            e = rset.get_entity(0, 0)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   294
            self.assertEqual(e.cw_row, 0)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   295
            self.assertEqual(e.cw_col, 0)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   296
            self.assertEqual(e.cw_attr_cache['title'], 'zou')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   297
            self.assertRaises(KeyError, e.cw_attr_cache.__getitem__, 'path')
11169
c1eb5a676c80 [rset] Always complete attribute/relation caches in ResultSet.get_entity
Alexandre Richardson <alexandre.richardson@logilab.fr>
parents: 11057
diff changeset
   298
            other_rset = req.execute('Any X, P WHERE X is Bookmark, X path P')
c1eb5a676c80 [rset] Always complete attribute/relation caches in ResultSet.get_entity
Alexandre Richardson <alexandre.richardson@logilab.fr>
parents: 11057
diff changeset
   299
            # check that get_entity fetches e from the request's cache, and
c1eb5a676c80 [rset] Always complete attribute/relation caches in ResultSet.get_entity
Alexandre Richardson <alexandre.richardson@logilab.fr>
parents: 11057
diff changeset
   300
            # updates it with attributes from the new rset
c1eb5a676c80 [rset] Always complete attribute/relation caches in ResultSet.get_entity
Alexandre Richardson <alexandre.richardson@logilab.fr>
parents: 11057
diff changeset
   301
            self.assertIs(other_rset.get_entity(0, 0), e)
c1eb5a676c80 [rset] Always complete attribute/relation caches in ResultSet.get_entity
Alexandre Richardson <alexandre.richardson@logilab.fr>
parents: 11057
diff changeset
   302
            self.assertIn('path', e.cw_attr_cache)
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   303
            self.assertEqual(e.view('text'), 'zou')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   304
            self.assertEqual(pprelcachedict(e._cw_related_cache), [])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   305
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   306
            e = rset.get_entity(0, 1)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   307
            self.assertEqual(e.cw_row, 0)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   308
            self.assertEqual(e.cw_col, 1)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   309
            self.assertEqual(e.cw_attr_cache['login'], 'anon')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   310
            self.assertRaises(KeyError, e.cw_attr_cache.__getitem__, 'firstname')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   311
            self.assertEqual(pprelcachedict(e._cw_related_cache),
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   312
                              [])
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   313
            e.complete()
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   314
            self.assertEqual(e.cw_attr_cache['firstname'], None)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   315
            self.assertEqual(e.view('text'), 'anon')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   316
            self.assertEqual(pprelcachedict(e._cw_related_cache),
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   317
                              [])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   318
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   319
            self.assertRaises(NotAnEntity, rset.get_entity, 0, 2)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   320
            self.assertRaises(NotAnEntity, rset.get_entity, 0, 3)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   321
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   322
    def test_get_entity_relation_cache_compt(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   323
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   324
            rset = req.execute('Any X,S WHERE X in_state S, X login "anon"')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   325
            e = rset.get_entity(0, 0)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   326
            seid = req.execute('State X WHERE X name "activated"')[0][0]
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   327
            # for_user / in_group are prefetched in CWUser __init__, in_state should
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   328
            # be filed from our query rset
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   329
            self.assertEqual(pprelcachedict(e._cw_related_cache),
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   330
                              [('in_state_subject', [seid])])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   331
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   332
    def test_get_entity_advanced_prefilled_cache(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   333
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   334
            e = req.create_entity('Bookmark', title=u'zou', path=u'path')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   335
            req.cnx.commit()
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   336
            rset = req.execute('Any X,U,S,XT,UL,SN WHERE X created_by U, U in_state S, '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   337
                                'X title XT, S name SN, U login UL, X eid %s' % e.eid)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   338
            e = rset.get_entity(0, 0)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   339
            self.assertEqual(e.cw_attr_cache['title'], 'zou')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   340
            self.assertEqual(pprelcachedict(e._cw_related_cache),
10997
da712d3f0601 Bring back the separate web-side entity cache
Julien Cristau <julien.cristau@logilab.fr>
parents: 10722
diff changeset
   341
                             [('created_by_subject', [req.user.eid])])
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   342
            # first level of recursion
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   343
            u = e.created_by[0]
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   344
            self.assertEqual(u.cw_attr_cache['login'], 'admin')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   345
            self.assertRaises(KeyError, u.cw_attr_cache.__getitem__, 'firstname')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   346
            # second level of recursion
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   347
            s = u.in_state[0]
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   348
            self.assertEqual(s.cw_attr_cache['name'], 'activated')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   349
            self.assertRaises(KeyError, s.cw_attr_cache.__getitem__, 'description')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   350
11171
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   351
    def test_get_entity_recursion(self):
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   352
        with self.admin_access.repo_cnx() as cnx:
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   353
            cnx.create_entity('EmailAddress', address=u'toto',
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   354
                              reverse_primary_email=cnx.user.eid)
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   355
            cnx.commit()
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   356
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   357
        # get_entity should fill the caches for user and email, even if both
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   358
        # entities are already in the connection's entity cache
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   359
        with self.admin_access.repo_cnx() as cnx:
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   360
            mail = cnx.find('EmailAddress').one()
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   361
            rset = cnx.execute('Any X, E WHERE X primary_email E')
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   362
            u = rset.get_entity(0, 0)
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   363
            self.assertTrue(u.cw_relation_cached('primary_email', 'subject'))
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   364
            self.assertTrue(mail.cw_relation_cached('primary_email', 'object'))
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   365
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   366
        with self.admin_access.repo_cnx() as cnx:
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   367
            mail = cnx.find('EmailAddress').one()
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   368
            rset = cnx.execute('Any X, E WHERE X primary_email E')
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   369
            rset.get_entity(0, 1)
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   370
            self.assertTrue(mail.cw_relation_cached('primary_email', 'object'))
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   371
            u = cnx.user
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   372
            self.assertTrue(u.cw_relation_cached('primary_email', 'subject'))
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   373
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   374
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   375
    def test_get_entity_cache_with_left_outer_join(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   376
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   377
            eid = req.execute('INSERT CWUser E: E login "joe", E upassword "joe", E in_group G '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   378
                               'WHERE G name "users"')[0][0]
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   379
            rset = req.execute('Any X,E WHERE X eid %(x)s, X primary_email E?', {'x': eid})
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   380
            e = rset.get_entity(0, 0)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   381
            # if any of the assertion below fails with a KeyError, the relation is not cached
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   382
            # related entities should be an empty list
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   383
            self.assertEqual(e._cw_related_cache['primary_email_subject'][True], ())
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   384
            # related rset should be an empty rset
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   385
            cached = e._cw_related_cache['primary_email_subject'][False]
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   386
            self.assertIsInstance(cached, ResultSet)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   387
            self.assertEqual(cached.rowcount, 0)
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   388
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   389
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   390
    def test_get_entity_union(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   391
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   392
            e = req.create_entity('Bookmark', title=u'manger', path=u'path')
10997
da712d3f0601 Bring back the separate web-side entity cache
Julien Cristau <julien.cristau@logilab.fr>
parents: 10722
diff changeset
   393
            req.drop_entity_cache()
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   394
            rset = req.execute('Any X,N ORDERBY N WITH X,N BEING '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   395
                                '((Any X,N WHERE X is Bookmark, X title N)'
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   396
                                ' UNION '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   397
                                ' (Any X,N WHERE X is CWGroup, X name N))')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   398
            expected = (('CWGroup', 'guests'), ('CWGroup', 'managers'),
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   399
                        ('Bookmark', 'manger'), ('CWGroup', 'owners'),
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   400
                        ('CWGroup', 'users'))
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   401
            for entity in rset.entities(): # test get_entity for each row actually
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   402
                etype, n = expected[entity.cw_row]
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   403
                self.assertEqual(entity.cw_etype, etype)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   404
                attr = etype == 'Bookmark' and 'title' or 'name'
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   405
                self.assertEqual(entity.cw_attr_cache[attr], n)
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   406
9347
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   407
    def test_one(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   408
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   409
            req.create_entity('CWUser', login=u'cdevienne',
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   410
                                         upassword=u'cdevienne',
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   411
                                         surname=u'de Vienne',
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   412
                                         firstname=u'Christophe')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   413
            e = req.execute('Any X WHERE X login "cdevienne"').one()
9347
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   414
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   415
            self.assertEqual(e.surname, u'de Vienne')
9347
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   416
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   417
            e = req.execute(
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   418
                'Any X, N WHERE X login "cdevienne", X surname N').one()
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   419
            self.assertEqual(e.surname, u'de Vienne')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   420
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   421
            e = req.execute(
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   422
                'Any N, X WHERE X login "cdevienne", X surname N').one(col=1)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   423
            self.assertEqual(e.surname, u'de Vienne')
9347
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   424
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   425
    def test_one_no_rows(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   426
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   427
            with self.assertRaises(NoResultError):
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   428
                req.execute('Any X WHERE X login "patanok"').one()
9347
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   429
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   430
    def test_one_multiple_rows(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   431
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   432
            req.create_entity(
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   433
                'CWUser', login=u'cdevienne', upassword=u'cdevienne',
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   434
                surname=u'de Vienne', firstname=u'Christophe')
9347
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   435
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   436
            req.create_entity(
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   437
                'CWUser', login=u'adim', upassword='adim', surname=u'di mascio',
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   438
                firstname=u'adrien')
9347
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   439
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   440
            with self.assertRaises(MultipleResultsError):
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   441
                req.execute('Any X WHERE X is CWUser').one()
9347
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   442
572
9849fed789c9 test and fix potential error with None optional relation
sylvain.thenault@logilab.fr
parents: 0
diff changeset
   443
    def test_related_entity_optional(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   444
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   445
            e = req.create_entity('Bookmark', title=u'aaaa', path=u'path')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   446
            rset = req.execute('Any B,U,L WHERE B bookmarked_by U?, U login L')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   447
            entity, rtype = rset.related_entity(0, 2)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   448
            self.assertEqual(entity, None)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   449
            self.assertEqual(rtype, None)
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   450
6915
99eb71b311e4 [rset] fix entity building for some result set with UNION and subqueries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6857
diff changeset
   451
    def test_related_entity_union_subquery_1(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   452
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   453
            e = req.create_entity('Bookmark', title=u'aaaa', path=u'path')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   454
            rset = req.execute('Any X,N ORDERBY N WITH X,N BEING '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   455
                                '((Any X,N WHERE X is CWGroup, X name N)'
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   456
                                ' UNION '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   457
                                ' (Any X,N WHERE X is Bookmark, X title N))')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   458
            entity, rtype = rset.related_entity(0, 1)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   459
            self.assertEqual(entity.eid, e.eid)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   460
            self.assertEqual(rtype, 'title')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   461
            self.assertEqual(entity.title, 'aaaa')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   462
            entity, rtype = rset.related_entity(1, 1)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   463
            self.assertEqual(entity.cw_etype, 'CWGroup')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   464
            self.assertEqual(rtype, 'name')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   465
            self.assertEqual(entity.name, 'guests')
6915
99eb71b311e4 [rset] fix entity building for some result set with UNION and subqueries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6857
diff changeset
   466
99eb71b311e4 [rset] fix entity building for some result set with UNION and subqueries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6857
diff changeset
   467
    def test_related_entity_union_subquery_2(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   468
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   469
            e = req.create_entity('Bookmark', title=u'aaaa', path=u'path')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   470
            rset = req.execute('Any X,N ORDERBY N WHERE X is Bookmark WITH X,N BEING '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   471
                                '((Any X,N WHERE X is CWGroup, X name N)'
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   472
                                ' UNION '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   473
                                ' (Any X,N WHERE X is Bookmark, X title N))')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   474
            entity, rtype = rset.related_entity(0, 1)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   475
            self.assertEqual(entity.eid, e.eid)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   476
            self.assertEqual(rtype, 'title')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   477
            self.assertEqual(entity.title, 'aaaa')
6915
99eb71b311e4 [rset] fix entity building for some result set with UNION and subqueries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6857
diff changeset
   478
99eb71b311e4 [rset] fix entity building for some result set with UNION and subqueries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6857
diff changeset
   479
    def test_related_entity_union_subquery_3(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   480
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   481
            e = req.create_entity('Bookmark', title=u'aaaa', path=u'path')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   482
            rset = req.execute('Any X,N ORDERBY N WITH N,X BEING '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   483
                                '((Any N,X WHERE X is CWGroup, X name N)'
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   484
                                ' UNION '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   485
                                ' (Any N,X WHERE X is Bookmark, X title N))')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   486
            entity, rtype = rset.related_entity(0, 1)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   487
            self.assertEqual(entity.eid, e.eid)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   488
            self.assertEqual(rtype, 'title')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   489
            self.assertEqual(entity.title, 'aaaa')
6915
99eb71b311e4 [rset] fix entity building for some result set with UNION and subqueries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6857
diff changeset
   490
99eb71b311e4 [rset] fix entity building for some result set with UNION and subqueries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6857
diff changeset
   491
    def test_related_entity_union_subquery_4(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   492
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   493
            e = req.create_entity('Bookmark', title=u'aaaa', path=u'path')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   494
            rset = req.execute('Any X,X, N ORDERBY N WITH X,N BEING '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   495
                                '((Any X,N WHERE X is CWGroup, X name N)'
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   496
                                ' UNION '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   497
                                ' (Any X,N WHERE X is Bookmark, X title N))')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   498
            entity, rtype = rset.related_entity(0, 2)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   499
            self.assertEqual(entity.eid, e.eid)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   500
            self.assertEqual(rtype, 'title')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   501
            self.assertEqual(entity.title, 'aaaa')
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   502
4427
410c99a917fa fix rset.related_entity with variables coming from subquery while some others not
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   503
    def test_related_entity_trap_subquery(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   504
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   505
            req.create_entity('Bookmark', title=u'test bookmark', path=u'')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   506
            req.execute('SET B bookmarked_by U WHERE U login "admin"')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   507
            rset = req.execute('Any B,T,L WHERE B bookmarked_by U, U login L '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   508
                                'WITH B,T BEING (Any B,T WHERE B is Bookmark, B title T)')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   509
            rset.related_entity(0, 2)
4427
410c99a917fa fix rset.related_entity with variables coming from subquery while some others not
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   510
6195
a0c4441e6ddf [rset] add test for #1251252, actually fixed in rql; fix docstring and add comments in rset.related_entity to make things clearer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5752
diff changeset
   511
    def test_related_entity_subquery_outerjoin(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   512
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   513
            rset = req.execute('Any X,S,L WHERE X in_state S '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   514
                                'WITH X, L BEING (Any X,MAX(L) GROUPBY X '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   515
                                'WHERE X is CWUser, T? wf_info_for X, T creation_date L)')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   516
            self.assertEqual(len(rset), 2)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   517
            rset.related_entity(0, 1)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   518
            rset.related_entity(0, 2)
6195
a0c4441e6ddf [rset] add test for #1251252, actually fixed in rql; fix docstring and add comments in rset.related_entity to make things clearer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5752
diff changeset
   519
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   520
    def test_entities(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   521
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   522
            rset = req.execute('Any U,G WHERE U in_group G')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   523
            # make sure we have at least one element
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   524
            self.assertTrue(rset)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   525
            self.assertEqual(set(e.e_schema.type for e in rset.entities(0)),
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   526
                              set(['CWUser',]))
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   527
            self.assertEqual(set(e.e_schema.type for e in rset.entities(1)),
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   528
                              set(['CWGroup',]))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   529
6857
8d2062387134 [rset] add utility method to get entities and attributes from any rset
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6415
diff changeset
   530
    def test_iter_rows_with_entities(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   531
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   532
            rset = req.execute('Any U,UN,G,GN WHERE U in_group G, U login UN, G name GN')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   533
            # make sure we have at least one element
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   534
            self.assertTrue(rset)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   535
            out = list(rset.iter_rows_with_entities())[0]
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   536
            self.assertEqual( out[0].login, out[1] )
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   537
            self.assertEqual( out[2].name, out[3] )
6857
8d2062387134 [rset] add utility method to get entities and attributes from any rset
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6415
diff changeset
   538
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   539
    def test_printable_rql(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   540
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   541
            rset = req.execute(u'CWEType X WHERE X final FALSE')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   542
            self.assertEqual(rset.printable_rql(),
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   543
                              'Any X WHERE X final FALSE, X is CWEType')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   544
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   545
    def test_searched_text(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   546
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   547
            rset = req.execute(u'Any X WHERE X has_text "foobar"')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   548
            self.assertEqual(rset.searched_text(), 'foobar')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   549
            rset = req.execute(u'Any X WHERE X has_text %(text)s', {'text' : 'foo'})
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   550
            self.assertEqual(rset.searched_text(), 'foo')
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   551
4939
349af486f5ed fix limited_rql w/ UNION query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4536
diff changeset
   552
    def test_union_limited_rql(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   553
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   554
            rset = req.execute('(Any X,N WHERE X is Bookmark, X title N)'
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   555
                                ' UNION '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   556
                                '(Any X,N WHERE X is CWGroup, X name N)')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   557
            rset.limit(2, 10, inplace=True)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   558
            self.assertEqual(rset.limited_rql(),
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   559
                              'Any A,B LIMIT 2 OFFSET 10 '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   560
                              'WITH A,B BEING ('
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   561
                              '(Any X,N WHERE X is Bookmark, X title N) '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   562
                              'UNION '
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   563
                              '(Any X,N WHERE X is CWGroup, X name N)'
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   564
                              ')')
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   565
11874
ea1d92b677b5 [views/optimization] Ensure we call rset.possible_actions with the same argument
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11870
diff changeset
   566
    def test_possible_actions_cache(self):
ea1d92b677b5 [views/optimization] Ensure we call rset.possible_actions with the same argument
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11870
diff changeset
   567
        with self.admin_access.web_request() as req:
ea1d92b677b5 [views/optimization] Ensure we call rset.possible_actions with the same argument
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11870
diff changeset
   568
            rset = req.execute('Any D, COUNT(U) GROUPBY D WHERE U is CWUser, U creation_date D')
ea1d92b677b5 [views/optimization] Ensure we call rset.possible_actions with the same argument
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11870
diff changeset
   569
            rset.possible_actions(argument='Value')
ea1d92b677b5 [views/optimization] Ensure we call rset.possible_actions with the same argument
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11870
diff changeset
   570
            self.assertRaises(AssertionError, rset.possible_actions, argument='OtherValue')
ea1d92b677b5 [views/optimization] Ensure we call rset.possible_actions with the same argument
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11870
diff changeset
   571
            self.assertRaises(AssertionError, rset.possible_actions, other_argument='Value')
ea1d92b677b5 [views/optimization] Ensure we call rset.possible_actions with the same argument
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11870
diff changeset
   572
5667
04cbd80fd5dc [rset] do not break when rset.related_entity(x,y) is not an entity
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 5426
diff changeset
   573
    def test_count_users_by_date(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   574
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   575
            rset = req.execute('Any D, COUNT(U) GROUPBY D WHERE U is CWUser, U creation_date D')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   576
            self.assertEqual(rset.related_entity(0,0), (None, None))
5667
04cbd80fd5dc [rset] do not break when rset.related_entity(x,y) is not an entity
Nicolas Chauvat <nicolas.chauvat@logilab.fr>
parents: 5426
diff changeset
   577
5687
3ea39709b50e [rset] Add a line break the first result in repr of multiple rows rset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 5679
diff changeset
   578
    def test_str(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   579
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   580
            rset = req.execute('(Any X,N WHERE X is CWGroup, X name N)')
10612
84468b90e9c1 [py3k] basestring → six.string_types
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10603
diff changeset
   581
            self.assertIsInstance(str(rset), string_types)
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   582
            self.assertEqual(len(str(rset).splitlines()), 1)
5687
3ea39709b50e [rset] Add a line break the first result in repr of multiple rows rset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 5679
diff changeset
   583
3ea39709b50e [rset] Add a line break the first result in repr of multiple rows rset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 5679
diff changeset
   584
    def test_repr(self):
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   585
        with self.admin_access.web_request() as req:
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   586
            rset = req.execute('(Any X,N WHERE X is CWGroup, X name N)')
10612
84468b90e9c1 [py3k] basestring → six.string_types
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10603
diff changeset
   587
            self.assertIsInstance(repr(rset), string_types)
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   588
            self.assertTrue(len(repr(rset).splitlines()) > 1)
5687
3ea39709b50e [rset] Add a line break the first result in repr of multiple rows rset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 5679
diff changeset
   589
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   590
            rset = req.execute('(Any X WHERE X is CWGroup, X name "managers")')
10612
84468b90e9c1 [py3k] basestring → six.string_types
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10603
diff changeset
   591
            self.assertIsInstance(str(rset), string_types)
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   592
            self.assertEqual(len(str(rset).splitlines()), 1)
5687
3ea39709b50e [rset] Add a line break the first result in repr of multiple rows rset
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 5679
diff changeset
   593
10691
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   594
    def test_slice(self):
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   595
        rs = ResultSet([[12000, 'adim', u'Adim chez les pinguins'],
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   596
                        [12000, 'adim', u'Jardiner facile'],
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   597
                        [13000, 'syt',  u'Le carrelage en 42 leçons'],
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   598
                        [14000, 'nico', u'La tarte tatin en 15 minutes'],
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   599
                        [14000, 'nico', u"L'épluchage du castor commun"]],
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   600
                       'Any U, L, T WHERE U is CWUser, U login L,'\
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   601
                       'D created_by U, D title T',
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   602
                       description=[['CWUser', 'String', 'String']] * 5)
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   603
        self.assertEqual(rs[1::2],
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   604
            [[12000, 'adim', u'Jardiner facile'],
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   605
             [14000, 'nico', u'La tarte tatin en 15 minutes']])
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   606
10180
ea10572fccfe [rset] fix crash on displaying rset where some symmetric relation is used. Closes #4739253
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9656
diff changeset
   607
    def test_nonregr_symmetric_relation(self):
ea10572fccfe [rset] fix crash on displaying rset where some symmetric relation is used. Closes #4739253
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9656
diff changeset
   608
        # see https://www.cubicweb.org/ticket/4739253
ea10572fccfe [rset] fix crash on displaying rset where some symmetric relation is used. Closes #4739253
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9656
diff changeset
   609
        with self.admin_access.client_cnx() as cnx:
ea10572fccfe [rset] fix crash on displaying rset where some symmetric relation is used. Closes #4739253
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9656
diff changeset
   610
            p1 = cnx.create_entity('Personne', nom=u'sylvain')
ea10572fccfe [rset] fix crash on displaying rset where some symmetric relation is used. Closes #4739253
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9656
diff changeset
   611
            cnx.create_entity('Personne', nom=u'denis', connait=p1)
ea10572fccfe [rset] fix crash on displaying rset where some symmetric relation is used. Closes #4739253
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9656
diff changeset
   612
            cnx.commit()
ea10572fccfe [rset] fix crash on displaying rset where some symmetric relation is used. Closes #4739253
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9656
diff changeset
   613
            rset = cnx.execute('Any X,Y WHERE X connait Y')
ea10572fccfe [rset] fix crash on displaying rset where some symmetric relation is used. Closes #4739253
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9656
diff changeset
   614
            rset.get_entity(0, 1) # used to raise KeyError
8085
51929d531aff [rset] fix crash while building entity from rset w/ some subquery. Closes #2089055
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8048
diff changeset
   615
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   616
if __name__ == '__main__':
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   617
    unittest_main()