Files
@ 177478f7d054
Branch filter:
Location: rattail-project/rattail/tests/db/batches/test_util.py - annotation
177478f7d054
2.9 KiB
text/x-python
Database config/init overhaul.
This contains some not-very-atomic changes:
* Get rid of `get_session_class()` function and return to global `Session`
class approach.
* Primary database `Session` is now configured as part of command
initialization, by default.
* Make `config` object available to subcommands, and `Daemon` instances
(the beginning of the end for `edbob.config`!).
* Add `--stdout` and `--stderr` arguments to primary `Command`. These are
in turn made available to subcommands.
* Overhauled some subcommand logic per new patterns.
* Get rid of a few other random references to `edbob`.
* Added and improved several tests.
* Added ability to run tests using arbitrary database engine.
This contains some not-very-atomic changes:
* Get rid of `get_session_class()` function and return to global `Session`
class approach.
* Primary database `Session` is now configured as part of command
initialization, by default.
* Make `config` object available to subcommands, and `Daemon` instances
(the beginning of the end for `edbob.config`!).
* Add `--stdout` and `--stderr` arguments to primary `Command`. These are
in turn made available to subcommands.
* Overhauled some subcommand logic per new patterns.
* Get rid of a few other random references to `edbob`.
* Added and improved several tests.
* Added ability to run tests using arbitrary database engine.
177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 177478f7d054 |
import datetime
from sqlalchemy import func
from sqlalchemy import MetaData
from ... import DataTestCase
from rattail.db.batches import util
from rattail.db import model
class TestPurgeBatches(DataTestCase):
def setUp(self):
super(TestPurgeBatches, self).setUp()
batch = model.Batch(purge=datetime.date(2014, 1, 1))
batch.add_column('F01')
batch.add_column('F02')
self.session.add(batch)
batch.create_table()
batch = model.Batch(purge=datetime.date(2014, 2, 1))
batch.add_column('F01')
batch.add_column('F02')
self.session.add(batch)
batch.create_table()
batch = model.Batch(purge=datetime.date(2014, 3, 1))
batch.add_column('F01')
batch.add_column('F02')
self.session.add(batch)
batch.create_table()
self.session.commit()
def get_batch_tables_metadata(self):
def batch_tables(name, metadata):
return util.batch_pattern.match(name)
metadata = MetaData(bind=self.engine)
metadata.reflect(only=batch_tables)
return metadata
def test_purging_honors_batch_purge_dates(self):
self.assertEqual(self.session.query(model.Batch).count(), 3)
self.assertEqual(util.purge_batches(effective_date=datetime.date(2014, 1, 15)), 1)
self.assertEqual(self.session.query(model.Batch).count(), 2)
self.assertEqual(self.session.query(func.min(model.Batch.purge)).scalar(), datetime.date(2014, 2, 1))
def test_purging_everything_does_just_that(self):
self.assertEqual(self.session.query(model.Batch).count(), 3)
self.assertEqual(util.purge_batches(purge_everything=True), 3)
self.assertEqual(self.session.query(model.Batch).count(), 0)
# TODO: The next two tests each work if only one is enabled...but if both
# are enabled, one will fail. This needs more investigation, but one
# possible cause is the "corruption" of Base.metadata when Batch.rowclass
# is accessed? In particular it seems *not* to be a SQLite problem, as it
# occurred when using a PostgreSQL engine as well.
# def test_purging_does_not_leave_orphaned_tables(self):
# self.assertEqual(self.session.query(model.Batch).count(), 3)
# self.assertEqual(util.purge_batches(purge_everything=True), 3)
# self.assertEqual(self.session.query(model.Batch).count(), 0)
# metadata = self.get_batch_tables_metadata()
# self.assertEqual(len(metadata.tables), 0)
# def test_purging_does_not_delete_previously_orphaned_tables(self):
# metadata = self.get_batch_tables_metadata()
# self.assertEqual(len(metadata.tables), 3)
# batch = self.session.query(model.Batch).first()
# batch.drop_table()
# self.assertEqual(self.session.query(model.Batch).count(), 3)
# metadata = self.get_batch_tables_metadata()
# self.assertEqual(len(metadata.tables), 2)
|