Files @ e6fc18e4e15a
Branch filter:

Location: rattail-project/rattail/tests/db/test_config.py - annotation

lance
Add new `RattailConfiguration` class based on python-configuration
7147030ab2bd
0c13de51b8e0
9cb7ff906833
92c03f5d8db0
87c70c437565
0c13de51b8e0
0c13de51b8e0
7147030ab2bd
98d46b2a2b70
0c13de51b8e0
9cb7ff906833
98d46b2a2b70
0c13de51b8e0
0c13de51b8e0
98d46b2a2b70
0c13de51b8e0
98d46b2a2b70
98d46b2a2b70
98d46b2a2b70
7147030ab2bd
0c13de51b8e0
98d46b2a2b70
98d46b2a2b70
98d46b2a2b70
7147030ab2bd
98d46b2a2b70
98d46b2a2b70
98d46b2a2b70
98d46b2a2b70
98d46b2a2b70
98d46b2a2b70
7147030ab2bd
98d46b2a2b70
98d46b2a2b70
98d46b2a2b70
98d46b2a2b70
98d46b2a2b70
98d46b2a2b70
7147030ab2bd
98d46b2a2b70
98d46b2a2b70
98d46b2a2b70
98d46b2a2b70
98d46b2a2b70
98d46b2a2b70
98d46b2a2b70
98d46b2a2b70
98d46b2a2b70
98d46b2a2b70
98d46b2a2b70
98d46b2a2b70
98d46b2a2b70
98d46b2a2b70
0c13de51b8e0
87c70c437565
87c70c437565
87c70c437565
87c70c437565
98d46b2a2b70
87c70c437565
87c70c437565
87c70c437565
87c70c437565
9cb7ff906833
87c70c437565
6f43cfd4d923
7147030ab2bd
87c70c437565
87c70c437565
87c70c437565
87c70c437565
9cb7ff906833
87c70c437565
6f43cfd4d923
7147030ab2bd
87c70c437565
87c70c437565
87c70c437565
9cb7ff906833
0c13de51b8e0
6f43cfd4d923
7147030ab2bd
87c70c437565
87c70c437565
87c70c437565
87c70c437565
9cb7ff906833
87c70c437565
6f43cfd4d923
7147030ab2bd
87c70c437565
87c70c437565
87c70c437565
87c70c437565
87c70c437565
87c70c437565
9cb7ff906833
0c13de51b8e0
87c70c437565
7147030ab2bd
7147030ab2bd
2a1e9b072046
2a1e9b072046
2a1e9b072046
2a1e9b072046
2a1e9b072046
98d46b2a2b70
2a1e9b072046
2a1e9b072046
2a1e9b072046
2a1e9b072046
9cb7ff906833
7147030ab2bd
2a1e9b072046
2a1e9b072046
2a1e9b072046
2a1e9b072046
9cb7ff906833
7147030ab2bd
2a1e9b072046
2a1e9b072046
9cb7ff906833
2a1e9b072046
# -*- coding: utf-8; -*-

from __future__ import unicode_literals, absolute_import

import warnings
from unittest import TestCase

import six
from sqlalchemy import pool

from rattail.db import config as dbconfig
from rattail.config import RattailConfig


class TestEngineFromConfigFunc(TestCase):

    def test_default_key(self):
        cfg = {'sqlalchemy.url': 'sqlite://'}
        engine = dbconfig.engine_from_config(cfg)
        self.assertEqual(six.text_type(engine.url), 'sqlite://')

    def test_alternate_key(self):
        cfg = {'other.url': 'sqlite://'}
        engine = dbconfig.engine_from_config(cfg, prefix='other.')
        self.assertEqual(six.text_type(engine.url), 'sqlite://')

    def test_poolclass(self):

        # default is SingletonThreadPool
        cfg = {'sqlalchemy.url': 'sqlite://'}
        engine = dbconfig.engine_from_config(cfg)
        self.assertEqual(six.text_type(engine.url), 'sqlite://')
        self.assertIsInstance(engine.pool, pool.SingletonThreadPool)

        # usually we override with NullPool
        cfg = {'sqlalchemy.url': 'sqlite://',
               'sqlalchemy.poolclass': 'sqlalchemy.pool:NullPool'}
        engine = dbconfig.engine_from_config(cfg)
        self.assertEqual(six.text_type(engine.url), 'sqlite://')
        self.assertIsInstance(engine.pool, pool.NullPool)

    def test_record_changes(self):

        # no attribute is set by default
        cfg = {'sqlalchemy.url': 'sqlite://'}
        engine = dbconfig.engine_from_config(cfg)
        self.assertRaises(AttributeError, getattr, engine, 'rattail_record_changes')

        # usually we override with NullPool
        cfg = {'sqlalchemy.url': 'sqlite://',
               'sqlalchemy.record_changes': 'true'}
        engine = dbconfig.engine_from_config(cfg)
        self.assertTrue(engine.rattail_record_changes)


