cubicweb/web/test/unittest_views_basecontrollers.py
author Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
Thu, 03 Nov 2016 15:00:01 +0100
changeset 11794 d8830e2bd2e0
parent 11725 904ee9cd0cf9
child 11897 2ceb0bfa4b3f
permissions -rw-r--r--
[req,web] Make it possible to handle page language from URL prefix Adding a short language prefix to URL (like "/en" or "/fr") changes the language the pages are displayed in. This prefix is kept during navigation. This way it is not necessary to do language negotiation, nor to use user preferences to determine which language to apply. This behavior is controlled through a new configuration option "language-mode", which replaces "language-negociation" option and which values may be "http-negotiation", "url-prefix" or "" (to disable language setting and force using "ui.language" property). Migration from previous option is not handled because I could not manage to have it working (users will get prompted with the configuration file diff anyways). Add some tests checking various scenarios. Closes #15743487
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
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: 5389
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: 5389
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: 5389
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: 5389
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: 5389
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: 5389
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: 5389
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: 5389
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: 5389
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: 5389
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: 5389
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: 5389
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: 5389
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: 5389
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: 5389
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
5940
0e3ae19b181a [uilib] refactor json_dumps code organization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
    18
"""cubicweb.web.views.basecontrollers unit tests"""
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    19
11241
a2091fa8cb2c [web/httpcache] fix Last-Modified generation
Julien Cristau <julien.cristau@logilab.fr>
parents: 11200
diff changeset
    20
import time
a2091fa8cb2c [web/httpcache] fix Last-Modified generation
Julien Cristau <julien.cristau@logilab.fr>
parents: 11200
diff changeset
    21
10728
48c6de7321d8 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
    22
from six import text_type
10603
65ad6980976e [py3k] import URL mangling functions using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10587
diff changeset
    23
from six.moves.urllib.parse import urlsplit, urlunsplit, urljoin, parse_qs
10016
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
    24
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
    25
import lxml
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
    26
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    27
from logilab.common.testlib import unittest_main
8128
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
    28
