diff --git a/tests/db/test_util.py b/tests/db/test_util.py index b422a0956424eaae287a5f7da0ac4c01fb928e87..aa3ee690cfb4b2c8485396ef01b098527863412f 100644 --- a/tests/db/test_util.py +++ b/tests/db/test_util.py @@ -1,4 +1,6 @@ +# -*- coding: utf-8 -*- +import warnings from unittest import TestCase from sqlalchemy.pool import SingletonThreadPool, NullPool @@ -27,28 +29,59 @@ class TestEngineConfig(TestCase): self.assertEqual(str(engine.url), 'sqlite://') self.assertTrue(isinstance(engine.pool, NullPool)) - def test_get_engines_default(self): - config = AppConfigParser('rattail') - config.set('edbob.db', 'sqlalchemy.url', 'sqlite://') - engines = util.get_engines(config) + +class TestGetEngines(TestCase): + + def setUp(self): + self.config = AppConfigParser(u'rattail') + + def test_default_section_is_rattail_db(self): + self.config.set(u'rattail.db', u'keys', u'default') + self.config.set(u'rattail.db', u'default.url', u'sqlite://') + engines = util.get_engines(self.config) + self.assertEqual(len(engines), 1) + self.assertEqual(engines.keys()[0], u'default') + self.assertEqual(unicode(engines[u'default'].url), u'sqlite://') + + def test_custom_section_is_honored(self): + self.config.set(u'mycustomdb', u'keys', u'default') + self.config.set(u'mycustomdb', u'default.url', u'sqlite://') + engines = util.get_engines(self.config, section=u'mycustomdb') + self.assertEqual(len(engines), 1) + self.assertEqual(engines.keys()[0], u'default') + self.assertEqual(unicode(engines[u'default'].url), u'sqlite://') + + def test_default_section_falls_back_to_edbob_db(self): + self.config.set(u'edbob.db', u'keys', u'default') + self.config.set(u'edbob.db', u'default.url', u'sqlite://') + with warnings.catch_warnings(record=True) as ignore_warnings: + engines = util.get_engines(self.config) + self.assertEqual(len(engines), 1) + self.assertEqual(engines.keys()[0], u'default') + self.assertEqual(unicode(engines[u'default'].url), u'sqlite://') + + def test_default_prefix_does_not_require_keys_declaration(self): + self.config.set(u'rattail.db', u'default.url', u'sqlite://') + engines = util.get_engines(self.config) self.assertEqual(len(engines), 1) - self.assertEqual(str(engines['default'].url), 'sqlite://') - - def test_get_engines_custom(self): - config = AppConfigParser('rattail') - config.set('edbob.db', 'keys', 'host, store') - config.set('edbob.db', 'host.url', 'sqlite:///rattail.host.sqlite') - config.set('edbob.db', 'store.url', 'sqlite:///rattail.store.sqlite') - config.set('edbob.db', 'store.poolclass', 'sqlalchemy.pool:SingletonThreadPool') - engines = util.get_engines(config) + self.assertEqual(engines.keys()[0], u'default') + self.assertEqual(unicode(engines[u'default'].url), u'sqlite://') + + def test_default_prefix_falls_back_to_sqlalchemy(self): + # Still no need to define "keys" option here. + self.config.set(u'rattail.db', u'sqlalchemy.url', u'sqlite://') + engines = util.get_engines(self.config) + self.assertEqual(len(engines), 1) + self.assertEqual(engines.keys()[0], u'default') + self.assertEqual(unicode(engines[u'default'].url), u'sqlite://') + + def test_defined_keys_are_included_in_engines_result(self): + # Note there is no "default" key here. + self.config.set(u'rattail.db', u'keys', u'host, store') + self.config.set(u'rattail.db', u'host.url', u'sqlite:///rattail.host.sqlite') + self.config.set(u'rattail.db', u'store.url', u'sqlite:///rattail.store.sqlite') + engines = util.get_engines(self.config) self.assertEqual(len(engines), 2) - self.assertEqual(str(engines['host'].url), 'sqlite:///rattail.host.sqlite') - self.assertTrue(isinstance(engines['host'].pool, NullPool)) - self.assertEqual(str(engines['store'].url), 'sqlite:///rattail.store.sqlite') - self.assertTrue(isinstance(engines['store'].pool, SingletonThreadPool)) - - def test_get_engines_none(self): - config = AppConfigParser('rattail') - config.set('edbob.db', 'unknown.url', 'sqlite://') - engines = util.get_engines(config) - self.assertEqual(len(engines), 0) + self.assertEqual(sorted(engines.keys()), [u'host', u'store']) + self.assertEqual(unicode(engines[u'host'].url), u'sqlite:///rattail.host.sqlite') + self.assertEqual(unicode(engines[u'store'].url), u'sqlite:///rattail.store.sqlite')