class TestGetEngines(TestCase):

    def setUp(self):
        self.config = RattailConfig()

    def test_default_section_is_rattail_db(self):
        self.config.set(u'rattail.db', u'keys', u'default')
        self.config.set(u'rattail.db', u'default.url', u'sqlite://')
        engines = dbconfig.get_engines(self.config)
        self.assertEqual(len(engines), 1)
        self.assertEqual(list(engines)[0], 'default')
        self.assertEqual(six.text_type(engines['default'].url), 'sqlite://')

    def test_custom_section_is_honored(self):
        self.config.set(u'mycustomdb', u'keys', u'default')
        self.config.set(u'mycustomdb', u'default.url', u'sqlite://')
        engines = dbconfig.get_engines(self.config, section=u'mycustomdb')
        self.assertEqual(len(engines), 1)
        self.assertEqual(list(engines)[0], 'default')
        self.assertEqual(six.text_type(engines['default'].url), 'sqlite://')

    def test_default_prefix_does_not_require_keys_declaration(self):
        self.config.set(u'rattail.db', u'default.url', u'sqlite://')
        engines = dbconfig.get_engines(self.config)
        self.assertEqual(len(engines), 1)
        self.assertEqual(list(engines)[0], 'default')
        self.assertEqual(six.text_type(engines['default'].url), 'sqlite://')

    def test_default_prefix_falls_back_to_sqlalchemy(self):
        # Still no need to define "keys" option here.
        self.config.set(u'rattail.db', u'sqlalchemy.url', u'sqlite://')
        engines = dbconfig.get_engines(self.config)
        self.assertEqual(len(engines), 1)
        self.assertEqual(list(engines)[0], 'default')
        self.assertEqual(six.text_type(engines['default'].url), 'sqlite://')

    def test_defined_keys_are_included_in_engines_result(self):
        # Note there is no "default" key here.
        self.config.set(u'rattail.db', u'keys', u'host, store')
        self.config.set(u'rattail.db', u'host.url', u'sqlite:///rattail.host.sqlite')
        self.config.set(u'rattail.db', u'store.url', u'sqlite:///rattail.store.sqlite')
        engines = dbconfig.get_engines(self.config)
        self.assertEqual(len(engines), 2)
        self.assertEqual(sorted(engines.keys()), [u'host', u'store'])
        self.assertEqual(six.text_type(engines['host'].url), 'sqlite:///rattail.host.sqlite')
        self.assertEqual(six.text_type(engines['store'].url), 'sqlite:///rattail.store.sqlite')


class TestGetDefaultEngine(TestCase):

    def setUp(self):
        self.config = RattailConfig()

    def test_default_engine_is_loaded_from_rattail_db_section_by_default(self):
        self.config.set(u'rattail.db', u'keys', u'default')
        self.config.set(u'rattail.db', u'default.url', u'sqlite://')
        engine = dbconfig.get_default_engine(self.config)
        self.assertEqual(six.text_type(engine.url), 'sqlite://')

    def test_default_engine_is_loaded_from_custom_section_if_specified(self):
        self.config.set(u'mycustomdb', u'keys', u'default')
        self.config.set(u'mycustomdb', u'default.url', u'sqlite://')
        engine = dbconfig.get_default_engine(self.config, section=u'mycustomdb')
        self.assertEqual(six.text_type(engine.url), 'sqlite://')

    def test_no_engine_is_returned_if_none_is_defined(self):
        engine = dbconfig.get_default_engine(self.config)
        self.assertTrue(engine is None)