from logilab.common.decorators import monkeypatch
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    29
11268
f6938ae0dea8 [web] Have the LoginController return 403 on failed auth (closes #11569950)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 11241
diff changeset
    30
from cubicweb import Binary, NoSelectableObject, ValidationError, AuthenticationError
10075
136b5f995f8e Provide sufficient context to check 'delete' permission in AjaxEditRelationCtxComponent
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 10016
diff changeset
    31
from cubicweb.schema import RRQLExpression
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2661
diff changeset
    32
from cubicweb.devtools.testlib import CubicWebTC
10968
9c6c3e68422e [web/views] Controllers should always return bytes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10932
diff changeset
    33
from cubicweb.devtools.webtest import CubicWebTestTC
11268
f6938ae0dea8 [web] Have the LoginController return 403 on failed auth (closes #11569950)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 11241
diff changeset
    34
from cubicweb.devtools.httptest import CubicWebServerTC
5940
0e3ae19b181a [uilib] refactor json_dumps code organization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
    35
from cubicweb.utils import json_dumps
4023
eae23c40627a drop common subpackage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3777
diff changeset
    36
from cubicweb.uilib import rql_for_eid
11241
a2091fa8cb2c [web/httpcache] fix Last-Modified generation
Julien Cristau <julien.cristau@logilab.fr>
parents: 11200
diff changeset
    37
from cubicweb.web import Redirect, RemoteCallFailed, http_headers
8812
52af67a2f0a5 [session/transaction] move most undo support into transaction
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8803
diff changeset
    38
import cubicweb.server.session
11200
8ddfed7a5981 [session] fix super call in Connection.__init__
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 11057
diff changeset
    39
from cubicweb.server.session import Connection
4390
0285c1fa1459 test fixes
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4389
diff changeset
    40
from cubicweb.web.views.autoform import get_pending_inserts, get_pending_deletes
8128
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
    41
from cubicweb.web.views.basecontrollers import JSonController, xhtmlize, jsonize
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
    42
from cubicweb.web.views.ajaxcontroller import ajaxfunc, AjaxFunction
8267
486386d9f836 [web] Exposes the undo feature to user through a undo-history view (closes #893940)
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 8128
diff changeset
    43
import cubicweb.transaction as tx
9184
b982e88e4836 [repo] normalize ValidationError on edited entity (closes #2509729)
David Douard <david.douard@logilab.fr>
parents: 9179
diff changeset
    44
from cubicweb.server.hook import Hook, Operation
b982e88e4836 [repo] normalize ValidationError on edited entity (closes #2509729)
David Douard <david.douard@logilab.fr>
parents: 9179
diff changeset
    45
from cubicweb.predicates import is_instance
8128
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
    46
10968
9c6c3e68422e [web/views] Controllers should always return bytes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10932
diff changeset
    47
9c6c3e68422e [web/views] Controllers should always return bytes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10932
diff changeset
    48
class ViewControllerTC(CubicWebTestTC):
9c6c3e68422e [web/views] Controllers should always return bytes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10932
diff changeset
    49
    def test_view_ctrl_with_valid_cache_headers(self):
11241
a2091fa8cb2c [web/httpcache] fix Last-Modified generation
Julien Cristau <julien.cristau@logilab.fr>
parents: 11200
diff changeset
    50
        now = time.time()
10968
9c6c3e68422e [web/views] Controllers should always return bytes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10932
diff changeset
    51
        resp = self.webapp.get('/manage')
9c6c3e68422e [web/views] Controllers should always return bytes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10932
diff changeset
    52
        self.assertEqual(resp.etag, 'manage/guests')
9c6c3e68422e [web/views] Controllers should always return bytes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10932
diff changeset
    53
        self.assertEqual(resp.status_code, 200)
11241
a2091fa8cb2c [web/httpcache] fix Last-Modified generation
Julien Cristau <julien.cristau@logilab.fr>
parents: 11200
diff changeset
    54
        self.assertGreaterEqual(http_headers.parseDateTime(resp.headers['Last-Modified']), int(now))
10968
9c6c3e68422e [web/views] Controllers should always return bytes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10932
diff changeset
    55
        cache_headers = {'if-modified-since': resp.headers['Last-Modified'],
9c6c3e68422e [web/views] Controllers should always return bytes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10932
diff changeset
    56
                         'if-none-match': resp.etag}
9c6c3e68422e [web/views] Controllers should always return bytes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10932
diff changeset
    57
        resp = self.webapp.get('/manage', headers=cache_headers)
9c6c3e68422e [web/views] Controllers should always return bytes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10932
diff changeset
    58
        self.assertEqual(resp.status_code, 304)
9c6c3e68422e [web/views] Controllers should always return bytes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10932
diff changeset
    59
        self.assertEqual(len(resp.body), 0)
9c6c3e68422e [web/views] Controllers should always return bytes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10932
diff changeset
    60
9c6c3e68422e [web/views] Controllers should always return bytes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10932
diff changeset
    61
4292
3fc808b0490b test update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4266
diff changeset
    62
def req_form(user):
3fc808b0490b test update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4266
diff changeset
    63
    return {'eid': [str(user.eid)],
7584
e1881933f366 [form, controller] closes #1787233: form should provide a method to process posted content
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7442
diff changeset
    64
            '_cw_entity_fields:%s' % user.eid: '_cw_generic_field',
4292
3fc808b0490b test update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4266
diff changeset
    65
            '__type:%s' % user.eid: user.__regid__
3fc808b0490b test update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4266
diff changeset
    66
            }
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    67
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    68
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2661
diff changeset
    69
class EditControllerTC(CubicWebTC):
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    70
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    71
    def setUp(self):
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2661
diff changeset
    72
        CubicWebTC.setUp(self)
9674
96549de9dd70 [test] use assertIn where appropriate
Julien Cristau <julien.cristau@logilab.fr>
parents: 9478
diff changeset
    73
        self.assertIn('users', self.schema.eschema('CWGroup').get_groups('read'))
1426
379261551578 remove trailing spaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    74
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    75
    def tearDown(self):
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2661
diff changeset
    76
        CubicWebTC.tearDown(self)
9674
96549de9dd70 [test] use assertIn where appropriate
Julien Cristau <julien.cristau@logilab.fr>
parents: 9478
diff changeset
    77
        self.assertIn('users', self.schema.eschema('CWGroup').get_groups('read'))
1426
379261551578 remove trailing spaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    78
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    79
    def test_noparam_edit(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    80
        """check behaviour of this controller without any form parameter
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    81
        """
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    82
        with self.admin_access.web_request() as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    83
            with self.assertRaises(ValidationError) as cm:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    84
                self.ctrl_publish(req)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    85
            self.assertEqual(cm.exception.errors, {None: u'no selected entities'})
1426
379261551578 remove trailing spaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    86
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    87
    def test_validation_unique(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
    88
        """test creation of two linked entities
1426
379261551578 remove trailing spaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
    89
        """
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    90
        with self.admin_access.web_request() as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    91
            req.form = {'eid': 'X', '__type:X': 'CWUser',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    92
                        '_cw_entity_fields:X': 'login-subject,upassword-subject',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    93
                        'login-subject:X': u'admin',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    94
                        'upassword-subject:X': u'toto',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    95
                        'upassword-subject-confirm:X': u'toto',
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2661
diff changeset
    96
                    }
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    97
            with self.assertRaises(ValidationError) as cm:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
    98
                self.ctrl_publish(req)
11366
80dec361a5d0 [hooks/integrity] kill CheckUniqueHook
Julien Cristau <julien.cristau@logilab.fr>
parents: 11268
diff changeset
    99
            cm.exception.translate(text_type)
80dec361a5d0 [hooks/integrity] kill CheckUniqueHook
Julien Cristau <julien.cristau@logilab.fr>
parents: 11268
diff changeset
   100
            expected = {
80dec361a5d0 [hooks/integrity] kill CheckUniqueHook
Julien Cristau <julien.cristau@logilab.fr>
parents: 11268
diff changeset
   101
                '': u'some relations violate a unicity constraint',
80dec361a5d0 [hooks/integrity] kill CheckUniqueHook
Julien Cristau <julien.cristau@logilab.fr>
parents: 11268
diff changeset
   102
                'login': u'login is part of violated unicity constraint',
80dec361a5d0 [hooks/integrity] kill CheckUniqueHook
Julien Cristau <julien.cristau@logilab.fr>
parents: 11268
diff changeset
   103
            }
80dec361a5d0 [hooks/integrity] kill CheckUniqueHook
Julien Cristau <julien.cristau@logilab.fr>
parents: 11268
diff changeset
   104
            self.assertEqual(cm.exception.errors, expected)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   105
10016
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   106
    def test_simultaneous_edition_only_one_commit(self):
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   107
        """ Allow two simultaneous edit view of the same entity as long as only one commits
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   108
        """
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   109
        with self.admin_access.web_request() as req:
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   110
            e = req.create_entity('BlogEntry', title=u'cubicweb.org', content=u"hop")
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   111
            expected_path = e.rest_path()
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   112
            req.cnx.commit()
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   113
            form = self.vreg['views'].select('edition', req, rset=e.as_rset(), row=0)
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   114
            html_form = lxml.html.fromstring(form.render(w=None, action='edit')).forms[0]
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   115
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   116
        with self.admin_access.web_request() as req2:
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   117
            form2 = self.vreg['views'].select('edition', req, rset=e.as_rset(), row=0)
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   118
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   119
        with self.admin_access.web_request(**dict(html_form.form_values())) as req:
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   120
            path, args = self.expect_redirect_handle_request(req, path='edit')
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   121
            self.assertEqual(path, expected_path)
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   122
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   123
    def test_simultaneous_edition_refuse_second_commit(self):
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   124
        """ Disallow committing changes to an entity edited in between """
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   125
        with self.admin_access.web_request() as req:
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   126
            e = req.create_entity('BlogEntry', title=u'cubicweb.org', content=u"hop")
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   127
            eid = e.eid
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   128
            req.cnx.commit()
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   129
            form = self.vreg['views'].select('edition', req, rset=e.as_rset(), row=0)
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   130
            html_form = lxml.html.fromstring(form.render(w=None, action='edit')).forms[0]
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   131
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   132
        with self.admin_access.web_request() as req2:
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   133
            e = req2.entity_from_eid(eid)
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   134
            e.cw_set(content = u"hip")
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   135
            req2.cnx.commit()
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   136
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   137
        form_field_name = "content-subject:%d" % eid
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   138
        form_values = dict(html_form.form_values())
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   139
        assert form_field_name in form_values
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   140
        form_values[form_field_name] = u'yep'
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   141
        with self.admin_access.web_request(**form_values) as req:
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   142
            with self.assertRaises(ValidationError) as cm:
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   143
                self.ctrl_publish(req)
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   144
            reported_eid, dict_info = cm.exception.args
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   145
            self.assertEqual(reported_eid, eid)
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   146
            self.assertIn(None, dict_info)
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   147
            self.assertIn("has changed since you started to edit it.", dict_info[None])
984505da8b89 [forms] closes #2437859 - Detect and prevent concurrent edition of the same entity.
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 9846
diff changeset
   148
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   149
    def test_user_editing_itself(self):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   150
        """checking that a manager user can edit itself
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   151
        """
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   152
        with self.admin_access.web_request() as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   153
            user = req.user
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   154
            groupeids = [eid for eid, in req.execute('CWGroup G WHERE G name '
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   155
                                                     'in ("managers", "users")')]
10728
48c6de7321d8 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   156
            groups = [text_type(eid) for eid in groupeids]
48c6de7321d8 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   157
            eid = text_type(user.eid)
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   158
            req.form = {
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   159
                'eid': eid, '__type:'+eid: 'CWUser',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   160
                '_cw_entity_fields:'+eid: 'login-subject,firstname-subject,surname-subject,in_group-subject',
10728
48c6de7321d8 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   161
                'login-subject:'+eid:     text_type(user.login),
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   162
                'surname-subject:'+eid: u'Th\xe9nault',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   163
                'firstname-subject:'+eid:   u'Sylvain',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   164
                'in_group-subject:'+eid:  groups,
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   165
                }
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   166
            self.expect_redirect_handle_request(req, 'edit')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   167
            e = req.execute('Any X WHERE X eid %(x)s',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   168
                            {'x': user.eid}).get_entity(0, 0)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   169
            self.assertEqual(e.firstname, u'Sylvain')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   170
            self.assertEqual(e.surname, u'Th\xe9nault')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   171
            self.assertEqual(e.login, user.login)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   172
            self.assertEqual([g.eid for g in e.in_group], groupeids)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   173
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   174
    def test_user_can_change_its_password(self):
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   175
        with self.admin_access.repo_cnx() as cnx:
10253
8eb9a3e9531c [web/test] use unicode instead of str for user logins
Julien Cristau <julien.cristau@logilab.fr>
parents: 10083
diff changeset
   176
            self.create_user(cnx, u'user')
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   177
            cnx.commit()
10253
8eb9a3e9531c [web/test] use unicode instead of str for user logins
Julien Cristau <julien.cristau@logilab.fr>
parents: 10083
diff changeset
   178
        with self.new_access(u'user').web_request() as req:
10728
48c6de7321d8 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   179
            eid = text_type(req.user.eid)
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   180
            req.form = {
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   181
                'eid': eid, '__maineid' : eid,
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   182
                '__type:'+eid: 'CWUser',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   183
                '_cw_entity_fields:'+eid: 'upassword-subject',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   184
                'upassword-subject:'+eid: 'tournicoton',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   185
                'upassword-subject-confirm:'+eid: 'tournicoton',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   186
                }
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   187
            path, params = self.expect_redirect_handle_request(req, 'edit')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   188
            req.cnx.commit() # commit to check we don't get late validation error for instance
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   189
            self.assertEqual(path, 'cwuser/user')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   190
            self.assertNotIn('vid', params)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   191
4172
4d4cef034eec all web tests OK
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 4083
diff changeset
   192
    def test_user_editing_itself_no_relation(self):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   193
        """checking we can edit an entity without specifying some required
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   194
        relations (meaning no changes)
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   195
        """
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   196
        with self.admin_access.web_request() as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   197
            user = req.user
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   198
            groupeids = [g.eid for g in user.in_group]
10728
48c6de7321d8 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   199
            eid = text_type(user.eid)
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   200
            req.form = {
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   201
                'eid':       eid,
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   202
                '__type:'+eid:    'CWUser',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   203
                '_cw_entity_fields:'+eid: 'login-subject,firstname-subject,surname-subject',
10728
48c6de7321d8 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   204
                'login-subject:'+eid:     text_type(user.login),
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   205
                'firstname-subject:'+eid: u'Th\xe9nault',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   206
                'surname-subject:'+eid:   u'Sylvain',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   207
                }
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   208
            self.expect_redirect_handle_request(req, 'edit')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   209
            e = req.execute('Any X WHERE X eid %(x)s',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   210
                            {'x': user.eid}).get_entity(0, 0)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   211
            self.assertEqual(e.login, user.login)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   212
            self.assertEqual(e.firstname, u'Th\xe9nault')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   213
            self.assertEqual(e.surname, u'Sylvain')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   214
            self.assertEqual([g.eid for g in e.in_group], groupeids)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   215
            self.assertEqual(e.cw_adapt_to('IWorkflowable').state, 'activated')
1426
379261551578 remove trailing spaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   216
379261551578 remove trailing spaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   217
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   218
    def test_create_multiple_linked(self):
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   219
        with self.admin_access.web_request() as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   220
            gueid = req.execute('CWGroup G WHERE G name "users"')[0][0]
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   221
            req.form = {'eid': ['X', 'Y'], '__maineid' : 'X',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   222
                        '__type:X': 'CWUser',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   223
                        '_cw_entity_fields:X': 'login-subject,upassword-subject,surname-subject,in_group-subject',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   224
                        'login-subject:X': u'adim',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   225
                        'upassword-subject:X': u'toto', 'upassword-subject-confirm:X': u'toto',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   226
                        'surname-subject:X': u'Di Mascio',
10728
48c6de7321d8 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   227
                        'in_group-subject:X': text_type(gueid),
1426
379261551578 remove trailing spaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   228
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   229
                        '__type:Y': 'EmailAddress',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   230
                        '_cw_entity_fields:Y': 'address-subject,use_email-object',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   231
                        'address-subject:Y': u'dima@logilab.fr',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   232
                        'use_email-object:Y': 'X',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   233
                        }
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   234
            path, _params = self.expect_redirect_handle_request(req, 'edit')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   235
            # should be redirected on the created person
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   236
            self.assertEqual(path, 'cwuser/adim')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   237
            e = req.execute('Any P WHERE P surname "Di Mascio"').get_entity(0, 0)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   238
            self.assertEqual(e.surname, 'Di Mascio')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   239
            email = e.use_email[0]
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   240
            self.assertEqual(email.address, 'dima@logilab.fr')
1426
379261551578 remove trailing spaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   241
9179
570208f74a84 [editcontrollers] Ensure entities are created in an order satisfying schema constraints. Closes #3031719
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8941
diff changeset
   242
    def test_create_mandatory_inlined(self):
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   243
        with self.admin_access.web_request() as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   244
            req.form = {'eid': ['X', 'Y'], '__maineid' : 'X',
9179
570208f74a84 [editcontrollers] Ensure entities are created in an order satisfying schema constraints. Closes #3031719
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8941
diff changeset
   245
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   246
                        '__type:X': 'Salesterm',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   247
                        '_cw_entity_fields:X': '',
9179
570208f74a84 [editcontrollers] Ensure entities are created in an order satisfying schema constraints. Closes #3031719
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8941
diff changeset
   248
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   249
                        '__type:Y': 'File',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   250
                        '_cw_entity_fields:Y': 'data-subject,described_by_test-object',
10704
73367a56ee41 [py3k] ensure Binary objects are initialized with bytes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10603
diff changeset
   251
                        'data-subject:Y': (u'coucou.txt', Binary(b'coucou')),
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   252
                        'described_by_test-object:Y': 'X',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   253
                        }
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   254
            path, _params = self.expect_redirect_handle_request(req, 'edit')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   255
            self.assertTrue(path.startswith('salesterm/'), path)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   256
            eid = path.split('/')[1]
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   257
            salesterm = req.entity_from_eid(eid)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   258
            # The NOT NULL constraint of mandatory relation implies that the File
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   259
            # must be created before the Salesterm, otherwise Salesterm insertion
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   260
            # will fail.
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   261
            # NOTE: sqlite does have NOT NULL constraint, unlike Postgres so the
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   262
            # insertion does not fail and we have to check dumbly that File is
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   263
            # created before.
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   264
            self.assertGreater(salesterm.eid, salesterm.described_by_test[0].eid)
9179
570208f74a84 [editcontrollers] Ensure entities are created in an order satisfying schema constraints. Closes #3031719
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8941
diff changeset
   265
9196
13461cb8ff40 [editcontrollers] Account for role in the ordering of entities (Complements #3031719)
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 9184
diff changeset
   266
    def test_create_mandatory_inlined2(self):
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   267
        with self.admin_access.web_request() as req:
9213
312062f53981 [inlined form field] fix regression introduced in 3.16.4/570208f74a84. Closes #3064653
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9196
diff changeset
   268
            req.form = {'eid': ['X', 'Y'], '__maineid' : 'X',
312062f53981 [inlined form field] fix regression introduced in 3.16.4/570208f74a84. Closes #3064653
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9196
diff changeset
   269
312062f53981 [inlined form field] fix regression introduced in 3.16.4/570208f74a84. Closes #3064653
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9196
diff changeset
   270
                        '__type:X': 'Salesterm',
312062f53981 [inlined form field] fix regression introduced in 3.16.4/570208f74a84. Closes #3064653
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9196
diff changeset
   271
                        '_cw_entity_fields:X': 'described_by_test-subject',
312062f53981 [inlined form field] fix regression introduced in 3.16.4/570208f74a84. Closes #3064653
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9196
diff changeset
   272
                        'described_by_test-subject:X': 'Y',
312062f53981 [inlined form field] fix regression introduced in 3.16.4/570208f74a84. Closes #3064653
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9196
diff changeset
   273
312062f53981 [inlined form field] fix regression introduced in 3.16.4/570208f74a84. Closes #3064653
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9196
diff changeset
   274
                        '__type:Y': 'File',
312062f53981 [inlined form field] fix regression introduced in 3.16.4/570208f74a84. Closes #3064653
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9196
diff changeset
   275
                        '_cw_entity_fields:Y': 'data-subject',
10704
73367a56ee41 [py3k] ensure Binary objects are initialized with bytes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10603
diff changeset
   276
                        'data-subject:Y': (u'coucou.txt', Binary(b'coucou')),
9213
312062f53981 [inlined form field] fix regression introduced in 3.16.4/570208f74a84. Closes #3064653
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9196
diff changeset
   277
                        }
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   278
            path, _params = self.expect_redirect_handle_request(req, 'edit')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   279
            self.assertTrue(path.startswith('salesterm/'), path)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   280
            eid = path.split('/')[1]
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   281
            salesterm = req.entity_from_eid(eid)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   282
            # The NOT NULL constraint of mandatory relation implies that the File
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   283
            # must be created before the Salesterm, otherwise Salesterm insertion
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   284
            # will fail.
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   285
            # NOTE: sqlite does have NOT NULL constraint, unlike Postgres so the
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   286
            # insertion does not fail and we have to check dumbly that File is
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   287
            # created before.
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   288
            self.assertGreater(salesterm.eid, salesterm.described_by_test[0].eid)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   289
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   290
    def test_edit_mandatory_inlined3_object(self):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   291
        # non regression test for #3120495. Without the fix, leads to
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   292
        # "unhashable type: 'list'" error
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   293
        with self.admin_access.web_request() as req:
10728
48c6de7321d8 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   294
            cwrelation = text_type(req.execute('CWEType X WHERE X name "CWSource"')[0][0])
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   295
            req.form = {'eid': [cwrelation], '__maineid' : cwrelation,
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   296
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   297
                        '__type:'+cwrelation: 'CWEType',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   298
                        '_cw_entity_fields:'+cwrelation: 'to_entity-object',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   299
                        'to_entity-object:'+cwrelation: [9999, 9998],
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   300
                        }
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   301
            with req.cnx.deny_all_hooks_but():
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   302
                path, _params = self.expect_redirect_handle_request(req, 'edit')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   303
            self.assertTrue(path.startswith('cwetype/CWSource'), path)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   304
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   305
    def test_edit_multiple_linked(self):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   306
        with self.admin_access.web_request() as req:
10728
48c6de7321d8 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   307
            peid = text_type(self.create_user(req, u'adim').eid)
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   308
            req.form = {'eid': [peid, 'Y'], '__maineid': peid,
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   309
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   310
                        '__type:'+peid: u'CWUser',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   311
                        '_cw_entity_fields:'+peid: u'surname-subject',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   312
                        'surname-subject:'+peid: u'Di Masci',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   313
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   314
                        '__type:Y': u'EmailAddress',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   315
                        '_cw_entity_fields:Y': u'address-subject,use_email-object',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   316
                        'address-subject:Y': u'dima@logilab.fr',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   317
                        'use_email-object:Y': peid,
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   318
                        }
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   319
            path, _params = self.expect_redirect_handle_request(req, 'edit')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   320
            # should be redirected on the created person
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   321
            self.assertEqual(path, 'cwuser/adim')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   322
            e = req.execute('Any P WHERE P surname "Di Masci"').get_entity(0, 0)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   323
            email = e.use_email[0]
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   324
            self.assertEqual(email.address, 'dima@logilab.fr')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   325
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   326
        # with self.admin_access.web_request() as req:
10728
48c6de7321d8 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   327
            emaileid = text_type(email.eid)
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   328
            req.form = {'eid': [peid, emaileid],
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   329
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   330
                        '__type:'+peid: u'CWUser',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   331
                        '_cw_entity_fields:'+peid: u'surname-subject',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   332
                        'surname-subject:'+peid: u'Di Masci',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   333
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   334
                        '__type:'+emaileid: u'EmailAddress',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   335
                        '_cw_entity_fields:'+emaileid: u'address-subject,use_email-object',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   336
                        'address-subject:'+emaileid: u'adim@logilab.fr',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   337
                        'use_email-object:'+emaileid: peid,
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   338
                        }
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   339
            self.expect_redirect_handle_request(req, 'edit')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   340
            email.cw_clear_all_caches()
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   341
            self.assertEqual(email.address, 'adim@logilab.fr')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   342
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   343
    def test_password_confirm(self):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   344
        """test creation of two linked entities
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   345
        """
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   346
        with self.admin_access.web_request() as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   347
            user = req.user
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   348
            req.form = {'eid': 'X',
10728
48c6de7321d8 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   349
                        '__cloned_eid:X': text_type(user.eid), '__type:X': 'CWUser',
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   350
                        '_cw_entity_fields:X': 'login-subject,upassword-subject',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   351
                        'login-subject:X': u'toto',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   352
                        'upassword-subject:X': u'toto',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   353
                        }
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   354
            with self.assertRaises(ValidationError) as cm:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   355
                self.ctrl_publish(req)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   356
            self.assertEqual({'upassword-subject': u'password and confirmation don\'t match'},
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   357
                             cm.exception.errors)
10728
48c6de7321d8 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   358
            req.form = {'__cloned_eid:X': text_type(user.eid),
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   359
                        'eid': 'X', '__type:X': 'CWUser',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   360
                        '_cw_entity_fields:X': 'login-subject,upassword-subject',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   361
                        'login-subject:X': u'toto',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   362
                        'upassword-subject:X': u'toto',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   363
                        'upassword-subject-confirm:X': u'tutu',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   364
                        }
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   365
            with self.assertRaises(ValidationError) as cm:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   366
                self.ctrl_publish(req)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   367
            self.assertEqual({'upassword-subject': u'password and confirmation don\'t match'},
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   368
                             cm.exception.errors)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   369
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   370
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   371
    def test_interval_bound_constraint_success(self):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   372
        with self.admin_access.repo_cnx() as cnx:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   373
            feid = cnx.execute('INSERT File X: X data_name "toto.txt", X data %(data)s',
10704
73367a56ee41 [py3k] ensure Binary objects are initialized with bytes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10603
diff changeset
   374
                               {'data': Binary(b'yo')})[0][0]
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   375
            cnx.commit()
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   376
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   377
        with self.admin_access.web_request(rollbackfirst=True) as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   378
            req.form = {'eid': ['X'],
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   379
                        '__type:X': 'Salesterm',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   380
                        '_cw_entity_fields:X': 'amount-subject,described_by_test-subject',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   381
                        'amount-subject:X': u'-10',
10728
48c6de7321d8 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   382
                        'described_by_test-subject:X': text_type(feid),
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   383
                    }
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   384
            with self.assertRaises(ValidationError) as cm:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   385
                self.ctrl_publish(req)
10728
48c6de7321d8 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   386
            cm.exception.translate(text_type)
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   387
            self.assertEqual({'amount-subject': 'value -10 must be >= 0'},
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   388
                             cm.exception.errors)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   389
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   390
        with self.admin_access.web_request(rollbackfirst=True) as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   391
            req.form = {'eid': ['X'],
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   392
                        '__type:X': 'Salesterm',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   393
                        '_cw_entity_fields:X': 'amount-subject,described_by_test-subject',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   394
                        'amount-subject:X': u'110',
10728
48c6de7321d8 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   395
                        'described_by_test-subject:X': text_type(feid),
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   396
                        }
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   397
            with self.assertRaises(ValidationError) as cm:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   398
                self.ctrl_publish(req)
10728
48c6de7321d8 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   399
            cm.exception.translate(text_type)
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   400
            self.assertEqual(cm.exception.errors, {'amount-subject': 'value 110 must be <= 100'})
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   401
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   402
        with self.admin_access.web_request(rollbackfirst=True) as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   403
            req.form = {'eid': ['X'],
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   404
                        '__type:X': 'Salesterm',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   405
                        '_cw_entity_fields:X': 'amount-subject,described_by_test-subject',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   406
                        'amount-subject:X': u'10',
10728
48c6de7321d8 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   407
                        'described_by_test-subject:X': text_type(feid),
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   408
                        }
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   409
            self.expect_redirect_handle_request(req, 'edit')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   410
            # should be redirected on the created
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   411
            #eid = params['rql'].split()[-1]
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   412
            e = req.execute('Salesterm X').get_entity(0, 0)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   413
            self.assertEqual(e.amount, 10)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   414
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   415
    def test_interval_bound_constraint_validateform(self):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   416
        """Test the FormValidatorController controller on entity with
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   417
        constrained attributes"""
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   418
        with self.admin_access.repo_cnx() as cnx:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   419
            feid = cnx.execute('INSERT File X: X data_name "toto.txt", X data %(data)s',
10704
73367a56ee41 [py3k] ensure Binary objects are initialized with bytes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10603
diff changeset
   420
                               {'data': Binary(b'yo')})[0][0]
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   421
            seid = cnx.create_entity('Salesterm', amount=0, described_by_test=feid).eid
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   422
            cnx.commit()
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   423
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   424
        # ensure a value that violate a constraint is properly detected
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   425
        with self.admin_access.web_request(rollbackfirst=True) as req:
10728
48c6de7321d8 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   426
            req.form = {'eid': [text_type(seid)],
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   427
                        '__type:%s'%seid: 'Salesterm',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   428
                        '_cw_entity_fields:%s'%seid: 'amount-subject',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   429
                        'amount-subject:%s'%seid: u'-10',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   430
                    }
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   431
            self.assertMultiLineEqual('''<script type="text/javascript">
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   432
 window.parent.handleFormValidationResponse('entityForm', null, null, [false, [%s, {"amount-subject": "value -10 must be >= 0"}], null], null);
10751
9ffdfa1d28f5 [web/test] str vs bytes
Julien Cristau <julien.cristau@logilab.fr>
parents: 10749
diff changeset
   433
</script>'''%seid, self.ctrl_publish(req, 'validateform').decode('ascii'))
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   434
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   435
        # ensure a value that comply a constraint is properly processed
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   436
        with self.admin_access.web_request(rollbackfirst=True) as req:
10728
48c6de7321d8 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   437
            req.form = {'eid': [text_type(seid)],
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   438
                        '__type:%s'%seid: 'Salesterm',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   439
                        '_cw_entity_fields:%s'%seid: 'amount-subject',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   440
                        'amount-subject:%s'%seid: u'20',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   441
                    }
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   442
            self.assertMultiLineEqual('''<script type="text/javascript">
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   443
 window.parent.handleFormValidationResponse('entityForm', null, null, [true, "http://testing.fr/cubicweb/view", null], null);
10751
9ffdfa1d28f5 [web/test] str vs bytes
Julien Cristau <julien.cristau@logilab.fr>
parents: 10749
diff changeset
   444
</script>''', self.ctrl_publish(req, 'validateform').decode('ascii'))
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   445
            self.assertEqual(20, req.execute('Any V WHERE X amount V, X eid %(eid)s',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   446
                                             {'eid': seid})[0][0])
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   447
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   448
        with self.admin_access.web_request(rollbackfirst=True) as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   449
            req.form = {'eid': ['X'],
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   450
                        '__type:X': 'Salesterm',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   451
                        '_cw_entity_fields:X': 'amount-subject,described_by_test-subject',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   452
                        'amount-subject:X': u'0',
10728
48c6de7321d8 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   453
                        'described_by_test-subject:X': text_type(feid),
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   454
                    }
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   455
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   456
            # ensure a value that is modified in an operation on a modify
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   457
            # hook works as it should (see
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   458
            # https://www.cubicweb.org/ticket/2509729 )
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   459
            class MyOperation(Operation):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   460
                def precommit_event(self):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   461
                    self.entity.cw_set(amount=-10)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   462
            class ValidationErrorInOpAfterHook(Hook):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   463
                __regid__ = 'valerror-op-after-hook'
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   464
                __select__ = Hook.__select__ & is_instance('Salesterm')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   465
                events = ('after_add_entity',)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   466
                def __call__(self):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   467
                    MyOperation(self._cw, entity=self.entity)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   468
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   469
            with self.temporary_appobjects(ValidationErrorInOpAfterHook):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   470
                self.assertMultiLineEqual('''<script type="text/javascript">
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   471
 window.parent.handleFormValidationResponse('entityForm', null, null, [false, ["X", {"amount-subject": "value -10 must be >= 0"}], null], null);
10751
9ffdfa1d28f5 [web/test] str vs bytes
Julien Cristau <julien.cristau@logilab.fr>
parents: 10749
diff changeset
   472
</script>''', self.ctrl_publish(req, 'validateform').decode('ascii'))
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   473
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   474
            self.assertMultiLineEqual('''<script type="text/javascript">
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   475
 window.parent.handleFormValidationResponse('entityForm', null, null, [true, "http://testing.fr/cubicweb/view", null], null);
10751
9ffdfa1d28f5 [web/test] str vs bytes
Julien Cristau <julien.cristau@logilab.fr>
parents: 10749
diff changeset
   476
</script>''', self.ctrl_publish(req, 'validateform').decode('ascii'))
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   477
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   478
    def test_req_pending_insert(self):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   479
        """make sure req's pending insertions are taken into account"""
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   480
        with self.admin_access.web_request() as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   481
            tmpgroup = req.create_entity('CWGroup', name=u"test")
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   482
            user = req.user
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   483
            req.cnx.commit()
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   484
        with self.admin_access.web_request(**req_form(user)) as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   485
            req.session.data['pending_insert'] = set([(user.eid, 'in_group', tmpgroup.eid)])
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   486
            self.expect_redirect_handle_request(req, 'edit')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   487
            usergroups = [gname for gname, in
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   488
                          req.execute('Any N WHERE G name N, U in_group G, U eid %(u)s',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   489
                                      {'u': user.eid})]
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   490
            self.assertCountEqual(usergroups, ['managers', 'test'])
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   491
            self.assertEqual(get_pending_inserts(req), [])
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   492
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   493
    def test_req_pending_delete(self):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   494
        """make sure req's pending deletions are taken into account"""
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   495
        with self.admin_access.web_request() as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   496
            user = req.user
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   497
            groupeid = req.execute('INSERT CWGroup G: G name "test", U in_group G WHERE U eid %(x)s',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   498
                                    {'x': user.eid})[0][0]
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   499
            usergroups = [gname for gname, in
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   500
                          req.execute('Any N WHERE G name N, U in_group G, U eid %(u)s',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   501
                                      {'u': user.eid})]
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   502
            # just make sure everything was set correctly
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   503
            self.assertCountEqual(usergroups, ['managers', 'test'])
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   504
            req.cnx.commit()
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   505
            # now try to delete the relation
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   506
        with self.admin_access.web_request(**req_form(user)) as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   507
            req.session.data['pending_delete'] = set([(user.eid, 'in_group', groupeid)])
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   508
            self.expect_redirect_handle_request(req, 'edit')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   509
            usergroups = [gname for gname, in
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   510
                          req.execute('Any N WHERE G name N, U in_group G, U eid %(u)s',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   511
                                      {'u': user.eid})]
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   512
            self.assertCountEqual(usergroups, ['managers'])
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   513
            self.assertEqual(get_pending_deletes(req), [])
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   514
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   515
    def test_redirect_apply_button(self):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   516
        with self.admin_access.web_request() as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   517
            redirectrql = rql_for_eid(4012) # whatever
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   518
            req.form = {
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   519
                'eid': 'A', '__maineid' : 'A',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   520
                '__type:A': 'BlogEntry', '_cw_entity_fields:A': 'content-subject,title-subject',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   521
                'content-subject:A': u'"13:03:43"',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   522
                'title-subject:A': u'huuu',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   523
                '__redirectrql': redirectrql,
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   524
                '__redirectvid': 'primary',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   525
                '__redirectparams': 'toto=tutu&tata=titi',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   526
                '__form_id': 'edition',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   527
                '__action_apply': '',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   528
                }
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   529
            path, params = self.expect_redirect_handle_request(req, 'edit')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   530
            self.assertTrue(path.startswith('blogentry/'))
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   531
            eid = path.split('/')[1]
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   532
            self.assertEqual(params['vid'], 'edition')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   533
            self.assertNotEqual(int(eid), 4012)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   534
            self.assertEqual(params['__redirectrql'], redirectrql)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   535
            self.assertEqual(params['__redirectvid'], 'primary')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   536
            self.assertEqual(params['__redirectparams'], 'toto=tutu&tata=titi')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   537
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   538
    def test_redirect_ok_button(self):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   539
        with self.admin_access.web_request() as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   540
            redirectrql = rql_for_eid(4012) # whatever
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   541
            req.form = {
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   542
                'eid': 'A', '__maineid' : 'A',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   543
                '__type:A': 'BlogEntry', '_cw_entity_fields:A': 'content-subject,title-subject',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   544
                'content-subject:A': u'"13:03:43"',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   545
                'title-subject:A': u'huuu',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   546
                '__redirectrql': redirectrql,
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   547
                '__redirectvid': 'primary',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   548
                '__redirectparams': 'toto=tutu&tata=titi',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   549
                '__form_id': 'edition',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   550
                }
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   551
            path, params = self.expect_redirect_handle_request(req, 'edit')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   552
            self.assertEqual(path, 'view')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   553
            self.assertEqual(params['rql'], redirectrql)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   554
            self.assertEqual(params['vid'], 'primary')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   555
            self.assertEqual(params['tata'], 'titi')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   556
            self.assertEqual(params['toto'], 'tutu')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   557
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   558
    def test_redirect_delete_button(self):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   559
        with self.admin_access.web_request() as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   560
            eid = req.create_entity('BlogEntry', title=u'hop', content=u'hop').eid
10728
48c6de7321d8 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   561
            req.form = {'eid': text_type(eid), '__type:%s'%eid: 'BlogEntry',
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   562
                        '__action_delete': ''}
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   563
            path, params = self.expect_redirect_handle_request(req, 'edit')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   564
            self.assertEqual(path, 'blogentry')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   565
            self.assertIn('_cwmsgid', params)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   566
            eid = req.create_entity('EmailAddress', address=u'hop@logilab.fr').eid
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   567
            req.execute('SET X use_email E WHERE E eid %(e)s, X eid %(x)s',
10254
e42c2226c878 [web/test] fix cubicweb 3.19 deprecation warning
Julien Cristau <julien.cristau@logilab.fr>
parents: 10253
diff changeset
   568
                        {'x': req.user.eid, 'e': eid})
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   569
            req.cnx.commit()
10728
48c6de7321d8 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   570
            req.form = {'eid': text_type(eid), '__type:%s'%eid: 'EmailAddress',
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   571
                        '__action_delete': ''}
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   572
            path, params = self.expect_redirect_handle_request(req, 'edit')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   573
            self.assertEqual(path, 'cwuser/admin')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   574
            self.assertIn('_cwmsgid', params)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   575
            eid1 = req.create_entity('BlogEntry', title=u'hop', content=u'hop').eid
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   576
            eid2 = req.create_entity('EmailAddress', address=u'hop@logilab.fr').eid
10728
48c6de7321d8 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   577
            req.form = {'eid': [text_type(eid1), text_type(eid2)],
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   578
                        '__type:%s'%eid1: 'BlogEntry',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   579
                        '__type:%s'%eid2: 'EmailAddress',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   580
                        '__action_delete': ''}
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   581
            path, params = self.expect_redirect_handle_request(req, 'edit')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   582
            self.assertEqual(path, 'view')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   583
            self.assertIn('_cwmsgid', params)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   584
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   585
    def test_simple_copy(self):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   586
        with self.admin_access.web_request() as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   587
            blog = req.create_entity('Blog', title=u'my-blog')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   588
            blogentry = req.create_entity('BlogEntry', title=u'entry1',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   589
                                          content=u'content1', entry_of=blog)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   590
            req.form = {'__maineid' : 'X', 'eid': 'X',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   591
                        '__cloned_eid:X': blogentry.eid, '__type:X': 'BlogEntry',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   592
                        '_cw_entity_fields:X': 'title-subject,content-subject',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   593
                        'title-subject:X': u'entry1-copy',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   594
                        'content-subject:X': u'content1',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   595
                        }
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   596
            self.expect_redirect_handle_request(req, 'edit')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   597
            blogentry2 = req.find('BlogEntry', title=u'entry1-copy').one()
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   598
            self.assertEqual(blogentry2.entry_of[0].eid, blog.eid)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   599
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   600
    def test_skip_copy_for(self):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   601
        with self.admin_access.web_request() as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   602
            blog = req.create_entity('Blog', title=u'my-blog')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   603
            blogentry = req.create_entity('BlogEntry', title=u'entry1',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   604
                                          content=u'content1', entry_of=blog)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   605
            blogentry.__class__.cw_skip_copy_for = [('entry_of', 'subject')]
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   606
            try:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   607
                req.form = {'__maineid' : 'X', 'eid': 'X',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   608
                            '__cloned_eid:X': blogentry.eid, '__type:X': 'BlogEntry',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   609
                            '_cw_entity_fields:X': 'title-subject,content-subject',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   610
                            'title-subject:X': u'entry1-copy',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   611
                            'content-subject:X': u'content1',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   612
                            }
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   613
                self.expect_redirect_handle_request(req, 'edit')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   614
                blogentry2 = req.find('BlogEntry', title=u'entry1-copy').one()
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   615
                # entry_of should not be copied
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   616
                self.assertEqual(len(blogentry2.entry_of), 0)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   617
            finally:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   618
                blogentry.__class__.cw_skip_copy_for = []
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   619
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   620
    def test_nonregr_eetype_etype_editing(self):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   621
        """non-regression test checking that a manager user can edit a CWEType entity
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   622
        """
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   623
        with self.admin_access.web_request() as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   624
            groupeids = sorted(eid
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   625
                               for eid, in req.execute('CWGroup G '
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   626
                                                       'WHERE G name in ("managers", "users")'))
10728
48c6de7321d8 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   627
            groups = [text_type(eid) for eid in groupeids]
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   628
            cwetypeeid = req.execute('CWEType X WHERE X name "CWEType"')[0][0]
10728
48c6de7321d8 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   629
            basegroups = [text_type(eid)
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   630
                          for eid, in req.execute('CWGroup G '
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   631
                                                  'WHERE X read_permission G, X eid %(x)s',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   632
                                                  {'x': cwetypeeid})]
10728
48c6de7321d8 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   633
            cwetypeeid = text_type(cwetypeeid)
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   634
            req.form = {
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   635
                'eid':      cwetypeeid,
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   636
                '__type:'+cwetypeeid:  'CWEType',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   637
                '_cw_entity_fields:'+cwetypeeid: 'name-subject,final-subject,description-subject,read_permission-subject',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   638
                'name-subject:'+cwetypeeid:     u'CWEType',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   639
                'final-subject:'+cwetypeeid:    '',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   640
                'description-subject:'+cwetypeeid:     u'users group',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   641
                'read_permission-subject:'+cwetypeeid:  groups,
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   642
            }
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   643
            try:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   644
                self.expect_redirect_handle_request(req, 'edit')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   645
                e = req.execute('Any X WHERE X eid %(x)s', {'x': cwetypeeid}).get_entity(0, 0)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   646
                self.assertEqual(e.name, 'CWEType')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   647
                self.assertEqual(sorted(g.eid for g in e.read_permission), groupeids)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   648
            finally:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   649
                # restore
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   650
                req.execute('SET X read_permission Y WHERE X name "CWEType", '
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   651
                            'Y eid IN (%s), NOT X read_permission Y' % (','.join(basegroups)))
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   652
                req.cnx.commit()
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   653
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   654
    def test_nonregr_strange_text_input(self):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   655
        """non-regression test checking text input containing "13:03:43"
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   656
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   657
        this seems to be postgres (tsearch?) specific
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   658
        """
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   659
        with self.admin_access.web_request() as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   660
            req.form = {
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   661
                'eid': 'A', '__maineid' : 'A',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   662
                '__type:A': 'BlogEntry', '_cw_entity_fields:A': 'title-subject,content-subject',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   663
                'title-subject:A': u'"13:03:40"',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   664
                'content-subject:A': u'"13:03:43"',}
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   665
            path, _params = self.expect_redirect_handle_request(req, 'edit')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   666
            self.assertTrue(path.startswith('blogentry/'))
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   667
            eid = path.split('/')[1]
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   668
            e = req.execute('Any C, T WHERE C eid %(x)s, C content T', {'x': eid}).get_entity(0, 0)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   669
            self.assertEqual(e.title, '"13:03:40"')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   670
            self.assertEqual(e.content, '"13:03:43"')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   671
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   672
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   673
    def test_nonregr_multiple_empty_email_addr(self):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   674
        with self.admin_access.web_request() as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   675
            gueid = req.execute('CWGroup G WHERE G name "users"')[0][0]
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   676
            req.form = {'eid': ['X', 'Y'],
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   677
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   678
                        '__type:X': 'CWUser',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   679
                        '_cw_entity_fields:X': 'login-subject,upassword-subject,in_group-subject',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   680
                        'login-subject:X': u'adim',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   681
                        'upassword-subject:X': u'toto', 'upassword-subject-confirm:X': u'toto',
10587
72447be71b48 [py3k] backtick to repr
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 10255
diff changeset
   682
                        'in_group-subject:X': repr(gueid),
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   683
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   684
                        '__type:Y': 'EmailAddress',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   685
                        '_cw_entity_fields:Y': 'address-subject,alias-subject,use_email-object',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   686
                        'address-subject:Y': u'',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   687
                        'alias-subject:Y': u'',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   688
                        'use_email-object:Y': 'X',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   689
                        }
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   690
            with self.assertRaises(ValidationError) as cm:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   691
                self.ctrl_publish(req)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   692
            self.assertEqual(cm.exception.errors, {'address-subject': u'required field'})
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   693
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   694
    def test_nonregr_copy(self):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   695
        with self.admin_access.web_request() as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   696
            user = req.user
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   697
            req.form = {'__maineid' : 'X', 'eid': 'X',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   698
                        '__cloned_eid:X': user.eid, '__type:X': 'CWUser',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   699
                        '_cw_entity_fields:X': 'login-subject,upassword-subject',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   700
                        'login-subject:X': u'toto',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   701
                        'upassword-subject:X': u'toto', 'upassword-subject-confirm:X': u'toto',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   702
                        }
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   703
            path, _params = self.expect_redirect_handle_request(req, 'edit')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   704
            self.assertEqual(path, 'cwuser/toto')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   705
            e = req.execute('Any X WHERE X is CWUser, X login "toto"').get_entity(0, 0)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   706
            self.assertEqual(e.login, 'toto')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   707
            self.assertEqual(e.in_group[0].name, 'managers')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   708
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   709
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   710
    def test_nonregr_rollback_on_validation_error(self):
11725
904ee9cd0cf9 [web/application] remove `path` argument from CubicwebPublisher methods
Laura Médioni <laura.medioni@logilab.fr>
parents: 11366
diff changeset
   711
        with self.admin_access.web_request(url='edit') as req:
10253
8eb9a3e9531c [web/test] use unicode instead of str for user logins
Julien Cristau <julien.cristau@logilab.fr>
parents: 10083
diff changeset
   712
            p = self.create_user(req, u"doe")
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   713
            # do not try to skip 'primary_email' for this test
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   714
            old_skips = p.__class__.skip_copy_for
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   715
            p.__class__.skip_copy_for = ()
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   716
            try:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   717
                e = req.create_entity('EmailAddress', address=u'doe@doe.com')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   718
                req.execute('SET P use_email E, P primary_email E WHERE P eid %(p)s, E eid %(e)s',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   719
                            {'p' : p.eid, 'e' : e.eid})
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   720
                req.form = {'eid': 'X',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   721
                            '__cloned_eid:X': p.eid, '__type:X': 'CWUser',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   722
                            '_cw_entity_fields:X': 'login-subject,surname-subject',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   723
                            'login-subject': u'dodo',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   724
                            'surname-subject:X': u'Boom',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   725
                            '__errorurl' : "whatever but required",
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   726
                            }
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   727
                # try to emulate what really happens in the web application
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   728
                # 1/ validate form => EditController.publish raises a ValidationError
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   729
                #    which fires a Redirect
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   730
                # 2/ When re-publishing the copy form, the publisher implicitly commits
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   731
                try:
11725
904ee9cd0cf9 [web/application] remove `path` argument from CubicwebPublisher methods
Laura Médioni <laura.medioni@logilab.fr>
parents: 11366
diff changeset
   732
                    self.app_handle_request(req)
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   733
                except Redirect:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   734
                    req.form['rql'] = 'Any X WHERE X eid %s' % p.eid
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   735
                    req.form['vid'] = 'copy'
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   736
                    self.app_handle_request(req, 'view')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   737
                rset = req.execute('CWUser P WHERE P surname "Boom"')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   738
                self.assertEqual(len(rset), 0)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   739
            finally:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   740
                p.__class__.skip_copy_for = old_skips
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   741
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   742
    def test_regr_inlined_forms(self):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   743
        with self.admin_access.web_request() as req:
9213
312062f53981 [inlined form field] fix regression introduced in 3.16.4/570208f74a84. Closes #3064653
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9196
diff changeset
   744
            self.schema['described_by_test'].inlined = False
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   745
            try:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   746
                req.data['eidmap'] = {}
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   747
                req.data['pending_others'] = set()
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   748
                req.data['pending_inlined'] = {}
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   749
                req.form = {'eid': ['X', 'Y'], '__maineid' : 'X',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   750
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   751
                            '__type:X': 'Salesterm',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   752
                            '_cw_entity_fields:X': 'described_by_test-subject',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   753
                            'described_by_test-subject:X': 'Y',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   754
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   755
                            '__type:Y': 'File',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   756
                            '_cw_entity_fields:Y': 'data-subject',
10704
73367a56ee41 [py3k] ensure Binary objects are initialized with bytes
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10603
diff changeset
   757
                            'data-subject:Y': (u'coucou.txt', Binary(b'coucou')),
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   758
                            }
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   759
                values_by_eid = dict((eid, req.extract_entity_params(eid, minparams=2))
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   760
                                     for eid in req.edited_eids())
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   761
                editctrl = self.vreg['controllers'].select('edit', req)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   762
                # don't call publish to enforce select order
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   763
                editctrl.errors = []
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   764
                editctrl._to_create = {}
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   765
                editctrl.edit_entity(values_by_eid['X']) # #3064653 raise ValidationError
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   766
                editctrl.edit_entity(values_by_eid['Y'])
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   767
            finally:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   768
                self.schema['described_by_test'].inlined = False
9213
312062f53981 [inlined form field] fix regression introduced in 3.16.4/570208f74a84. Closes #3064653
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 9196
diff changeset
   769
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   770
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2661
diff changeset
   771
class ReportBugControllerTC(CubicWebTC):
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   772
7244
a918f76441ce fix tests broken by fcb8932082a5 (continued)
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 6875
diff changeset
   773
    def test_usable_by_guest(self):
10253
8eb9a3e9531c [web/test] use unicode instead of str for user logins
Julien Cristau <julien.cristau@logilab.fr>
parents: 10083
diff changeset
   774
        with self.new_access(u'anon').web_request() as req:
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   775
            self.assertRaises(NoSelectableObject,
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   776
                              self.vreg['controllers'].select, 'reportbug', req)
10253
8eb9a3e9531c [web/test] use unicode instead of str for user logins
Julien Cristau <julien.cristau@logilab.fr>
parents: 10083
diff changeset
   777
        with self.new_access(u'anon').web_request(description='hop') as req:
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   778
            self.vreg['controllers'].select('reportbug', req)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   779
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   780
8128
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   781
class AjaxControllerTC(CubicWebTC):
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   782
    tested_controller = 'ajax'
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   783
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   784
    def ctrl(self, req=None):
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   785
        req = req or self.request(url='http://whatever.fr/')
8128
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   786
        return self.vreg['controllers'].select(self.tested_controller, req)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   787
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   788
    def setup_database(self):
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   789
        with self.admin_access.repo_cnx() as cnx:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   790
            self.pytag = cnx.create_entity('Tag', name=u'python')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   791
            self.cubicwebtag = cnx.create_entity('Tag', name=u'cubicweb')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   792
            self.john = self.create_user(cnx, u'John')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   793
            cnx.commit()
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   794
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   795
    ## tests ##################################################################
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   796
    def test_simple_exec(self):
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   797
        with self.admin_access.web_request(rql='CWUser P WHERE P login "John"',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   798
                                           pageid='123', fname='view') as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   799
            ctrl = self.ctrl(req)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   800
            rset = self.john.as_rset()
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   801
            rset.req = req
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   802
            source = ctrl.publish()
10749
2703116e4b21 [web/test] str → bytes
Julien Cristau <julien.cristau@logilab.fr>
parents: 10728
diff changeset
   803
            self.assertTrue(source.startswith(b'<div>'))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   804
1654
57b9fd2462b8 test updates
sylvain.thenault@logilab.fr
parents: 1426
diff changeset
   805
#     def test_json_exec(self):
57b9fd2462b8 test updates
sylvain.thenault@logilab.fr
parents: 1426
diff changeset
   806
#         rql = 'Any T,N WHERE T is Tag, T name N'
57b9fd2462b8 test updates
sylvain.thenault@logilab.fr
parents: 1426
diff changeset
   807
#         ctrl = self.ctrl(self.request(mode='json', rql=rql, pageid='123'))
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5941
diff changeset
   808
#         self.assertEqual(ctrl.publish(),
5940
0e3ae19b181a [uilib] refactor json_dumps code organization
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   809
#                           json_dumps(self.execute(rql).rows))
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   810
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   811
    def test_remote_add_existing_tag(self):
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   812
        with self.remote_calling('tag_entity', self.john.eid, ['python']) as (_, req):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   813
            self.assertCountEqual(
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   814
                [tname for tname, in req.execute('Any N WHERE T is Tag, T name N')],
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   815
                ['python', 'cubicweb'])
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   816
            self.assertEqual(
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   817
                req.execute('Any N WHERE T tags P, P is CWUser, T name N').rows,
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   818
                [['python']])
1426
379261551578 remove trailing spaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   819
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   820
    def test_remote_add_new_tag(self):
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   821
        with self.remote_calling('tag_entity', self.john.eid, ['javascript']) as (_, req):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   822
            self.assertCountEqual(
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   823
                [tname for tname, in req.execute('Any N WHERE T is Tag, T name N')],
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   824
                ['python', 'cubicweb', 'javascript'])
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   825
            self.assertEqual(
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   826
                req.execute('Any N WHERE T tags P, P is CWUser, T name N').rows,
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   827
                [['javascript']])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   828
10075
136b5f995f8e Provide sufficient context to check 'delete' permission in AjaxEditRelationCtxComponent
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 10016
diff changeset
   829
    def test_maydel_perms(self):
136b5f995f8e Provide sufficient context to check 'delete' permission in AjaxEditRelationCtxComponent
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 10016
diff changeset
   830
        """Check that AjaxEditRelationCtxComponent calls rdef.check with a
136b5f995f8e Provide sufficient context to check 'delete' permission in AjaxEditRelationCtxComponent
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 10016
diff changeset
   831
        sufficient context"""
10083
afc5615aa92b [tests/web] switch previous commit (136b5f995f8) to the new test api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10075
diff changeset
   832
        with self.remote_calling('tag_entity', self.john.eid, ['python']) as (_, req):
afc5615aa92b [tests/web] switch previous commit (136b5f995f8) to the new test api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10075
diff changeset
   833
            req.cnx.commit()
10075
136b5f995f8e Provide sufficient context to check 'delete' permission in AjaxEditRelationCtxComponent
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 10016
diff changeset
   834
        with self.temporary_permissions(
136b5f995f8e Provide sufficient context to check 'delete' permission in AjaxEditRelationCtxComponent
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 10016
diff changeset
   835
                (self.schema['tags'].rdefs['Tag', 'CWUser'],
136b5f995f8e Provide sufficient context to check 'delete' permission in AjaxEditRelationCtxComponent
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 10016
diff changeset
   836
                 {'delete': (RRQLExpression('S owned_by U'), )}, )):
10083
afc5615aa92b [tests/web] switch previous commit (136b5f995f8) to the new test api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10075
diff changeset
   837
            with self.admin_access.web_request(rql='CWUser P WHERE P login "John"',
afc5615aa92b [tests/web] switch previous commit (136b5f995f8) to the new test api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10075
diff changeset
   838
                                   pageid='123', fname='view') as req:
afc5615aa92b [tests/web] switch previous commit (136b5f995f8) to the new test api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10075
diff changeset
   839
                ctrl = self.ctrl(req)
afc5615aa92b [tests/web] switch previous commit (136b5f995f8) to the new test api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10075
diff changeset
   840
                rset = self.john.as_rset()
afc5615aa92b [tests/web] switch previous commit (136b5f995f8) to the new test api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10075
diff changeset
   841
                rset.req = req
afc5615aa92b [tests/web] switch previous commit (136b5f995f8) to the new test api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10075
diff changeset
   842
                source = ctrl.publish()
afc5615aa92b [tests/web] switch previous commit (136b5f995f8) to the new test api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 10075
diff changeset
   843
                # maydel jscall
10749
2703116e4b21 [web/test] str → bytes
Julien Cristau <julien.cristau@logilab.fr>
parents: 10728
diff changeset
   844
                self.assertIn(b'ajaxBoxRemoveLinkedEntity', source)
10075
136b5f995f8e Provide sufficient context to check 'delete' permission in AjaxEditRelationCtxComponent
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 10016
diff changeset
   845
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   846
    def test_pending_insertion(self):
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   847
        with self.remote_calling('add_pending_inserts', [['12', 'tags', '13']]) as (_, req):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   848
            deletes = get_pending_deletes(req)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   849
            self.assertEqual(deletes, [])
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   850
            inserts = get_pending_inserts(req)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   851
            self.assertEqual(inserts, ['12:tags:13'])
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   852
        with self.remote_calling('add_pending_inserts', [['12', 'tags', '14']]) as (_, req):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   853
            deletes = get_pending_deletes(req)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   854
            self.assertEqual(deletes, [])
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   855
            inserts = get_pending_inserts(req)
10255
55413788be10 [web/test] don't depend on iteration order on a set
Julien Cristau <julien.cristau@logilab.fr>
parents: 10254
diff changeset
   856
            self.assertCountEqual(inserts, ['12:tags:13', '12:tags:14'])
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   857
            inserts = get_pending_inserts(req, 12)
10255
55413788be10 [web/test] don't depend on iteration order on a set
Julien Cristau <julien.cristau@logilab.fr>
parents: 10254
diff changeset
   858
            self.assertCountEqual(inserts, ['12:tags:13', '12:tags:14'])
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   859
            inserts = get_pending_inserts(req, 13)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   860
            self.assertEqual(inserts, ['12:tags:13'])
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   861
            inserts = get_pending_inserts(req, 14)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   862
            self.assertEqual(inserts, ['12:tags:14'])
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   863
            req.remove_pending_operations()
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   864
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   865
    def test_pending_deletion(self):
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   866
        with self.remote_calling('add_pending_delete', ['12', 'tags', '13']) as (_, req):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   867
            inserts = get_pending_inserts(req)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   868
            self.assertEqual(inserts, [])
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   869
            deletes = get_pending_deletes(req)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   870
            self.assertEqual(deletes, ['12:tags:13'])
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   871
        with self.remote_calling('add_pending_delete', ['12', 'tags', '14']) as (_, req):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   872
            inserts = get_pending_inserts(req)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   873
            self.assertEqual(inserts, [])
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   874
            deletes = get_pending_deletes(req)
10255
55413788be10 [web/test] don't depend on iteration order on a set
Julien Cristau <julien.cristau@logilab.fr>
parents: 10254
diff changeset
   875
            self.assertCountEqual(deletes, ['12:tags:13', '12:tags:14'])
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   876
            deletes = get_pending_deletes(req, 12)
10255
55413788be10 [web/test] don't depend on iteration order on a set
Julien Cristau <julien.cristau@logilab.fr>
parents: 10254
diff changeset
   877
            self.assertCountEqual(deletes, ['12:tags:13', '12:tags:14'])
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   878
            deletes = get_pending_deletes(req, 13)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   879
            self.assertEqual(deletes, ['12:tags:13'])
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   880
            deletes = get_pending_deletes(req, 14)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   881
            self.assertEqual(deletes, ['12:tags:14'])
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   882
            req.remove_pending_operations()
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   883
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   884
    def test_remove_pending_operations(self):
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   885
        with self.remote_calling('add_pending_delete', ['12', 'tags', '13']):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   886
            pass
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   887
        with self.remote_calling('add_pending_inserts', [['12', 'tags', '14']]) as (_, req):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   888
            inserts = get_pending_inserts(req)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   889
            self.assertEqual(inserts, ['12:tags:14'])
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   890
            deletes = get_pending_deletes(req)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   891
            self.assertEqual(deletes, ['12:tags:13'])
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   892
            req.remove_pending_operations()
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   893
            self.assertEqual(get_pending_deletes(req), [])
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   894
            self.assertEqual(get_pending_inserts(req), [])
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   895
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   896
    def test_add_inserts(self):
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   897
        with self.remote_calling('add_pending_inserts',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   898
                                 [('12', 'tags', '13'), ('12', 'tags', '14')]) as (_, req):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   899
            inserts = get_pending_inserts(req)
10255
55413788be10 [web/test] don't depend on iteration order on a set
Julien Cristau <julien.cristau@logilab.fr>
parents: 10254
diff changeset
   900
            self.assertCountEqual(inserts, ['12:tags:13', '12:tags:14'])
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   901
            req.remove_pending_operations()
1426
379261551578 remove trailing spaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   902
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   903
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   904
    # silly tests
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   905
    def test_external_resource(self):
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   906
        with self.remote_calling('external_resource', 'RSS_LOGO') as (res, _):
10728
48c6de7321d8 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   907
            self.assertEqual(json_dumps(self.config.uiprops['RSS_LOGO']).encode('ascii'),
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   908
                             res)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   909
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   910
    def test_i18n(self):
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   911
        with self.remote_calling('i18n', ['bimboom']) as (res, _):
10728
48c6de7321d8 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   912
            self.assertEqual(json_dumps(['bimboom']).encode('ascii'), res)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   913
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   914
    def test_format_date(self):
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   915
        with self.remote_calling('format_date', '2007-01-01 12:00:00') as (res, _):
10728
48c6de7321d8 [py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10704
diff changeset
   916
            self.assertEqual(json_dumps('2007/01/01').encode('ascii'), res)
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   917
8128
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   918
    def test_ajaxfunc_noparameter(self):
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   919
        @ajaxfunc
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   920
        def foo(self, x, y):
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   921
            return 'hello'
8437
c9ab72f0645d [registry|ajaxcontroller] the @ajaxcontroller decorator ought to return a compatible object (closes #2385155)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8312
diff changeset
   922
        self.assertEqual(foo(object, 1, 2), 'hello')
c9ab72f0645d [registry|ajaxcontroller] the @ajaxcontroller decorator ought to return a compatible object (closes #2385155)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8312
diff changeset
   923
        appobject = foo.__appobject__
c9ab72f0645d [registry|ajaxcontroller] the @ajaxcontroller decorator ought to return a compatible object (closes #2385155)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8312
diff changeset
   924
        self.assertTrue(issubclass(appobject, AjaxFunction))
c9ab72f0645d [registry|ajaxcontroller] the @ajaxcontroller decorator ought to return a compatible object (closes #2385155)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8312
diff changeset
   925
        self.assertEqual(appobject.__regid__, 'foo')
c9ab72f0645d [registry|ajaxcontroller] the @ajaxcontroller decorator ought to return a compatible object (closes #2385155)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8312
diff changeset
   926
        self.assertEqual(appobject.check_pageid, False)
c9ab72f0645d [registry|ajaxcontroller] the @ajaxcontroller decorator ought to return a compatible object (closes #2385155)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8312
diff changeset
   927
        self.assertEqual(appobject.output_type, None)
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   928
        with self.admin_access.web_request() as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   929
            f = appobject(req)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   930
            self.assertEqual(f(12, 13), 'hello')
8128
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   931
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   932
    def test_ajaxfunc_checkpageid(self):
8437
c9ab72f0645d [registry|ajaxcontroller] the @ajaxcontroller decorator ought to return a compatible object (closes #2385155)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8312
diff changeset
   933
        @ajaxfunc(check_pageid=True)
8128
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   934
        def foo(self, x, y):
8437
c9ab72f0645d [registry|ajaxcontroller] the @ajaxcontroller decorator ought to return a compatible object (closes #2385155)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8312
diff changeset
   935
            return 'hello'
c9ab72f0645d [registry|ajaxcontroller] the @ajaxcontroller decorator ought to return a compatible object (closes #2385155)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8312
diff changeset
   936
        self.assertEqual(foo(object, 1, 2), 'hello')
c9ab72f0645d [registry|ajaxcontroller] the @ajaxcontroller decorator ought to return a compatible object (closes #2385155)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8312
diff changeset
   937
        appobject = foo.__appobject__
c9ab72f0645d [registry|ajaxcontroller] the @ajaxcontroller decorator ought to return a compatible object (closes #2385155)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8312
diff changeset
   938
        self.assertTrue(issubclass(appobject, AjaxFunction))
c9ab72f0645d [registry|ajaxcontroller] the @ajaxcontroller decorator ought to return a compatible object (closes #2385155)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8312
diff changeset
   939
        self.assertEqual(appobject.__regid__, 'foo')
c9ab72f0645d [registry|ajaxcontroller] the @ajaxcontroller decorator ought to return a compatible object (closes #2385155)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8312
diff changeset
   940
        self.assertEqual(appobject.check_pageid, True)
c9ab72f0645d [registry|ajaxcontroller] the @ajaxcontroller decorator ought to return a compatible object (closes #2385155)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8312
diff changeset
   941
        self.assertEqual(appobject.output_type, None)
8128
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   942
        # no pageid
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   943
        with self.admin_access.web_request() as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   944
            f = appobject(req)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   945
            self.assertRaises(RemoteCallFailed, f, 12, 13)
8128
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   946
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   947
    def test_ajaxfunc_json(self):
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   948
        @ajaxfunc(output_type='json')
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   949
        def foo(self, x, y):
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   950
            return x + y
8437
c9ab72f0645d [registry|ajaxcontroller] the @ajaxcontroller decorator ought to return a compatible object (closes #2385155)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8312
diff changeset
   951
        self.assertEqual(foo(object, 1, 2), 3)
c9ab72f0645d [registry|ajaxcontroller] the @ajaxcontroller decorator ought to return a compatible object (closes #2385155)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8312
diff changeset
   952
        appobject = foo.__appobject__
c9ab72f0645d [registry|ajaxcontroller] the @ajaxcontroller decorator ought to return a compatible object (closes #2385155)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8312
diff changeset
   953
        self.assertTrue(issubclass(appobject, AjaxFunction))
c9ab72f0645d [registry|ajaxcontroller] the @ajaxcontroller decorator ought to return a compatible object (closes #2385155)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8312
diff changeset
   954
        self.assertEqual(appobject.__regid__, 'foo')
c9ab72f0645d [registry|ajaxcontroller] the @ajaxcontroller decorator ought to return a compatible object (closes #2385155)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8312
diff changeset
   955
        self.assertEqual(appobject.check_pageid, False)
c9ab72f0645d [registry|ajaxcontroller] the @ajaxcontroller decorator ought to return a compatible object (closes #2385155)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8312
diff changeset
   956
        self.assertEqual(appobject.output_type, 'json')
8128
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   957
        # no pageid
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   958
        with self.admin_access.web_request() as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   959
            f = appobject(req)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   960
            self.assertEqual(f(12, 13), '25')
1426
379261551578 remove trailing spaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
   961
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
   962
8128
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   963
class JSonControllerTC(AjaxControllerTC):
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   964
    # NOTE: this class performs the same tests as AjaxController but with
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   965
    #       deprecated 'json' controller (i.e. check backward compatibility)
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   966
    tested_controller = 'json'
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   967
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   968
    def setUp(self):
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   969
        super(JSonControllerTC, self).setUp()
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   970
        self.exposed_remote_funcs = [fname for fname in dir(JSonController)
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   971
                                     if fname.startswith('js_')]
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   972
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   973
    def tearDown(self):
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   974
        super(JSonControllerTC, self).tearDown()
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   975
        for funcname in dir(JSonController):
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   976
            # remove functions added dynamically during tests
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   977
            if funcname.startswith('js_') and funcname not in self.exposed_remote_funcs:
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   978
                delattr(JSonController, funcname)
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   979
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   980
    def test_monkeypatch_jsoncontroller(self):
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   981
        with self.assertRaises(RemoteCallFailed):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   982
            with self.remote_calling('foo'):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   983
                pass
8128
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   984
        @monkeypatch(JSonController)
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   985
        def js_foo(self):
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   986
            return u'hello'
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   987
        with self.remote_calling('foo') as (res, _):
10751
9ffdfa1d28f5 [web/test] str vs bytes
Julien Cristau <julien.cristau@logilab.fr>
parents: 10749
diff changeset
   988
            self.assertEqual(res, b'hello')
8128
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   989
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   990
    def test_monkeypatch_jsoncontroller_xhtmlize(self):
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   991
        with self.assertRaises(RemoteCallFailed):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   992
            with self.remote_calling('foo'):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   993
                pass
8128
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   994
        @monkeypatch(JSonController)
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   995
        @xhtmlize
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   996
        def js_foo(self):
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
   997
            return u'hello'
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
   998
        with self.remote_calling('foo') as (res, _):
10751
9ffdfa1d28f5 [web/test] str vs bytes
Julien Cristau <julien.cristau@logilab.fr>
parents: 10749
diff changeset
   999
            self.assertEqual(b'<div>hello</div>', res)
8128
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
  1000
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
  1001
    def test_monkeypatch_jsoncontroller_jsonize(self):
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1002
        with self.assertRaises(RemoteCallFailed):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1003
            with self.remote_calling('foo'):
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1004
                pass
8128
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
  1005
        @monkeypatch(JSonController)
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
  1006
        @jsonize
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
  1007
        def js_foo(self):
0a927fe4541b [controllers] deprecate JSonController and implement AjaxController / ajax-func registry (closes #2110265)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 7791
diff changeset
  1008
            return 12
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1009
        with self.remote_calling('foo') as (res, _):
10751
9ffdfa1d28f5 [web/test] str vs bytes
Julien Cristau <julien.cristau@logilab.fr>
parents: 10749
diff changeset
  1010
            self.assertEqual(res, b'12')
1426
379261551578 remove trailing spaces
sylvain.thenault@logilab.fr
parents: 1398
diff changeset
  1011
8504
f21c72928662 [ajax] improve backward compatibility for redefined ajax functions (closes #2447189)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8487
diff changeset
  1012
    def test_monkeypatch_jsoncontroller_stdfunc(self):
f21c72928662 [ajax] improve backward compatibility for redefined ajax functions (closes #2447189)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8487
diff changeset
  1013
        @monkeypatch(JSonController)
f21c72928662 [ajax] improve backward compatibility for redefined ajax functions (closes #2447189)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8487
diff changeset
  1014
        @jsonize
f21c72928662 [ajax] improve backward compatibility for redefined ajax functions (closes #2447189)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8487
diff changeset
  1015
        def js_reledit_form(self):
f21c72928662 [ajax] improve backward compatibility for redefined ajax functions (closes #2447189)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8487
diff changeset
  1016
            return 12
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1017
        with self.remote_calling('reledit_form') as (res, _):
10751
9ffdfa1d28f5 [web/test] str vs bytes
Julien Cristau <julien.cristau@logilab.fr>
parents: 10749
diff changeset
  1018
            self.assertEqual(res, b'12')
8504
f21c72928662 [ajax] improve backward compatibility for redefined ajax functions (closes #2447189)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 8487
diff changeset
  1019
8267
486386d9f836 [web] Exposes the undo feature to user through a undo-history view (closes #893940)
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 8128
diff changeset
  1020
486386d9f836 [web] Exposes the undo feature to user through a undo-history view (closes #893940)
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 8128
diff changeset
  1021
class UndoControllerTC(CubicWebTC):
486386d9f836 [web] Exposes the undo feature to user through a undo-history view (closes #893940)
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 8128
diff changeset
  1022
8812
52af67a2f0a5 [session/transaction] move most undo support into transaction
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8803
diff changeset
  1023
    def setUp(self):
11200
8ddfed7a5981 [session] fix super call in Connection.__init__
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 11057
diff changeset
  1024
        # Force undo feature to be turned on
8ddfed7a5981 [session] fix super call in Connection.__init__
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 11057
diff changeset
  1025
        Connection.undo_actions = property(lambda self: True, lambda self, v:None)
8812
52af67a2f0a5 [session/transaction] move most undo support into transaction
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8803
diff changeset
  1026
        super(UndoControllerTC, self).setUp()
52af67a2f0a5 [session/transaction] move most undo support into transaction
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8803
diff changeset
  1027
52af67a2f0a5 [session/transaction] move most undo support into transaction
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8803
diff changeset
  1028
    def tearDown(self):
52af67a2f0a5 [session/transaction] move most undo support into transaction
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8803
diff changeset
  1029
        super(UndoControllerTC, self).tearDown()
11200
8ddfed7a5981 [session] fix super call in Connection.__init__
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 11057
diff changeset
  1030
        del Connection.undo_actions
8812
52af67a2f0a5 [session/transaction] move most undo support into transaction
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8803
diff changeset
  1031
8267
486386d9f836 [web] Exposes the undo feature to user through a undo-history view (closes #893940)
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 8128
diff changeset
  1032
    def setup_database(self):
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1033
        with self.admin_access.repo_cnx() as cnx:
10253
8eb9a3e9531c [web/test] use unicode instead of str for user logins
Julien Cristau <julien.cristau@logilab.fr>
parents: 10083
diff changeset
  1034
            self.toto = self.create_user(cnx, u'toto',
8eb9a3e9531c [web/test] use unicode instead of str for user logins
Julien Cristau <julien.cristau@logilab.fr>
parents: 10083
diff changeset
  1035
                                         password=u'toto',
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1036
                                         groups=('users',),
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1037
                                         commit=False)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1038
            self.txuuid_toto = cnx.commit()
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1039
            self.toto_email = cnx.create_entity('EmailAddress',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1040
                                                address=u'toto@logilab.org',
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1041
                                                reverse_use_email=self.toto)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1042
            self.txuuid_toto_email = cnx.commit()
8267
486386d9f836 [web] Exposes the undo feature to user through a undo-history view (closes #893940)
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 8128
diff changeset
  1043
486386d9f836 [web] Exposes the undo feature to user through a undo-history view (closes #893940)
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 8128
diff changeset
  1044
    def test_no_such_transaction(self):
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1045
        with self.admin_access.web_request() as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1046
            txuuid = u"12345acbd"
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1047
            req.form['txuuid'] = txuuid
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1048
            controller = self.vreg['controllers'].select('undo', req)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1049
            with self.assertRaises(tx.NoSuchTransaction) as cm:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1050
                result = controller.publish(rset=None)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1051
            self.assertEqual(cm.exception.txuuid, txuuid)
8267
486386d9f836 [web] Exposes the undo feature to user through a undo-history view (closes #893940)
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 8128
diff changeset
  1052
486386d9f836 [web] Exposes the undo feature to user through a undo-history view (closes #893940)
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 8128
diff changeset
  1053
    def assertURLPath(self, url, expected_path, expected_params=None):
486386d9f836 [web] Exposes the undo feature to user through a undo-history view (closes #893940)
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 8128
diff changeset
  1054
        """ This assert that the path part of `url` matches  expected path
486386d9f836 [web] Exposes the undo feature to user through a undo-history view (closes #893940)
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 8128
diff changeset
  1055
486386d9f836 [web] Exposes the undo feature to user through a undo-history view (closes #893940)
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 8128
diff changeset
  1056
        TODO : implement assertion on the expected_params too
486386d9f836 [web] Exposes the undo feature to user through a undo-history view (closes #893940)
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 8128
diff changeset
  1057
        """
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1058
        with self.admin_access.web_request() as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1059
            scheme, netloc, path, query, fragment = urlsplit(url)
10603
65ad6980976e [py3k] import URL mangling functions using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10587
diff changeset
  1060
            query_dict = parse_qs(query)
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1061
            expected_url = urljoin(req.base_url(), expected_path)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1062
            self.assertEqual( urlunsplit((scheme, netloc, path, None, None)), expected_url)
8267
486386d9f836 [web] Exposes the undo feature to user through a undo-history view (closes #893940)
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 8128
diff changeset
  1063
486386d9f836 [web] Exposes the undo feature to user through a undo-history view (closes #893940)
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 8128
diff changeset
  1064
    def test_redirect_redirectpath(self):
486386d9f836 [web] Exposes the undo feature to user through a undo-history view (closes #893940)
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 8128
diff changeset
  1065
        "Check that the potential __redirectpath is honored"
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1066
        with self.admin_access.web_request() as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1067
            txuuid = self.txuuid_toto_email
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1068
            req.form['txuuid'] = txuuid
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1069
            rpath = "toto"
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1070
            req.form['__redirectpath'] = rpath
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1071
            controller = self.vreg['controllers'].select('undo', req)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1072
            with self.assertRaises(Redirect) as cm:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1073
                result = controller.publish(rset=None)
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1074
            self.assertURLPath(cm.exception.location, rpath)
8267
486386d9f836 [web] Exposes the undo feature to user through a undo-history view (closes #893940)
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 8128
diff changeset
  1075
486386d9f836 [web] Exposes the undo feature to user through a undo-history view (closes #893940)
Anthony Truchet <anthony.truchet@logilab.fr>
parents: 8128
diff changeset
  1076
8311
76a44a0d7f4b [login] split authentication logic from post authentication logic (closes #2200755)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8267
diff changeset
  1077
class LoginControllerTC(CubicWebTC):
76a44a0d7f4b [login] split authentication logic from post authentication logic (closes #2200755)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8267
diff changeset
  1078
76a44a0d7f4b [login] split authentication logic from post authentication logic (closes #2200755)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8267
diff changeset
  1079
    def test_login_with_dest(self):
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1080
        with self.admin_access.web_request() as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1081
            req.form = {'postlogin_path': 'elephants/babar'}
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1082
            with self.assertRaises(Redirect) as cm:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1083
                self.ctrl_publish(req, ctrl='login')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1084
            self.assertEqual(req.build_url('elephants/babar'), cm.exception.location)
8311
76a44a0d7f4b [login] split authentication logic from post authentication logic (closes #2200755)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8267
diff changeset
  1085
76a44a0d7f4b [login] split authentication logic from post authentication logic (closes #2200755)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8267
diff changeset
  1086
    def test_login_no_dest(self):
9846
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1087
        with self.admin_access.web_request() as req:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1088
            with self.assertRaises(Redirect) as cm:
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1089
                self.ctrl_publish(req, ctrl='login')
67c1b77b44be [webtests/basecontrollers] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9675
diff changeset
  1090
            self.assertEqual(req.base_url(), cm.exception.location)
8311
76a44a0d7f4b [login] split authentication logic from post authentication logic (closes #2200755)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8267
diff changeset
  1091
11268
f6938ae0dea8 [web] Have the LoginController return 403 on failed auth (closes #11569950)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 11241
diff changeset
  1092
f6938ae0dea8 [web] Have the LoginController return 403 on failed auth (closes #11569950)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 11241
diff changeset
  1093
class LoginControllerHTTPTC(CubicWebServerTC):
f6938ae0dea8 [web] Have the LoginController return 403 on failed auth (closes #11569950)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 11241
diff changeset
  1094
f6938ae0dea8 [web] Have the LoginController return 403 on failed auth (closes #11569950)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 11241
diff changeset
  1095
    anonymous_allowed = True
f6938ae0dea8 [web] Have the LoginController return 403 on failed auth (closes #11569950)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 11241
diff changeset
  1096
    # this TC depends on the auth mode being 'cookie' and not 'http'
f6938ae0dea8 [web] Have the LoginController return 403 on failed auth (closes #11569950)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 11241
diff changeset
  1097
    # (the former being the default, so everything works)
f6938ae0dea8 [web] Have the LoginController return 403 on failed auth (closes #11569950)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 11241
diff changeset
  1098
f6938ae0dea8 [web] Have the LoginController return 403 on failed auth (closes #11569950)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 11241
diff changeset
  1099
    def test_http_error_codes_auth_fail(self):
f6938ae0dea8 [web] Have the LoginController return 403 on failed auth (closes #11569950)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 11241
diff changeset
  1100
        url = 'login?__login=%s&__password=%s' % ('toto', 'pouetA')
f6938ae0dea8 [web] Have the LoginController return 403 on failed auth (closes #11569950)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 11241
diff changeset
  1101
        response = self.web_request(url, 'POST')
f6938ae0dea8 [web] Have the LoginController return 403 on failed auth (closes #11569950)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 11241
diff changeset
  1102
        self.assertEqual(response.status, 403)
f6938ae0dea8 [web] Have the LoginController return 403 on failed auth (closes #11569950)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 11241
diff changeset
  1103
f6938ae0dea8 [web] Have the LoginController return 403 on failed auth (closes #11569950)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 11241
diff changeset
  1104
    def test_http_error_codes_auth_succeed(self):
f6938ae0dea8 [web] Have the LoginController return 403 on failed auth (closes #11569950)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 11241
diff changeset
  1105
        url = 'login?__login=%s&__password=%s' % (self.admlogin, self.admpassword)
f6938ae0dea8 [web] Have the LoginController return 403 on failed auth (closes #11569950)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 11241
diff changeset
  1106
        response = self.web_request(url, 'POST')
f6938ae0dea8 [web] Have the LoginController return 403 on failed auth (closes #11569950)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 11241
diff changeset
  1107
        self.assertEqual(response.status, 303)
f6938ae0dea8 [web] Have the LoginController return 403 on failed auth (closes #11569950)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 11241
diff changeset
  1108
f6938ae0dea8 [web] Have the LoginController return 403 on failed auth (closes #11569950)
Rémi Cardona <remi.cardona@logilab.fr>
parents: 11241
diff changeset
  1109
0
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1110
if __name__ == '__main__':
b97547f5f1fa Showtime !
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
diff changeset
  1111
    unittest_main()