test/unittest_predicates.py
author Julien Cristau <julien.cristau@logilab.fr>
Mon, 09 Nov 2015 15:22:43 +0100
changeset 10869 575982c948a9
parent 10827 768d332de17b
child 10884 8a51e160026a
permissions -rw-r--r--
[dataimport] remove drop_index parameter from massive store "drop_index=False" also implied not dropping any constraints, in particular foreign keys, which meant any attempt to import entities would fail, because we only add metadata (the entities table) after the entity's insertion.
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)
8220
e4ea285510e5 [test] fix test broken by selectors/predicates changes coming with the move of registry to lgc
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8190
diff changeset
    32
from cubicweb.selectors import on_transition # XXX on_transition is deprecated
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
    33
from cubicweb.view import EntityAdapter
1571
e9ad2724659d tests depends on the bootstrap cube
sylvain.thenault@logilab.fr
parents: 1473
diff changeset
    34
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
    35
630
66ff0b2f7d03 simple test implementation for binary operators on selectors
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    36
6919
8fd6921f3e7c [selectors] modify workflow selectors: is_in_state, on_transition
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6908
diff changeset
    37
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    38
class ImplementsTC(CubicWebTC):
779
8510e14335e1 implements some str, fix implements selector, test and fixes
sylvain.thenault@logilab.fr
parents: 630
diff changeset
    39
    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
    40
        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
    41
            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
    42
                                  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
    43
            rset = f.as_rset()
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    44
            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
    45
            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
    46
            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
    47
            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
    48
            self.assertTrue(filescore > idownscore, (filescore, idownscore))
1473
717dea3362c0 more implements selector tests
sylvain.thenault@logilab.fr
parents: 779
diff changeset
    49
717dea3362c0 more implements selector tests
sylvain.thenault@logilab.fr
parents: 779
diff changeset
    50
    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
    51
        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
    52
        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
    53
            self.assertFalse(is_instance('Societe').score_class(cls, req))
1473
717dea3362c0 more implements selector tests
sylvain.thenault@logilab.fr
parents: 779
diff changeset
    54
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
    55
    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
    56
        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
    57
        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
    58
            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
    59
                             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
    60
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
    61
    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
    62
        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
    63
            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
    64
            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
    65
                             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
    66
1571
e9ad2724659d tests depends on the bootstrap cube
sylvain.thenault@logilab.fr
parents: 1473
diff changeset
    67
6919
8fd6921f3e7c [selectors] modify workflow selectors: is_in_state, on_transition
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6908
diff changeset
    68
class WorkflowSelectorTC(CubicWebTC):
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    69
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    70
    def setUp(self):
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    71
        super(WorkflowSelectorTC, self).setUp()
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    72
        # 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
    73
        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
    74
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    75
    def tearDown(self):
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    76
        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
    77
        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
    78
8fd6921f3e7c [selectors] modify workflow selectors: is_in_state, on_transition
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6908
diff changeset
    79
    def setup_database(self):
9668
501f14e095d1 [test] Use RepoAccess.shell() in unittest_predicates
Julien Cristau <julien.cristau@logilab.fr>
parents: 9653
diff changeset
    80
        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
    81
            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
    82
            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
    83
            validated = wf.add_state('validated')
501f14e095d1 [test] Use RepoAccess.shell() in unittest_predicates
Julien Cristau <julien.cristau@logilab.fr>
parents: 9653
diff changeset
    84
            abandoned = wf.add_state('abandoned')
501f14e095d1 [test] Use RepoAccess.shell() in unittest_predicates
Julien Cristau <julien.cristau@logilab.fr>
parents: 9653
diff changeset
    85
            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
    86
            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
    87
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    88
    @contextmanager
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    89
    def statefull_stuff(self):
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    90
        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
    91
            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
    92
            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
    93
            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
    94
            req.cnx.commit()
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
    95
            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
    96
            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
    97
8fd6921f3e7c [selectors] modify workflow selectors: is_in_state, on_transition
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6908
diff changeset
    98
    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
    99
        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
   100
            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
   101
                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
   102
                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
   103
                                 state=="created")
6919
8fd6921f3e7c [selectors] modify workflow selectors: is_in_state, on_transition
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6908
diff changeset
   104
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   105
            adapter.fire_transition('validate')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   106
            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
   107
            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
   108
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   109
            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
   110
