from unittest import TestCase from sqlalchemy.pool import SingletonThreadPool, NullPool from edbob.configuration import AppConfigParser from rattail.db import util class TestEngineConfig(TestCase): def test_standard(self): config = { 'sqlalchemy.url': 'sqlite://', } engine = util.engine_from_config(config) self.assertEqual(str(engine.url), 'sqlite://') self.assertTrue(isinstance(engine.pool, SingletonThreadPool)) def test_custom_poolclass(self): config = { 'sqlalchemy.url': 'sqlite://', 'sqlalchemy.poolclass': 'sqlalchemy.pool:NullPool', } engine = util.engine_from_config(config) 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) 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(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)