cubicweb/test/unittest_rset.py
author Denis Laxalde <denis.laxalde@logilab.fr>
Thu, 21 Mar 2019 14:33:54 +0100
changeset 12530 9d88e1177c35
parent 12491 540904e0ff0f
child 12566 6b3523f81f42
permissions -rw-r--r--
Remove Twisted web server Twisted web server is not used anymore and has been superseded by pyramid many years ago. Furthermore, our usage is not compatible with Python 3. So we drop the "etwist" sub-package. As a consequence, "all-in-one" configuration type gets dropped as it was Twisted-specific. We resurrect it in cubicweb/pyramid/config.py by only keeping options used by the "pyramid". Similarly, we introduce a AllInOneCreateHandler in cubicweb/pyramid/pyramidctl.py that is basically the one that lived in cubicweb/etwist/twctl.py and is used to create the "all-in-one" instance. Added a TODO here about "pyramid.ini" that could be generated at the end of bootstrap() method. In cubicweb/devtools/httptest.py, CubicWebServerTC is now equivalent to CubicWebWsgiTC and the latter is dropped.
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
12299
b8eea17fe0b2 [rset] update copyright
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
     2
# copyright 2003-2018 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/>.
12421
e460eac6e648 [test/rset] typo
David Douard <david.douard@logilab.fr>
parents: 12420
diff changeset
    19