9653
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('created')
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), 0)
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')
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('validated', '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), 1)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   117
            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
   118
            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
   119
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   120
            adapter.fire_transition('forsake')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   121
            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
   122
            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
   123
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   124
            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
   125
9653
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('created')
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')
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), 0)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   130
            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
   131
            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
   132
            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
   133
            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
   134
8fd6921f3e7c [selectors] modify workflow selectors: is_in_state, on_transition
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6908
diff changeset
   135
    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
   136
        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
   137
            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
   138
            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
   139
                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
   140
            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
   141
                             "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
   142
            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
   143
            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
   144
                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
   145
            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
   146
                             "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
   147
8fd6921f3e7c [selectors] modify workflow selectors: is_in_state, on_transition
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6908
diff changeset
   148
    def test_on_transition(self):
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   149
        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
   150
            for transition in ('validate', 'forsake'):
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   151
                selector = on_transition(transition)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   152
                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
   153
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   154
            adapter.fire_transition('validate')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   155
            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
   156
            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
   157
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   158
            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
   159
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   160
            selector = on_transition("validate")
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   161
            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
   162
            selector = on_transition("validate", "forsake")
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   163
            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
   164
            selector = on_transition("forsake")
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   165
            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
   166
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   167
            adapter.fire_transition('forsake')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   168
            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
   169
            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
   170
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   171
            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
   172
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   173
            selector = on_transition("validate")
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   174
            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
   175
            selector = on_transition("validate", "forsake")
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   176
            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
   177
            selector = on_transition("forsake")
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   178
            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
   179
8fd6921f3e7c [selectors] modify workflow selectors: is_in_state, on_transition
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6908
diff changeset
   180
    def test_on_transition_unvalid_names(self):
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   181
        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
   182
            selector = on_transition("unknown")
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   183
            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
   184
                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
   185
            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
   186
                             "wf_test: unknown transition(s): unknown")
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   187
            selector = on_transition("weird", "unknown", "validate", "weird")
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   188
            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
   189
                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
   190
            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
   191
                             "wf_test: unknown transition(s): unknown,weird")
6919
8fd6921f3e7c [selectors] modify workflow selectors: is_in_state, on_transition
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6908
diff changeset
   192
8fd6921f3e7c [selectors] modify workflow selectors: is_in_state, on_transition
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6908
diff changeset
   193
    def test_on_transition_with_no_effect(self):
8fd6921f3e7c [selectors] modify workflow selectors: is_in_state, on_transition
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6908
diff changeset
   194
        """selector will not be triggered with `change_state()`"""
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   195
        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
   196
            adapter.change_state('validated')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   197
            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
   198
            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
   199
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   200
            selector = on_transition("validate")
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   201
            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
   202
            selector = on_transition("validate", "forsake")
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   203
            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
   204
            selector = on_transition("forsake")
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   205
            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
   206
8fd6921f3e7c [selectors] modify workflow selectors: is_in_state, on_transition
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6908
diff changeset
   207
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
   208
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
   209
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
   210
    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
   211
        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
   212
            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
   213
            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
   214
            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
   215
                             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
   216
            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
   217
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
   218
    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
   219
        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
   220
            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
   221
            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
   222
                                     '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
   223
                                     '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
   224
            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
   225
                             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
   226
            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
   227
9152
b0155bfd4e17 Protect against crash in the `relation_possible` predicate with ambiguous relations.
Florent Cayre <florent.cayre@logilab.fr>
parents: 8866
diff changeset
   228
    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
   229
        # 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
   230
        # (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
   231
        # 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
   232
        # checking case.
b0155bfd4e17 Protect against crash in the `relation_possible` predicate with ambiguous relations.
Florent Cayre <florent.cayre@logilab.fr>
parents: 8866
diff changeset
   233
        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
   234
                                     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
   235
        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
   236
            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
   237
            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
   238
            self.assertEqual(0, score)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   239
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
   240
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2657
diff changeset
   241
class MatchUserGroupsTC(CubicWebTC):
1571
e9ad2724659d tests depends on the bootstrap cube
sylvain.thenault@logilab.fr
parents: 1473
diff changeset
   242
    def test_owners_group(self):
e9ad2724659d tests depends on the bootstrap cube
sylvain.thenault@logilab.fr
parents: 1473
diff changeset
   243
        """tests usage of 'owners' group with match_user_group"""
