author | Sylvain Thénault <sylvain.thenault@logilab.fr> |
Fri, 18 Nov 2016 17:50:56 +0100 | |
changeset 11891 | 67185e65f020 |
parent 11828 | a06cf11f7d87 |
child 12043 | b8d2e6b9f548 |
permissions | -rw-r--r-- |
11170
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
1 |
# copyright 2003-2016 LOGILAB S.A. (Paris, FRANCE), all rights reserved. |
5421
8167de96c523
proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5038
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:
5038
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:
5038
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:
5038
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:
5038
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:
5038
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:
5038
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:
5038
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:
5038
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:
5038
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:
5038
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:
5038
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:
5038
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:
5038
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:
5038
diff
changeset
|
17 |
# with CubicWeb. If not, see <http://www.gnu.org/licenses/>. |
5584
c1823448f81d
[web] disallow authenticated users to access to the login form (closes #914873)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5426
diff
changeset
|
18 |
"""unit tests for cubicweb.web.application""" |
0 | 19 |
|
10605
61521bee2b68
[py3k] import SimpleCookie using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents:
10604
diff
changeset
|
20 |
import base64 |
10604
d4bf85db41f2
[py3k] import HTTP client constants and exceptions using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents:
10356
diff
changeset
|
21 |
|
10734
e64738c093e5
[py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents:
10605
diff
changeset
|
22 |
from six import text_type |
10604
d4bf85db41f2
[py3k] import HTTP client constants and exceptions using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents:
10356
diff
changeset
|
23 |
from six.moves import http_client |
10605
61521bee2b68
[py3k] import SimpleCookie using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents:
10604
diff
changeset
|
24 |
from six.moves.http_cookies import SimpleCookie |
2661
f8df42c9da6b
[vreg api update] remove some deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2267
diff
changeset
|
25 |
|
f8df42c9da6b
[vreg api update] remove some deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2267
diff
changeset
|
26 |
from logilab.common.testlib import TestCase, unittest_main |
6849
5a0c2cfc19bf
[repository auth] cleanup email login by turning it into a proper repo-side authentication plugin
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6848
diff
changeset
|
27 |
from logilab.common.decorators import clear_cache, classproperty |
0 | 28 |
|
9428
946aded614f3
[web error] exception may not have a 'status' attribute, generating an AttributeError that hides the original error. Closes #3381670
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8695
diff
changeset
|
29 |
from cubicweb import view |
946aded614f3
[web error] exception may not have a 'status' attribute, generating an AttributeError that hides the original error. Closes #3381670
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8695
diff
changeset
|
30 |
from cubicweb.devtools.testlib import CubicWebTC, real_error_handling |
2661
f8df42c9da6b
[vreg api update] remove some deprecation warnings
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2267
diff
changeset
|
31 |
from cubicweb.devtools.fake import FakeRequest |
5223
6abd6e3599f4
#773448: refactor session and 'no connection' handling, by introducing proper web session. We should now be able to see page even when no anon is configured, and be redirected to the login form as soon as one tries to do a query.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
32 |
from cubicweb.web import LogOut, Redirect, INTERNAL_FIELD_VALUE |
0 | 33 |
from cubicweb.web.views.basecontrollers import ViewController |
7876
df15d194a134
[views] implement json / jsonp export views (closes #1942658)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
7791
diff
changeset
|
34 |
from cubicweb.web.application import anonymized_request |
9071
46885bfa4150
Use new repoapi for the web stack
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
9069
diff
changeset
|
35 |
from cubicweb import repoapi |
0 | 36 |
|
11170
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
37 |
|
0 | 38 |
class FakeMapping: |
39 |
"""emulates a mapping module""" |
|
40 |
def __init__(self): |
|
41 |
self.ENTITIES_MAP = {} |
|
42 |
self.ATTRIBUTES_MAP = {} |
|
43 |
self.RELATIONS_MAP = {} |
|
44 |
||
11170
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
45 |
|
0 | 46 |
class MockCursor: |
47 |
def __init__(self): |
|
48 |
self.executed = [] |
|
11170
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
49 |
|
5174
78438ad513ca
#759035: Automate addition of eid cachekey in RQL analysis
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5038
diff
changeset
|
50 |
def execute(self, rql, args=None, build_descr=False): |
0 | 51 |
args = args or {} |
52 |
self.executed.append(rql % args) |
|
53 |
||
54 |
||
55 |
class FakeController(ViewController): |
|
56 |
||
57 |
def __init__(self, form=None): |
|
3462
3a79fecdd2b4
[magicsearch] make tests pass again: base preprocessor must have access to vreg
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3293
diff
changeset
|
58 |
self._cw = FakeRequest() |
3a79fecdd2b4
[magicsearch] make tests pass again: base preprocessor must have access to vreg
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3293
diff
changeset
|
59 |
self._cw.form = form or {} |
5223
6abd6e3599f4
#773448: refactor session and 'no connection' handling, by introducing proper web session. We should now be able to see page even when no anon is configured, and be redirected to the login form as soon as one tries to do a query.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
60 |
self._cursor = MockCursor() |
6abd6e3599f4
#773448: refactor session and 'no connection' handling, by introducing proper web session. We should now be able to see page even when no anon is configured, and be redirected to the login form as soon as one tries to do a query.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
61 |
self._cw.execute = self._cursor.execute |
0 | 62 |
|
63 |
def new_cursor(self): |
|
5223
6abd6e3599f4
#773448: refactor session and 'no connection' handling, by introducing proper web session. We should now be able to see page even when no anon is configured, and be redirected to the login form as soon as one tries to do a query.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
64 |
self._cursor = MockCursor() |
6abd6e3599f4
#773448: refactor session and 'no connection' handling, by introducing proper web session. We should now be able to see page even when no anon is configured, and be redirected to the login form as soon as one tries to do a query.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
65 |
self._cw.execute = self._cursor.execute |
0 | 66 |
|
67 |
def set_form(self, form): |
|
3462
3a79fecdd2b4
[magicsearch] make tests pass again: base preprocessor must have access to vreg
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3293
diff
changeset
|
68 |
self._cw.form = form |
0 | 69 |
|
70 |
||
71 |
class RequestBaseTC(TestCase): |
|
72 |
def setUp(self): |
|
3462
3a79fecdd2b4
[magicsearch] make tests pass again: base preprocessor must have access to vreg
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3293
diff
changeset
|
73 |
self._cw = FakeRequest() |
1802
d628defebc17
delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
1490
diff
changeset
|
74 |
|
0 | 75 |
def test_list_arg(self): |
76 |
"""tests the list_arg() function""" |
|
3462
3a79fecdd2b4
[magicsearch] make tests pass again: base preprocessor must have access to vreg
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3293
diff
changeset
|
77 |
list_arg = self._cw.list_form_param |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5584
diff
changeset
|
78 |
self.assertEqual(list_arg('arg3', {}), []) |
11170
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
79 |
d = {'arg1': "value1", |
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
80 |
'arg2': ('foo', INTERNAL_FIELD_VALUE,), |
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
81 |
'arg3': ['bar']} |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5584
diff
changeset
|
82 |
self.assertEqual(list_arg('arg1', d, True), ['value1']) |
11170
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
83 |
self.assertEqual(d, {'arg2': ('foo', INTERNAL_FIELD_VALUE), 'arg3': ['bar']}) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5584
diff
changeset
|
84 |
self.assertEqual(list_arg('arg2', d, True), ['foo']) |
11170
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
85 |
self.assertEqual({'arg3': ['bar']}, d) |
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
86 |
self.assertEqual(list_arg('arg3', d), ['bar']) |
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
87 |
self.assertEqual({'arg3': ['bar']}, d) |
0 | 88 |
|
89 |
def test_from_controller(self): |
|
3462
3a79fecdd2b4
[magicsearch] make tests pass again: base preprocessor must have access to vreg
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
3293
diff
changeset
|
90 |
self._cw.vreg['controllers'] = {'view': 1, 'login': 1} |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5584
diff
changeset
|
91 |
self.assertEqual(self._cw.from_controller(), 'view') |
0 | 92 |
req = FakeRequest(url='project?vid=list') |
3265
96c8363b8f64
test update, no more a FakeVReg, needs to hack it
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2661
diff
changeset
|
93 |
req.vreg['controllers'] = {'view': 1, 'login': 1} |
0 | 94 |
# this assertion is just to make sure that relative_path can be |
95 |
# correctly computed as it is used in from_controller() |
|
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5584
diff
changeset
|
96 |
self.assertEqual(req.relative_path(False), 'project') |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5584
diff
changeset
|
97 |
self.assertEqual(req.from_controller(), 'view') |
0 | 98 |
# test on a valid non-view controller |
99 |
req = FakeRequest(url='login?x=1&y=2') |
|
3265
96c8363b8f64
test update, no more a FakeVReg, needs to hack it
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2661
diff
changeset
|
100 |
req.vreg['controllers'] = {'view': 1, 'login': 1} |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5584
diff
changeset
|
101 |
self.assertEqual(req.relative_path(False), 'login') |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5584
diff
changeset
|
102 |
self.assertEqual(req.from_controller(), 'login') |
0 | 103 |
|
1802
d628defebc17
delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
1490
diff
changeset
|
104 |
|
0 | 105 |
class UtilsTC(TestCase): |
106 |
"""test suite for misc application utilities""" |
|
107 |
||
108 |
def setUp(self): |
|
109 |
self.ctrl = FakeController() |
|
1802
d628defebc17
delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
1490
diff
changeset
|
110 |
|
0 | 111 |
def test_execute_linkto(self): |
112 |
"""tests the execute_linkto() function""" |
|
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5584
diff
changeset
|
113 |
self.assertEqual(self.ctrl.execute_linkto(), None) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5584
diff
changeset
|
114 |
self.assertEqual(self.ctrl._cursor.executed, |
11170
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
115 |
[]) |
1802
d628defebc17
delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
1490
diff
changeset
|
116 |
|
11170
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
117 |
self.ctrl.set_form({'__linkto': 'works_for:12_13_14:object', |
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
118 |
'eid': 8}) |
0 | 119 |
self.ctrl.execute_linkto() |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5584
diff
changeset
|
120 |
self.assertEqual(self.ctrl._cursor.executed, |
11170
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
121 |
['SET Y works_for X WHERE X eid 8, Y eid %s' % i |
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
122 |
for i in (12, 13, 14)]) |
0 | 123 |
|
124 |
self.ctrl.new_cursor() |
|
11170
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
125 |
self.ctrl.set_form({'__linkto': 'works_for:12_13_14:subject', |
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
126 |
'eid': 8}) |
0 | 127 |
self.ctrl.execute_linkto() |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5584
diff
changeset
|
128 |
self.assertEqual(self.ctrl._cursor.executed, |
11170
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
129 |
['SET X works_for Y WHERE X eid 8, Y eid %s' % i |
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
130 |
for i in (12, 13, 14)]) |
0 | 131 |
|
132 |
self.ctrl.new_cursor() |
|
11170
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
133 |
self.ctrl._cw.form = {'__linkto': 'works_for:12_13_14:object'} |
0 | 134 |
self.ctrl.execute_linkto(eid=8) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5584
diff
changeset
|
135 |
self.assertEqual(self.ctrl._cursor.executed, |
11170
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
136 |
['SET Y works_for X WHERE X eid 8, Y eid %s' % i |
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
137 |
for i in (12, 13, 14)]) |
0 | 138 |
|
139 |
self.ctrl.new_cursor() |
|
11170
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
140 |
self.ctrl.set_form({'__linkto': 'works_for:12_13_14:subject'}) |
0 | 141 |
self.ctrl.execute_linkto(eid=8) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5584
diff
changeset
|
142 |
self.assertEqual(self.ctrl._cursor.executed, |
11170
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
143 |
['SET X works_for Y WHERE X eid 8, Y eid %s' % i |
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
144 |
for i in (12, 13, 14)]) |
0 | 145 |
|
146 |
||
2773
b2530e3e0afb
[testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
2661
diff
changeset
|
147 |
class ApplicationTC(CubicWebTC): |
0 | 148 |
|
11270
a9dc97b87ced
[devtools] set .config in setUpClass instead of using a cache in a classproperty
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11183
diff
changeset
|
149 |
@classmethod |
a9dc97b87ced
[devtools] set .config in setUpClass instead of using a cache in a classproperty
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11183
diff
changeset
|
150 |
def setUpClass(cls): |
a9dc97b87ced
[devtools] set .config in setUpClass instead of using a cache in a classproperty
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11183
diff
changeset
|
151 |
super(ApplicationTC, cls).setUpClass() |
a9dc97b87ced
[devtools] set .config in setUpClass instead of using a cache in a classproperty
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11183
diff
changeset
|
152 |
cls.config.global_set_option('allow-email-login', True) |
6849
5a0c2cfc19bf
[repository auth] cleanup email login by turning it into a proper repo-side authentication plugin
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6848
diff
changeset
|
153 |
|
0 | 154 |
def test_cnx_user_groups_sync(self): |
9641
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
155 |
with self.admin_access.client_cnx() as cnx: |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
156 |
user = cnx.user |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
157 |
self.assertEqual(user.groups, set(('managers',))) |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
158 |
cnx.execute('SET X in_group G WHERE X eid %s, G name "guests"' % user.eid) |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
159 |
user = cnx.user |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
160 |
self.assertEqual(user.groups, set(('managers',))) |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
161 |
cnx.commit() |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
162 |
user = cnx.user |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
163 |
self.assertEqual(user.groups, set(('managers', 'guests'))) |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
164 |
# cleanup |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
165 |
cnx.execute('DELETE X in_group G WHERE X eid %s, G name "guests"' % user.eid) |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
166 |
cnx.commit() |
1802
d628defebc17
delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
1490
diff
changeset
|
167 |
|
0 | 168 |
def test_publish_validation_error(self): |
9641
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
169 |
with self.admin_access.web_request() as req: |
10890
504a67206fdc
[web/test] Remove use of old test API to silence warning
Rémi Cardona <remi.cardona@logilab.fr>
parents:
10780
diff
changeset
|
170 |
user = req.user |
10734
e64738c093e5
[py3k] unicode → six.text_type
Rémi Cardona <remi.cardona@logilab.fr>
parents:
10605
diff
changeset
|
171 |
eid = text_type(user.eid) |
9641
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
172 |
req.form = { |
11170
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
173 |
'eid': eid, |
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
174 |
'__type:' + eid: 'CWUser', |
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
175 |
'_cw_entity_fields:' + eid: 'login-subject', |
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
176 |
'login-subject:' + eid: '', # ERROR: no login specified |
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
177 |
# just a sample, missing some necessary information for real life |
9641
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
178 |
'__errorurl': 'view?vid=edition...' |
11170
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
179 |
} |
9641
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
180 |
path, params = self.expect_redirect_handle_request(req, 'edit') |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
181 |
forminfo = req.session.data['view?vid=edition...'] |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
182 |
eidmap = forminfo['eidmap'] |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
183 |
self.assertEqual(eidmap, {}) |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
184 |
values = forminfo['values'] |
11170
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
185 |
self.assertEqual(values['login-subject:' + eid], '') |
9641
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
186 |
self.assertEqual(values['eid'], eid) |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
187 |
error = forminfo['error'] |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
188 |
self.assertEqual(error.entity, user.eid) |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
189 |
self.assertEqual(error.errors['login-subject'], 'required field') |
0 | 190 |
|
5038
90493551b1eb
[form] fix validation error handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5030
diff
changeset
|
191 |
def test_validation_error_dont_loose_subentity_data_ctrl(self): |
0 | 192 |
"""test creation of two linked entities |
5038
90493551b1eb
[form] fix validation error handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5030
diff
changeset
|
193 |
|
90493551b1eb
[form] fix validation error handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5030
diff
changeset
|
194 |
error occurs on the web controller |
1802
d628defebc17
delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
1490
diff
changeset
|
195 |
""" |
9641
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
196 |
with self.admin_access.web_request() as req: |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
197 |
# set Y before X to ensure both entities are edited, not only X |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
198 |
req.form = {'eid': ['Y', 'X'], '__maineid': 'X', |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
199 |
'__type:X': 'CWUser', '_cw_entity_fields:X': 'login-subject', |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
200 |
# missing required field |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
201 |
'login-subject:X': u'', |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
202 |
# but email address is set |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
203 |
'__type:Y': 'EmailAddress', '_cw_entity_fields:Y': 'address-subject', |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
204 |
'address-subject:Y': u'bougloup@logilab.fr', |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
205 |
'use_email-object:Y': 'X', |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
206 |
# necessary to get validation error handling |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
207 |
'__errorurl': 'view?vid=edition...', |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
208 |
} |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
209 |
path, params = self.expect_redirect_handle_request(req, 'edit') |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
210 |
forminfo = req.session.data['view?vid=edition...'] |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
211 |
self.assertEqual(set(forminfo['eidmap']), set('XY')) |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
212 |
self.assertEqual(forminfo['eidmap']['X'], None) |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
213 |
self.assertIsInstance(forminfo['eidmap']['Y'], int) |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
214 |
self.assertEqual(forminfo['error'].entity, 'X') |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
215 |
self.assertEqual(forminfo['error'].errors, |
11170
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
216 |
{'login-subject': 'required field'}) |
9641
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
217 |
self.assertEqual(forminfo['values'], req.form) |
5038
90493551b1eb
[form] fix validation error handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5030
diff
changeset
|
218 |
|
11794
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
219 |
def test_handle_request_with_lang_fromurl(self): |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
220 |
"""No language negociation, get language from URL.""" |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
221 |
self.config.global_set_option('language-mode', 'url-prefix') |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
222 |
req, origsession = self.init_authentication('http') |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
223 |
self.assertEqual(req.url(), 'http://testing.fr/cubicweb/login') |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
224 |
self.assertEqual(req.lang, 'en') |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
225 |
self.app.handle_request(req) |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
226 |
newreq = self.requestcls(req.vreg, url='fr/toto') |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
227 |
self.assertEqual(newreq.lang, 'en') |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
228 |
self.assertEqual(newreq.url(), 'http://testing.fr/cubicweb/fr/toto') |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
229 |
self.app.handle_request(newreq) |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
230 |
self.assertEqual(newreq.lang, 'fr') |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
231 |
self.assertEqual(newreq.url(), 'http://testing.fr/cubicweb/fr/toto') |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
232 |
# unknown language |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
233 |
newreq = self.requestcls(req.vreg, url='unknown-lang/cwuser') |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
234 |
result = self.app.handle_request(newreq) |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
235 |
self.assertEqual(newreq.lang, 'en') |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
236 |
self.assertEqual(newreq.url(), 'http://testing.fr/cubicweb/unknown-lang/cwuser') |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
237 |
self.assertIn('this resource does not exist', |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
238 |
result.decode('ascii', errors='ignore')) |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
239 |
# no prefix |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
240 |
newreq = self.requestcls(req.vreg, url='cwuser') |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
241 |
result = self.app.handle_request(newreq) |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
242 |
self.assertEqual(newreq.lang, 'en') |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
243 |
self.assertEqual(newreq.url(), 'http://testing.fr/cubicweb/cwuser') |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
244 |
self.assertNotIn('this resource does not exist', |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
245 |
result.decode('ascii', errors='ignore')) |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
246 |
|
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
247 |
def test_handle_request_with_lang_negotiated(self): |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
248 |
"""Language negociated, normal case.""" |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
249 |
self.config.global_set_option('language-mode', 'http-negotiation') |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
250 |
orig_translations = self.config.translations.copy() |
11828
a06cf11f7d87
[test] Fix language negotiation test
Florent Cayré <florent.cayre@gmail.com>
parents:
11800
diff
changeset
|
251 |
self.config.translations = { |
a06cf11f7d87
[test] Fix language negotiation test
Florent Cayré <florent.cayre@gmail.com>
parents:
11800
diff
changeset
|
252 |
'fr': (text_type, lambda x, y: text_type(y)), |
a06cf11f7d87
[test] Fix language negotiation test
Florent Cayré <florent.cayre@gmail.com>
parents:
11800
diff
changeset
|
253 |
'en': (text_type, lambda x, y: text_type(y))} |
11794
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
254 |
try: |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
255 |
headers = {'Accept-Language': 'fr'} |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
256 |
with self.admin_access.web_request(headers=headers) as req: |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
257 |
self.app.handle_request(req) |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
258 |
self.assertEqual(req.lang, 'fr') |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
259 |
finally: |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
260 |
self.config.translations = orig_translations |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
261 |
|
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
262 |
def test_handle_request_with_lang_negotiated_prefix_in_url(self): |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
263 |
"""Language negociated, unexpected language prefix in URL.""" |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
264 |
self.config.global_set_option('language-mode', 'http-negotiation') |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
265 |
with self.admin_access.web_request(url='fr/toto') as req: |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
266 |
result = self.app.handle_request(req) |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
267 |
self.assertIn('this resource does not exist', # NotFound. |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
268 |
result.decode('ascii', errors='ignore')) |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
269 |
|
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
270 |
def test_handle_request_no_lang_negotiation_fixed_language(self): |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
271 |
"""No language negociation, "ui.language" fixed.""" |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
272 |
self.config.global_set_option('language-mode', '') |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
273 |
vreg = self.app.vreg |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
274 |
self.assertEqual(vreg.property_value('ui.language'), 'en') |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
275 |
props = [] |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
276 |
try: |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
277 |
with self.admin_access.cnx() as cnx: |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
278 |
props.append(cnx.create_entity('CWProperty', value=u'de', |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
279 |
pkey=u'ui.language').eid) |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
280 |
cnx.commit() |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
281 |
self.assertEqual(vreg.property_value('ui.language'), 'de') |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
282 |
headers = {'Accept-Language': 'fr'} # should not have any effect. |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
283 |
with self.admin_access.web_request(headers=headers) as req: |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
284 |
self.app.handle_request(req) |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
285 |
# user has no "ui.language" property, getting site's default. |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
286 |
self.assertEqual(req.lang, 'de') |
11799
1bdfe9d4ab83
[req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11794
diff
changeset
|
287 |
# XXX The following should work, but nasty handling of session and |
1bdfe9d4ab83
[req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11794
diff
changeset
|
288 |
# request user make it fail... |
1bdfe9d4ab83
[req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11794
diff
changeset
|
289 |
# with self.admin_access.cnx() as cnx: |
1bdfe9d4ab83
[req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11794
diff
changeset
|
290 |
# props.append(cnx.create_entity('CWProperty', value=u'es', |
1bdfe9d4ab83
[req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11794
diff
changeset
|
291 |
# pkey=u'ui.language', |
1bdfe9d4ab83
[req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11794
diff
changeset
|
292 |
# for_user=cnx.user).eid) |
1bdfe9d4ab83
[req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11794
diff
changeset
|
293 |
# cnx.commit() |
1bdfe9d4ab83
[req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11794
diff
changeset
|
294 |
# with self.admin_access.web_request(headers=headers) as req: |
1bdfe9d4ab83
[req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11794
diff
changeset
|
295 |
# result = self.app.handle_request(req) |
1bdfe9d4ab83
[req,web/request] Move language prefix handling into web request
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11794
diff
changeset
|
296 |
# self.assertEqual(req.lang, 'es') |
11794
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
297 |
finally: |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
298 |
with self.admin_access.cnx() as cnx: |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
299 |
for peid in props: |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
300 |
cnx.entity_from_eid(peid).cw_delete() |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
301 |
cnx.commit() |
d8830e2bd2e0
[req,web] Make it possible to handle page language from URL prefix
Laura Médioni <laura.medioni@logilab.fr>, Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11725
diff
changeset
|
302 |
|
5038
90493551b1eb
[form] fix validation error handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5030
diff
changeset
|
303 |
def test_validation_error_dont_loose_subentity_data_repo(self): |
90493551b1eb
[form] fix validation error handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5030
diff
changeset
|
304 |
"""test creation of two linked entities |
90493551b1eb
[form] fix validation error handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5030
diff
changeset
|
305 |
|
90493551b1eb
[form] fix validation error handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5030
diff
changeset
|
306 |
error occurs on the repository |
90493551b1eb
[form] fix validation error handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5030
diff
changeset
|
307 |
""" |
9641
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
308 |
with self.admin_access.web_request() as req: |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
309 |
# set Y before X to ensure both entities are edited, not only X |
11170
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
310 |
req.form = { |
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
311 |
'eid': ['Y', 'X'], '__maineid': 'X', |
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
312 |
'__type:X': 'CWUser', '_cw_entity_fields:X': 'login-subject,upassword-subject', |
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
313 |
# already existent user |
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
314 |
'login-subject:X': u'admin', |
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
315 |
'upassword-subject:X': u'admin', 'upassword-subject-confirm:X': u'admin', |
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
316 |
'__type:Y': 'EmailAddress', '_cw_entity_fields:Y': 'address-subject', |
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
317 |
'address-subject:Y': u'bougloup@logilab.fr', |
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
318 |
'use_email-object:Y': 'X', |
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
319 |
# necessary to get validation error handling |
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
320 |
'__errorurl': 'view?vid=edition...', |
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
321 |
} |
9641
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
322 |
path, params = self.expect_redirect_handle_request(req, 'edit') |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
323 |
forminfo = req.session.data['view?vid=edition...'] |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
324 |
self.assertEqual(set(forminfo['eidmap']), set('XY')) |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
325 |
self.assertIsInstance(forminfo['eidmap']['X'], int) |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
326 |
self.assertIsInstance(forminfo['eidmap']['Y'], int) |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
327 |
self.assertEqual(forminfo['error'].entity, forminfo['eidmap']['X']) |
11366
80dec361a5d0
[hooks/integrity] kill CheckUniqueHook
Julien Cristau <julien.cristau@logilab.fr>
parents:
11270
diff
changeset
|
328 |
expected_errors = { |
80dec361a5d0
[hooks/integrity] kill CheckUniqueHook
Julien Cristau <julien.cristau@logilab.fr>
parents:
11270
diff
changeset
|
329 |
'': u'some relations violate a unicity constraint', |
80dec361a5d0
[hooks/integrity] kill CheckUniqueHook
Julien Cristau <julien.cristau@logilab.fr>
parents:
11270
diff
changeset
|
330 |
'login': u'login is part of violated unicity constraint', |
80dec361a5d0
[hooks/integrity] kill CheckUniqueHook
Julien Cristau <julien.cristau@logilab.fr>
parents:
11270
diff
changeset
|
331 |
} |
80dec361a5d0
[hooks/integrity] kill CheckUniqueHook
Julien Cristau <julien.cristau@logilab.fr>
parents:
11270
diff
changeset
|
332 |
self.assertEqual(forminfo['error'].errors, expected_errors) |
9641
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
333 |
self.assertEqual(forminfo['values'], req.form) |
5038
90493551b1eb
[form] fix validation error handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5030
diff
changeset
|
334 |
|
11063
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
335 |
def _edit_parent(self, dir_eid, parent_eid, role='subject', |
11064
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
336 |
etype='Directory', **kwargs): |
11063
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
337 |
parent_eid = parent_eid or '__cubicweb_internal_field__' |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
338 |
with self.admin_access.web_request() as req: |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
339 |
req.form = { |
11183
505195fe444d
[web/test] replace unicode with six.text_type
Julien Cristau <julien.cristau@logilab.fr>
parents:
11180
diff
changeset
|
340 |
'eid': text_type(dir_eid), |
505195fe444d
[web/test] replace unicode with six.text_type
Julien Cristau <julien.cristau@logilab.fr>
parents:
11180
diff
changeset
|
341 |
'__maineid': text_type(dir_eid), |
11063
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
342 |
'__type:%s' % dir_eid: etype, |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
343 |
'parent-%s:%s' % (role, dir_eid): parent_eid, |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
344 |
} |
11064
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
345 |
req.form.update(kwargs) |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
346 |
req.form['_cw_entity_fields:%s' % dir_eid] = ','.join( |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
347 |
['parent-%s' % role] + |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
348 |
[key.split(':')[0] |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
349 |
for key in kwargs.keys() |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
350 |
if not key.startswith('_')]) |
11063
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
351 |
self.expect_redirect_handle_request(req) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
352 |
|
11066
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
353 |
def _edit_in_version(self, ticket_eid, version_eid, **kwargs): |
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
354 |
version_eid = version_eid or '__cubicweb_internal_field__' |
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
355 |
with self.admin_access.web_request() as req: |
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
356 |
req.form = { |
11183
505195fe444d
[web/test] replace unicode with six.text_type
Julien Cristau <julien.cristau@logilab.fr>
parents:
11180
diff
changeset
|
357 |
'eid': text_type(ticket_eid), |
505195fe444d
[web/test] replace unicode with six.text_type
Julien Cristau <julien.cristau@logilab.fr>
parents:
11180
diff
changeset
|
358 |
'__maineid': text_type(ticket_eid), |
11066
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
359 |
'__type:%s' % ticket_eid: 'Ticket', |
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
360 |
'in_version-subject:%s' % ticket_eid: version_eid, |
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
361 |
} |
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
362 |
req.form.update(kwargs) |
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
363 |
req.form['_cw_entity_fields:%s' % ticket_eid] = ','.join( |
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
364 |
['in_version-subject'] + |
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
365 |
[key.split(':')[0] |
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
366 |
for key in kwargs.keys() |
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
367 |
if not key.startswith('_')]) |
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
368 |
self.expect_redirect_handle_request(req) |
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
369 |
|
11064
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
370 |
def test_create_and_link_directories(self): |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
371 |
with self.admin_access.web_request() as req: |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
372 |
req.form = { |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
373 |
'eid': (u'A', u'B'), |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
374 |
'__maineid': u'A', |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
375 |
'__type:A': 'Directory', |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
376 |
'__type:B': 'Directory', |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
377 |
'parent-subject:B': u'A', |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
378 |
'name-subject:A': u'topd', |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
379 |
'name-subject:B': u'subd', |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
380 |
'_cw_entity_fields:A': 'name-subject', |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
381 |
'_cw_entity_fields:B': 'parent-subject,name-subject', |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
382 |
} |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
383 |
self.expect_redirect_handle_request(req) |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
384 |
|
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
385 |
with self.admin_access.repo_cnx() as cnx: |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
386 |
self.assertTrue(cnx.find('Directory', name=u'topd')) |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
387 |
self.assertTrue(cnx.find('Directory', name=u'subd')) |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
388 |
self.assertEqual(1, cnx.execute( |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
389 |
'Directory SUBD WHERE SUBD parent TOPD,' |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
390 |
' SUBD name "subd", TOPD name "topd"').rowcount) |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
391 |
|
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
392 |
def test_create_subentity(self): |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
393 |
with self.admin_access.repo_cnx() as cnx: |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
394 |
topd = cnx.create_entity('Directory', name=u'topd') |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
395 |
cnx.commit() |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
396 |
|
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
397 |
with self.admin_access.web_request() as req: |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
398 |
req.form = { |
11183
505195fe444d
[web/test] replace unicode with six.text_type
Julien Cristau <julien.cristau@logilab.fr>
parents:
11180
diff
changeset
|
399 |
'eid': (text_type(topd.eid), u'B'), |
505195fe444d
[web/test] replace unicode with six.text_type
Julien Cristau <julien.cristau@logilab.fr>
parents:
11180
diff
changeset
|
400 |
'__maineid': text_type(topd.eid), |
11064
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
401 |
'__type:%s' % topd.eid: 'Directory', |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
402 |
'__type:B': 'Directory', |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
403 |
'parent-object:%s' % topd.eid: u'B', |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
404 |
'name-subject:B': u'subd', |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
405 |
'_cw_entity_fields:%s' % topd.eid: 'parent-object', |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
406 |
'_cw_entity_fields:B': 'name-subject', |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
407 |
} |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
408 |
self.expect_redirect_handle_request(req) |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
409 |
|
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
410 |
with self.admin_access.repo_cnx() as cnx: |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
411 |
self.assertTrue(cnx.find('Directory', name=u'topd')) |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
412 |
self.assertTrue(cnx.find('Directory', name=u'subd')) |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
413 |
self.assertEqual(1, cnx.execute( |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
414 |
'Directory SUBD WHERE SUBD parent TOPD,' |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
415 |
' SUBD name "subd", TOPD name "topd"').rowcount) |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
416 |
|
11063
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
417 |
def test_subject_subentity_removal(self): |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
418 |
"""Editcontroller: detaching a composite relation removes the subentity |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
419 |
(edit from the subject side) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
420 |
""" |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
421 |
with self.admin_access.repo_cnx() as cnx: |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
422 |
topd = cnx.create_entity('Directory', name=u'topd') |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
423 |
sub1 = cnx.create_entity('Directory', name=u'sub1', parent=topd) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
424 |
sub2 = cnx.create_entity('Directory', name=u'sub2', parent=topd) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
425 |
cnx.commit() |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
426 |
|
11064
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
427 |
attrs = {'name-subject:%s' % sub1.eid: ''} |
113e9da47afc
[edit controller] Cancel RQL queries to be performed on entities to be deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11063
diff
changeset
|
428 |
self._edit_parent(sub1.eid, parent_eid=None, **attrs) |
11063
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
429 |
|
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
430 |
with self.admin_access.repo_cnx() as cnx: |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
431 |
self.assertTrue(cnx.find('Directory', eid=topd.eid)) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
432 |
self.assertFalse(cnx.find('Directory', eid=sub1.eid)) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
433 |
self.assertTrue(cnx.find('Directory', eid=sub2.eid)) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
434 |
|
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
435 |
def test_object_subentity_removal(self): |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
436 |
"""Editcontroller: detaching a composite relation removes the subentity |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
437 |
(edit from the object side) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
438 |
""" |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
439 |
with self.admin_access.repo_cnx() as cnx: |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
440 |
topd = cnx.create_entity('Directory', name=u'topd') |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
441 |
sub1 = cnx.create_entity('Directory', name=u'sub1', parent=topd) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
442 |
sub2 = cnx.create_entity('Directory', name=u'sub2', parent=topd) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
443 |
cnx.commit() |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
444 |
|
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
445 |
self._edit_parent(topd.eid, parent_eid=sub1.eid, role='object') |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
446 |
|
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
447 |
with self.admin_access.repo_cnx() as cnx: |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
448 |
self.assertTrue(cnx.find('Directory', eid=topd.eid)) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
449 |
self.assertTrue(cnx.find('Directory', eid=sub1.eid)) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
450 |
self.assertFalse(cnx.find('Directory', eid=sub2.eid)) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
451 |
|
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
452 |
def test_reparent_subentity(self): |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
453 |
"Editcontroller: re-parenting a subentity does not remove it" |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
454 |
with self.admin_access.repo_cnx() as cnx: |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
455 |
top1 = cnx.create_entity('Directory', name=u'top1') |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
456 |
top2 = cnx.create_entity('Directory', name=u'top2') |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
457 |
subd = cnx.create_entity('Directory', name=u'subd', parent=top1) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
458 |
cnx.commit() |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
459 |
|
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
460 |
self._edit_parent(subd.eid, parent_eid=top2.eid) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
461 |
|
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
462 |
with self.admin_access.repo_cnx() as cnx: |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
463 |
self.assertTrue(cnx.find('Directory', eid=top1.eid)) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
464 |
self.assertTrue(cnx.find('Directory', eid=top2.eid)) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
465 |
self.assertTrue(cnx.find('Directory', eid=subd.eid)) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
466 |
self.assertEqual( |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
467 |
cnx.find('Directory', eid=subd.eid).one().parent[0], top2) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
468 |
|
11066
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
469 |
def test_reparent_subentity_inlined(self): |
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
470 |
"""Editcontroller: re-parenting a subentity does not remove it |
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
471 |
(inlined case)""" |
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
472 |
with self.admin_access.repo_cnx() as cnx: |
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
473 |
version1 = cnx.create_entity('Version', name=u'version1') |
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
474 |
version2 = cnx.create_entity('Version', name=u'version2') |
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
475 |
ticket = cnx.create_entity('Ticket', title=u'ticket', |
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
476 |
in_version=version1) |
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
477 |
cnx.commit() |
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
478 |
|
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
479 |
self._edit_in_version(ticket.eid, version_eid=version2.eid) |
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
480 |
|
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
481 |
with self.admin_access.repo_cnx() as cnx: |
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
482 |
self.assertTrue(cnx.find('Version', eid=version1.eid)) |
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
483 |
self.assertTrue(cnx.find('Version', eid=version2.eid)) |
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
484 |
self.assertTrue(cnx.find('Ticket', eid=ticket.eid)) |
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
485 |
self.assertEqual( |
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
486 |
cnx.find('Ticket', eid=ticket.eid).one().in_version[0], version2) |
dcbb64d3a1d9
[edit controller] Fix composite entity reparenting when inlined
Florent Cayré <florent.cayre@logilab.fr>
parents:
11065
diff
changeset
|
487 |
|
11063
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
488 |
def test_subject_mixed_composite_subentity_removal_1(self): |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
489 |
"""Editcontroller: detaching several subentities respects each rdef's |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
490 |
compositeness - Remove non composite |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
491 |
""" |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
492 |
with self.admin_access.repo_cnx() as cnx: |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
493 |
topd = cnx.create_entity('Directory', name=u'topd') |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
494 |
fs = cnx.create_entity('Filesystem', name=u'/tmp') |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
495 |
subd = cnx.create_entity('Directory', name=u'subd', |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
496 |
parent=(topd, fs)) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
497 |
cnx.commit() |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
498 |
|
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
499 |
self._edit_parent(subd.eid, parent_eid=topd.eid) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
500 |
|
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
501 |
with self.admin_access.repo_cnx() as cnx: |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
502 |
self.assertTrue(cnx.find('Directory', eid=topd.eid)) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
503 |
self.assertTrue(cnx.find('Directory', eid=subd.eid)) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
504 |
self.assertTrue(cnx.find('Filesystem', eid=fs.eid)) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
505 |
self.assertEqual(cnx.find('Directory', eid=subd.eid).one().parent, |
11891
67185e65f020
[entity/optimization] Cache rset when entity.related is called with entities=False
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11828
diff
changeset
|
506 |
(topd,)) |
11063
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
507 |
|
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
508 |
def test_subject_mixed_composite_subentity_removal_2(self): |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
509 |
"""Editcontroller: detaching several subentities respects each rdef's |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
510 |
compositeness - Remove composite |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
511 |
""" |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
512 |
with self.admin_access.repo_cnx() as cnx: |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
513 |
topd = cnx.create_entity('Directory', name=u'topd') |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
514 |
fs = cnx.create_entity('Filesystem', name=u'/tmp') |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
515 |
subd = cnx.create_entity('Directory', name=u'subd', |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
516 |
parent=(topd, fs)) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
517 |
cnx.commit() |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
518 |
|
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
519 |
self._edit_parent(subd.eid, parent_eid=fs.eid) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
520 |
|
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
521 |
with self.admin_access.repo_cnx() as cnx: |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
522 |
self.assertTrue(cnx.find('Directory', eid=topd.eid)) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
523 |
self.assertFalse(cnx.find('Directory', eid=subd.eid)) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
524 |
self.assertTrue(cnx.find('Filesystem', eid=fs.eid)) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
525 |
|
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
526 |
def test_object_mixed_composite_subentity_removal_1(self): |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
527 |
"""Editcontroller: detaching several subentities respects each rdef's |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
528 |
compositeness - Remove non composite |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
529 |
""" |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
530 |
with self.admin_access.repo_cnx() as cnx: |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
531 |
topd = cnx.create_entity('Directory', name=u'topd') |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
532 |
fs = cnx.create_entity('Filesystem', name=u'/tmp') |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
533 |
subd = cnx.create_entity('Directory', name=u'subd', |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
534 |
parent=(topd, fs)) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
535 |
cnx.commit() |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
536 |
|
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
537 |
self._edit_parent(fs.eid, parent_eid=None, role='object', |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
538 |
etype='Filesystem') |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
539 |
|
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
540 |
with self.admin_access.repo_cnx() as cnx: |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
541 |
self.assertTrue(cnx.find('Directory', eid=topd.eid)) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
542 |
self.assertTrue(cnx.find('Directory', eid=subd.eid)) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
543 |
self.assertTrue(cnx.find('Filesystem', eid=fs.eid)) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
544 |
self.assertEqual(cnx.find('Directory', eid=subd.eid).one().parent, |
11891
67185e65f020
[entity/optimization] Cache rset when entity.related is called with entities=False
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11828
diff
changeset
|
545 |
(topd,)) |
11063
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
546 |
|
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
547 |
def test_object_mixed_composite_subentity_removal_2(self): |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
548 |
"""Editcontroller: detaching several subentities respects each rdef's |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
549 |
compositeness - Remove composite |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
550 |
""" |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
551 |
with self.admin_access.repo_cnx() as cnx: |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
552 |
topd = cnx.create_entity('Directory', name=u'topd') |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
553 |
fs = cnx.create_entity('Filesystem', name=u'/tmp') |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
554 |
subd = cnx.create_entity('Directory', name=u'subd', |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
555 |
parent=(topd, fs)) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
556 |
cnx.commit() |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
557 |
|
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
558 |
self._edit_parent(topd.eid, parent_eid=None, role='object') |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
559 |
|
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
560 |
with self.admin_access.repo_cnx() as cnx: |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
561 |
self.assertTrue(cnx.find('Directory', eid=topd.eid)) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
562 |
self.assertFalse(cnx.find('Directory', eid=subd.eid)) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
563 |
self.assertTrue(cnx.find('Filesystem', eid=fs.eid)) |
de20b0903d7d
[edit controller] fix handling of removal of subentities from an edit form
Florent Cayré <florent.cayre@logilab.fr>
parents:
11062
diff
changeset
|
564 |
|
11065
c7dbd10648e6
[forms] Do not raise errors on composite required relation being deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11064
diff
changeset
|
565 |
def test_delete_mandatory_composite(self): |
c7dbd10648e6
[forms] Do not raise errors on composite required relation being deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11064
diff
changeset
|
566 |
with self.admin_access.repo_cnx() as cnx: |
c7dbd10648e6
[forms] Do not raise errors on composite required relation being deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11064
diff
changeset
|
567 |
perm = cnx.create_entity('DirectoryPermission') |
c7dbd10648e6
[forms] Do not raise errors on composite required relation being deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11064
diff
changeset
|
568 |
mydir = cnx.create_entity('Directory', name=u'dir', |
c7dbd10648e6
[forms] Do not raise errors on composite required relation being deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11064
diff
changeset
|
569 |
has_permission=perm) |
c7dbd10648e6
[forms] Do not raise errors on composite required relation being deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11064
diff
changeset
|
570 |
cnx.commit() |
c7dbd10648e6
[forms] Do not raise errors on composite required relation being deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11064
diff
changeset
|
571 |
|
c7dbd10648e6
[forms] Do not raise errors on composite required relation being deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11064
diff
changeset
|
572 |
with self.admin_access.web_request() as req: |
11183
505195fe444d
[web/test] replace unicode with six.text_type
Julien Cristau <julien.cristau@logilab.fr>
parents:
11180
diff
changeset
|
573 |
dir_eid = text_type(mydir.eid) |
505195fe444d
[web/test] replace unicode with six.text_type
Julien Cristau <julien.cristau@logilab.fr>
parents:
11180
diff
changeset
|
574 |
perm_eid = text_type(perm.eid) |
11065
c7dbd10648e6
[forms] Do not raise errors on composite required relation being deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11064
diff
changeset
|
575 |
req.form = { |
c7dbd10648e6
[forms] Do not raise errors on composite required relation being deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11064
diff
changeset
|
576 |
'eid': [dir_eid, perm_eid], |
c7dbd10648e6
[forms] Do not raise errors on composite required relation being deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11064
diff
changeset
|
577 |
'__maineid' : dir_eid, |
c7dbd10648e6
[forms] Do not raise errors on composite required relation being deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11064
diff
changeset
|
578 |
'__type:%s' % dir_eid: 'Directory', |
c7dbd10648e6
[forms] Do not raise errors on composite required relation being deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11064
diff
changeset
|
579 |
'__type:%s' % perm_eid: 'DirectoryPermission', |
c7dbd10648e6
[forms] Do not raise errors on composite required relation being deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11064
diff
changeset
|
580 |
'_cw_entity_fields:%s' % dir_eid: '', |
c7dbd10648e6
[forms] Do not raise errors on composite required relation being deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11064
diff
changeset
|
581 |
'_cw_entity_fields:%s' % perm_eid: 'has_permission-object', |
c7dbd10648e6
[forms] Do not raise errors on composite required relation being deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11064
diff
changeset
|
582 |
'has_permission-object:%s' % perm_eid: '', |
c7dbd10648e6
[forms] Do not raise errors on composite required relation being deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11064
diff
changeset
|
583 |
} |
c7dbd10648e6
[forms] Do not raise errors on composite required relation being deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11064
diff
changeset
|
584 |
path, _params = self.expect_redirect_handle_request(req, 'edit') |
c7dbd10648e6
[forms] Do not raise errors on composite required relation being deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11064
diff
changeset
|
585 |
self.assertTrue(req.find('Directory', eid=mydir.eid)) |
c7dbd10648e6
[forms] Do not raise errors on composite required relation being deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11064
diff
changeset
|
586 |
self.assertFalse(req.find('DirectoryPermission', eid=perm.eid)) |
c7dbd10648e6
[forms] Do not raise errors on composite required relation being deleted
Florent Cayré <florent.cayre@logilab.fr>
parents:
11064
diff
changeset
|
587 |
|
9428
946aded614f3
[web error] exception may not have a 'status' attribute, generating an AttributeError that hides the original error. Closes #3381670
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8695
diff
changeset
|
588 |
def test_ajax_view_raise_arbitrary_error(self): |
946aded614f3
[web error] exception may not have a 'status' attribute, generating an AttributeError that hides the original error. Closes #3381670
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8695
diff
changeset
|
589 |
class ErrorAjaxView(view.View): |
946aded614f3
[web error] exception may not have a 'status' attribute, generating an AttributeError that hides the original error. Closes #3381670
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8695
diff
changeset
|
590 |
__regid__ = 'test.ajax.error' |
11170
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
591 |
|
9428
946aded614f3
[web error] exception may not have a 'status' attribute, generating an AttributeError that hides the original error. Closes #3381670
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8695
diff
changeset
|
592 |
def call(self): |
946aded614f3
[web error] exception may not have a 'status' attribute, generating an AttributeError that hides the original error. Closes #3381670
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8695
diff
changeset
|
593 |
raise Exception('whatever') |
11170
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
594 |
|
9428
946aded614f3
[web error] exception may not have a 'status' attribute, generating an AttributeError that hides the original error. Closes #3381670
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8695
diff
changeset
|
595 |
with self.temporary_appobjects(ErrorAjaxView): |
946aded614f3
[web error] exception may not have a 'status' attribute, generating an AttributeError that hides the original error. Closes #3381670
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8695
diff
changeset
|
596 |
with real_error_handling(self.app) as app: |
11725
904ee9cd0cf9
[web/application] remove `path` argument from CubicwebPublisher methods
Laura Médioni <laura.medioni@logilab.fr>
parents:
11699
diff
changeset
|
597 |
with self.admin_access.web_request(vid='test.ajax.error', url='') as req: |
9641
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
598 |
req.ajax_request = True |
11725
904ee9cd0cf9
[web/application] remove `path` argument from CubicwebPublisher methods
Laura Médioni <laura.medioni@logilab.fr>
parents:
11699
diff
changeset
|
599 |
app.handle_request(req) |
10604
d4bf85db41f2
[py3k] import HTTP client constants and exceptions using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents:
10356
diff
changeset
|
600 |
self.assertEqual(http_client.INTERNAL_SERVER_ERROR, |
9428
946aded614f3
[web error] exception may not have a 'status' attribute, generating an AttributeError that hides the original error. Closes #3381670
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8695
diff
changeset
|
601 |
req.status_out) |
1802
d628defebc17
delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
1490
diff
changeset
|
602 |
|
0 | 603 |
def _test_cleaned(self, kwargs, injected, cleaned): |
9641
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
604 |
with self.admin_access.web_request(**kwargs) as req: |
11725
904ee9cd0cf9
[web/application] remove `path` argument from CubicwebPublisher methods
Laura Médioni <laura.medioni@logilab.fr>
parents:
11699
diff
changeset
|
605 |
page = self.app_handle_request(req) |
10735
cb83ba66fa61
[py3k] CubicWebTC.app_handle_request returns bytes
Rémi Cardona <remi.cardona@logilab.fr>
parents:
10734
diff
changeset
|
606 |
self.assertNotIn(injected.encode('ascii'), page) |
cb83ba66fa61
[py3k] CubicWebTC.app_handle_request returns bytes
Rémi Cardona <remi.cardona@logilab.fr>
parents:
10734
diff
changeset
|
607 |
self.assertIn(cleaned.encode('ascii'), page) |
1802
d628defebc17
delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
1490
diff
changeset
|
608 |
|
0 | 609 |
def test_nonregr_script_kiddies(self): |
610 |
"""test against current script injection""" |
|
611 |
injected = '<i>toto</i>' |
|
612 |
cleaned = 'toto' |
|
11180
c2a8317d4eec
[test] Replace remaining generative tests by subtests
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11170
diff
changeset
|
613 |
for kwargs in ({'vid': injected}, {'vtitle': injected}): |
c2a8317d4eec
[test] Replace remaining generative tests by subtests
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11170
diff
changeset
|
614 |
with self.subTest(**kwargs): |
c2a8317d4eec
[test] Replace remaining generative tests by subtests
Denis Laxalde <denis.laxalde@logilab.fr>
parents:
11170
diff
changeset
|
615 |
self._test_cleaned(kwargs, injected, cleaned) |
1802
d628defebc17
delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
1490
diff
changeset
|
616 |
|
0 | 617 |
def test_site_wide_eproperties_sync(self): |
618 |
# XXX work in all-in-one configuration but not in twisted for instance |
|
619 |
# in which case we need a kindof repo -> http server notification |
|
620 |
# protocol |
|
621 |
vreg = self.app.vreg |
|
622 |
# default value |
|
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5584
diff
changeset
|
623 |
self.assertEqual(vreg.property_value('ui.language'), 'en') |
9641
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
624 |
with self.admin_access.client_cnx() as cnx: |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
625 |
cnx.execute('INSERT CWProperty X: X value "fr", X pkey "ui.language"') |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
626 |
self.assertEqual(vreg.property_value('ui.language'), 'en') |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
627 |
cnx.commit() |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
628 |
self.assertEqual(vreg.property_value('ui.language'), 'fr') |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
629 |
cnx.execute('SET X value "de" WHERE X pkey "ui.language"') |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
630 |
self.assertEqual(vreg.property_value('ui.language'), 'fr') |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
631 |
cnx.commit() |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
632 |
self.assertEqual(vreg.property_value('ui.language'), 'de') |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
633 |
cnx.execute('DELETE CWProperty X WHERE X pkey "ui.language"') |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
634 |
self.assertEqual(vreg.property_value('ui.language'), 'de') |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
635 |
cnx.commit() |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
636 |
self.assertEqual(vreg.property_value('ui.language'), 'en') |
0 | 637 |
|
638 |
# authentication tests #################################################### |
|
639 |
||
3657
706d7bf0ae3d
factor out code reusable for authentication tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3524
diff
changeset
|
640 |
def test_http_auth_no_anon(self): |
5223
6abd6e3599f4
#773448: refactor session and 'no connection' handling, by introducing proper web session. We should now be able to see page even when no anon is configured, and be redirected to the login form as soon as one tries to do a query.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
641 |
req, origsession = self.init_authentication('http') |
3657
706d7bf0ae3d
factor out code reusable for authentication tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3524
diff
changeset
|
642 |
self.assertAuthFailure(req) |
11725
904ee9cd0cf9
[web/application] remove `path` argument from CubicwebPublisher methods
Laura Médioni <laura.medioni@logilab.fr>
parents:
11699
diff
changeset
|
643 |
self.app.handle_request(req) |
9017
aa709bc6b6c1
[application/connect] simplify connection logic
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
8695
diff
changeset
|
644 |
self.assertEqual(401, req.status_out) |
aa709bc6b6c1
[application/connect] simplify connection logic
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
8695
diff
changeset
|
645 |
clear_cache(req, 'get_authorization') |
10779
6cef304aca4c
[web] base64 works on bytes not str (py3k)
Julien Cristau <julien.cristau@logilab.fr>
parents:
10735
diff
changeset
|
646 |
authstr = base64.encodestring(('%s:%s' % (self.admlogin, self.admpassword)).encode('ascii')) |
6cef304aca4c
[web] base64 works on bytes not str (py3k)
Julien Cristau <julien.cristau@logilab.fr>
parents:
10735
diff
changeset
|
647 |
req.set_request_header('Authorization', 'basic %s' % authstr.decode('ascii')) |
5223
6abd6e3599f4
#773448: refactor session and 'no connection' handling, by introducing proper web session. We should now be able to see page even when no anon is configured, and be redirected to the login form as soon as one tries to do a query.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
648 |
self.assertAuthSuccess(req, origsession) |
11725
904ee9cd0cf9
[web/application] remove `path` argument from CubicwebPublisher methods
Laura Médioni <laura.medioni@logilab.fr>
parents:
11699
diff
changeset
|
649 |
req._url = 'logout' |
904ee9cd0cf9
[web/application] remove `path` argument from CubicwebPublisher methods
Laura Médioni <laura.medioni@logilab.fr>
parents:
11699
diff
changeset
|
650 |
self.assertRaises(LogOut, self.app_handle_request, req) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5584
diff
changeset
|
651 |
self.assertEqual(len(self.open_sessions), 0) |
0 | 652 |
|
653 |
def test_cookie_auth_no_anon(self): |
|
5223
6abd6e3599f4
#773448: refactor session and 'no connection' handling, by introducing proper web session. We should now be able to see page even when no anon is configured, and be redirected to the login form as soon as one tries to do a query.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
654 |
req, origsession = self.init_authentication('cookie') |
3657
706d7bf0ae3d
factor out code reusable for authentication tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3524
diff
changeset
|
655 |
self.assertAuthFailure(req) |
8311
76a44a0d7f4b
[login] split authentication logic from post authentication logic (closes #2200755)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
7876
diff
changeset
|
656 |
try: |
11725
904ee9cd0cf9
[web/application] remove `path` argument from CubicwebPublisher methods
Laura Médioni <laura.medioni@logilab.fr>
parents:
11699
diff
changeset
|
657 |
form = self.app.handle_request(req) |
11170
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
658 |
except Redirect: |
8311
76a44a0d7f4b
[login] split authentication logic from post authentication logic (closes #2200755)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
7876
diff
changeset
|
659 |
self.fail('anonymous user should get login form') |
9017
aa709bc6b6c1
[application/connect] simplify connection logic
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
8695
diff
changeset
|
660 |
clear_cache(req, 'get_authorization') |
10780
a96ed0acc556
[web/test] CubicWebPublisher.handle_request returns bytes
Julien Cristau <julien.cristau@logilab.fr>
parents:
10779
diff
changeset
|
661 |
self.assertIn(b'__login', form) |
a96ed0acc556
[web/test] CubicWebPublisher.handle_request returns bytes
Julien Cristau <julien.cristau@logilab.fr>
parents:
10779
diff
changeset
|
662 |
self.assertIn(b'__password', form) |
11170
d034791621ad
pep8 unittest_application and unittest_formfields
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11129
diff
changeset
|
663 |
self.assertFalse(req.cnx) # Mock cnx are False |
6848
f87cd875c6db
[web session] cleanup session/authentication api: we don't have anymore to store authentication information on web session since the auto-reconnection feature has been dropped (eg in 3.10)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6797
diff
changeset
|
664 |
req.form['__login'] = self.admlogin |
f87cd875c6db
[web session] cleanup session/authentication api: we don't have anymore to store authentication information on web session since the auto-reconnection feature has been dropped (eg in 3.10)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6797
diff
changeset
|
665 |
req.form['__password'] = self.admpassword |
5223
6abd6e3599f4
#773448: refactor session and 'no connection' handling, by introducing proper web session. We should now be able to see page even when no anon is configured, and be redirected to the login form as soon as one tries to do a query.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
666 |
self.assertAuthSuccess(req, origsession) |
11725
904ee9cd0cf9
[web/application] remove `path` argument from CubicwebPublisher methods
Laura Médioni <laura.medioni@logilab.fr>
parents:
11699
diff
changeset
|
667 |
req._url = 'logout' |
904ee9cd0cf9
[web/application] remove `path` argument from CubicwebPublisher methods
Laura Médioni <laura.medioni@logilab.fr>
parents:
11699
diff
changeset
|
668 |
self.assertRaises(LogOut, self.app_handle_request, req) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5584
diff
changeset
|
669 |
self.assertEqual(len(self.open_sessions), 0) |
0 | 670 |
|
1490
6b024694d493
add allow-email-login option
Florent <florent@secondweb.fr>
parents:
1489
diff
changeset
|
671 |
def test_login_by_email(self): |
9641
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
672 |
with self.admin_access.client_cnx() as cnx: |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
673 |
login = cnx.user.login |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
674 |
address = login + u'@localhost' |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
675 |
cnx.execute('INSERT EmailAddress X: X address %(address)s, U primary_email X ' |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
676 |
'WHERE U login %(login)s', {'address': address, 'login': login}) |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
677 |
cnx.commit() |
5223
6abd6e3599f4
#773448: refactor session and 'no connection' handling, by introducing proper web session. We should now be able to see page even when no anon is configured, and be redirected to the login form as soon as one tries to do a query.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
678 |
req, origsession = self.init_authentication('cookie') |
1490
6b024694d493
add allow-email-login option
Florent <florent@secondweb.fr>
parents:
1489
diff
changeset
|
679 |
self.set_option('allow-email-login', True) |
1489
08acef58ad08
add a test regarding login with a primary email
Florent <florent@secondweb.fr>
parents:
1398
diff
changeset
|
680 |
req.form['__login'] = address |
6848
f87cd875c6db
[web session] cleanup session/authentication api: we don't have anymore to store authentication information on web session since the auto-reconnection feature has been dropped (eg in 3.10)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6797
diff
changeset
|
681 |
req.form['__password'] = self.admpassword |
5223
6abd6e3599f4
#773448: refactor session and 'no connection' handling, by introducing proper web session. We should now be able to see page even when no anon is configured, and be redirected to the login form as soon as one tries to do a query.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
682 |
self.assertAuthSuccess(req, origsession) |
11725
904ee9cd0cf9
[web/application] remove `path` argument from CubicwebPublisher methods
Laura Médioni <laura.medioni@logilab.fr>
parents:
11699
diff
changeset
|
683 |
req._url = 'logout' |
904ee9cd0cf9
[web/application] remove `path` argument from CubicwebPublisher methods
Laura Médioni <laura.medioni@logilab.fr>
parents:
11699
diff
changeset
|
684 |
self.assertRaises(LogOut, self.app_handle_request, req) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5584
diff
changeset
|
685 |
self.assertEqual(len(self.open_sessions), 0) |
1489
08acef58ad08
add a test regarding login with a primary email
Florent <florent@secondweb.fr>
parents:
1398
diff
changeset
|
686 |
|
0 | 687 |
def _reset_cookie(self, req): |
688 |
# preparing the suite of the test |
|
689 |
# set session id in cookie |
|
10605
61521bee2b68
[py3k] import SimpleCookie using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents:
10604
diff
changeset
|
690 |
cookie = SimpleCookie() |
6797
90d687bd4c52
[web test] fix authentication test: session cookie should now be computed by the session handler (changed in cw 3.10.6)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6796
diff
changeset
|
691 |
sessioncookie = self.app.session_handler.session_cookie(req) |
90d687bd4c52
[web test] fix authentication test: session cookie should now be computed by the session handler (changed in cw 3.10.6)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6796
diff
changeset
|
692 |
cookie[sessioncookie] = req.session.sessionid |
7224
e5833657c646
[testlib] make a clear distinction between input / output HTTP headers
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
7163
diff
changeset
|
693 |
req.set_request_header('Cookie', cookie[sessioncookie].OutputString(), |
e5833657c646
[testlib] make a clear distinction between input / output HTTP headers
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
7163
diff
changeset
|
694 |
raw=True) |
0 | 695 |
clear_cache(req, 'get_authorization') |
1802
d628defebc17
delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
1490
diff
changeset
|
696 |
|
3657
706d7bf0ae3d
factor out code reusable for authentication tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3524
diff
changeset
|
697 |
def _test_auth_anon(self, req): |
9019
e08f9c55dab5
[application] call req.set_session in application.main_handle_request
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
9017
diff
changeset
|
698 |
asession = self.app.get_session(req) |
9071
46885bfa4150
Use new repoapi for the web stack
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
9069
diff
changeset
|
699 |
# important otherwise _reset_cookie will not use the right session |
11699
b48020a80dc3
Store user groups and properties as session data
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11366
diff
changeset
|
700 |
cnx = asession.new_cnx() |
b48020a80dc3
Store user groups and properties as session data
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11366
diff
changeset
|
701 |
with cnx: |
b48020a80dc3
Store user groups and properties as session data
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11366
diff
changeset
|
702 |
req.set_cnx(cnx) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5584
diff
changeset
|
703 |
self.assertEqual(len(self.open_sessions), 1) |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5584
diff
changeset
|
704 |
self.assertEqual(asession.login, 'anon') |
7791
31bb51ea5485
[deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
7584
diff
changeset
|
705 |
self.assertTrue(asession.anonymous_session) |
3657
706d7bf0ae3d
factor out code reusable for authentication tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3524
diff
changeset
|
706 |
self._reset_cookie(req) |
706d7bf0ae3d
factor out code reusable for authentication tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3524
diff
changeset
|
707 |
|
0 | 708 |
def _test_anon_auth_fail(self, req): |
9071
46885bfa4150
Use new repoapi for the web stack
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
9069
diff
changeset
|
709 |
self.assertEqual(1, len(self.open_sessions)) |
9019
e08f9c55dab5
[application] call req.set_session in application.main_handle_request
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
9017
diff
changeset
|
710 |
session = self.app.get_session(req) |
11699
b48020a80dc3
Store user groups and properties as session data
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11366
diff
changeset
|
711 |
cnx = session.new_cnx() |
b48020a80dc3
Store user groups and properties as session data
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11366
diff
changeset
|
712 |
with cnx: |
b48020a80dc3
Store user groups and properties as session data
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11366
diff
changeset
|
713 |
# important otherwise _reset_cookie will not use the right session |
b48020a80dc3
Store user groups and properties as session data
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11366
diff
changeset
|
714 |
req.set_cnx(cnx) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5584
diff
changeset
|
715 |
self.assertEqual(req.message, 'authentication failure') |
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5584
diff
changeset
|
716 |
self.assertEqual(req.session.anonymous_session, True) |
9071
46885bfa4150
Use new repoapi for the web stack
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
9069
diff
changeset
|
717 |
self.assertEqual(1, len(self.open_sessions)) |
0 | 718 |
self._reset_cookie(req) |
1802
d628defebc17
delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
1490
diff
changeset
|
719 |
|
0 | 720 |
def test_http_auth_anon_allowed(self): |
5223
6abd6e3599f4
#773448: refactor session and 'no connection' handling, by introducing proper web session. We should now be able to see page even when no anon is configured, and be redirected to the login form as soon as one tries to do a query.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
721 |
req, origsession = self.init_authentication('http', 'anon') |
0 | 722 |
self._test_auth_anon(req) |
10779
6cef304aca4c
[web] base64 works on bytes not str (py3k)
Julien Cristau <julien.cristau@logilab.fr>
parents:
10735
diff
changeset
|
723 |
authstr = base64.encodestring(b'toto:pouet') |
6cef304aca4c
[web] base64 works on bytes not str (py3k)
Julien Cristau <julien.cristau@logilab.fr>
parents:
10735
diff
changeset
|
724 |
req.set_request_header('Authorization', 'basic %s' % authstr.decode('ascii')) |
0 | 725 |
self._test_anon_auth_fail(req) |
10779
6cef304aca4c
[web] base64 works on bytes not str (py3k)
Julien Cristau <julien.cristau@logilab.fr>
parents:
10735
diff
changeset
|
726 |
authstr = base64.encodestring(('%s:%s' % (self.admlogin, self.admpassword)).encode('ascii')) |
6cef304aca4c
[web] base64 works on bytes not str (py3k)
Julien Cristau <julien.cristau@logilab.fr>
parents:
10735
diff
changeset
|
727 |
req.set_request_header('Authorization', 'basic %s' % authstr.decode('ascii')) |
5223
6abd6e3599f4
#773448: refactor session and 'no connection' handling, by introducing proper web session. We should now be able to see page even when no anon is configured, and be redirected to the login form as soon as one tries to do a query.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
728 |
self.assertAuthSuccess(req, origsession) |
11725
904ee9cd0cf9
[web/application] remove `path` argument from CubicwebPublisher methods
Laura Médioni <laura.medioni@logilab.fr>
parents:
11699
diff
changeset
|
729 |
req._url = 'logout' |
904ee9cd0cf9
[web/application] remove `path` argument from CubicwebPublisher methods
Laura Médioni <laura.medioni@logilab.fr>
parents:
11699
diff
changeset
|
730 |
self.assertRaises(LogOut, self.app_handle_request, req) |
6340
470d8e828fda
[test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5584
diff
changeset
|
731 |
self.assertEqual(len(self.open_sessions), 0) |
1802
d628defebc17
delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
1490
diff
changeset
|
732 |
|
0 | 733 |
def test_cookie_auth_anon_allowed(self): |
5223
6abd6e3599f4
#773448: refactor session and 'no connection' handling, by introducing proper web session. We should now be able to see page even when no anon is configured, and be redirected to the login form as soon as one tries to do a query.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
734 |
req, origsession = self.init_authentication('cookie', 'anon') |
0 | 735 |
self._test_auth_anon(req) |
736 |
req.form['__login'] = 'toto' |
|
737 |
req.form['__password'] = 'pouet' |
|
738 |
self._test_anon_auth_fail(req) |
|
6848
f87cd875c6db
[web session] cleanup session/authentication api: we don't have anymore to store authentication information on web session since the auto-reconnection feature has been dropped (eg in 3.10)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6797
diff
changeset
|
739 |
req.form['__login'] = self.admlogin |
f87cd875c6db
[web session] cleanup session/authentication api: we don't have anymore to store authentication information on web session since the auto-reconnection feature has been dropped (eg in 3.10)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
6797
diff
changeset
|
740 |
req.form['__password'] = self.admpassword |
5223
6abd6e3599f4
#773448: refactor session and 'no connection' handling, by introducing proper web session. We should now be able to see page even when no anon is configured, and be redirected to the login form as soon as one tries to do a query.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
5174
diff
changeset
|
741 |
self.assertAuthSuccess(req, origsession) |
11725
904ee9cd0cf9
[web/application] remove `path` argument from CubicwebPublisher methods
Laura Médioni <laura.medioni@logilab.fr>
parents:
11699
diff
changeset
|
742 |
req._url = 'logout' |
904ee9cd0cf9
[web/application] remove `path` argument from CubicwebPublisher methods
Laura Médioni <laura.medioni@logilab.fr>
parents:
11699
diff
changeset
|
743 |
self.assertRaises(LogOut, self.app_handle_request, req) |
9071
46885bfa4150
Use new repoapi for the web stack
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
9069
diff
changeset
|
744 |
self.assertEqual(0, len(self.open_sessions)) |
0 | 745 |
|
7876
df15d194a134
[views] implement json / jsonp export views (closes #1942658)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
7791
diff
changeset
|
746 |
def test_anonymized_request(self): |
9641
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
747 |
with self.admin_access.web_request() as req: |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
748 |
self.assertEqual(self.admlogin, req.session.user.login) |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
749 |
# admin should see anon + admin |
9642
9a42eaeea263
[web/test] avoid deprecation warnings from find_entities()
Julien Cristau <julien.cristau@logilab.fr>
parents:
9641
diff
changeset
|
750 |
self.assertEqual(2, len(list(req.find('CWUser')))) |
9641
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
751 |
with anonymized_request(req): |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
752 |
self.assertEqual('anon', req.session.login, 'anon') |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
753 |
# anon should only see anon user |
9642
9a42eaeea263
[web/test] avoid deprecation warnings from find_entities()
Julien Cristau <julien.cristau@logilab.fr>
parents:
9641
diff
changeset
|
754 |
self.assertEqual(1, len(list(req.find('CWUser')))) |
9641
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
755 |
self.assertEqual(self.admlogin, req.session.login) |
9642
9a42eaeea263
[web/test] avoid deprecation warnings from find_entities()
Julien Cristau <julien.cristau@logilab.fr>
parents:
9641
diff
changeset
|
756 |
self.assertEqual(2, len(list(req.find('CWUser')))) |
7876
df15d194a134
[views] implement json / jsonp export views (closes #1942658)
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents:
7791
diff
changeset
|
757 |
|
3523
16880e7ee3fa
don't accept None to avoid error
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
3265
diff
changeset
|
758 |
def test_non_regr_optional_first_var(self): |
9641
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
759 |
with self.admin_access.web_request() as req: |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
760 |
# expect a rset with None in [0][0] |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
761 |
req.form['rql'] = 'rql:Any OV1, X WHERE X custom_workflow OV1?' |
4147cc32371d
[web/test] port unittest_application to new 3.19 API
Julien Cristau <julien.cristau@logilab.fr>
parents:
9478
diff
changeset
|
762 |
self.app_handle_request(req) |
0 | 763 |
|
11725
904ee9cd0cf9
[web/application] remove `path` argument from CubicwebPublisher methods
Laura Médioni <laura.medioni@logilab.fr>
parents:
11699
diff
changeset
|
764 |
def test_handle_deprecation(self): |
904ee9cd0cf9
[web/application] remove `path` argument from CubicwebPublisher methods
Laura Médioni <laura.medioni@logilab.fr>
parents:
11699
diff
changeset
|
765 |
"""Test deprecation warning for *_handle methods.""" |
11800
3cd5ac8d43ed
Fix unexpected req.relative_path() when calling CWTC.app_handle_request with path argument
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
11799
diff
changeset
|
766 |
with self.admin_access.web_request(url='foo') as req: |
11725
904ee9cd0cf9
[web/application] remove `path` argument from CubicwebPublisher methods
Laura Médioni <laura.medioni@logilab.fr>
parents:
11699
diff
changeset
|
767 |
with self.assertWarns(DeprecationWarning) as cm: |
904ee9cd0cf9
[web/application] remove `path` argument from CubicwebPublisher methods
Laura Médioni <laura.medioni@logilab.fr>
parents:
11699
diff
changeset
|
768 |
self.app.core_handle(req, 'foo') |
904ee9cd0cf9
[web/application] remove `path` argument from CubicwebPublisher methods
Laura Médioni <laura.medioni@logilab.fr>
parents:
11699
diff
changeset
|
769 |
self.assertIn('path argument got removed from "core_handle"', |
904ee9cd0cf9
[web/application] remove `path` argument from CubicwebPublisher methods
Laura Médioni <laura.medioni@logilab.fr>
parents:
11699
diff
changeset
|
770 |
str(cm.warning)) |
904ee9cd0cf9
[web/application] remove `path` argument from CubicwebPublisher methods
Laura Médioni <laura.medioni@logilab.fr>
parents:
11699
diff
changeset
|
771 |
with self.assertWarns(DeprecationWarning) as cm: |
904ee9cd0cf9
[web/application] remove `path` argument from CubicwebPublisher methods
Laura Médioni <laura.medioni@logilab.fr>
parents:
11699
diff
changeset
|
772 |
self.app.main_handle_request('foo', req) |
904ee9cd0cf9
[web/application] remove `path` argument from CubicwebPublisher methods
Laura Médioni <laura.medioni@logilab.fr>
parents:
11699
diff
changeset
|
773 |
self.assertIn('entry point arguments are now (req, path)', |
904ee9cd0cf9
[web/application] remove `path` argument from CubicwebPublisher methods
Laura Médioni <laura.medioni@logilab.fr>
parents:
11699
diff
changeset
|
774 |
str(cm.warning)) |
904ee9cd0cf9
[web/application] remove `path` argument from CubicwebPublisher methods
Laura Médioni <laura.medioni@logilab.fr>
parents:
11699
diff
changeset
|
775 |
|
9428
946aded614f3
[web error] exception may not have a 'status' attribute, generating an AttributeError that hides the original error. Closes #3381670
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents:
8695
diff
changeset
|
776 |
|
0 | 777 |
if __name__ == '__main__': |
778 |
unittest_main() |