import copy from os.path import dirname, abspath, join from pelican.settings import read_settings, configure_settings, _DEFAULT_CONFIG, DEFAULT_THEME from .support import unittest class TestSettingsConfiguration(unittest.TestCase): """Provided a file, it should read it, replace the default values, append new values to the settings (if any), and apply basic settings optimizations. """ def setUp(self): self.PATH = abspath(dirname(__file__)) default_conf = join(self.PATH, 'default_conf.py') self.settings = read_settings(default_conf) def test_overwrite_existing_settings(self): self.assertEqual(self.settings.get('SITENAME'), u"Alexis' log") self.assertEqual(self.settings.get('SITEURL'), 'http://blog.notmyidea.org') def test_keep_default_settings(self): """keep default settings if not defined""" self.assertEqual(self.settings.get('DEFAULT_CATEGORY'), _DEFAULT_CONFIG['DEFAULT_CATEGORY']) def test_dont_copy_small_keys(self): """do not copy keys not in caps.""" self.assertNotIn('foobar', self.settings) def test_read_empty_settings(self): """providing no file should return the default values.""" settings = read_settings(None) expected = copy.deepcopy(_DEFAULT_CONFIG) expected["FEED_DOMAIN"] = '' #This is added by configure settings self.maxDiff = None self.assertDictEqual(settings, expected) def test_settings_return_independent(self): """Make sure that the results from one settings call doesn't effect past or future instances.""" self.PATH = abspath(dirname(__file__)) default_conf = join(self.PATH, 'default_conf.py') settings = read_settings(default_conf) settings['SITEURL'] = 'new-value' new_settings = read_settings(default_conf) self.assertNotEqual(new_settings['SITEURL'], settings['SITEURL']) def test_defaults_not_overwritten(self): """This assumes 'SITENAME': 'A Pelican Blog'""" settings = read_settings(None) settings['SITENAME'] = 'Not a Pelican Blog' self.assertNotEqual(settings['SITENAME'], _DEFAULT_CONFIG['SITENAME']) def test_configure_settings(self): """Manipulations to settings should be applied correctly.""" # SITEURL should not have a trailing slash settings = {'SITEURL': 'http://blog.notmyidea.org/', 'LOCALE': ''} configure_settings(settings) self.assertEqual(settings['SITEURL'], 'http://blog.notmyidea.org') # FEED_DOMAIN, if undefined, should default to SITEURL settings = {'SITEURL': 'http://blog.notmyidea.org', 'LOCALE': ''} configure_settings(settings) self.assertEqual(settings['FEED_DOMAIN'], 'http://blog.notmyidea.org') settings = {'FEED_DOMAIN': 'http://feeds.example.com', 'LOCALE': ''} configure_settings(settings) self.assertEqual(settings['FEED_DOMAIN'], 'http://feeds.example.com')