Files @ 5a73d3d8f8d4
Branch filter:

Location: NPO-Accounting/oxrlib/tests/test_FileCache.py

Brett Smith
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.
import datetime
import pathlib

import pytest

from . import any_date, relpath
import oxrlib.errors
import oxrlib.loaders

CACHE_PATH = relpath('filecache')
HISTORICAL_PATTERN = '{date}_{base}_cache.json'

@pytest.fixture
def dummycache():
    cache = oxrlib.loaders.FileCache(CACHE_PATH)
    cache.setup(historical=HISTORICAL_PATTERN)
    return cache

@pytest.mark.parametrize('date,base', [
    (datetime.date(1999, 2, 1), 'USD'),
    (datetime.date(1999, 3, 1), 'EUR'),
])
def test_cache_success(dummycache, date, base):
    expect_name = CACHE_PATH / HISTORICAL_PATTERN.format(date=date.isoformat(), base=base)
    with dummycache.historical(date, base) as cache_file:
        assert pathlib.Path(cache_file.name) == expect_name

@pytest.mark.parametrize('date,base,exc_type', [
    (datetime.date(1999, 2, 1), 'EUR', oxrlib.errors.LoaderNoDataError),
    (datetime.date(1999, 3, 1), 'USD', oxrlib.errors.LoaderNoDataError),
    (datetime.date(1200, 12, 31), 'USD', oxrlib.errors.LoaderSourceError),
])
def test_cache_read_error(dummycache, date, base, exc_type):
    try:
        with dummycache.historical(date, base):
            assert False, "{e.__name__} not raised".format(e=exc_type)
    except exc_type:
        pass

def test_cache_unconfigured(any_date):
    cache = oxrlib.loaders.FileCache(CACHE_PATH)
    try:
        cache.historical(any_date, 'USD')
    except oxrlib.errors.CacheLoaderConfigurationError:
        pass
    else:
        assert False, "CacheLoaderConfigurationError not raised"