cubicweb/test/unittest_predicates.py
author Denis Laxalde <denis.laxalde@logilab.fr>
Fri, 05 Apr 2019 17:58:19 +0200
changeset 12567 26744ad37953
parent 12508 a8c1ea390400
child 12880 59d4ad7e7df3
permissions -rw-r--r--
Drop python2 support This mostly consists in removing the dependency on "six" and updating the code to use only Python3 idioms. Notice that we previously used TemporaryDirectory from cubicweb.devtools.testlib for compatibility with Python2. We now directly import it from tempfile.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
     1
# copyright 2003-2014 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4491
diff changeset
     2
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4491
diff changeset
     3
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4491
diff changeset
     4
# This file is part of CubicWeb.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4491
diff changeset
     5
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4491
diff changeset
     6
# CubicWeb is free software: you can redistribute it and/or modify it under the
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4491
diff changeset
     7
# terms of the GNU Lesser General Public License as published by the Free
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4491
diff changeset
     8
# Software Foundation, either version 2.1 of the License, or (at your option)
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4491
diff changeset
     9
# any later version.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4491
diff changeset
    10
#
5424
8ecbcbff9777 replace logilab-common by CubicWeb in disclaimer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5421
diff changeset
    11
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4491
diff changeset
    12
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4491
diff changeset
    13
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4491
diff changeset
    14
# details.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4491
diff changeset
    15
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4491
diff changeset
    16
# You should have received a copy of the GNU Lesser General Public License along
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4491
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
5561
58b05c314443 [selectors] ensure adaptable('IDownloadable') takes precedence over implements('Any')
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5426
diff changeset
    18
"""unit tests for selectors mechanism"""
630
66ff0b2f7d03 simple test implementation for binary operators on selectors
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    19
6348
f5bd501628b0 [selectors] multi_lines_rset selector supports now optional operator for richer comparaisons
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6340
diff changeset
    20
from operator import eq, lt, le, gt
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    21
from contextlib import contextmanager
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    22
630
66ff0b2f7d03 simple test implementation for binary operators on selectors
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    23
from logilab.common.testlib import TestCase, unittest_main
9582
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9152
diff changeset
    24
from logilab.common.decorators import clear_cache
630
66ff0b2f7d03 simple test implementation for binary operators on selectors
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    25
5561
58b05c314443 [selectors] ensure adaptable('IDownloadable') takes precedence over implements('Any')
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5426
diff changeset
    26
from cubicweb import Binary
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2657
diff changeset
    27
from cubicweb.devtools.testlib import CubicWebTC
8190
2a3c1b787688 [vreg] move base registry implementation to logilab.common. Closes #1916014
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7986
diff changeset
    28
from cubicweb.predicates import (is_instance, adaptable, match_kwargs, match_user_groups,
10827
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
    29
                                 multi_lines_rset, score_entity, is_in_state,
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
    30
                                 rql_condition, relation_possible, match_form_params,
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
    31
                                 paginated_rset)
8858
51fdbbbd07b2 [predicates] fix 'adaptable' implementation, used to return 0 on a rset with individualy adaptable entities of different types. Closes #2709663
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8220
diff changeset
    32
from cubicweb.view import EntityAdapter
1571
e9ad2724659d tests depends on the bootstrap cube
sylvain.thenault@logilab.fr
parents: 1473
diff changeset
    33
from cubicweb.web import action
6919
8fd6921f3e7c [selectors] modify workflow selectors: is_in_state, on_transition
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6908
diff changeset
    34
630
66ff0b2f7d03 simple test implementation for binary operators on selectors
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    35
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    36
class ImplementsTC(CubicWebTC):
779
8510e14335e1 implements some str, fix implements selector, test and fixes
sylvain.thenault@logilab.fr
parents: 630
diff changeset
    37
    def test_etype_priority(self):
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    38
        with self.admin_access.web_request() as req:
10704
73367a56ee41 [py3k] ensure Binary objects are initialized with bytes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10529
diff changeset
    39
            f = req.create_entity('FakeFile', data_name=u'hop.txt', data=Binary(b'hop'),
10529
747eded13c68 [test] use FakeFile instead of File in test_fulltextindex
Julien Cristau <julien.cristau@logilab.fr>
parents: 10476
diff changeset
    40
                                  data_format=u'text/plain')
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    41
            rset = f.as_rset()
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    42
            anyscore = is_instance('Any')(f.__class__, req, rset=rset)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    43
            idownscore = adaptable('IDownloadable')(f.__class__, req, rset=rset)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    44
            self.assertTrue(idownscore > anyscore, (idownscore, anyscore))
10529
747eded13c68 [test] use FakeFile instead of File in test_fulltextindex
Julien Cristau <julien.cristau@logilab.fr>
parents: 10476
diff changeset
    45
            filescore = is_instance('FakeFile')(f.__class__, req, rset=rset)
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    46
            self.assertTrue(filescore > idownscore, (filescore, idownscore))
1473
717dea3362c0 more implements selector tests
sylvain.thenault@logilab.fr
parents: 779
diff changeset
    47
717dea3362c0 more implements selector tests
sylvain.thenault@logilab.fr
parents: 779
diff changeset
    48
    def test_etype_inheritance_no_yams_inheritance(self):
