Download tests/test_csv_import.py from smlflg/FireTracker: direct link, hf CLI and curl.
- Browser
- Download file 3.1 kB
-
https://huggingface.co/smlflg/FireTracker/resolve/main/tests/test_csv_import.py
- Command line
-
hf download hf://smlflg/FireTracker/tests/test_csv_import.py
-
curl -L -o test_csv_import.py https://huggingface.co/smlflg/FireTracker/resolve/main/tests/test_csv_import.py
3.1 kB
| import pytest | |
| from csv_import import parse_bank_csv | |
| def test_german_bank_csv_with_decimal_comma(): | |
| """Test parsing a German bank CSV with semicolon delimiter and decimal comma values.""" | |
| csv_content = b"buchungstag;verwendungszweck;betrag\n2023-01-15;Lohn;1500,00\n2023-01-20;Miete;-800,00\n2023-01-25;Essen;-150,00" | |
| result = parse_bank_csv(csv_content) | |
| assert len(result["transactions"]) == 3 | |
| assert result["total_income"] == 1500.00 | |
| assert result["total_expenses"] == 950.00 | |
| assert result["net"] == 550.00 | |
| assert result["count"] == 3 | |
| assert result["monthly_estimate"] == 950.00 # All transactions in same month | |
| def test_description_and_date_extraction(): | |
| """Test that description and date fields are properly extracted.""" | |
| csv_content = b"datum;beschreibung;betrag\n2023-02-01;Supermarkt Einkauf;-50,00\n2023-02-05;Gehalt;2000,00\n2023-02-10;Restaurant;-75,00" | |
| result = parse_bank_csv(csv_content) | |
| assert len(result["transactions"]) == 3 | |
| assert result["transactions"][0]["date"] == "2023-02-01" | |
| assert result["transactions"][0]["description"] == "Supermarkt Einkauf" | |
| assert result["transactions"][0]["amount"] == -50.00 | |
| assert result["transactions"][1]["date"] == "2023-02-05" | |
| assert result["transactions"][1]["description"] == "Gehalt" | |
| assert result["transactions"][1]["amount"] == 2000.00 | |
| def test_missing_optional_fields(): | |
| """Test that missing optional description/date fields are handled gracefully.""" | |
| csv_content = b"betrag;umsatz\n100,00;100,00\n-50,00;-50,00\n" | |
| result = parse_bank_csv(csv_content) | |
| assert len(result["transactions"]) == 2 | |
| assert result["transactions"][0]["date"] == "" | |
| assert result["transactions"][0]["description"] == "" | |
| assert result["transactions"][0]["amount"] == 100.00 | |
| assert result["transactions"][1]["date"] == "" | |
| assert result["transactions"][1]["description"] == "" | |
| assert result["transactions"][1]["amount"] == -50.00 | |
| def test_monthly_estimate_over_multiple_months(): | |
| """Test monthly estimate calculation over multiple months.""" | |
| csv_content = b"buchungstag;verwendungszweck;betrag\n2023-01-15;Lohn;1500,00\n2023-01-20;Miete;-800,00\n2023-02-10;Essen;-150,00\n2023-02-20;Gehalt;1600,00\n2023-03-05;Miete;-850,00" | |
| result = parse_bank_csv(csv_content) | |
| assert result["total_expenses"] == 1800.00 | |
| assert result["count"] == 5 | |
| assert result["monthly_estimate"] == 600.00 # 1800 / 3 months | |
| def test_invalid_amount_rows_ignored(): | |
| """Test that invalid or non-numeric amount rows are ignored.""" | |
| csv_content = b"buchungstag;verwendungszweck;betrag\n2023-01-15;Lohn;1500,00\n2023-01-20;Miete;-800,00\n2023-01-25;Essen;N/A\n2023-01-30;Geschenk;abc" | |
| result = parse_bank_csv(csv_content) | |
| assert len(result["transactions"]) == 2 # Only 2 valid transactions | |
| assert result["total_income"] == 1500.00 | |
| assert result["total_expenses"] == 800.00 | |
| assert result["net"] == 700.00 | |
| assert result["count"] == 2 | |
| assert result["monthly_estimate"] == 800.00 # All transactions in same month |