"""unit tests for module cubicweb.rset"""
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 = {
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
    47
            'Any U,L,M where U is CWUser, U login L, U mail M': [
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
    48
                (1, 'login', 'subject'), (2, 'mail', 'subject')],
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
    49
            'Any U,L,M where U is CWUser, L is Foo, U mail M': [
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
    50
                (2, 'mail', 'subject')],
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
    51
            'Any C,P where C is Company, C employs P': [
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
    52
                (1, 'employs', 'subject')],
11870
3a84a79c4ed5 Flake8 bits with some copyright updates
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11171
diff changeset
    53
            '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
    54
            '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
    55
        }
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    56
        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
    57
            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
    58
            self.assertEqual((rql, result), (rql, relations))
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    59
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    60
    def test_relations_description_indexed(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    61
        """tests relations_description() function"""
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    62
        queries = {
11870
3a84a79c4ed5 Flake8 bits with some copyright updates
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11171
diff changeset
    63
            '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
    64
            {0: [(2, 'employs', 'subject')],
3a84a79c4ed5 Flake8 bits with some copyright updates
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11171
diff changeset
    65
             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
    66
        }
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    67
        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
    68
            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
    69
                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
    70
                self.assertEqual(result, relations)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    71
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
    72
    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
    73
        rql = ('Any A,B,C,COUNT(D) GROUPBY A,B,C WITH A,B,C,D BEING '
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
    74
               '(Any YEAR(CD), MONTH(CD), S, X WHERE X is CWUser, '
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
    75
               'X creation_date CD, X in_state S)')
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
    76
        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
    77
        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
    78
        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
    79
        self.assertEqual(result, [])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    80
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
    81
    def test_subquery_callfunc_2(self):
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
    82
        rql = ('Any X,S,L WHERE '
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
    83
               'X in_state S WITH X, L BEING (Any X,MAX(L) GROUPBY X WHERE '
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
    84
               'X is CWUser, T wf_info_for X, T creation_date L)')
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
    85
        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
    86
        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
    87
        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
    88
        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
    89
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    90
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2635
diff changeset
    91
class ResultSetTC(CubicWebTC):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    92
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    93
    def setUp(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    94
        super(ResultSetTC, self).setUp()
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    95
        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
    96
                              '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
    97
                              description=[['CWUser', 'String'], ['Bar', 'String']])
12063
4bcb58aa103a [rset] Use RQL cache in syntax_tree method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11913
diff changeset
    98
        self.rset.req = mock_object(vreg=self.vreg, repo=self.repo)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    99
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   100
    def compare_urls(self, url1, url2):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   101
        info1 = urlsplit(url1)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   102
        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
   103
        self.assertEqual(info1[:3], info2[:3])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   104
        if info1[3] != info2[3]:
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   105
            params1 = dict(pair.split('=') for pair in info1[3].split('&'))
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   106
            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
   107
            self.assertDictEqual(params1, params2)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   108
5740
46207f491a51 [rset] make rsets picklable (again ?) #1056422
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 5667
diff changeset
   109
    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
   110
        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
   111
        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
   112
        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
   113
        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
   114
        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
   115
        self.assertEqual(self.rset.description, rs2.description)
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   116
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   117
    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
   118
        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
   119
            baseurl = req.base_url()
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   120
            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
   121
                              '%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
   122
            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
   123
                              '%stask/title/go' % baseurl)
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   124
            # self.compare_urls(req.build_url('view', _restpath='/task/title/go'),
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   125
            #                   '%stask/title/go' % baseurl)
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   126
            # 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
   127
            self.compare_urls(req.build_url('view', _restpath=''), baseurl)
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   128
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
   129
    def test_build(self):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   130
        """test basic build of a ResultSet"""
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   131
        rs = ResultSet([1, 2, 3], 'CWGroup X',
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   132
                       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
   133
        self.assertEqual(rs.rowcount, 3)
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   134
        self.assertEqual(rs.rows, [1, 2, 3])
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6195
diff changeset
   135
        self.assertEqual(rs.description, ['CWGroup', 'CWGroup', 'CWGroup'])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   136
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
   137
    def test_limit(self):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   138
        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
   139
                       '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
   140
                       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
   141
        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
   142
            rs.req = req
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   143
            rs.vreg = self.vreg
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).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
   145
            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
   146
            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
   147
            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
   148
            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
   149
            self.assertEqual(rs.limit(2, offset=3).rows, [])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   150
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
   151
    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
   152
        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
   153
            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
   154
            # 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
   155
            # with cwuser on row 9 as well
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   156
            e1 = rs.get_entity(9, 0)  # noqa
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   157
            # 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
   158
            # 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
   159
            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
   160
            # 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
   161
            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
   162
            # get back eid
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   163
            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
   164
            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
   165
            # 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
   166
            # 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
   167
            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
   168
            # 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
   169
            # 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
   170
            u.cw_rset[u.cw_row]
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   171
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
   172
    def test_filter(self):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   173
        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
   174
                       '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
   175
                       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
   176
        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
   177
            rs.req = req
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   178
            rs.vreg = self.vreg
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   179
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   180
            def test_filter(entity):
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   181
                return entity.login != 'nico'
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   182
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   183
            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
   184
            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
   185
            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
   186
            self.assertEqual(rs2.description, rs.description[1:])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   187
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
   188
    def test_transform(self):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   189
        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
   190
                       '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
   191
                       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
   192
        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
   193
            rs.req = req
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   194
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   195
            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
   196
                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
   197
            rs2 = rs.transformed_rset(test_transform)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   198
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   199
            self.assertEqual(len(rs2), 3)
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   200
            self.assertEqual(list(rs2), [['adim'], ['syt'], ['nico']])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   201
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
   202
    def test_sort(self):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   203
        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
   204
                       '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
   205
                       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
   206
        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
   207
            rs.req = req
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   208
            rs.vreg = self.vreg
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   209
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   210
            rs2 = rs.sorted_rset(lambda e: e.cw_attr_cache['login'])
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   211
            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
   212
            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
   213
            # 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
   214
            self.assertEqual([login for _, login in rs], ['adim', 'syt', 'nico'])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   215
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   216
            rs2 = rs.sorted_rset(lambda e: e.cw_attr_cache['login'], reverse=True)
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   217
            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
   218
            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
   219
            # 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
   220
            self.assertEqual([login for _, login in rs], ['adim', 'syt', 'nico'])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   221
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   222
            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
   223
            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
   224
            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
   225
            # 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
   226
            self.assertEqual([login for _, login in rs], ['adim', 'syt', 'nico'])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   227
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
   228
    def test_split(self):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   229
        rs = ResultSet([[12000, 'adim', u'Adim chez les pinguins'],
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   230
                        [12000, 'adim', u'Jardiner facile'],
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   231
                        [13000, 'syt', u'Le carrelage en 42 leçons'],
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   232
                        [14000, 'nico', u'La tarte tatin en 15 minutes'],
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   233
                        [14000, 'nico', u"L'épluchage du castor commun"]],
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   234
                       ('Any U, L, T WHERE U is CWUser, U login L,'
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   235
                        '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
   236
                       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
   237
        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
   238
            rs.req = req
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   239
            rs.vreg = self.vreg
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   240
            rsets = rs.split_rset(lambda e: e.cw_attr_cache['login'])
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   241
            self.assertEqual(len(rsets), 3)
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   242
            self.assertEqual([login for _, login, _ in rsets[0]], ['adim', 'adim'])
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   243
            self.assertEqual([login for _, login, _ in rsets[1]], ['syt'])
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   244
            self.assertEqual([login for _, login, _ in rsets[2]], ['nico', 'nico'])
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   245
            # make sure rs is unchanged
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   246
            self.assertEqual([login for _, login, _ in rs], ['adim', 'adim', 'syt', 'nico', 'nico'])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   247
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   248
            rsets = rs.split_rset(lambda e: e.cw_attr_cache['login'], return_dict=True)
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   249
            self.assertEqual(len(rsets), 3)
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   250
            self.assertEqual([login for _, login, _ in rsets['nico']], ['nico', 'nico'])
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   251
            self.assertEqual([login for _, login, _ in rsets['adim']], ['adim', 'adim'])
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   252
            self.assertEqual([login for _, login, _ in rsets['syt']], ['syt'])
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   253
            # make sure rs is unchanged
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   254
            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
   255
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   256
            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
   257
            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
   258
            self.assertEqual([title for _, _, title in rsets[0]],
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   259
                             [u"Adim chez les pinguins",
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   260
                              u"Jardiner facile",
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   261
                              u"L'épluchage du castor commun"])
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   262
            self.assertEqual([title for _, _, title in rsets[1]],
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   263
                             [u"Le carrelage en 42 leçons",
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   264
                              u"La tarte tatin en 15 minutes"])
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   265
            # 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
   266
            self.assertEqual([title for _, _, title in rs],
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   267
                             [u'Adim chez les pinguins',
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   268
                              u'Jardiner facile',
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   269
                              u'Le carrelage en 42 leçons',
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   270
                              u'La tarte tatin en 15 minutes',
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   271
                              u"L'épluchage du castor commun"])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   272
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   273
    def test_cached_syntax_tree(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   274
        """make sure syntax tree is cached"""
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   275
        rqlst1 = self.rset.syntax_tree()
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   276
        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
   277
        self.assertIs(rqlst1, rqlst2)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   278
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   279
    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
   280
        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
   281
            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
   282
                              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
   283
            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
   284
            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
   285
            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
   286
            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
   287
            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
   288
            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
   289
            e.complete()
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   290
            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
   291
            self.assertEqual(pprelcachedict(e._cw_related_cache), [])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   292
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   293
    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
   294
        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
   295
            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
   296
            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
   297
            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
   298
            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
   299
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   300
            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
   301
            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
   302
            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
   303
            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
   304
            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
   305
            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
   306
            # 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
   307
            # 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
   308
            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
   309
            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
   310
            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
   311
            self.assertEqual(pprelcachedict(e._cw_related_cache), [])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   312
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   313
            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
   314
            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
   315
            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
   316
            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
   317
            self.assertRaises(KeyError, e.cw_attr_cache.__getitem__, 'firstname')
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   318
            self.assertEqual(pprelcachedict(e._cw_related_cache), [])
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   319
            e.complete()
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   320
            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
   321
            self.assertEqual(e.view('text'), 'anon')
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   322
            self.assertEqual(pprelcachedict(e._cw_related_cache), [])
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   323
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   324
            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
   325
            self.assertRaises(NotAnEntity, rset.get_entity, 0, 3)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   326
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   327
    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
   328
        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
   329
            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
   330
            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
   331
            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
   332
            # 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
   333
            # 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
   334
            self.assertEqual(pprelcachedict(e._cw_related_cache),
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   335
                             [('in_state_subject', [seid])])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   336
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   337
    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
   338
        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
   339
            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
   340
            req.cnx.commit()
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   341
            rset = req.execute('Any X,U,S,XT,UL,SN WHERE X created_by U, U in_state S, '
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   342
                               'X title XT, S name SN, U login UL, X eid %s' % e.eid)
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   343
            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
   344
            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
   345
            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
   346
                             [('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
   347
            # first level of recursion
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   348
            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
   349
            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
   350
            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
   351
            # second level of recursion
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   352
            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
   353
            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
   354
            self.assertRaises(KeyError, s.cw_attr_cache.__getitem__, 'description')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   355
11171
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   356
    def test_get_entity_recursion(self):
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   357
        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
   358
            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
   359
                              reverse_primary_email=cnx.user.eid)
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   360
            cnx.commit()
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   361
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   362
        # 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
   363
        # 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
   364
        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
   365
            mail = cnx.find('EmailAddress').one()
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   366
            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
   367
            u = rset.get_entity(0, 0)
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   368
            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
   369
            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
   370
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   371
        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
   372
            mail = cnx.find('EmailAddress').one()
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   373
            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
   374
            rset.get_entity(0, 1)
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   375
            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
   376
            u = cnx.user
b81e543e623a [rset] fix infinite recursion introduced in c1eb5a676c80
Julien Cristau <julien.cristau@logilab.fr>
parents: 11169
diff changeset
   377
            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
   378
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   379
    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
   380
        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
   381
            eid = req.execute('INSERT CWUser E: E login "joe", E upassword "joe", E in_group G '
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   382
                              'WHERE G name "users"')[0][0]
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   383
            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
   384
            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
   385
            # 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
   386
            # 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
   387
            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
   388
            # 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
   389
            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
   390
            self.assertIsInstance(cached, ResultSet)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   391
            self.assertEqual(cached.rowcount, 0)
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   392
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   393
    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
   394
        with self.admin_access.web_request() as req:
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   395
            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
   396
            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
   397
            rset = req.execute('Any X,N ORDERBY N WITH X,N BEING '
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   398
                               '((Any X,N WHERE X is Bookmark, X title N)'
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   399
                               ' UNION '
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   400
                               ' (Any X,N WHERE X is CWGroup, X name N))')
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   401
            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
   402
                        ('Bookmark', 'manger'), ('CWGroup', 'owners'),
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   403
                        ('CWGroup', 'users'))
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   404
            for entity in rset.entities():  # test get_entity for each row actually
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   405
                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
   406
                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
   407
                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
   408
                self.assertEqual(entity.cw_attr_cache[attr], n)
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   409
9347
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   410
    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
   411
        with self.admin_access.web_request() as req:
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   412
            req.create_entity('CWUser',
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   413
                              login=u'cdevienne',
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   414
                              upassword=u'cdevienne',
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   415
                              surname=u'de Vienne',
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   416
                              firstname=u'Christophe')
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('Any X WHERE X login "cdevienne"').one()
9347
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   418
9656
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')
9347
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   420
9656
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 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
   423
            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
   424
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   425
            e = req.execute(
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   426
                '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
   427
            self.assertEqual(e.surname, u'de Vienne')
9347
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   428
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   429
    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
   430
        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
   431
            with self.assertRaises(NoResultError):
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   432
                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
   433
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   434
    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
   435
        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
   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'cdevienne', upassword=u'cdevienne',
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   438
                surname=u'de Vienne', firstname=u'Christophe')
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
            req.create_entity(
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   441
                '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
   442
                firstname=u'adrien')
9347
bd841d6ae723 [rset] New method: ResultSet.one()
Christophe de Vienne <cdevienne@gmail.com>
parents: 9331
diff changeset
   443
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   444
            with self.assertRaises(MultipleResultsError):
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   445
                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
   446
12301
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   447
    def test_first(self):
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   448
        with self.admin_access.web_request() as req:
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   449
            req.create_entity('CWUser',
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   450
                              login=u'cdevienne',
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   451
                              upassword=u'cdevienne',
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   452
                              surname=u'de Vienne',
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   453
                              firstname=u'Christophe')
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   454
            e = req.execute('Any X WHERE X login "cdevienne"').first()
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   455
            self.assertEqual(e.surname, u'de Vienne')
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   456
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   457
            e = req.execute(
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   458
                'Any X, N WHERE X login "cdevienne", X surname N').first()
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   459
            self.assertEqual(e.surname, u'de Vienne')
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   460
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   461
            e = req.execute(
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   462
                'Any N, X WHERE X login "cdevienne", X surname N').first(col=1)
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   463
            self.assertEqual(e.surname, u'de Vienne')
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   464
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   465
    def test_first_no_rows(self):
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   466
        with self.admin_access.web_request() as req:
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   467
            with self.assertRaises(NoResultError):
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   468
                req.execute('Any X WHERE X login "patanok"').first()
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   469
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   470
    def test_first_multiple_rows(self):
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   471
        with self.admin_access.web_request() as req:
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   472
            req.create_entity(
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   473
                'CWUser', login=u'user1', upassword=u'cdevienne',
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   474
                surname=u'de Vienne', firstname=u'Christophe')
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   475
            req.create_entity(
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   476
                'CWUser', login=u'user2', upassword='adim',
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   477
                surname=u'di mascio', firstname=u'adrien')
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   478
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   479
            e = req.execute('Any X ORDERBY X WHERE X is CWUser, '
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   480
                            'X login LIKE "user%"').first()
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   481
            self.assertEqual(e.login, 'user1')
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   482
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   483
    def test_last(self):
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   484
        with self.admin_access.web_request() as req:
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   485
            req.create_entity('CWUser',
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   486
                              login=u'cdevienne',
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   487
                              upassword=u'cdevienne',
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   488
                              surname=u'de Vienne',
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   489
                              firstname=u'Christophe')
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   490
            e = req.execute('Any X WHERE X login "cdevienne"').last()
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   491
            self.assertEqual(e.surname, u'de Vienne')
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   492
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   493
            e = req.execute(
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   494
                'Any X, N WHERE X login "cdevienne", X surname N').last()
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   495
            self.assertEqual(e.surname, u'de Vienne')
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   496
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   497
            e = req.execute(
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   498
                'Any N, X WHERE X login "cdevienne", X surname N').last(col=1)
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   499
            self.assertEqual(e.surname, u'de Vienne')
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   500
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   501
    def test_last_no_rows(self):
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   502
        with self.admin_access.web_request() as req:
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   503
            with self.assertRaises(NoResultError):
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   504
                req.execute('Any X WHERE X login "patanok"').last()
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   505
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   506
    def test_last_multiple_rows(self):
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   507
        with self.admin_access.web_request() as req:
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   508
            req.create_entity(
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   509
                'CWUser', login=u'user1', upassword=u'cdevienne',
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   510
                surname=u'de Vienne', firstname=u'Christophe')
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   511
            req.create_entity(
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   512
                'CWUser', login=u'user2', upassword='adim',
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   513
                surname=u'di mascio', firstname=u'adrien')
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   514
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   515
            e = req.execute('Any X ORDERBY X WHERE X is CWUser, '
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   516
                            'X login LIKE "user%"').last()
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   517
            self.assertEqual(e.login, 'user2')
73634b5447e2 [test/rset] add tests for ResultSet.first() and .last() methods
David Douard <david.douard@logilab.fr>
parents: 12300
diff changeset
   518
572
9849fed789c9 test and fix potential error with None optional relation
sylvain.thenault@logilab.fr
parents: 0
diff changeset
   519
    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
   520
        with self.admin_access.web_request() as req:
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   521
            req.create_entity('Bookmark', title=u'aaaa', path=u'path')
9656
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 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
   523
            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
   524
            self.assertEqual(entity, None)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   525
            self.assertEqual(rtype, None)
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   526
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
   527
    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
   528
        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
   529
            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
   530
            rset = req.execute('Any X,N ORDERBY N WITH X,N BEING '
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   531
                               '((Any X,N WHERE X is CWGroup, X name N)'
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   532
                               ' UNION '
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   533
                               ' (Any X,N WHERE X is Bookmark, X title N))')
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   534
            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
   535
            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
   536
            self.assertEqual(rtype, 'title')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   537
            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
   538
            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
   539
            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
   540
            self.assertEqual(rtype, 'name')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   541
            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
   542
99eb71b311e4 [rset] fix entity building for some result set with UNION and subqueries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6857
diff changeset
   543
    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
   544
        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
   545
            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
   546
            rset = req.execute('Any X,N ORDERBY N WHERE X is Bookmark WITH X,N BEING '
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   547
                               '((Any X,N WHERE X is CWGroup, X name N)'
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   548
                               ' UNION '
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   549
                               ' (Any X,N WHERE X is Bookmark, X title N))')
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   550
            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
   551
            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
   552
            self.assertEqual(rtype, 'title')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   553
            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
   554
99eb71b311e4 [rset] fix entity building for some result set with UNION and subqueries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6857
diff changeset
   555
    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
   556
        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
   557
            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
   558
            rset = req.execute('Any X,N ORDERBY N WITH N,X BEING '
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   559
                               '((Any N,X WHERE X is CWGroup, X name N)'
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   560
                               ' UNION '
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   561
                               ' (Any N,X WHERE X is Bookmark, X title N))')
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   562
            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
   563
            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
   564
            self.assertEqual(rtype, 'title')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   565
            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
   566
99eb71b311e4 [rset] fix entity building for some result set with UNION and subqueries
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6857
diff changeset
   567
    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
   568
        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
   569
            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
   570
            rset = req.execute('Any X,X, N ORDERBY N WITH X,N BEING '
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   571
                               '((Any X,N WHERE X is CWGroup, X name N)'
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   572
                               ' UNION '
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   573
                               ' (Any X,N WHERE X is Bookmark, X title N))')
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   574
            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
   575
            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
   576
            self.assertEqual(rtype, 'title')
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   577
            self.assertEqual(entity.title, 'aaaa')
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   578
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
   579
    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
   580
        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
   581
            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
   582
            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
   583
            rset = req.execute('Any B,T,L WHERE B bookmarked_by U, U login L '
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   584
                               'WITH B,T BEING (Any B,T WHERE B is Bookmark, B title T)')
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   585
            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
   586
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
   587
    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
   588
        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
   589
            rset = req.execute('Any X,S,L WHERE X in_state S '
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   590
                               'WITH X, L BEING (Any X,MAX(L) GROUPBY X '
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   591
                               'WHERE X is CWUser, T? wf_info_for X, T creation_date L)')
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(rset), 2)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   593
            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
   594
            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
   595
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   596
    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
   597
        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
   598
            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
   599
            # 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
   600
            self.assertTrue(rset)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   601
            self.assertEqual(set(e.e_schema.type for e in rset.entities(0)),
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   602
                             set(['CWUser']))
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   603
            self.assertEqual(set(e.e_schema.type for e in rset.entities(1)),
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   604
                             set(['CWGroup']))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   605
6857
8d2062387134 [rset] add utility method to get entities and attributes from any rset
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6415
diff changeset
   606
    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
   607
        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
   608
            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
   609
            # 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
   610
            self.assertTrue(rset)
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   611
            out = list(rset.iter_rows_with_entities())[0]
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   612
            self.assertEqual(out[0].login, out[1])
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   613
            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
   614
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   615
    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
   616
        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
   617
            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
   618
            self.assertEqual(rset.printable_rql(),
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   619
                             'Any X WHERE X final FALSE, X is CWEType')
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   620
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   621
    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
   622
        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
   623
            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
   624
            self.assertEqual(rset.searched_text(), 'foobar')
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   625
            rset = req.execute(u'Any X WHERE X has_text %(text)s', {'text': 'foo'})
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   626
            self.assertEqual(rset.searched_text(), 'foo')
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   627
4939
349af486f5ed fix limited_rql w/ UNION query
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4536
diff changeset
   628
    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
   629
        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
   630
            rset = req.execute('(Any X,N WHERE X is Bookmark, X title N)'
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   631
                               ' UNION '
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   632
                               '(Any X,N WHERE X is CWGroup, X name N)')
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   633
            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
   634
            self.assertEqual(rset.limited_rql(),
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   635
                             'Any A,B LIMIT 2 OFFSET 10 '
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   636
                             'WITH A,B BEING ('
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   637
                             '(Any X,N WHERE X is Bookmark, X title N) '
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   638
                             'UNION '
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   639
                             '(Any X,N WHERE X is CWGroup, X name N)'
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   640
                             ')')
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   641
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
   642
    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
   643
        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
   644
            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
   645
            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
   646
            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
   647
            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
   648
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
   649
    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
   650
        with self.admin_access.web_request() as req:
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   651
            rset = req.execute('Any D, COUNT(U) GROUPBY D '
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   652
                               'WHERE U is CWUser, U creation_date D')
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   653
            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
   654
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
   655
    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
   656
        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
   657
            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
   658
            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
   659
            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
   660
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
   661
    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
   662
        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
   663
            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
   664
            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
   665
            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
   666
9656
19c423d9d215 [test] update unittest_rset to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   667
            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
   668
            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
   669
            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
   670
10691
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   671
    def test_slice(self):
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   672
        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
   673
                        [12000, 'adim', u'Jardiner facile'],
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   674
                        [13000, 'syt', u'Le carrelage en 42 leçons'],
10691
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   675
                        [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
   676
                        [14000, 'nico', u"L'épluchage du castor commun"]],
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   677
                       ('Any U, L, T WHERE U is CWUser, U login L,'
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   678
                        'D created_by U, D title T'),
10691
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   679
                       description=[['CWUser', 'String', 'String']] * 5)
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   680
        self.assertEqual(rs[1::2],
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   681
                         [[12000, 'adim', u'Jardiner facile'],
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   682
                         [14000, 'nico', u'La tarte tatin en 15 minutes']])
10691
af266f27c4d5 [py3k] __getslice__ → __getitem__ with slice support
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
   683
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
   684
    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
   685
        # 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
   686
        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
   687
            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
   688
            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
   689
            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
   690
            rset = cnx.execute('Any X,Y WHERE X connait Y')
12420
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   691
            rset.get_entity(0, 1)  # used to raise KeyError
1c0dce14c3b5 [test/rset] flake8
David Douard <david.douard@logilab.fr>
parents: 12063
diff changeset
   692
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
   693
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   694
if __name__ == '__main__':
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   695
    unittest_main()