47 lines
1.4 KiB
Python
47 lines
1.4 KiB
Python
import datetime
|
|
import json
|
|
import pathlib
|
|
|
|
import pytest
|
|
|
|
from . import any_date, relpath, StringIO
|
|
import oxrlib.cache
|
|
import oxrlib.errors
|
|
|
|
CACHE_PATH = relpath('writecache')
|
|
HISTORICAL_PATTERN = '{date}_{base}_cache.json'
|
|
|
|
class FakeCacheFile(oxrlib.cache.WriteCacheFile):
|
|
def __init__(self, path, *args, **kwargs):
|
|
self.path = path
|
|
assert args[0].startswith('w')
|
|
self.open_file = StringIO()
|
|
self.open_file.name = self.path.as_posix()
|
|
type(self).last_file = self.open_file
|
|
|
|
|
|
class FakeRate:
|
|
def __init__(self, date, base):
|
|
self.timestamp = datetime.datetime(date.year, date.month, date.day)
|
|
self.base = base
|
|
|
|
def serialize(self):
|
|
return "test data for {} in {}".format(self.base, self.timestamp.date())
|
|
|
|
|
|
@pytest.fixture
|
|
def dummycache():
|
|
cache = oxrlib.cache.CacheWriter(CACHE_PATH, file_class=FakeCacheFile)
|
|
cache.setup(historical=HISTORICAL_PATTERN)
|
|
return cache
|
|
|
|
def test_cache_success(dummycache, any_date):
|
|
base = 'USD'
|
|
expect_name = CACHE_PATH / HISTORICAL_PATTERN.format(date=any_date.isoformat(), base=base)
|
|
with dummycache.historical(any_date, base) as cache_file:
|
|
assert pathlib.Path(cache_file.name) == expect_name
|
|
|
|
def test_save_rate(dummycache, any_date):
|
|
rate = FakeRate(any_date, 'USD')
|
|
dummycache.save_rate(rate)
|
|
assert FakeCacheFile.last_file.last_value == json.dumps(rate.serialize())
|