e9ad2724659d tests depends on the bootstrap cube
sylvain.thenault@logilab.fr
parents: 1473
diff changeset
   244
        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
   245
            __regid__ = 'yo'
1571
e9ad2724659d tests depends on the bootstrap cube
sylvain.thenault@logilab.fr
parents: 1473
diff changeset
   246
            category = 'foo'
e9ad2724659d tests depends on the bootstrap cube
sylvain.thenault@logilab.fr
parents: 1473
diff changeset
   247
            __select__ = match_user_groups('owners')
1640
65b60f177eb1 fix tests
sylvain.thenault@logilab.fr
parents: 1571
diff changeset
   248
        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
   249
        self.vreg.register(SomeAction)
4490
d45cde54d464 backport stable branch and some vreg cleanups:
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4252
diff changeset
   250
        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
   251
        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
   252
        try:
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   253
            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
   254
                self.create_user(req, 'john')
1571
e9ad2724659d tests depends on the bootstrap cube
sylvain.thenault@logilab.fr
parents: 1473
diff changeset
   255
            # 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
   256
            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
   257
            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
   258
                # 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
   259
                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
   260
                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
   261
                # 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
   262
                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
   263
                req.cnx.commit()
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   264
            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
   265
                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
   266
                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
   267
            # 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
   268
            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
   269
                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
   270
                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
   271
        finally:
3418
7b49fa7e942d [api] use _cw, cw_row, cw_col, cw_rset etc.
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 2773
diff changeset
   272
            del self.vreg[SomeAction.__registry__][SomeAction.__regid__]
1571
e9ad2724659d tests depends on the bootstrap cube
sylvain.thenault@logilab.fr
parents: 1473
diff changeset
   273
6348
f5bd501628b0 [selectors] multi_lines_rset selector supports now optional operator for richer comparaisons
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6340
diff changeset
   274
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   275
class MultiLinesRsetTC(CubicWebTC):
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   276
    def setup_database(self):
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   277
        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
   278
            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
   279
            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
   280
            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
   281
f5bd501628b0 [selectors] multi_lines_rset selector supports now optional operator for richer comparaisons
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6340
diff changeset
   282
    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
   283
        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
   284
            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
   285
            expected = len(rset)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   286
            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
   287
            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
   288
            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
   289
            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
   290
            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
   291
            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
   292
            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
   293
            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
   294
            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
   295
f5bd501628b0 [selectors] multi_lines_rset selector supports now optional operator for richer comparaisons
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6340
diff changeset
   296
    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
   297
        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
   298
            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
   299
            expected = len(rset)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   300
            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
   301
            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
   302
            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
   303
            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
   304
            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
   305
            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
   306
