41 lines
1.5 KiB
Python
41 lines
1.5 KiB
Python
import pytest
|
||
|
||
from app.domain import TransactionKind
|
||
from app.parser import ParseError, format_money, parse_money_amount, parse_transaction
|
||
|
||
|
||
@pytest.mark.parametrize(
|
||
("text", "kopecks", "description", "kind"),
|
||
[
|
||
("467 ярче", 46_700, "ярче", TransactionKind.EXPENSE),
|
||
("3 000 бензин", 300_000, "бензин", TransactionKind.EXPENSE),
|
||
("199,90 кофе", 19_990, "кофе", TransactionKind.EXPENSE),
|
||
("+ 85 000 зарплата", 8_500_000, "зарплата", TransactionKind.INCOME),
|
||
("доход 5000 подработка", 500_000, "подработка", TransactionKind.INCOME),
|
||
("расход 1200 кино", 120_000, "кино", TransactionKind.EXPENSE),
|
||
],
|
||
)
|
||
def test_parse_transaction(text, kopecks, description, kind):
|
||
parsed = parse_transaction(text)
|
||
assert parsed.amount_kopecks == kopecks
|
||
assert parsed.description == description
|
||
assert parsed.kind is kind
|
||
|
||
|
||
@pytest.mark.parametrize("text", ["просто текст", "0 кофе", "500", "- доход 500 премия"])
|
||
def test_rejects_invalid_input(text):
|
||
with pytest.raises(ParseError):
|
||
parse_transaction(text)
|
||
|
||
|
||
def test_format_money():
|
||
assert format_money(123_456_00) == "123 456 ₽"
|
||
assert format_money(-199_90, signed=True) == "−199,90 ₽"
|
||
|
||
|
||
@pytest.mark.parametrize(
|
||
("text", "kopecks"),
|
||
[("530713", 53_071_300), ("530 713 ₽", 53_071_300), ("1250,50 руб", 125_050)],
|
||
)
|
||
def test_parse_money_amount(text, kopecks):
|
||
assert parse_money_amount(text) == kopecks
|