import decimal import os import pytest from . import any_date, relpath import oxrlib.cache import oxrlib.config import oxrlib.loaders INI_DIR_PATH = relpath('config_ini') def config_from(ini_filename, arglist=None): if arglist is None: arglist = ['historical', any_date().isoformat()] ini_path = INI_DIR_PATH / ini_filename return oxrlib.config.Configuration(['--config-file', ini_path.as_posix()] + arglist) def test_full_config(): config = config_from('full.ini') loaders = config.get_loaders().loaders assert type(loaders[0]) is oxrlib.loaders.FileCache assert type(loaders[1]) is oxrlib.loaders.OXRAPIRequest assert len(loaders) == 2 assert type(config.cache) is oxrlib.cache.CacheWriter def test_incomplete_config(): config = config_from('incomplete.ini') assert not config.get_loaders().loaders def test_empty_config(): config = config_from(os.devnull) assert not config.get_loaders().loaders @pytest.mark.parametrize('ini_filename,expected_currency,use_switch', [ (os.devnull, 'USD', False), ('full.ini', 'INI', False), ('full.ini', 'EUR', True), ]) def test_historical_default_base(ini_filename, expected_currency, use_switch, any_date): arglist = ['historical'] if use_switch: arglist.extend(['--base', expected_currency]) arglist.append(any_date.isoformat()) config = config_from(ini_filename, arglist) assert config.args.base == expected_currency @pytest.mark.parametrize('amount,from_curr,preposition,to_curr', [ (None, 'JPY', None, None), (decimal.Decimal('1000'), 'chf', None, None), (decimal.Decimal('999'), 'Eur', None, 'Chf'), (decimal.Decimal('12.34'), 'gbp', 'IN', 'eur'), ]) def test_historical_argparsing_success(amount, from_curr, preposition, to_curr, any_date): arglist = ['historical', any_date.isoformat()] arglist.extend(str(s) for s in [amount, from_curr, preposition, to_curr] if s is not None) config = config_from(os.devnull, arglist) assert config.args.amount == amount assert config.args.from_currency == from_curr.upper() if to_curr is not None: assert config.args.to_currency == to_curr.upper() @pytest.mark.parametrize('arglist', [ ['100'], ['120', 'dollars'], ['to', '42', 'usd'], ['99', 'usd', 'minus', 'jpy'], ['usdjpy'], ['44', 'eur', 'in', 'chf', 'pronto'], ]) def test_historical_argparsing_failure(arglist, any_date): arglist = ['historical', any_date.isoformat()] + arglist try: config = config_from(os.devnull, arglist) except SystemExit: pass else: assert not vars(config.args), "bad arglist succeeded"