2657
de974465d381 [appobject] kill VObject class, move base selector classes to appobject
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
    49
        cls = self.vreg['etypes'].etype_class('Personne')
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    50
        with self.admin_access.web_request() as req:
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    51
            self.assertFalse(is_instance('Societe').score_class(cls, req))
1473
717dea3362c0 more implements selector tests
sylvain.thenault@logilab.fr
parents: 779
diff changeset
    52
6046
3fd4a34c4a09 [selectors] fix is_instance bug w/ parent classes. Also slight performance enhancements by changing what's returned by vreg['etypes'].parent_classes method (dedicated for this usage...) and removing no more necessary methods
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5877
diff changeset
    53
    def test_yams_inheritance(self):
3fd4a34c4a09 [selectors] fix is_instance bug w/ parent classes. Also slight performance enhancements by changing what's returned by vreg['etypes'].parent_classes method (dedicated for this usage...) and removing no more necessary methods
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5877
diff changeset
    54
        cls = self.vreg['etypes'].etype_class('Transition')
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    55
        with self.admin_access.web_request() as req:
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    56
            self.assertEqual(is_instance('BaseTransition').score_class(cls, req),
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    57
                             3)
6046
3fd4a34c4a09 [selectors] fix is_instance bug w/ parent classes. Also slight performance enhancements by changing what's returned by vreg['etypes'].parent_classes method (dedicated for this usage...) and removing no more necessary methods
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5877
diff changeset
    58
7982
77ed9b2fc9a5 [selectors] EClassSelector (eg is_instance & all) should check for None value (possible w/ outer join) when a row is specified. Closes #2033165
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7617
diff changeset
    59
    def test_outer_join(self):
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    60
        with self.admin_access.web_request() as req:
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    61
            rset = req.execute('Any U,B WHERE B? bookmarked_by U, U login "anon"')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    62
            self.assertEqual(is_instance('Bookmark')(None, req, rset=rset, row=0, col=1),
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    63
                             0)
7982
77ed9b2fc9a5 [selectors] EClassSelector (eg is_instance & all) should check for None value (possible w/ outer join) when a row is specified. Closes #2033165
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7617
diff changeset
    64
1571
e9ad2724659d tests depends on the bootstrap cube
sylvain.thenault@logilab.fr
parents: 1473
diff changeset
    65
6919
8fd6921f3e7c [selectors] modify workflow selectors: is_in_state, on_transition
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6908
diff changeset
    66
class WorkflowSelectorTC(CubicWebTC):
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    67
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    68
    def setUp(self):
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    69
        super(WorkflowSelectorTC, self).setUp()
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    70
        # enable debug mode to state/transition validation on the fly
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    71
        self.vreg.config.debugmode = True
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    72
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    73
    def tearDown(self):
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    74
        self.vreg.config.debugmode = False
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    75
        super(WorkflowSelectorTC, self).tearDown()
6919
8fd6921f3e7c [selectors] modify workflow selectors: is_in_state, on_transition
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6908
diff changeset
    76
8fd6921f3e7c [selectors] modify workflow selectors: is_in_state, on_transition
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6908
diff changeset
    77
    def setup_database(self):
9668
501f14e095d1 [test] Use RepoAccess.shell() in unittest_predicates
Julien Cristau <julien.cristau@logilab.fr>
parents: 9653
diff changeset
    78
        with self.admin_access.shell() as shell:
501f14e095d1 [test] Use RepoAccess.shell() in unittest_predicates
Julien Cristau <julien.cristau@logilab.fr>
parents: 9653
diff changeset
    79
            wf = shell.add_workflow("wf_test", 'StateFull', default=True)
501f14e095d1 [test] Use RepoAccess.shell() in unittest_predicates
Julien Cristau <julien.cristau@logilab.fr>
parents: 9653
diff changeset
    80
            created   = wf.add_state('created', initial=True)
501f14e095d1 [test] Use RepoAccess.shell() in unittest_predicates
Julien Cristau <julien.cristau@logilab.fr>
parents: 9653
diff changeset
    81
            validated = wf.add_state('validated')
501f14e095d1 [test] Use RepoAccess.shell() in unittest_predicates
Julien Cristau <julien.cristau@logilab.fr>
parents: 9653
diff changeset
    82
            abandoned = wf.add_state('abandoned')
501f14e095d1 [test] Use RepoAccess.shell() in unittest_predicates
Julien Cristau <julien.cristau@logilab.fr>
parents: 9653
diff changeset
    83
            wf.add_transition('validate', created, validated, ('managers',))
501f14e095d1 [test] Use RepoAccess.shell() in unittest_predicates
Julien Cristau <julien.cristau@logilab.fr>
parents: 9653
diff changeset
    84
            wf.add_transition('forsake', (created, validated,), abandoned, ('managers',))
6919
8fd6921f3e7c [selectors] modify workflow selectors: is_in_state, on_transition
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6908
diff changeset
    85
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    86
    @contextmanager
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    87
    def statefull_stuff(self):
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    88
        with self.admin_access.web_request() as req:
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    89
            wf_entity = req.create_entity('StateFull', name=u'')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    90
            rset = wf_entity.as_rset()
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    91
            adapter = wf_entity.cw_adapt_to('IWorkflowable')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    92
            req.cnx.commit()
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    93
            self.assertEqual(adapter.state, 'created')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    94
            yield req, wf_entity, rset, adapter
