from pyramid.config import Configurator
+# Constants
+
+# All the settings recognized by PGWUI
+SETTINGS = set(
+ ['pg_host',
+ 'pg_port',
+ 'default_db',
+ 'dry_run',
+ 'route_prefix',
+ 'routes',
+ ])
+
+
+# Exceptions
+class Error(Exception):
+ '''Base error class for module
+ '''
+ pass
+
+
+class UnknownSettingKeyError(Error):
+ def __init__(self, key):
+ super().__init__('Unknown PGWUI setting: {}'.format(key))
+
+
+# Functions
+
+def abort_on_bad_setting(key):
+ '''Abort on a bad pgwui setting
+ '''
+ if key[:6] == 'pgwui.':
+ if key[6:] not in SETTINGS:
+ raise UnknownSettingKeyError(key)
+
+
+def validate_settings(settings):
+ '''Be sure all settings validate
+ '''
+ for key in settings.keys():
+ abort_on_bad_setting(key)
+
def parse_assignments(lines):
'''Return a list of key/value tuples from the lines of a setting
def pgwui_server_config(settings):
'''Configure pyramid
'''
+ validate_settings(settings)
+
rp = settings.get('pgwui.route_prefix')
with Configurator(settings=settings, route_prefix=rp) as config:
config.include('pgwui_common')
# Karl O. Pinc <kop@meme.com>
+import pytest
import pgwui_server.__init__ as pgwui_server_init
# Unit tests
+# abort_on_bad_setting()
+
+def test_abort_on_bad_setting_unknown():
+ '''Nothing bad happens when there's a non-pgwui setting'''
+ pgwui_server_init.abort_on_bad_setting('foo')
+
+
+def test_abort_on_bad_setting_bad():
+ '''Raises an error on a bad pgwui setting'''
+ with pytest.raises(pgwui_server_init.UnknownSettingKeyError):
+ pgwui_server_init.abort_on_bad_setting('pgwui.foo')
+
+
+def test_abort_on_bad_setting_good():
+ '''Does nothing when a known pgwui setting is supplied'''
+ pgwui_server_init.abort_on_bad_setting('pgwui.pg_host')
+
+
+# validate_settings()
+
+def test_validate_settings(monkeypatch):
+ '''Calls abort_on_bad_setting() for each key in setting
+ '''
+ count = 0
+
+ def mock_abort_on_bad_setting(key):
+ nonlocal count
+ count += 1
+
+ monkeypatch.setattr(pgwui_server_init, 'abort_on_bad_setting',
+ mock_abort_on_bad_setting)
+ settings = {'key1': 'value1',
+ 'key2': 'value2'}
+
+ pgwui_server_init.validate_settings(settings)
+ assert count == len(settings)
+
+
# parse_assignments()
def test_parse_assignments_str():
'key3= value3=withequals\n'
)
result = pgwui_server_init.parse_assignments(lines)
- assert result == [('key1', 'value1'),
- ('key2', 'value2'),
- ('key3', 'value3=withequals')]
+ assert set(result) == set([('key1', 'value1'),
+ ('key2', 'value2'),
+ ('key3', 'value3=withequals')])
def test_parse_assignments_dict():
'key2': 'value2',
}
result = pgwui_server_init.parse_assignments(lines)
- assert result == [('key1', 'value1'),
- ('key2', 'value2'),
- ]
+ assert set(result) == set([('key1', 'value1'),
+ ('key2', 'value2'),
+ ])
# add_routes()
def test_pgwui_server_config(monkeypatch):
'''Returns a configuration'''
- monkeypatch.setattr(pgwui_server_init, 'Configurator', MockConfigurator)
+ monkeypatch.setattr(pgwui_server_init, 'validate_settings',
+ lambda *args: True)
+ monkeypatch.setattr(pgwui_server_init, 'Configurator',
+ MockConfigurator)
monkeypatch.setattr(pgwui_server_init, 'add_routes',
lambda *args: None)
def test_main_integrated():
'''Does not raise errors or warnings'''
pgwui_server_init.main({})
+
+
+# Functional tests
+def test_unknownsettingkeyerror():
+ '''Takes an argument'''
+ assert isinstance(pgwui_server_init.UnknownSettingKeyError('key'),
+ Exception)