72 lines
2.1 KiB
Python
72 lines
2.1 KiB
Python
from decimal import Decimal
|
||
|
||
import pytest
|
||
|
||
from fin_defs import DKK, USD, AssetAmount, FiatCurrency
|
||
from fin_defs.parse_price import parse_price
|
||
|
||
|
||
def dkk(amount):
|
||
return AssetAmount(DKK, Decimal(amount))
|
||
|
||
|
||
PRICES_PARSABLE = [
|
||
('DKK100', dkk(100)),
|
||
('100;-', dkk(100)),
|
||
('100 kr', dkk(100)),
|
||
(' 100 kr ', dkk(100)),
|
||
('349.-', dkk(349)),
|
||
('3.000 kr.', dkk(3000)),
|
||
('25,00 kr.', dkk(25)),
|
||
('300,00 kr.', dkk(300)),
|
||
('300kr.', dkk(300)),
|
||
('300kr', dkk(300)),
|
||
('5,00 dkk', dkk(5)),
|
||
('9,99 dkk', dkk('9.99')),
|
||
('17900 kr', dkk(17900)),
|
||
('650 kr.', dkk(650)),
|
||
]
|
||
|
||
PRICES_UNPARSABLE = [
|
||
'007',
|
||
]
|
||
|
||
|
||
@pytest.mark.parametrize(('price_string', 'parsed_amount'), PRICES_PARSABLE)
|
||
def test_parse_price(price_string: str, parsed_amount: AssetAmount):
|
||
result = parse_price(price_string, FiatCurrency.JPY)
|
||
assert result == parsed_amount
|
||
|
||
|
||
@pytest.mark.parametrize('price_string', PRICES_UNPARSABLE)
|
||
def test_parse_unparsable(price_string: str):
|
||
assert parse_price(price_string, USD) is None
|
||
|
||
|
||
def parse_asset_amount(text: str) -> AssetAmount:
|
||
return parse_price(text, FiatCurrency.JPY)
|
||
|
||
|
||
def test_parse_asset_amount_dkk():
|
||
assert parse_asset_amount('1338 DKK').amount == 1338
|
||
assert parse_asset_amount('1338,00 DKK').amount == 1338
|
||
assert parse_asset_amount('13,38 DKK').amount == Decimal('13.38')
|
||
assert parse_asset_amount('13.38 DKK').amount == Decimal('13.38')
|
||
assert parse_asset_amount('1338,00. DKK').amount == 1338
|
||
assert parse_asset_amount('99,00 kr.').amount == 99
|
||
|
||
assert parse_asset_amount('kr 825.00').amount == 825
|
||
assert parse_asset_amount('kr 825.00').asset == DKK
|
||
assert parse_asset_amount('kr 825,00').amount == 825
|
||
assert parse_asset_amount('kr 825,00').asset == DKK
|
||
assert parse_asset_amount('kr. 825.00').amount == 825
|
||
assert parse_asset_amount('kr. 825.00').asset == DKK
|
||
|
||
|
||
def test_parse_asset_amount_usd():
|
||
assert parse_asset_amount('$99').amount == 99
|
||
assert parse_asset_amount('$99').asset == USD
|
||
|
||
assert parse_asset_amount('99$ USD').amount == 99
|
||
assert parse_asset_amount('99$ USD').asset == USD
|