6919
8fd6921f3e7c [selectors] modify workflow selectors: is_in_state, on_transition
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6908
diff changeset
    95
8fd6921f3e7c [selectors] modify workflow selectors: is_in_state, on_transition
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6908
diff changeset
    96
    def test_is_in_state(self):
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    97
        with self.statefull_stuff() as (req, wf_entity, rset, adapter):
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    98
            for state in ('created', 'validated', 'abandoned'):
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    99
                selector = is_in_state(state)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   100
                self.assertEqual(selector(None, req, rset=rset),
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   101
                                 state=="created")
6919
8fd6921f3e7c [selectors] modify workflow selectors: is_in_state, on_transition
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6908
diff changeset
   102
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   103
            adapter.fire_transition('validate')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   104
            req.cnx.commit(); wf_entity.cw_clear_all_caches()
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   105
            self.assertEqual(adapter.state, 'validated')
6919
8fd6921f3e7c [selectors] modify workflow selectors: is_in_state, on_transition
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6908
diff changeset
   106
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   107
            clear_cache(rset, 'get_entity')
9582
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9152
diff changeset
   108
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   109
            selector = is_in_state('created')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   110
            self.assertEqual(selector(None, req, rset=rset), 0)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   111
            selector = is_in_state('validated')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   112
            self.assertEqual(selector(None, req, rset=rset), 1)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   113
            selector = is_in_state('validated', 'abandoned')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   114
            self.assertEqual(selector(None, req, rset=rset), 1)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   115
            selector = is_in_state('abandoned')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   116
            self.assertEqual(selector(None, req, rset=rset), 0)
6919
8fd6921f3e7c [selectors] modify workflow selectors: is_in_state, on_transition
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6908
diff changeset
   117
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   118
            adapter.fire_transition('forsake')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   119
            req.cnx.commit(); wf_entity.cw_clear_all_caches()
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   120
            self.assertEqual(adapter.state, 'abandoned')
6919
8fd6921f3e7c [selectors] modify workflow selectors: is_in_state, on_transition
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6908
diff changeset
   121
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   122
            clear_cache(rset, 'get_entity')
9582
46ed25d38fe2 Move entity cache from web.request.ConnectionCubicWebRequestBase to repoapi.ClientConnection
Julien Cristau <julien.cristau@logilab.fr>
parents: 9152
diff changeset
   123
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   124
            selector = is_in_state('created')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   125
            self.assertEqual(selector(None, req, rset=rset), 0)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   126
            selector = is_in_state('validated')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   127
            self.assertEqual(selector(None, req, rset=rset), 0)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   128
            selector = is_in_state('validated', 'abandoned')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   129
            self.assertEqual(selector(None, req, rset=rset), 1)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   130
            self.assertEqual(adapter.state, 'abandoned')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   131
            self.assertEqual(selector(None, req, rset=rset), 1)
6919
8fd6921f3e7c [selectors] modify workflow selectors: is_in_state, on_transition
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6908
diff changeset
   132
8fd6921f3e7c [selectors] modify workflow selectors: is_in_state, on_transition
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6908
diff changeset
   133
    def test_is_in_state_unvalid_names(self):
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   134
        with self.statefull_stuff() as (req, wf_entity, rset, adapter):
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   135
            selector = is_in_state("unknown")
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   136
            with self.assertRaises(ValueError) as cm:
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   137
                selector(None, req, rset=rset)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   138
            self.assertEqual(str(cm.exception),
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   139
                             "wf_test: unknown state(s): unknown")
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   140
            selector = is_in_state("weird", "unknown", "created", "weird")
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   141
            with self.assertRaises(ValueError) as cm:
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   142
                selector(None, req, rset=rset)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   143
            self.assertEqual(str(cm.exception),
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   144
                             "wf_test: unknown state(s): unknown,weird")
6919
8fd6921f3e7c [selectors] modify workflow selectors: is_in_state, on_transition
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6908
diff changeset
   145
8fd6921f3e7c [selectors] modify workflow selectors: is_in_state, on_transition
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6908
diff changeset
   146
7617
be5f68f9314e [selectors, test] remove duplicated test and add some for relation_possible selector w/ rqlst
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7387
diff changeset
   147
class RelationPossibleTC(CubicWebTC):
be5f68f9314e [selectors, test] remove duplicated test and add some for relation_possible selector w/ rqlst
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7387
diff changeset
   148
be5f68f9314e [selectors, test] remove duplicated test and add some for relation_possible selector w/ rqlst
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7387
diff changeset
   149
    def test_rqlst_1(self):
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   150
        with self.admin_access.web_request() as req:
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   151
            selector = relation_possible('in_group')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   152
            select = self.vreg.parse(req, 'Any X WHERE X is CWUser').children[0]
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   153
            score = selector(None, req, rset=1,
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   154
                             select=select, filtered_variable=select.defined_vars['X'])
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   155
            self.assertEqual(score, 1)
7617
be5f68f9314e [selectors, test] remove duplicated test and add some for relation_possible selector w/ rqlst
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7387
diff changeset
   156
