Config now loads default values from a file alongside the source.

This commit is contained in:
Michael Lazar
2015-12-14 23:37:23 -08:00
parent b487f70e48
commit 49e2d1aa4f
8 changed files with 196 additions and 83 deletions

View File

@@ -5,7 +5,7 @@ import os
import codecs
from tempfile import NamedTemporaryFile
from rtv.config import Config
from rtv.config import Config, copy_default_config, DEFAULT_CONFIG
try:
from unittest import mock
@@ -13,6 +13,18 @@ except ImportError:
import mock
def test_copy_default_config():
"Make sure the default config file was included in the package"
with NamedTemporaryFile(suffix='.cfg') as fp:
with mock.patch('rtv.config.input', return_value='y'):
copy_default_config(fp.name)
with open(DEFAULT_CONFIG) as fp_default:
assert fp.read() == fp_default.read()
permissions = os.stat(fp.name).st_mode & 0o777
assert permissions == 0o664
def test_config_interface():
"Test setting and removing values"
@@ -20,40 +32,50 @@ def test_config_interface():
assert config['ascii'] is True
config['ascii'] = False
assert config['ascii'] is False
config['ascii'] = True
config['ascii'] = None
assert config['ascii'] is None
del config['ascii']
assert config['ascii'] is False
config.update(subreddit='cfb', new_value=2.0)
assert config['subreddit'] == 'cfb'
assert config['new_value'] == 2.0
assert config['link'] is None
assert config['log'] is None
def test_config_from_args():
def test_config_get_args():
"Ensure that command line arguments are parsed properly"
args = ['rtv',
'-s', 'cfb',
'-l', 'https://reddit.com/permalink •',
'--log', 'logfile.log',
'--config', 'configfile.cfg',
'--ascii',
'--non-persistent',
'--clear-auth']
'--clear-auth',
'--copy-config']
with mock.patch('sys.argv', ['rtv']):
config = Config()
config.from_args()
config_dict = Config.get_args()
config = Config(**config_dict)
assert config.config == {}
with mock.patch('sys.argv', args):
config = Config()
config.from_args()
config_dict = Config.get_args()
config = Config(**config_dict)
assert config['ascii'] is True
assert config['subreddit'] == 'cfb'
assert config['link'] == 'https://reddit.com/permalink •'
assert config['log'] == 'logfile.log'
assert config['ascii'] is True
assert config['persistent'] is False
assert config['clear_auth'] is True
assert config['link'] == 'https://reddit.com/permalink •'
assert config['config'] == 'configfile.cfg'
assert config['copy_config'] is True
def test_config_from_file():
@@ -68,15 +90,17 @@ def test_config_from_file():
'subreddit': 'cfb'}
with NamedTemporaryFile(suffix='.cfg') as fp:
config = Config(config_file=fp.name)
config.from_file()
fargs = Config.get_file(filename=fp.name)
config = Config(**fargs)
assert config.config == {}
rows = ['{0}={1}'.format(key, val) for key, val in args.items()]
data = '\n'.join(['[rtv]'] + rows)
fp.write(codecs.encode(data, 'utf-8'))
fp.flush()
config.from_file()
fargs = Config.get_file(filename=fp.name)
config.update(**fargs)
assert config.config == args