forked from Kotti/Kotti
-
Notifications
You must be signed in to change notification settings - Fork 0
/
test_app.py
218 lines (172 loc) · 7.62 KB
/
test_app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
import warnings
from pyramid.interfaces import IAuthenticationPolicy
from pyramid.interfaces import IAuthorizationPolicy
from pyramid.interfaces import IView
from pyramid.interfaces import IViewClassifier
from pyramid.request import Request
from pyramid.threadlocal import get_current_registry
from zope.interface import implementedBy
from zope.interface import providedBy
from kotti.testing import TestingRootFactory
from kotti.testing import UnitTestBase
from kotti.testing import testing_db_url
def _includeme_login(config):
config.add_view(
_login_view,
name='login',
renderer='kotti:templates/login.pt',
)
def _includeme_layout(config):
# override edit master layout with view master layout
config.override_asset(
to_override='kotti:templates/edit/master.pt',
override_with='kotti:templates/view/master.pt',
)
def _login_view(request):
return {} # pragma: no cover
def _dummy_search(search_term, request):
return u"Not found. Sorry!"
class TestApp(UnitTestBase):
def required_settings(self):
return {'sqlalchemy.url': testing_db_url(),
'kotti.secret': 'dude'}
def test_override_settings(self):
from kotti import main
from kotti import get_settings
class MyType(object):
pass
def my_configurator(conf):
conf['kotti.base_includes'] = ''
conf['kotti.available_types'] = [MyType]
settings = self.required_settings()
settings['kotti.configurators'] = [my_configurator]
main({}, **settings)
self.assertEqual(get_settings()['kotti.base_includes'], [])
self.assertEqual(get_settings()['kotti.available_types'], [MyType])
def test_auth_policies_no_override(self):
from kotti import main
settings = self.required_settings()
main({}, **settings)
registry = get_current_registry()
assert registry.queryUtility(IAuthenticationPolicy) != None
assert registry.queryUtility(IAuthorizationPolicy) != None
def test_auth_policies_override(self):
from kotti import main
settings = self.required_settings()
settings['kotti.authn_policy_factory'] = 'kotti.none_factory'
settings['kotti.authz_policy_factory'] = 'kotti.none_factory'
main({}, **settings)
registry = get_current_registry()
assert registry.queryUtility(IAuthenticationPolicy) == None
assert registry.queryUtility(IAuthorizationPolicy) == None
def test_persistent_settings(self):
from kotti import get_settings
from kotti import get_version
from kotti import DBSession
from kotti.resources import Settings
session = DBSession()
[settings] = session.query(Settings).all()
self.assertEqual(settings.data, {'kotti.db_version': get_version()})
self.assertEqual(get_settings()['kotti.db_version'], get_version())
settings.data['foo.bar'] = u'baz'
self.assertEqual(get_settings()['foo.bar'], u'baz')
def test_persistent_settings_add_new(self):
from kotti import DBSession
from kotti import get_settings
from kotti.resources import Settings
[settings] = DBSession.query(Settings).all()
data = {'foo.bar': u'spam', 'kotti.db_version': u'next'}
new_settings = settings.copy(data)
DBSession.add(new_settings)
self.assertEqual(get_settings()['foo.bar'], u'spam')
self.assertEqual(get_settings()['kotti.db_version'], u'next')
def test_asset_overrides(self):
from kotti import main
settings = self.required_settings()
settings['kotti.asset_overrides'] = 'pyramid:scaffold/ pyramid.fixers'
main({}, **settings)
def test_kotti_includes_deprecation_warning(self):
from kotti import main
settings = self.required_settings()
settings['kotti.includes'] = (
'kotti.tests.test_app._includeme_layout')
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter('always')
main({}, **settings)
assert len(w) == 1
assert issubclass(w[-1].category, DeprecationWarning)
msg = str(w[-1].message)
assert "The 'kotti.includes' setting has been deprecated" in msg
def test_kotti_includes_merged_to_pyramid_includes(self):
from kotti import main
settings = self.required_settings()
settings['kotti.includes'] = (
'kotti.tests.test_app._includeme_login')
app = main({}, **settings)
assert (app.registry.settings['pyramid.includes'].strip() ==
'kotti.tests.test_app._includeme_login')
settings = self.required_settings()
settings['pyramid.includes'] = (
'kotti.tests.test_app._includeme_layout')
settings['kotti.includes'] = (
'kotti.tests.test_app._includeme_login')
app = main({}, **settings)
regsettings = app.registry.settings
assert len(regsettings['pyramid.includes'].split()) == 2
assert settings['kotti.includes'] in regsettings['pyramid.includes']
def test_pyramid_includes_overrides_base_includes(self):
from kotti import main
from kotti.resources import get_root
settings = self.required_settings()
settings['pyramid.includes'] = (
'kotti.tests.test_app._includeme_login')
app = main({}, **settings)
provides = [
IViewClassifier,
implementedBy(Request),
providedBy(get_root()),
]
view = app.registry.adapters.lookup(provides, IView, name='login')
assert view.__module__ == __name__
def test_use_tables(self):
from kotti import main
settings = self.required_settings()
settings['kotti.populators'] = ''
settings['kotti.use_tables'] = 'principals'
main({}, **settings)
def test_root_factory(self):
from kotti import main
from kotti.resources import get_root
settings = self.required_settings()
settings['kotti.root_factory'] = (TestingRootFactory,)
app = main({}, **settings)
assert isinstance(get_root(), TestingRootFactory)
assert isinstance(app.root_factory(), TestingRootFactory)
def test_render_master_edit_template_with_minimal_root(self, settings=None):
from kotti import main
settings = settings or self.required_settings()
settings['kotti.root_factory'] = (TestingRootFactory,)
settings['kotti.site_title'] = 'My Site'
app = main({}, **settings)
request = Request.blank('/@@login')
(status, headers, response) = request.call_application(app)
assert status == '200 OK'
def test_render_master_view_template_with_minimal_root(self):
settings = self.required_settings()
settings['pyramid.includes'] = (
'kotti.tests.test_app._includeme_layout')
return self.test_render_master_edit_template_with_minimal_root(settings)
def test_setting_values_as_unicode(self):
from kotti import get_settings
from kotti import main
settings = self.required_settings()
settings['kotti.site_title'] = 'K\xc3\xb6tti' # Kötti
main({}, **settings)
self.assertEqual(get_settings()['kotti.site_title'], u'K\xf6tti')
def test_search_content(self):
from kotti import main
from kotti.views.util import search_content
settings = self.required_settings()
settings['kotti.search_content'] = 'kotti.tests.test_app._dummy_search'
main({}, **settings)
assert search_content(u"Nuno") == u"Not found. Sorry!"