be5f68f9314e [selectors, test] remove duplicated test and add some for relation_possible selector w/ rqlst
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7387
diff changeset
   157
    def test_rqlst_2(self):
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   158
        with self.admin_access.web_request() as req:
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   159
            selector = relation_possible('in_group')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   160
            select = self.vreg.parse(req, 'Any 1, COUNT(X) WHERE X is CWUser, X creation_date XD, '
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   161
                                     'Y creation_date YD, Y is CWGroup '
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   162
                                     'HAVING DAY(XD)=DAY(YD)').children[0]
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   163
            score = selector(None, req, rset=1,
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   164
                             select=select, filtered_variable=select.defined_vars['X'])
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   165
            self.assertEqual(score, 1)
7617
be5f68f9314e [selectors, test] remove duplicated test and add some for relation_possible selector w/ rqlst
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7387
diff changeset
   166
9152
b0155bfd4e17 Protect against crash in the `relation_possible` predicate with ambiguous relations.
Florent Cayre <florent.cayre@logilab.fr>
parents: 8866
diff changeset
   167
    def test_ambiguous(self):
b0155bfd4e17 Protect against crash in the `relation_possible` predicate with ambiguous relations.
Florent Cayre <florent.cayre@logilab.fr>
parents: 8866
diff changeset
   168
        # Ambiguous relations are :
b0155bfd4e17 Protect against crash in the `relation_possible` predicate with ambiguous relations.
Florent Cayre <florent.cayre@logilab.fr>
parents: 8866
diff changeset
   169
        # (Service, fabrique_par, Personne) and (Produit, fabrique_par, Usine)
b0155bfd4e17 Protect against crash in the `relation_possible` predicate with ambiguous relations.
Florent Cayre <florent.cayre@logilab.fr>
parents: 8866
diff changeset
   170
        # There used to be a crash here with a bad rdef choice in the strict
b0155bfd4e17 Protect against crash in the `relation_possible` predicate with ambiguous relations.
Florent Cayre <florent.cayre@logilab.fr>
parents: 8866
diff changeset
   171
        # checking case.
b0155bfd4e17 Protect against crash in the `relation_possible` predicate with ambiguous relations.
Florent Cayre <florent.cayre@logilab.fr>
parents: 8866
diff changeset
   172
        selector = relation_possible('fabrique_par', role='object',
b0155bfd4e17 Protect against crash in the `relation_possible` predicate with ambiguous relations.
Florent Cayre <florent.cayre@logilab.fr>
parents: 8866
diff changeset
   173
                                     target_etype='Personne', strict=True)
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   174
        with self.admin_access.web_request() as req:
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   175
            usine = req.create_entity('Usine', lieu=u'here')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   176
            score = selector(None, req, rset=usine.as_rset())
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   177
            self.assertEqual(0, score)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   178
7617
be5f68f9314e [selectors, test] remove duplicated test and add some for relation_possible selector w/ rqlst
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7387
diff changeset
   179
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2657
diff changeset
   180
class MatchUserGroupsTC(CubicWebTC):
1571
e9ad2724659d tests depends on the bootstrap cube
sylvain.thenault@logilab.fr
parents: 1473
diff changeset
   181
    def test_owners_group(self):
e9ad2724659d tests depends on the bootstrap cube
sylvain.thenault@logilab.fr
parents: 1473
diff changeset
   182
        """tests usage of 'owners' group with match_user_group"""
e9ad2724659d tests depends on the bootstrap cube
sylvain.thenault@logilab.fr
parents: 1473
diff changeset
   183
        class SomeAction(action.Action):
3418
7b49fa7e942d [api] use _cw, cw_row, cw_col, cw_rset etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 2773
diff changeset
   184
            __regid__ = 'yo'
1571
e9ad2724659d tests depends on the bootstrap cube
sylvain.thenault@logilab.fr
parents: 1473
diff changeset
   185
            category = 'foo'
e9ad2724659d tests depends on the bootstrap cube
sylvain.thenault@logilab.fr
parents: 1473
diff changeset
   186
            __select__ = match_user_groups('owners')
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1571
diff changeset
   187
        self.vreg._loadedmods[__name__] = {}
4491
a0f48c31b58a kill register_appobject_class method, simplifying autoregistration. Update test accordingly (test which manually registers object should also properly call there __register__ method). Drop the disable-appobjects config file entry: no one used it since its introduction years ago.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4490
diff changeset
   188
        self.vreg.register(SomeAction)
4490
d45cde54d464 backport stable branch and some vreg cleanups:
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   189
        SomeAction.__registered__(self.vreg['actions'])
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7617
diff changeset
   190
        self.assertTrue(SomeAction in self.vreg['actions']['yo'], self.vreg['actions'])
1571
e9ad2724659d tests depends on the bootstrap cube
sylvain.thenault@logilab.fr
parents: 1473
diff changeset
   191
        try:
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   192
            with self.admin_access.web_request() as req:
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   193
                self.create_user(req, 'john')
1571
e9ad2724659d tests depends on the bootstrap cube
sylvain.thenault@logilab.fr
parents: 1473
diff changeset
   194
            # login as a simple user
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   195
            john_access = self.new_access('john')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   196
            with john_access.web_request() as req:
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   197
                # it should not be possible to use SomeAction not owned objects
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   198
                rset = req.execute('Any G WHERE G is CWGroup, G name "managers"')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   199
                self.assertFalse('yo' in dict(self.pactions(req, rset)))
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   200
                # insert a new card, and check that we can use SomeAction on our object
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   201
                req.execute('INSERT Card C: C title "zoubidou"')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   202
                req.cnx.commit()
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   203
            with john_access.web_request() as req:
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   204
                rset = req.execute('Card C WHERE C title "zoubidou"')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   205
                self.assertTrue('yo' in dict(self.pactions(req, rset)), self.pactions(req, rset))
