1
# -*- coding: utf-8 -*-
4
from webapp2_extras import config as app_config
9
class TestConfig(test_base.BaseTestCase):
14
config = app_config.Config({'foo': {
19
self.assertEqual(config.get('foo'), {
24
self.assertEqual(config.get('bar'), {})
26
def test_get_existing_keys(self):
27
config = app_config.Config({'foo': {
32
self.assertEqual(config.get_config('foo', 'bar'), 'baz')
33
self.assertEqual(config.get_config('foo', 'doo'), 'ding')
35
def test_get_existing_keys_from_default(self):
36
config = app_config.Config({}, {'foo': {
41
self.assertEqual(config.get_config('foo', 'bar'), 'baz')
42
self.assertEqual(config.get_config('foo', 'doo'), 'ding')
44
def test_get_non_existing_keys(self):
45
config = app_config.Config()
47
self.assertRaises(KeyError, config.get_config, 'foo', 'bar')
49
def test_get_dict_existing_keys(self):
50
config = app_config.Config({'foo': {
55
self.assertEqual(config.get_config('foo'), {
60
def test_get_dict_non_existing_keys(self):
61
config = app_config.Config()
63
self.assertRaises(KeyError, config.get_config, 'bar')
65
def test_get_with_default(self):
66
config = app_config.Config()
68
self.assertRaises(KeyError, config.get_config, 'foo', 'bar', 'ooops')
69
self.assertRaises(KeyError, config.get_config, 'foo', 'doo', 'wooo')
71
def test_get_with_default_and_none(self):
72
config = app_config.Config({'foo': {
76
self.assertEqual(config.get_config('foo', 'bar', 'ooops'), None)
78
def test_update(self):
79
config = app_config.Config({'foo': {
84
self.assertEqual(config.get_config('foo', 'bar'), 'baz')
85
self.assertEqual(config.get_config('foo', 'doo'), 'ding')
87
config.update('foo', {'bar': 'other'})
89
self.assertEqual(config.get_config('foo', 'bar'), 'other')
90
self.assertEqual(config.get_config('foo', 'doo'), 'ding')
92
def test_setdefault(self):
93
config = app_config.Config()
95
self.assertRaises(KeyError, config.get_config, 'foo')
97
config.setdefault('foo', {
102
self.assertEqual(config.get_config('foo', 'bar'), 'baz')
103
self.assertEqual(config.get_config('foo', 'doo'), 'ding')
105
def test_setdefault2(self):
106
config = app_config.Config({'foo': {
110
self.assertEqual(config.get_config('foo'), {
114
config.setdefault('foo', {
119
self.assertEqual(config.get_config('foo', 'bar'), 'baz')
120
self.assertEqual(config.get_config('foo', 'doo'), 'ding')
122
def test_setitem(self):
123
config = app_config.Config()
124
config['foo'] = {'bar': 'baz'}
126
self.assertEqual(config, {'foo': {'bar': 'baz'}})
127
self.assertEqual(config['foo'], {'bar': 'baz'})
129
def test_init_no_dict_values(self):
130
self.assertRaises(AssertionError, app_config.Config, {'foo': 'bar'})
131
self.assertRaises(AssertionError, app_config.Config, {'foo': None})
132
self.assertRaises(AssertionError, app_config.Config, 'foo')
134
def test_init_no_dict_default(self):
135
self.assertRaises(AssertionError, app_config.Config, {}, {'foo': 'bar'})
136
self.assertRaises(AssertionError, app_config.Config, {}, {'foo': None})
137
self.assertRaises(AssertionError, app_config.Config, {}, 'foo')
139
def test_update_no_dict_values(self):
140
config = app_config.Config()
142
self.assertRaises(AssertionError, config.update, {'foo': 'bar'}, 'baz')
143
self.assertRaises(AssertionError, config.update, {'foo': None}, 'baz')
144
self.assertRaises(AssertionError, config.update, 'foo', 'bar')
146
def test_setdefault_no_dict_values(self):
147
config = app_config.Config()
149
self.assertRaises(AssertionError, config.setdefault, 'foo', 'bar')
150
self.assertRaises(AssertionError, config.setdefault, 'foo', None)
152
def test_setitem_no_dict_values(self):
153
config = app_config.Config()
155
def setitem(key, value):
159
self.assertRaises(AssertionError, setitem, 'foo', 'bar')
160
self.assertRaises(AssertionError, setitem, 'foo', None)
163
class TestLoadConfig(test_base.BaseTestCase):
167
def test_default_config(self):
168
config = app_config.Config()
170
from resources.template import default_config as template_config
171
from resources.i18n import default_config as i18n_config
173
self.assertEqual(config.get_config('resources.template', 'templates_dir'), template_config['templates_dir'])
174
self.assertEqual(config.get_config('resources.i18n', 'locale'), i18n_config['locale'])
175
self.assertEqual(config.get_config('resources.i18n', 'timezone'), i18n_config['timezone'])
177
def test_default_config_with_non_existing_key(self):
178
config = app_config.Config()
180
from resources.i18n import default_config as i18n_config
182
# In the first time the module config will be loaded normally.
183
self.assertEqual(config.get_config('resources.i18n', 'locale'), i18n_config['locale'])
185
# In the second time it won't be loaded, but won't find the value and then use the default.
186
self.assertEqual(config.get_config('resources.i18n', 'i_dont_exist', 'foo'), 'foo')
188
def test_override_config(self):
189
config = app_config.Config({
190
'resources.template': {
191
'templates_dir': 'apps/templates'
195
'timezone': 'America/Sao_Paulo',
199
self.assertEqual(config.get_config('resources.template', 'templates_dir'), 'apps/templates')
200
self.assertEqual(config.get_config('resources.i18n', 'locale'), 'pt_BR')
201
self.assertEqual(config.get_config('resources.i18n', 'timezone'), 'America/Sao_Paulo')
203
def test_override_config2(self):
204
config = app_config.Config({
206
'timezone': 'America/Sao_Paulo',
210
self.assertEqual(config.get_config('resources.i18n', 'locale'), 'en_US')
211
self.assertEqual(config.get_config('resources.i18n', 'timezone'), 'America/Sao_Paulo')
214
config = app_config.Config({'foo': {
218
self.assertEqual(config.get_config('foo', 'bar'), 'baz')
220
def test_get_with_default(self):
221
config = app_config.Config()
223
self.assertEqual(config.get_config('resources.i18n', 'bar', 'baz'), 'baz')
225
def test_get_with_default_and_none(self):
226
config = app_config.Config({'foo': {
230
self.assertEqual(config.get_config('foo', 'bar', 'ooops'), None)
232
def test_get_with_default_and_module_load(self):
233
config = app_config.Config()
234
self.assertEqual(config.get_config('resources.i18n', 'locale'), 'en_US')
235
self.assertEqual(config.get_config('resources.i18n', 'locale', 'foo'), 'en_US')
237
def test_required_config(self):
238
config = app_config.Config()
239
self.assertRaises(KeyError, config.get_config, 'resources.i18n', 'foo')
241
def test_missing_module(self):
242
config = app_config.Config()
243
self.assertRaises(KeyError, config.get_config, 'i_dont_exist', 'i_dont_exist')
245
def test_missing_module2(self):
246
config = app_config.Config()
247
self.assertRaises(KeyError, config.get_config, 'i_dont_exist')
249
def test_missing_key(self):
250
config = app_config.Config()
251
self.assertRaises(KeyError, config.get_config, 'resources.i18n', 'i_dont_exist')
253
def test_missing_default_config(self):
254
config = app_config.Config()
255
self.assertRaises(KeyError, config.get_config, 'tipfy', 'foo')
258
class TestLoadConfigGetItem(test_base.BaseTestCase):
262
def test_default_config(self):
263
config = app_config.Config()
265
from resources.template import default_config as template_config
266
from resources.i18n import default_config as i18n_config
268
self.assertEqual(config['resources.template']['templates_dir'], template_config['templates_dir'])
269
self.assertEqual(config['resources.i18n']['locale'], i18n_config['locale'])
270
self.assertEqual(config['resources.i18n']['timezone'], i18n_config['timezone'])
272
def test_default_config_with_non_existing_key(self):
273
config = app_config.Config()
275
from resources.i18n import default_config as i18n_config
277
# In the first time the module config will be loaded normally.
278
self.assertEqual(config['resources.i18n']['locale'], i18n_config['locale'])
280
# In the second time it won't be loaded, but won't find the value and then use the default.
281
self.assertEqual(config['resources.i18n'].get('i_dont_exist', 'foo'), 'foo')
283
def test_override_config(self):
284
config = app_config.Config({
285
'resources.template': {
286
'templates_dir': 'apps/templates'
290
'timezone': 'America/Sao_Paulo',
294
self.assertEqual(config['resources.template']['templates_dir'], 'apps/templates')
295
self.assertEqual(config['resources.i18n']['locale'], 'pt_BR')
296
self.assertEqual(config['resources.i18n']['timezone'], 'America/Sao_Paulo')
298
def test_override_config2(self):
299
config = app_config.Config({
301
'timezone': 'America/Sao_Paulo',
305
self.assertEqual(config['resources.i18n']['locale'], 'en_US')
306
self.assertEqual(config['resources.i18n']['timezone'], 'America/Sao_Paulo')
309
config = app_config.Config({'foo': {
313
self.assertEqual(config['foo']['bar'], 'baz')
315
def test_get_with_default(self):
316
config = app_config.Config()
318
self.assertEqual(config['resources.i18n'].get('bar', 'baz'), 'baz')
320
def test_get_with_default_and_none(self):
321
config = app_config.Config({'foo': {
325
self.assertEqual(config['foo'].get('bar', 'ooops'), None)
327
def test_get_with_default_and_module_load(self):
328
config = app_config.Config()
329
self.assertEqual(config['resources.i18n']['locale'], 'en_US')
330
self.assertEqual(config['resources.i18n'].get('locale', 'foo'), 'en_US')
332
def test_required_config(self):
333
config = app_config.Config()
334
self.assertRaises(KeyError, config['resources.i18n'].__getitem__, 'foo')
335
self.assertRaises(KeyError, config['resources.i18n'].__getitem__, 'required')
337
def test_missing_module(self):
338
config = app_config.Config()
339
self.assertRaises(KeyError, config.__getitem__, 'i_dont_exist')
341
def test_missing_key(self):
342
config = app_config.Config()
343
self.assertRaises(KeyError, config['resources.i18n'].__getitem__, 'i_dont_exist')
346
if __name__ == '__main__':