Tweak app.make_rattail_config() to allow caller to define some settings.

This is mostly for the sake of tests etc.
This commit is contained in:
Lance Edgar 2015-05-03 19:36:19 -05:00
parent 2f5f9c8c3c
commit 4f5c0e6bd8
3 changed files with 71 additions and 15 deletions

View file

@ -55,6 +55,9 @@ def make_rattail_config(settings):
""" """
Make a Rattail config object from the given settings. Make a Rattail config object from the given settings.
""" """
rattail_config = settings.get('rattail_config')
if not rattail_config:
# Initialize rattail config and embed it in the settings dict, to make it # Initialize rattail config and embed it in the settings dict, to make it
# available to web requests later. # available to web requests later.
path = settings.get('edbob.config') path = settings.get('edbob.config')
@ -66,6 +69,9 @@ def make_rattail_config(settings):
rattail_config = RattailConfig(edbob.config) rattail_config = RattailConfig(edbob.config)
settings['rattail_config'] = rattail_config settings['rattail_config'] = rattail_config
rattail_engines = settings.get('rattail_engines')
if not rattail_engines:
# Load all Rattail database engines from config, and store in settings # Load all Rattail database engines from config, and store in settings
# dict. This is necessary e.g. in the case of a host server, to have # dict. This is necessary e.g. in the case of a host server, to have
# access to its subordinate store servers. # access to its subordinate store servers.

8
tests/data/tailbone.conf Normal file
View file

@ -0,0 +1,8 @@
[app:main]
edbob.config = %(here)s/tailbone.conf
[rattail.db]
keys = default, store
default.url = sqlite://
store.url = sqlite://

42
tests/test_app.py Normal file
View file

@ -0,0 +1,42 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import os
from unittest import TestCase
from sqlalchemy import create_engine
from rattail.config import RattailConfig
from rattail.exceptions import ConfigurationError
from rattail.db import Session as RattailSession
from tailbone import app
from tailbone.db import Session as TailboneSession
class TestRattailConfig(TestCase):
config_path = os.path.abspath(
os.path.join(os.path.dirname(__file__), 'data', 'tailbone.conf'))
def tearDown(self):
# may or may not be necessary depending on test
TailboneSession.remove()
def test_settings_arg_must_include_config_path_by_default(self):
# error raised if path not provided
self.assertRaises(ConfigurationError, app.make_rattail_config, {})
# get a config object if path provided
result = app.make_rattail_config({'edbob.config': self.config_path})
self.assertTrue(isinstance(result, RattailConfig))
def test_settings_arg_may_override_config_and_engines(self):
rattail_config = RattailConfig()
engine = create_engine('sqlite://')
result = app.make_rattail_config({
'rattail_config': rattail_config,
'rattail_engines': {'default': engine}})
self.assertTrue(result is rattail_config)
self.assertTrue(RattailSession.kw['bind'] is engine)
self.assertTrue(TailboneSession.bind is engine)