Files @ bc5447146f6c
Branch filter:

Location: rattail-project/rattail/tests/trainwreck/test_handler.py - annotation

lance
docs: refactor importer command docs, per typer
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
c727ae4f9793
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
6c9341d6713b
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
4f0b54fc7b17
# -*- coding: utf-8; -*-

import datetime
import warnings
from collections import OrderedDict
from unittest import TestCase

import sqlalchemy as sa

from rattail.trainwreck import handler as mod
from rattail.config import make_config
from rattail.trainwreck.db import Session as TrainwreckSession


class TestTrainwreckHandler(TestCase):

    def setUp(self):
        self.config = self.make_config()
        self.handler = self.make_handler()

    def make_config(self):
        return make_config(files=[])

    def make_handler(self):
        return mod.TrainwreckHandler(self.config)

    def test_get_trainwreck_engines(self):

        # first let's configure 3 engines, 1 of which is hidden
        self.config.trainwreck_engines = OrderedDict([
            ('default', sa.create_engine('sqlite://')),
            ('2022', sa.create_engine('sqlite://')),
            ('2021', sa.create_engine('sqlite://')),
        ])
        self.config.setdefault('trainwreck.db', 'hide', '2022')

        # all 3 are returned by default
        engines = self.handler.get_trainwreck_engines()
        self.assertEqual(len(engines), 3)

        # but only 2 if we omit hidden
        engines = self.handler.get_trainwreck_engines(include_hidden=False)
        self.assertEqual(len(engines), 2)
        self.assertIn('default', engines)
        self.assertIn('2021', engines)
        self.assertNotIn('2022', engines)

    def test_get_hidden_engine_keys(self):
        
        # empty list returned by default
        result = self.handler.get_hidden_engine_keys()
        self.assertIsInstance(result, list)
        self.assertEqual(len(result), 0)

        # try the "legacy" setting first, to make testing simpler
        self.config.setdefault('tailbone', 'engines.trainwreck.hidden',
                               '2020, 2019, 2018')
        with warnings.catch_warnings(record=True):
            hidden = self.handler.get_hidden_engine_keys()
        self.assertEqual(hidden, ['2020', '2019', '2018'])

        # now try the "proper" setting
        self.config.setdefault('trainwreck.db', 'hide',
                               '2023, 2022, 2021')
        hidden = self.handler.get_hidden_engine_keys()
        self.assertEqual(hidden, ['2023', '2022', '2021'])

    def test_engine_is_hidden(self):
        
        # all engines are *not* hidden by default
        self.assertFalse(self.handler.engine_is_hidden('foobar'))

        # but any we explicitly hide should be reflected in call
        self.config.setdefault('trainwreck.db', 'hide',
                               '2023, 2022, 2021')
        self.assertTrue(self.handler.engine_is_hidden('2023'))
        self.assertTrue(self.handler.engine_is_hidden('2021'))
        self.assertFalse(self.handler.engine_is_hidden('2020'))
        
    def test_get_oldest_transaction_date(self):
        engine = sa.create_engine('sqlite://')
        self.config.setdefault('rattail', 'timezone.default',
                               'America/Chicago')
        self.config.setdefault('rattail.trainwreck', 'model',
                               'rattail.trainwreck.db.model.defaults')
        trainwreck = self.config.get_trainwreck_model()
        trainwreck.Base.metadata.create_all(bind=engine)
        session = TrainwreckSession(bind=engine)

        # empty db means oldest date is null
        result = self.handler.get_oldest_transaction_date(session)
        self.assertIsNone(result)

        # but if we insert a transaction, that date should be oldest
        dt = datetime.datetime(2022, 1, 1, 8)
        dt = self.handler.app.localtime(dt)
        txn = trainwreck.Transaction(end_time=dt)
        session.add(txn)
        result = self.handler.get_oldest_transaction_date(session)
        self.assertEqual(result, datetime.date(2022, 1, 1))

        # unless of course we add an older one..
        dt = datetime.datetime(2019, 6, 3, 12)
        dt = self.handler.app.localtime(dt)
        txn = trainwreck.Transaction(end_time=dt)
        session.add(txn)
        result = self.handler.get_oldest_transaction_date(session)
        self.assertEqual(result, datetime.date(2019, 6, 3))

    def test_get_newest_transaction_date(self):
        engine = sa.create_engine('sqlite://')
        self.config.setdefault('rattail', 'timezone.default',
                               'America/Chicago')
        self.config.setdefault('rattail.trainwreck', 'model',
                               'rattail.trainwreck.db.model.defaults')
        trainwreck = self.config.get_trainwreck_model()
        trainwreck.Base.metadata.create_all(bind=engine)
        session = TrainwreckSession(bind=engine)

        # empty db means newest date is null
        result = self.handler.get_newest_transaction_date(session)
        self.assertIsNone(result)

        # but if we insert a transaction, that date should be newest
        dt = datetime.datetime(2019, 6, 3, 12)
        dt = self.handler.app.localtime(dt)
        txn = trainwreck.Transaction(end_time=dt)
        session.add(txn)
        result = self.handler.get_newest_transaction_date(session)
        self.assertEqual(result, datetime.date(2019, 6, 3))

        # unless of course we add an newer one..
        dt = datetime.datetime(2022, 1, 1, 8)
        dt = self.handler.app.localtime(dt)
        txn = trainwreck.Transaction(end_time=dt)
        session.add(txn)
        result = self.handler.get_newest_transaction_date(session)
        self.assertEqual(result, datetime.date(2022, 1, 1))