1571
e9ad2724659d tests depends on the bootstrap cube
sylvain.thenault@logilab.fr
parents: 1473
diff changeset
   206
            # make sure even managers can't use the action
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   207
            with self.admin_access.web_request() as req:
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   208
                rset = req.execute('Card C WHERE C title "zoubidou"')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   209
                self.assertFalse('yo' in dict(self.pactions(req, rset)))
1571
e9ad2724659d tests depends on the bootstrap cube
sylvain.thenault@logilab.fr
parents: 1473
diff changeset
   210
        finally:
3418
7b49fa7e942d [api] use _cw, cw_row, cw_col, cw_rset etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 2773
diff changeset
   211
            del self.vreg[SomeAction.__registry__][SomeAction.__regid__]
1571
e9ad2724659d tests depends on the bootstrap cube
sylvain.thenault@logilab.fr
parents: 1473
diff changeset
   212
6348
f5bd501628b0 [selectors] multi_lines_rset selector supports now optional operator for richer comparaisons
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6340
diff changeset
   213
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   214
class MultiLinesRsetTC(CubicWebTC):
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   215
    def setup_database(self):
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   216
        with self.admin_access.web_request() as req:
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   217
            req.execute('INSERT CWGroup G: G name "group1"')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   218
            req.execute('INSERT CWGroup G: G name "group2"')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   219
            req.cnx.commit()
6348
f5bd501628b0 [selectors] multi_lines_rset selector supports now optional operator for richer comparaisons
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6340
diff changeset
   220
f5bd501628b0 [selectors] multi_lines_rset selector supports now optional operator for richer comparaisons
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6340
diff changeset
   221
    def test_default_op_in_selector(self):
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   222
        with self.admin_access.web_request() as req:
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   223
            rset = req.execute('Any G WHERE G is CWGroup')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   224
            expected = len(rset)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   225
            selector = multi_lines_rset(expected)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   226
            self.assertEqual(selector(None, req, rset=rset), 1)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   227
            self.assertEqual(selector(None, req, None), 0)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   228
            selector = multi_lines_rset(expected + 1)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   229
            self.assertEqual(selector(None, req, rset=rset), 0)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   230
            self.assertEqual(selector(None, req, None), 0)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   231
            selector = multi_lines_rset(expected - 1)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   232
            self.assertEqual(selector(None, req, rset=rset), 0)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   233
            self.assertEqual(selector(None, req, None), 0)
6348
f5bd501628b0 [selectors] multi_lines_rset selector supports now optional operator for richer comparaisons
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6340
diff changeset
   234
f5bd501628b0 [selectors] multi_lines_rset selector supports now optional operator for richer comparaisons
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6340
diff changeset
   235
    def test_without_rset(self):
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   236
        with self.admin_access.web_request() as req:
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   237
            rset = req.execute('Any G WHERE G is CWGroup')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   238
            expected = len(rset)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   239
            selector = multi_lines_rset(expected)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   240
            self.assertEqual(selector(None, req, None), 0)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   241
            selector = multi_lines_rset(expected + 1)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   242
            self.assertEqual(selector(None, req, None), 0)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   243
            selector = multi_lines_rset(expected - 1)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   244
            self.assertEqual(selector(None, req, None), 0)
6348
f5bd501628b0 [selectors] multi_lines_rset selector supports now optional operator for richer comparaisons
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6340
diff changeset
   245
f5bd501628b0 [selectors] multi_lines_rset selector supports now optional operator for richer comparaisons
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6340
diff changeset
   246
    def test_with_operators(self):
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   247
        with self.admin_access.web_request() as req:
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   248
            rset = req.execute('Any G WHERE G is CWGroup')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   249
            expected = len(rset)
6348
f5bd501628b0 [selectors] multi_lines_rset selector supports now optional operator for richer comparaisons
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6340
diff changeset
   250
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   251
            # Format     'expected', 'operator', 'assert'
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   252
            testdata = (( expected,         eq,        1),
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   253
                        ( expected+1,       eq,        0),
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   254
                        ( expected-1,       eq,        0),
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   255
                        ( expected,         le,        1),
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   256
                        ( expected+1,       le,        1),
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   257
                        ( expected-1,       le,        0),
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   258
                        ( expected-1,       gt,        1),
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   259
                        ( expected,         gt,        0),
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   260
                        ( expected+1,       gt,        0),
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   261
                        ( expected+1,       lt,        1),
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   262
                        ( expected,         lt,        0),
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   263
                        ( expected-1,       lt,        0))
6348
f5bd501628b0 [selectors] multi_lines_rset selector supports now optional operator for richer comparaisons
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6340
diff changeset
   264
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   265
            for (expected, operator, assertion) in testdata:
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   266
                selector = multi_lines_rset(expected, operator)
11180
c2a8317d4eec [test] Replace remaining generative tests by subtests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
   267
                with self.subTest(expected=expected, operator=operator):
c2a8317d4eec [test] Replace remaining generative tests by subtests
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
   268
                    self.assertEqual(selector(None, req, rset=rset), assertion)
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   269
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   270
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   271
class MatchKwargsTC(TestCase):
6348
f5bd501628b0 [selectors] multi_lines_rset selector supports now optional operator for richer comparaisons
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6340
diff changeset
   272
