From e3da3b3b7f18fe80f3ecfaa278859db7a9bfdc45 Mon Sep 17 00:00:00 2001 From: 0livd <0livd@users.noreply.github.com> Date: Sun, 23 Apr 2017 17:32:37 +0100 Subject: Externalize the settings (#193) Default settings from app's root path are loaded first Settings are then overriden by /etc/ihatemoney/ihatemoney.cfg or by another file which path is set in an env var Fixes #187 --- budget/tests/ihatemoney.cfg | 7 +++++++ budget/tests/ihatemoney_envvar.cfg | 7 +++++++ budget/tests/tests.py | 42 ++++++++++++++++++++++++++++++++++++-- 3 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 budget/tests/ihatemoney.cfg create mode 100644 budget/tests/ihatemoney_envvar.cfg (limited to 'budget/tests') diff --git a/budget/tests/ihatemoney.cfg b/budget/tests/ihatemoney.cfg new file mode 100644 index 0000000..6345fcf --- /dev/null +++ b/budget/tests/ihatemoney.cfg @@ -0,0 +1,7 @@ +DEBUG = False +SQLALCHEMY_DATABASE_URI = 'sqlite:///budget.db' +SQLACHEMY_ECHO = DEBUG + +SECRET_KEY = "supersecret" + +MAIL_DEFAULT_SENDER = ("Budget manager", "budget@notmyidea.org") diff --git a/budget/tests/ihatemoney_envvar.cfg b/budget/tests/ihatemoney_envvar.cfg new file mode 100644 index 0000000..dbc078e --- /dev/null +++ b/budget/tests/ihatemoney_envvar.cfg @@ -0,0 +1,7 @@ +DEBUG = False +SQLALCHEMY_DATABASE_URI = 'sqlite:///budget.db' +SQLACHEMY_ECHO = DEBUG + +SECRET_KEY = "lalatra" + +MAIL_DEFAULT_SENDER = ("Budget manager", "budget@notmyidea.org") diff --git a/budget/tests/tests.py b/budget/tests/tests.py index 854c07b..d979a29 100644 --- a/budget/tests/tests.py +++ b/budget/tests/tests.py @@ -10,14 +10,18 @@ import json from collections import defaultdict import six -os.environ['FLASK_SETTINGS_MODULE'] = 'default_settings' - from flask import session +# Unset configuration file env var if previously set +if 'IHATEMONEY_SETTINGS_FILE_PATH' in os.environ: + del os.environ['IHATEMONEY_SETTINGS_FILE_PATH'] + import run import models import utils +__HERE__ = os.path.dirname(os.path.abspath(__file__)) + class TestCase(unittest.TestCase): @@ -65,6 +69,40 @@ class TestCase(unittest.TestCase): class BudgetTestCase(TestCase): + def test_default_configuration(self): + """Test that default settings are loaded when no other configuration file is specified""" + run.configure() + self.assertFalse(run.app.config['DEBUG']) + self.assertEqual(run.app.config['SQLALCHEMY_DATABASE_URI'], 'sqlite:///budget.db') + self.assertFalse(run.app.config['SQLALCHEMY_TRACK_MODIFICATIONS']) + self.assertEqual(run.app.config['SECRET_KEY'], 'tralala') + self.assertEqual(run.app.config['MAIL_DEFAULT_SENDER'], + ("Budget manager", "budget@notmyidea.org")) + + def test_env_var_configuration_file(self): + """Test that settings are loaded from the specified configuration file""" + os.environ['IHATEMONEY_SETTINGS_FILE_PATH'] = os.path.join(__HERE__, + "ihatemoney_envvar.cfg") + run.configure() + self.assertEqual(run.app.config['SECRET_KEY'], 'lalatra') + + # Test that the specified configuration file is loaded + # even if the default configuration file ihatemoney.cfg exists + os.environ['IHATEMONEY_SETTINGS_FILE_PATH'] = os.path.join(__HERE__, + "ihatemoney_envvar.cfg") + run.app.config.root_path = __HERE__ + run.configure() + self.assertEqual(run.app.config['SECRET_KEY'], 'lalatra') + + if 'IHATEMONEY_SETTINGS_FILE_PATH' in os.environ: + del os.environ['IHATEMONEY_SETTINGS_FILE_PATH'] + + def test_default_configuration_file(self): + """Test that settings are loaded from the default configuration file""" + run.app.config.root_path = __HERE__ + run.configure() + self.assertEqual(run.app.config['SECRET_KEY'], 'supersecret') + def test_notifications(self): """Test that the notifications are sent, and that email adresses are checked properly. -- cgit v1.1