# -*- coding: utf-8; -*- from unittest import TestCase from rattail import db from rattail.config import RattailConfig from wuttjamaican.testing import FileConfigTestCase class TestConfigExtension(FileConfigTestCase): def tearDown(self): if db.Session: db.Session.configure(bind=None, rattail_config=None) self.teardown_files() def test_configure_empty(self): config = RattailConfig() self.assertRaises(AttributeError, getattr, config, 'rattail_engines') self.assertRaises(AttributeError, getattr, config, 'rattail_engine') if hasattr(db.Session, 'kw'): self.assertIsNone(db.Session.kw['bind']) self.assertIsNone(db.Session.kw['rattail_config']) if db.Session: db.ConfigExtension().configure(config) self.assertEqual(config.rattail_engines, {}) self.assertIsNone(config.rattail_engine) if hasattr(db.Session, 'kw'): self.assertIs(db.Session.kw['rattail_config'], config) def test_configure_connections(self): default_path = self.write_file('default.sqlite', '') default_url = f'sqlite:///{default_path}' host_path = self.write_file('host.sqlite', '') host_url = f'sqlite:///{host_path}' config = RattailConfig(defaults={ 'rattail.db.keys': 'default, host', 'rattail.db.default.url': default_url, 'rattail.db.host.url': host_url, }) # nb. possibly running with 'nodb' scenario here ext = db.ConfigExtension() ext.configure(config) if db.Session: # ensure rattail_engines (deprecated) self.assertEqual(len(config.rattail_engines), 2) self.assertEqual(str(config.rattail_engines['default'].url), default_url) self.assertEqual(str(config.rattail_engines['host'].url), host_url) self.assertEqual(str(config.rattail_engine.url), default_url) session = db.Session() self.assertIs(session.bind, config.appdb_engine) self.assertIs(session.bind, config.rattail_engine) try: import sqlalchemy as sa except ImportError: pass else: class TestSession(TestCase): def test_init_rattail_config(self): db.Session.configure(rattail_config=None) session = db.Session() self.assertIsNone(session.rattail_config) session.close() config = object() session = db.Session(rattail_config=config) self.assertIs(session.rattail_config, config) session.close() def test_init_record_changes(self): if hasattr(db.Session, 'kw'): self.assertIsNone(db.Session.kw.get('rattail_record_changes')) session = db.Session() self.assertFalse(session.rattail_record_changes) session.close() session = db.Session(rattail_record_changes=True) self.assertTrue(session.rattail_record_changes) session.close() engine = sa.create_engine('sqlite://') engine.rattail_record_changes = True session = db.Session(bind=engine) self.assertTrue(session.rattail_record_changes) session.close()