f5bd501628b0 [selectors] multi_lines_rset selector supports now optional operator for richer comparaisons
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6340
diff changeset
   307
    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
   308
        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
   309
            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
   310
            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
   311
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   312
            # Format     'expected', 'operator', 'assert'
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   313
            testdata = (( expected,         eq,        1),
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   314
                        ( expected+1,       eq,        0),
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   315
                        ( expected-1,       eq,        0),
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   316
                        ( expected,         le,        1),
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   317
                        ( expected+1,       le,        1),
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   318
                        ( expected-1,       le,        0),
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   319
                        ( expected-1,       gt,        1),
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   320
                        ( expected,         gt,        0),
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   321
                        ( expected+1,       gt,        0),
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   322
                        ( expected+1,       lt,        1),
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   323
                        ( expected,         lt,        0),
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   324
                        ( 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
   325
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   326
            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
   327
                selector = multi_lines_rset(expected, operator)
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   328
                yield self.assertEqual, selector(None, req, rset=rset), assertion
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   329
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   330
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   331
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
   332
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
   333
    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
   334
        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
   335
        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
   336
        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
   337
        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
   338
        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
   339
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
   340
    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
   341
        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
   342
        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
   343
        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
   344
        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
   345
        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
   346
6348
f5bd501628b0 [selectors] multi_lines_rset selector supports now optional operator for richer comparaisons
Julien Jehannet <julien.jehannet@logilab.fr>
parents: 6340
diff changeset
   347
9653
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   348
class ScoreEntityTC(CubicWebTC):
6869
900cb9b1b687 [tests] new unit tests about score_entity selector (inscore machinery)
Julien Jehannet <julien@smaf.org>
parents: 6348
diff changeset
   349
900cb9b1b687 [tests] new unit tests about score_entity selector (inscore machinery)
Julien Jehannet <julien@smaf.org>
parents: 6348
diff changeset
   350
    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
   351
        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
   352
            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
   353
            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
   354
            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
   355
            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
   356
            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
   357
            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
   358
            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
   359
            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
   360
            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
   361
            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
   362
            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
   363
            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
   364
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
   365
    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
   366
        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
   367
            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
   368
            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
   369
            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
   370
            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
   371
            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
   372
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
   373
    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
   374
        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
   375
            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
   376
            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
   377
            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
   378
            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
   379
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
   380
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
   381
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
   382
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
   383
    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
   384
        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
   385
            __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
   386
            __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
   387
        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
   388
            __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
   389
            __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
   390
        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
   391
            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
   392
                selector = adaptable('IWhatever')
ac723e09704f [test] update unittest_predicates to 3.19 api
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9582
diff changeset
   393
                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
   394
                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
   395
10476
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   396
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   397
class MatchFormParamsTC(CubicWebTC):
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   398
    """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
   399
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   400
    def test_keyonly_match(self):
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   401
        """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
   402
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   403
        ``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
   404
        """
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   405
        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
   406
        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
   407
        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
   408
        # no parameter => KO,KO
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   409
        with web_request() 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_selector(None, req), 0)
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   411
            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
   412
        # 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
   413
        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
   414
            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
   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
        # 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
   417
        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
   418
            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
   419
            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
   420
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   421
    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
   422
        """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
   423
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   424
        ``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
   425
        must be ``value1``.
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   426
        """
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   427
        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
   428
        # 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
   429
        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
   430
        # no parameter => should fail
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   431
        with web_request() as req:
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   432
            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
   433
        # 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
   434
        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
   435
            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
   436
        # 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
   437
        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
   438
            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
   439
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   440
    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
   441
        """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
   442
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   443
        ``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
   444
        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
   445
        """
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   446
        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
   447
        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
   448
        # missing one expected parameter => KO
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   449
        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
   450
            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
   451
        # 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
   452
        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
   453
            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
   454
        # 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
   455
        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
   456
            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
   457
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   458
    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
   459
        """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
   460
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   461
        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
   462
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   463
        ``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
   464
        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
   465
        """
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   466
        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
   467
        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
   468
        # 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
   469
        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
   470
            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
   471
        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
   472
            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
   473
        # 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
   474
        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
   475
            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
   476
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   477
    def test_invalid_calls(self):
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   478
        """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
   479
        # 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
   480
        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
   481
            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
   482
        self.assertEqual(str(cm.exception),
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   483
                         "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
   484
                         "positional and named arguments")
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   485
        # 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
   486
        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
   487
            match_form_params({'x': 1})
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   488
        self.assertEqual(str(cm.exception),
62251bfdfd79 [predicates] ExpectedValuePredicate now accepts a dict parameter
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 9668
diff changeset
   489
                         "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
   490
10827
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   491
class PaginatedTC(CubicWebTC):
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   492
    """tests for paginated_rset predicate"""
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   493
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   494
    def setup_database(self):
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   495
        with self.admin_access.repo_cnx() as cnx:
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   496
            for i in xrange(30):
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   497
                cnx.execute('INSERT CWGroup G: G name "group{}"'.format(i))
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   498
            cnx.commit()
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   499
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   500
    def test_paginated_rset(self):
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   501
        default_nb_pages = 1
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   502
        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
   503
        with web_request() as req:
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   504
            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
   505
        self.assertEqual(len(rset), 34)
768d332de17b [test] test page_size problem (related to #8123231)
Arthur Lutz <arthur.lutz@logilab.fr>
parents: 10704
diff changeset
   506
        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
   507
            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
   508
        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
   509
            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
   510
        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
   511
            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
   512
        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
   513
            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
   514
        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
   515
            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
   516
        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
   517
            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
   518
630
66ff0b2f7d03 simple test implementation for binary operators on selectors
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   519
if __name__ == '__main__':
66ff0b2f7d03 simple test implementation for binary operators on selectors
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   520
    unittest_main()
66ff0b2f7d03 simple test implementation for binary operators on selectors
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   521