7955
f4c97d3c8b93 [selectors] match_kwargs and match_form_params selectors both accept a new `once_is_enough` argument (closes #1990438)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   273
    def test_match_kwargs_default(self):
f4c97d3c8b93 [selectors] match_kwargs and match_form_params selectors both accept a new `once_is_enough` argument (closes #1990438)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   274
        selector = match_kwargs( set( ('a', 'b') ) )
f4c97d3c8b93 [selectors] match_kwargs and match_form_params selectors both accept a new `once_is_enough` argument (closes #1990438)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   275
        self.assertEqual(selector(None, None, a=1, b=2), 2)
f4c97d3c8b93 [selectors] match_kwargs and match_form_params selectors both accept a new `once_is_enough` argument (closes #1990438)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   276
        self.assertEqual(selector(None, None, a=1), 0)
f4c97d3c8b93 [selectors] match_kwargs and match_form_params selectors both accept a new `once_is_enough` argument (closes #1990438)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   277
        self.assertEqual(selector(None, None, c=1), 0)
f4c97d3c8b93 [selectors] match_kwargs and match_form_params selectors both accept a new `once_is_enough` argument (closes #1990438)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   278
        self.assertEqual(selector(None, None, a=1, c=1), 0)
f4c97d3c8b93 [selectors] match_kwargs and match_form_params selectors both accept a new `once_is_enough` argument (closes #1990438)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   279
f4c97d3c8b93 [selectors] match_kwargs and match_form_params selectors both accept a new `once_is_enough` argument (closes #1990438)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   280
    def test_match_kwargs_any(self):
f4c97d3c8b93 [selectors] match_kwargs and match_form_params selectors both accept a new `once_is_enough` argument (closes #1990438)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   281
        selector = match_kwargs( set( ('a', 'b') ), mode='any')
f4c97d3c8b93 [selectors] match_kwargs and match_form_params selectors both accept a new `once_is_enough` argument (closes #1990438)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   282
        self.assertEqual(selector(None, None, a=1, b=2), 2)
f4c97d3c8b93 [selectors] match_kwargs and match_form_params selectors both accept a new `once_is_enough` argument (closes #1990438)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   283
        self.assertEqual(selector(None, None, a=1), 1)
f4c97d3c8b93 [selectors] match_kwargs and match_form_params selectors both accept a new `once_is_enough` argument (closes #1990438)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   284
        self.assertEqual(selector(None, None, c=1), 0)
f4c97d3c8b93 [selectors] match_kwargs and match_form_params selectors both accept a new `once_is_enough` argument (closes #1990438)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   285
        self.assertEqual(selector(None, None, a=1, c=1), 1)
f4c97d3c8b93 [selectors] match_kwargs and match_form_params selectors both accept a new `once_is_enough` argument (closes #1990438)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   286
6348
f5bd501628b0 [selectors] multi_lines_rset selector supports now optional operator for richer comparaisons
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6340
diff changeset
   287
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   288
class ScoreEntityTC(CubicWebTC):
6869
900cb9b1b687 [tests] new unit tests about score_entity selector (inscore machinery)
Julien Jehannet <julien@smaf.org>
parents: 6348
diff changeset
   289
900cb9b1b687 [tests] new unit tests about score_entity selector (inscore machinery)
Julien Jehannet <julien@smaf.org>
parents: 6348
diff changeset
   290
    def test_intscore_entity_selector(self):
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   291
        with self.admin_access.web_request() as req:
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   292
            rset = req.execute('Any E WHERE E eid 1')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   293
            selector = score_entity(lambda x: None)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   294
            self.assertEqual(selector(None, req, rset=rset), 0)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   295
            selector = score_entity(lambda x: "something")
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   296
            self.assertEqual(selector(None, req, rset=rset), 1)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   297
            selector = score_entity(lambda x: object)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   298
            self.assertEqual(selector(None, req, rset=rset), 1)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   299
            rset = req.execute('Any G LIMIT 2 WHERE G is CWGroup')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   300
            selector = score_entity(lambda x: 10)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   301
            self.assertEqual(selector(None, req, rset=rset), 20)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   302
            selector = score_entity(lambda x: 10, mode='any')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   303
            self.assertEqual(selector(None, req, rset=rset), 10)
6869
900cb9b1b687 [tests] new unit tests about score_entity selector (inscore machinery)
Julien Jehannet <julien@smaf.org>
parents: 6348
diff changeset
   304
7345
b9eaad6e34c3 [selectors] test/fix rql_condition to make it works when entity is specified via 'entity' keyword argument instead of rset, row and col
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7244
diff changeset
   305
    def test_rql_condition_entity(self):
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   306
        with self.admin_access.web_request() as req:
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   307
            selector = rql_condition('X identity U')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   308
            rset = req.user.as_rset()
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   309
            self.assertEqual(selector(None, req, rset=rset), 1)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   310
            self.assertEqual(selector(None, req, entity=req.user), 1)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   311
            self.assertEqual(selector(None, req), 0)
6869
900cb9b1b687 [tests] new unit tests about score_entity selector (inscore machinery)
Julien Jehannet <julien@smaf.org>
parents: 6348
diff changeset
   312
7362
b9813c9d32ac [selectors] enhance rql_condition to make it usable as a condition on request's user
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7345
diff changeset
   313
    def test_rql_condition_user(self):
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   314
        with self.admin_access.web_request() as req:
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   315
            selector = rql_condition('U login "admin"', user_condition=True)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   316
            self.assertEqual(selector(None, req), 1)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   317
            selector = rql_condition('U login "toto"', user_condition=True)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   318
            self.assertEqual(selector(None, req), 0)
7362
b9813c9d32ac [selectors] enhance rql_condition to make it usable as a condition on request's user
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7345
diff changeset
   319
8858
51fdbbbd07b2 [predicates] fix 'adaptable' implementation, used to return 0 on a rset with individualy adaptable entities of different types. Closes #2709663
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8220
diff changeset
   320
51fdbbbd07b2 [predicates] fix 'adaptable' implementation, used to return 0 on a rset with individualy adaptable entities of different types. Closes #2709663
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8220
diff changeset
   321
class AdaptablePredicateTC(CubicWebTC):
51fdbbbd07b2 [predicates] fix 'adaptable' implementation, used to return 0 on a rset with individualy adaptable entities of different types. Closes #2709663
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8220
diff changeset
   322
51fdbbbd07b2 [predicates] fix 'adaptable' implementation, used to return 0 on a rset with individualy adaptable entities of different types. Closes #2709663
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8220
diff changeset
   323
    def test_multiple_entity_types_rset(self):
51fdbbbd07b2 [predicates] fix 'adaptable' implementation, used to return 0 on a rset with individualy adaptable entities of different types. Closes #2709663
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8220
diff changeset
   324
        class CWUserIWhatever(EntityAdapter):
51fdbbbd07b2 [predicates] fix 'adaptable' implementation, used to return 0 on a rset with individualy adaptable entities of different types. Closes #2709663
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8220
diff changeset
   325
            __regid__ = 'IWhatever'
51fdbbbd07b2 [predicates] fix 'adaptable' implementation, used to return 0 on a rset with individualy adaptable entities of different types. Closes #2709663
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8220
diff changeset
   326
            __select__ = is_instance('CWUser')
51fdbbbd07b2 [predicates] fix 'adaptable' implementation, used to return 0 on a rset with individualy adaptable entities of different types. Closes #2709663
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8220
diff changeset
   327
        class CWGroupIWhatever(EntityAdapter):
51fdbbbd07b2 [predicates] fix 'adaptable' implementation, used to return 0 on a rset with individualy adaptable entities of different types. Closes #2709663
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8220
diff changeset
   328
            __regid__ = 'IWhatever'
51fdbbbd07b2 [predicates] fix 'adaptable' implementation, used to return 0 on a rset with individualy adaptable entities of different types. Closes #2709663
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8220
diff changeset
   329
            __select__ = is_instance('CWGroup')
51fdbbbd07b2 [predicates] fix 'adaptable' implementation, used to return 0 on a rset with individualy adaptable entities of different types. Closes #2709663
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8220
diff changeset
   330
        with self.temporary_appobjects(CWUserIWhatever, CWGroupIWhatever):
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   331
            with self.admin_access.web_request() as req:
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   332
                selector = adaptable('IWhatever')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   333
                rset = req.execute('Any X WHERE X is IN(CWGroup, CWUser)')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   334
                self.assertTrue(selector(None, req, rset=rset))
8858
51fdbbbd07b2 [predicates] fix 'adaptable' implementation, used to return 0 on a rset with individualy adaptable entities of different types. Closes #2709663
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8220
diff changeset
   335
10476
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   336
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   337
class MatchFormParamsTC(CubicWebTC):
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   338
    """tests for match_form_params predicate"""
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   339
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   340
    def test_keyonly_match(self):
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   341
        """test standard usage: ``match_form_params('param1', 'param2')``
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   342
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   343
        ``param1`` and ``param2`` must be specified in request's form.
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   344
        """
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   345
        web_request = self.admin_access.web_request
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   346
        vid_selector = match_form_params('vid')
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   347
        vid_subvid_selector = match_form_params('vid', 'subvid')
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   348
        # no parameter => KO,KO
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   349
        with web_request() as req:
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   350
            self.assertEqual(vid_selector(None, req), 0)
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   351
            self.assertEqual(vid_subvid_selector(None, req), 0)
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   352
        # one expected parameter found => OK,KO
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   353
        with web_request(vid='foo') as req:
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   354
            self.assertEqual(vid_selector(None, req), 1)
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   355
            self.assertEqual(vid_subvid_selector(None, req), 0)
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   356
        # all expected parameters found => OK,OK
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   357
        with web_request(vid='foo', subvid='bar') as req:
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   358
            self.assertEqual(vid_selector(None, req), 1)
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   359
            self.assertEqual(vid_subvid_selector(None, req), 2)
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   360
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   361
    def test_keyvalue_match_one_parameter(self):
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   362
        """test dict usage: ``match_form_params(param1=value1)``
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   363
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   364
        ``param1`` must be specified in the request's form and its value
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   365
        must be ``value1``.
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   366
        """
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   367
        web_request = self.admin_access.web_request
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   368
        # test both positional and named parameters
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   369
        vid_selector = match_form_params(vid='foo')
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   370
        # no parameter => should fail
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   371
        with web_request() as req:
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   372
            self.assertEqual(vid_selector(None, req), 0)
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   373
        # expected parameter found with expected value => OK
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   374
        with web_request(vid='foo', subvid='bar') as req:
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   375
            self.assertEqual(vid_selector(None, req), 1)
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   376
        # expected parameter found but value is incorrect => KO
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   377
        with web_request(vid='bar') as req:
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   378
            self.assertEqual(vid_selector(None, req), 0)
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   379
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   380
    def test_keyvalue_match_two_parameters(self):
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   381
        """test dict usage: ``match_form_params(param1=value1, param2=value2)``
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   382
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   383
        ``param1`` and ``param2`` must be specified in the request's form and
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   384
        their respective value must be ``value1`` and ``value2``.
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   385
        """
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   386
        web_request = self.admin_access.web_request
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   387
        vid_subvid_selector = match_form_params(vid='list', subvid='tsearch')
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   388
        # missing one expected parameter => KO
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   389
        with web_request(vid='list') as req:
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   390
            self.assertEqual(vid_subvid_selector(None, req), 0)
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   391
        # expected parameters found but values are incorrect => KO
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   392
        with web_request(vid='list', subvid='foo') as req:
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   393
            self.assertEqual(vid_subvid_selector(None, req), 0)
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   394
        # expected parameters found and values are correct => OK
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   395
        with web_request(vid='list', subvid='tsearch') as req:
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   396
            self.assertEqual(vid_subvid_selector(None, req), 2)
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   397
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   398
    def test_keyvalue_multiple_match(self):
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   399
        """test dict usage with multiple values
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   400
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   401
        i.e. as in ``match_form_params(param1=('value1', 'value2'))``
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   402
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   403
        ``param1`` must be specified in the request's form and its value
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   404
        must be either ``value1`` or ``value2``.
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   405
        """
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   406
        web_request = self.admin_access.web_request
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   407
        vid_subvid_selector = match_form_params(vid='list', subvid=('tsearch', 'listitem'))
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   408
        # expected parameters found and values correct => OK
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   409
        with web_request(vid='list', subvid='tsearch') as req:
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   410
            self.assertEqual(vid_subvid_selector(None, req), 2)
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   411
        with web_request(vid='list', subvid='listitem') as req:
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   412
            self.assertEqual(vid_subvid_selector(None, req), 2)
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   413
        # expected parameters found but values are incorrect => OK
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   414
        with web_request(vid='list', subvid='foo') as req:
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   415
            self.assertEqual(vid_subvid_selector(None, req), 0)
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   416
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   417
    def test_invalid_calls(self):
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   418
        """checks invalid calls raise a ValueError"""
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   419
        # mixing named and positional arguments should fail
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   420
        with self.assertRaises(ValueError) as cm:
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   421
            match_form_params('list', x='1', y='2')
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   422
        self.assertEqual(str(cm.exception),
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   423
                         "match_form_params() can't be called with both "
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   424
                         "positional and named arguments")
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   425
        # using a dict as first and unique argument should fail
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   426
        with self.assertRaises(ValueError) as cm:
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   427
            match_form_params({'x': 1})
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   428
        self.assertEqual(str(cm.exception),
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   429
                         "match_form_params() positional arguments must be strings")
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   430
10884
8a51e160026a [py3k] import range using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10827
diff changeset
   431
10827
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   432
class PaginatedTC(CubicWebTC):
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   433
    """tests for paginated_rset predicate"""
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   434
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   435
    def setup_database(self):
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   436
        with self.admin_access.repo_cnx() as cnx:
10884
8a51e160026a [py3k] import range using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10827
diff changeset
   437
            for i in range(30):
10896
ac64eeddd50a [test] Add missing u''
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10884
diff changeset
   438
                cnx.create_entity('CWGroup', name=u"group%d" % i)
10827
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   439
            cnx.commit()
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   440
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   441
    def test_paginated_rset(self):
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   442
        default_nb_pages = 1
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   443
        web_request = self.admin_access.web_request
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   444
        with web_request() as req:
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   445
            rset = req.execute('Any G WHERE G is CWGroup')
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   446
        self.assertEqual(len(rset), 34)
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   447
        with web_request(vid='list', page_size='10') as req:
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   448
            self.assertEqual(paginated_rset()(None, req, rset), default_nb_pages)
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   449
        with web_request(vid='list', page_size='20') as req:
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   450
            self.assertEqual(paginated_rset()(None, req, rset), default_nb_pages)
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   451
        with web_request(vid='list', page_size='50') as req:
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   452
            self.assertEqual(paginated_rset()(None, req, rset), 0)
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   453
        with web_request(vid='list', page_size='10/') as req:
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   454
            self.assertEqual(paginated_rset()(None, req, rset), 0)
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   455
        with web_request(vid='list', page_size='.1') as req:
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   456
            self.assertEqual(paginated_rset()(None, req, rset), 0)
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   457
        with web_request(vid='list', page_size='not_an_int') as req:
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   458
            self.assertEqual(paginated_rset()(None, req, rset), 0)
10476
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   459
10884
8a51e160026a [py3k] import range using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10827
diff changeset
   460
630
66ff0b2f7d03 simple test implementation for binary operators on selectors
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   461
if __name__ == '__main__':
66ff0b2f7d03 simple test implementation for binary operators on selectors
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   462
    unittest_main()