Files @ 8dede9d1398c
Branch filter:

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

Brett Smith
historical: Swap Ledger and Beancount formatters in the class hierarchy.

This makes sense for a couple of reasons:

* The Beancount formatter has "less features" than the Ledger formatter, so
this is a more "logical" organization of the hierarchy anyway. Note how
this eliminates the need for the BeancountFormatter.__init__ override to
turn off Ledger features.

* Any future work will probably be focused on the Beancount formatter, so
this reduces the amount of code you have to understand and hold in your
head to do that.
import datetime
import decimal
import io
import json

from . import relpath

import oxrlib.rate
import pytest

HIST1_AED_RATE = decimal.Decimal('3.67246')
HIST1_ALL_RATE = decimal.Decimal('144.529793')

@pytest.fixture
def historical1_rate():
    with open(relpath('historical1.json').as_posix()) as rate_file:
        return oxrlib.rate.Rate.from_json_file(rate_file)

def test_rate_from_json(historical1_rate):
    assert historical1_rate.base == 'USD'
    assert historical1_rate.timestamp == datetime.datetime(2001, 2, 16, 12, 0, 0)

def test_serialize(historical1_rate):
    with open(relpath('historical1.json').as_posix()) as rate_file:
        expected = json.load(rate_file)
    assert expected == historical1_rate.serialize()

def test_convert(historical1_rate):
    assert historical1_rate.convert(2, 'USD', 'ALL') == (2 * HIST1_ALL_RATE)
    assert historical1_rate.convert(10, 'AED', 'USD') == (10 / HIST1_AED_RATE)
    assert historical1_rate.convert(1, 'AED', 'ALL') == (HIST1_ALL_RATE / HIST1_AED_RATE)