File diff b270db02e8d7 → d0f5f1547ced
tests/test_Configuration.py
Show inline comments
...
 
@@ -35,96 +35,105 @@ 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),
 
    (None, 'gbp', None, 'Aud'),
 
    (None, 'CHF', 'to', 'eur'),
 
    (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):
 
    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, preposition, to_curr]
 
                   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
 

	
 
@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'],
 
])
 
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"