Files
@ 8e5cb0642fe1
Branch filter:
Location: NPO-Accounting/oxrlib/tests/test_historical.py - annotation
8e5cb0642fe1
2.9 KiB
text/x-python
CacheWriter: Update tests for previous open file change.
667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 3b5a563ef64b 3b5a563ef64b 3b5a563ef64b 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 667c214e9191 | import argparse
import decimal
import io
import json
import pytest
from . import any_date, relpath
import oxrlib.commands.historical as oxrhist
class FakeResponder:
def __init__(self, response_path):
self.response_path = response_path
def _respond(self, *args, **kwargs):
return open(self.response_path)
def __getattr__(self, name):
return self._respond
def should_cache(self):
return False
class FakeConfig:
def __init__(self, responder, argvars=None):
self.responder = responder
self.args = argparse.Namespace()
if argvars is not None:
for key in argvars:
setattr(self.args, key, argvars[key])
def get_loaders(self):
return self.responder
output = pytest.fixture(lambda: io.StringIO())
@pytest.fixture
def historical1_responder():
return FakeResponder(relpath('historical1.json').as_posix())
def build_config(
responder,
date=None,
amount=None,
from_currency=None,
to_currency=None,
base='USD',
):
return FakeConfig(responder, {
'date': any_date() if date is None else date,
'base': base,
'amount': None if amount is None else decimal.Decimal(amount),
'from_currency': from_currency,
'to_currency': base if to_currency is None else to_currency,
})
def lines_from_run(config, output):
oxrhist.run(config, output, output)
output.seek(0)
return iter(output)
def test_rate_list(historical1_responder, output):
config = build_config(historical1_responder)
lines = lines_from_run(config, output)
assert next(lines).startswith('1 AED = 0.27229')
assert next(lines) == '1 USD = 3.67246 AED\n'
assert next(lines).startswith('1 ALL = 0.0069189')
assert next(lines) == '1 USD = 144.529793 ALL\n'
assert next(lines).startswith('1 ANG = 0.55865')
assert next(lines) == '1 USD = 1.79 ANG\n'
def test_one_rate(historical1_responder, output):
config = build_config(historical1_responder, from_currency='ANG')
lines = lines_from_run(config, output)
assert next(lines).startswith('1 ANG = 0.55865')
assert next(lines) == '1 USD = 1.79 ANG\n'
assert next(lines, None) is None
def test_conversion(historical1_responder, output):
config = build_config(historical1_responder, amount=10, from_currency='AED')
lines = lines_from_run(config, output)
# FIXME: Assertion probably changes after we deal with precision right.
assert next(lines).startswith('10 AED = 2.72297')
assert next(lines, None) is None
def test_back_conversion(historical1_responder, output):
config = build_config(historical1_responder,
amount=2, from_currency='USD', to_currency='ALL')
lines = lines_from_run(config, output)
# FIXME: Assertion probably changes after we deal with precision right.
assert next(lines) == '2 USD = 289.059586 ALL\n'
assert next(lines, None) is None
|