Refactor tests, sample config to use [rattail.db]
config section.
This commit is contained in:
parent
87c70c4375
commit
a04712524d
|
@ -34,23 +34,6 @@ configure_logging = True
|
||||||
#git.executable = "C:\Program Files\Git\bin\git.exe"
|
#git.executable = "C:\Program Files\Git\bin\git.exe"
|
||||||
|
|
||||||
|
|
||||||
[edbob.db]
|
|
||||||
|
|
||||||
# Keys which name the database engines configured within this section. Without
|
|
||||||
# this option, the 'default' key is assumed; but it must be included if the
|
|
||||||
# option is defined.
|
|
||||||
#keys = default, host, other
|
|
||||||
|
|
||||||
# Connection details for the default database engine. Configuration is
|
|
||||||
# (mostly) defined by the SQLAlchemy library; for details see the parameters at
|
|
||||||
# http://docs.sqlalchemy.org/en/latest/core/engines.html#sqlalchemy.create_engine
|
|
||||||
#default.url = postgresql://user:pass@localhost/rattail
|
|
||||||
|
|
||||||
# Connection details for additional database engines, as needed.
|
|
||||||
#host.url = postgresql://user:pass@host-server/rattail
|
|
||||||
#other.url = mysql://user:pass@another-server/rattail
|
|
||||||
|
|
||||||
|
|
||||||
[edbob.errors]
|
[edbob.errors]
|
||||||
|
|
||||||
# Mako template used to generate the email body for an unhandled exception. If
|
# Mako template used to generate the email body for an unhandled exception. If
|
||||||
|
@ -114,15 +97,29 @@ subject.errors = [Rattail] Error
|
||||||
|
|
||||||
[rattail.db]
|
[rattail.db]
|
||||||
|
|
||||||
|
# Keys which name the database engines configured within this section. Without
|
||||||
|
# this option, the 'default' key is assumed; but it must be included if the
|
||||||
|
# option is defined.
|
||||||
|
#keys = default, host, other
|
||||||
|
|
||||||
|
# Connection details for the default database engine. Configuration is
|
||||||
|
# (mostly) defined by the SQLAlchemy library; for details see the parameters at
|
||||||
|
# http://docs.sqlalchemy.org/en/latest/core/engines.html#sqlalchemy.create_engine
|
||||||
|
#default.url = postgresql://user:pass@localhost/rattail
|
||||||
|
|
||||||
|
# Connection details for additional database engines, as needed.
|
||||||
|
#host.url = postgresql://user:pass@host-server/rattail
|
||||||
|
#other.url = mysql://user:pass@another-server/rattail
|
||||||
|
|
||||||
# Whether to record "change" data for the local database (i.e. the 'default'
|
# Whether to record "change" data for the local database (i.e. the 'default'
|
||||||
# engine). This should only be enabled for a parent/master database, as it is
|
# engine). This should only be enabled for a parent/master database, as it is
|
||||||
# used to track which data the database synchronization service will sync to
|
# used to track which data the database synchronization service will sync to
|
||||||
# the child/slave databases.
|
# the child/slave databases.
|
||||||
#record_changes = True
|
#record_changes = True
|
||||||
|
|
||||||
# Database engine keys (as found in the ``[edbob.db]`` section above) which
|
# Database engine keys (as found in the `keys` option, above) which correspond
|
||||||
# correspond to child/slave databases in the hierarchy. These databases will
|
# to child/slave databases in the hierarchy. These databases will be kept in
|
||||||
# be kept in sync by the database synchronization service, if used.
|
# sync by the database synchronization service, if used.
|
||||||
#syncs = north, south
|
#syncs = north, south
|
||||||
|
|
||||||
# Class specification to use for the primary "data synchronizer" instance.
|
# Class specification to use for the primary "data synchronizer" instance.
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
|
|
||||||
|
@ -14,9 +15,8 @@ from rattail import db
|
||||||
class TestConfigureSessionFactory(TestCase):
|
class TestConfigureSessionFactory(TestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.config = AppConfigParser('rattail')
|
self.config = AppConfigParser(u'rattail')
|
||||||
self.config.add_section('edbob.db')
|
self.config.add_section(u'rattail.db')
|
||||||
self.config.add_section('rattail.db')
|
|
||||||
self.Session = sessionmaker()
|
self.Session = sessionmaker()
|
||||||
|
|
||||||
def test_session_is_not_bound_if_no_engine_is_defined_by_config(self):
|
def test_session_is_not_bound_if_no_engine_is_defined_by_config(self):
|
||||||
|
@ -26,56 +26,56 @@ class TestConfigureSessionFactory(TestCase):
|
||||||
session.close()
|
session.close()
|
||||||
|
|
||||||
def test_session_is_correctly_bound_if_engine_is_defined_by_config(self):
|
def test_session_is_correctly_bound_if_engine_is_defined_by_config(self):
|
||||||
self.config.set('edbob.db', 'sqlalchemy.url', 'sqlite:////a/very/custom/db')
|
self.config.set(u'rattail.db', u'sqlalchemy.url', u'sqlite:////a/very/custom/db')
|
||||||
session = self.Session()
|
session = self.Session()
|
||||||
self.assertTrue(session.bind is None)
|
self.assertTrue(session.bind is None)
|
||||||
session.close()
|
session.close()
|
||||||
db.configure_session_factory(self.config, self.Session)
|
db.configure_session_factory(self.config, self.Session)
|
||||||
session = self.Session()
|
session = self.Session()
|
||||||
self.assertTrue(isinstance(session.bind, Engine))
|
self.assertTrue(isinstance(session.bind, Engine))
|
||||||
self.assertEqual(str(session.bind.url), 'sqlite:////a/very/custom/db')
|
self.assertEqual(unicode(session.bind.url), u'sqlite:////a/very/custom/db')
|
||||||
session.close()
|
session.close()
|
||||||
|
|
||||||
def test_global_session_is_configured_by_default(self):
|
def test_global_session_is_configured_by_default(self):
|
||||||
self.config.set('edbob.db', 'sqlalchemy.url', 'sqlite:////path/to/rattail.sqlite')
|
self.config.set(u'rattail.db', u'sqlalchemy.url', u'sqlite:////path/to/rattail.sqlite')
|
||||||
session = db.Session()
|
session = db.Session()
|
||||||
self.assertTrue(session.bind is None)
|
self.assertTrue(session.bind is None)
|
||||||
session.close()
|
session.close()
|
||||||
db.configure_session_factory(self.config)
|
db.configure_session_factory(self.config)
|
||||||
session = db.Session()
|
session = db.Session()
|
||||||
self.assertTrue(isinstance(session.bind, Engine))
|
self.assertTrue(isinstance(session.bind, Engine))
|
||||||
self.assertEqual(str(session.bind.url), 'sqlite:////path/to/rattail.sqlite')
|
self.assertEqual(unicode(session.bind.url), u'sqlite:////path/to/rattail.sqlite')
|
||||||
session.close()
|
session.close()
|
||||||
# Must undo that configuration, this thing is global.
|
# Must undo that configuration, this thing is global.
|
||||||
db.Session.configure(bind=None)
|
db.Session.configure(bind=None)
|
||||||
|
|
||||||
@patch('rattail.db.changes.record_changes')
|
@patch(u'rattail.db.changes.record_changes')
|
||||||
def test_changes_will_not_be_recorded_by_default(self, record_changes):
|
def test_changes_will_not_be_recorded_by_default(self, record_changes):
|
||||||
self.config.set('edbob.db', 'sqlalchemy.url', 'sqlite://')
|
self.config.set(u'rattail.db', u'sqlalchemy.url', u'sqlite://')
|
||||||
db.configure_session_factory(self.config, self.Session)
|
db.configure_session_factory(self.config, self.Session)
|
||||||
self.assertFalse(record_changes.called)
|
self.assertFalse(record_changes.called)
|
||||||
|
|
||||||
@patch('rattail.db.changes.record_changes')
|
@patch(u'rattail.db.changes.record_changes')
|
||||||
def test_changes_will_be_recorded_by_so_configured(self, record_changes):
|
def test_changes_will_be_recorded_by_so_configured(self, record_changes):
|
||||||
self.config.set('edbob.db', 'sqlalchemy.url', 'sqlite://')
|
self.config.set(u'rattail.db', u'sqlalchemy.url', u'sqlite://')
|
||||||
self.config.set('rattail.db', 'changes.record', 'true')
|
self.config.set(u'rattail.db', u'changes.record', u'true')
|
||||||
db.configure_session_factory(self.config, self.Session)
|
db.configure_session_factory(self.config, self.Session)
|
||||||
# Role changes are ignored by default.
|
# Role changes are ignored by default.
|
||||||
record_changes.assert_called_once_with(self.Session, True)
|
record_changes.assert_called_once_with(self.Session, True)
|
||||||
|
|
||||||
@patch('rattail.db.changes.record_changes')
|
@patch(u'rattail.db.changes.record_changes')
|
||||||
def test_changes_will_still_be_recorded_with_deprecated_config(self, record_changes):
|
def test_changes_will_still_be_recorded_with_deprecated_config(self, record_changes):
|
||||||
self.config.set('edbob.db', 'sqlalchemy.url', 'sqlite://')
|
self.config.set(u'rattail.db', u'sqlalchemy.url', u'sqlite://')
|
||||||
self.config.set('rattail.db', 'changes.record', 'true')
|
self.config.set(u'rattail.db', u'changes.record', u'true')
|
||||||
db.configure_session_factory(self.config, self.Session)
|
db.configure_session_factory(self.config, self.Session)
|
||||||
# Role changes are ignored by default.
|
# Role changes are ignored by default.
|
||||||
record_changes.assert_called_once_with(self.Session, True)
|
record_changes.assert_called_once_with(self.Session, True)
|
||||||
|
|
||||||
@patch('rattail.db.changes.record_changes')
|
@patch(u'rattail.db.changes.record_changes')
|
||||||
def test_config_determines_if_role_changes_are_ignored(self, record_changes):
|
def test_config_determines_if_role_changes_are_ignored(self, record_changes):
|
||||||
self.config.set('edbob.db', 'sqlalchemy.url', 'sqlite://')
|
self.config.set(u'rattail.db', u'sqlalchemy.url', u'sqlite://')
|
||||||
self.config.set('rattail.db', 'changes.record', 'true')
|
self.config.set(u'rattail.db', u'changes.record', u'true')
|
||||||
self.config.set('rattail.db', 'changes.ignore_roles', 'false')
|
self.config.set(u'rattail.db', u'changes.ignore_roles', u'false')
|
||||||
db.configure_session_factory(self.config, self.Session)
|
db.configure_session_factory(self.config, self.Session)
|
||||||
# Role changes are ignored by default; False means config works.
|
# Role changes are ignored by default; False means config works.
|
||||||
record_changes.assert_called_once_with(self.Session, False)
|
record_changes.assert_called_once_with(self.Session, False)
|
||||||
|
|
Loading…
Reference in a new issue