Files @ 5a73d3d8f8d4
Branch filter:

Location: NPO-Accounting/oxrlib/tests/test_CacheWriter.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 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())