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())