1
0
fin-defs/test/test_parse_price.py
Jon Michael Aanes ff4a975c79
Some checks failed
Python Ruff Code Quality / ruff (push) Failing after 22s
Run Python tests (through Pytest) / Test (push) Failing after 24s
Verify Python project can be installed, loaded and have version checked / Test (push) Successful in 21s
Improved support for whitespace in prices
2025-05-17 15:45:23 +02:00

86 lines
2.6 KiB
Python
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)),
('3.000.000 kr.', dkk(3_000_000)),
('3.000.000,25 kr.', dkk(3_000_000.25)),
('3,000 kr.', dkk(3000)),
('3,000,000 kr.', dkk(3_000_000)),
('3,000,000.25 kr.', dkk(3_000_000.25)),
('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)),
('3 650 kr.', dkk(3_650)),
('3 650 DKK', dkk(3_650)),
('3 650 650 kr.', dkk(3_650_650)),
('3 650 650 DKK', dkk(3_650_650)),
('3 650 kr.', dkk(3_650)),
('3 650 DKK', dkk(3_650)),
('3 650 650 kr.', dkk(3_650_650)),
('3 650 650 DKK', dkk(3_650_650)),
('2998 kr', dkk(2998)),
]
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