Files
@ 5a73d3d8f8d4
Branch filter:
Location: NPO-Accounting/oxrlib/tests/test_Configuration.py - annotation
5a73d3d8f8d4
5.2 KiB
text/x-python
historical: Move normalize_rate and _pretty_rate to base Formatter.
This reduces the number of method overrides to help readability,
and gets rid of the annoying format_rate/pretty_rate distinction.
This reduces the number of method overrides to help readability,
and gets rid of the annoying format_rate/pretty_rate distinction.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | 385a492ae735 08073f752bc8 0120e4ce5a5a 0120e4ce5a5a 936237eceb32 0120e4ce5a5a 0120e4ce5a5a 0120e4ce5a5a 0120e4ce5a5a 18f7ea7038d3 0120e4ce5a5a 0120e4ce5a5a 0120e4ce5a5a 0120e4ce5a5a 0120e4ce5a5a 9b6d562d46f5 0120e4ce5a5a 0120e4ce5a5a 0120e4ce5a5a 9b6d562d46f5 9b6d562d46f5 0120e4ce5a5a 0120e4ce5a5a 0120e4ce5a5a 0120e4ce5a5a 18f7ea7038d3 0120e4ce5a5a 9b6d562d46f5 9b6d562d46f5 0120e4ce5a5a 0120e4ce5a5a 9b6d562d46f5 9b6d562d46f5 0120e4ce5a5a 0120e4ce5a5a 0120e4ce5a5a 0120e4ce5a5a 0120e4ce5a5a 0120e4ce5a5a 0120e4ce5a5a 0120e4ce5a5a 0120e4ce5a5a 0120e4ce5a5a 0120e4ce5a5a 0120e4ce5a5a 0120e4ce5a5a 0120e4ce5a5a 08073f752bc8 27dbe14b94eb 27dbe14b94eb 27dbe14b94eb 27dbe14b94eb 27dbe14b94eb 27dbe14b94eb 27dbe14b94eb 27dbe14b94eb 27dbe14b94eb 27dbe14b94eb 27dbe14b94eb 27dbe14b94eb 27dbe14b94eb 08073f752bc8 27dbe14b94eb 936237eceb32 936237eceb32 936237eceb32 08073f752bc8 27dbe14b94eb 08073f752bc8 08073f752bc8 936237eceb32 08073f752bc8 08073f752bc8 936237eceb32 27dbe14b94eb 27dbe14b94eb 08073f752bc8 08073f752bc8 08073f752bc8 08073f752bc8 08073f752bc8 08073f752bc8 08073f752bc8 08073f752bc8 baa2e883cdfe baa2e883cdfe 27dbe14b94eb 27dbe14b94eb 27dbe14b94eb 27dbe14b94eb 08073f752bc8 08073f752bc8 08073f752bc8 08073f752bc8 08073f752bc8 08073f752bc8 08073f752bc8 08073f752bc8 08073f752bc8 385a492ae735 385a492ae735 8ab2373ba13e 8ab2373ba13e 8ab2373ba13e 8ab2373ba13e 8ab2373ba13e 385a492ae735 8ab2373ba13e 8ab2373ba13e 8ab2373ba13e 8ab2373ba13e 385a492ae735 385a492ae735 385a492ae735 385a492ae735 8ab2373ba13e 385a492ae735 385a492ae735 385a492ae735 385a492ae735 385a492ae735 385a492ae735 385a492ae735 385a492ae735 385a492ae735 385a492ae735 385a492ae735 385a492ae735 385a492ae735 385a492ae735 385a492ae735 385a492ae735 385a492ae735 385a492ae735 385a492ae735 385a492ae735 385a492ae735 385a492ae735 385a492ae735 385a492ae735 d0f5f1547ced d0f5f1547ced d0f5f1547ced d0f5f1547ced d0f5f1547ced d0f5f1547ced d0f5f1547ced d0f5f1547ced d0f5f1547ced | import datetime
import decimal
import os
import babel
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):
ini_path = INI_DIR_PATH / ini_filename
return oxrlib.config.Configuration(['--config-file', ini_path.as_posix()] + arglist)
def test_full_config(any_date):
config = config_from('full.ini', ['historical', any_date.isoformat()])
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(any_date):
config = config_from('incomplete.ini', ['historical', any_date.isoformat()])
assert not config.get_loaders().loaders
def test_empty_config(any_date):
config = config_from(os.devnull, ['historical', any_date.isoformat()])
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,prep1,to_curr,prep2,from_date', [
(None, 'JPY', None, None, None, None),
(None, 'gbp', None, 'Aud', None, None),
(None, 'CHF', 'to', 'eur', None, None),
(decimal.Decimal('1000'), 'chf', None, None, None, None),
(decimal.Decimal('999'), 'Eur', None, 'Chf', None, None),
(decimal.Decimal('12.34'), 'gbp', 'IN', 'eur', None, None),
(None, 'JPY', None, None, None, '12-15'),
(None, 'gbp', None, 'Aud', 'From', '12.15'),
(None, 'CHF', 'to', 'eur', 'from', '15'),
(decimal.Decimal('1000'), 'chf', None, None, None, '12-15'),
(decimal.Decimal('999'), 'Eur', None, 'Chf', None, '2016.12.15'),
(decimal.Decimal('12.34'), 'gbp', 'IN', 'eur', 'from', '2016-12-15'),
])
def test_historical_argparsing_success(amount, from_curr, prep1, to_curr, prep2, from_date, any_date):
oxrlib.config.Configuration.TODAY = datetime.date(2017, 1, 1)
# This locale's currency should not be used in any test cases above.
oxrlib.config.Configuration.LOCALE = babel.core.Locale('en', 'IN')
arglist = ['historical', any_date.isoformat()]
arglist.extend(str(s) for s in [amount, from_curr, prep1, to_curr, prep2, from_date]
if s is not None)
config = config_from(os.devnull, arglist)
expect_to_curr = 'INR' if to_curr is None else to_curr.upper()
assert config.args.amount == amount
assert config.args.from_currency == from_curr.upper()
assert config.args.to_currency == expect_to_curr
expect_from_date = None if from_date is None else datetime.date(2016, 12, 15)
assert config.args.from_date == expect_from_date
@pytest.mark.parametrize('arglist', [
['100'],
['120', 'dollars'],
['to', '42', 'usd'],
['99', 'usd', 'minus', 'jpy'],
['usdjpy'],
['44', 'eur', 'in', 'chf', 'pronto'],
['eur', 'into'],
['50', 'jpy', 'in'],
['115', 'usd', 'in', '12-15'],
['125', 'jpy', 'from', 'chf'],
['135', 'chf', 'eur', 'gbp'],
['145', 'brl', '12-16', '2020-12-18'],
])
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"
@pytest.mark.parametrize('date_s,expect_year,expect_month,expect_day', [
('5', 1965, 7, 5),
('05', 1965, 7, 5),
('14', 1965, 7, 14),
('15', 1965, 7, 15),
('16', 1965, 6, 16),
('3-6', 1965, 3, 6),
('11.10', 1964, 11, 10),
('07-14', 1965, 7, 14),
('07/15', 1965, 7, 15),
('7.16', 1964, 7, 16),
('917/12/12', 917, 12, 12),
('2017-11-1', 2017, 11, 1),
])
def test_good_date_parsing(date_s, expect_year, expect_month, expect_day):
oxrlib.config.Configuration.TODAY = datetime.date(1965, 7, 15)
config = config_from(os.devnull, ['historical', date_s])
actual_date = config.args.date
assert actual_date.year == expect_year
assert actual_date.month == expect_month
assert actual_date.day == expect_day
@pytest.mark.parametrize('date_s', [
'99',
'8-88',
'77-7',
'0xf-1-2',
'0b1-3-4',
'2017/5.9',
'2018-6/10',
'1-2-3-4',
'12/11/10',
])
def test_bad_date_parsing(date_s):
try:
config = config_from(os.devnull, ['historical', date_s])
except SystemExit:
pass
else:
assert not config.args.date, "date parsed from {!r}".format(date_s)
def test_ambiguous_arglist_failure():
try:
# It's ambiguous if "2" is "the 2nd" or "2 EUR".
config = config_from(os.devnull, ['historical', '2', 'eur'])
except SystemExit:
pass
else:
assert not config.args, "ambiguous args parsed"
|