finalized helper functions for category trees; started writing tests
Tests / test (push) Successful in 11s
Tests / lint (push) Successful in 10s

This commit is contained in:
2026-10-28 21:17:54 +01:00
parent e0c32319e8
commit 73298b3e49
8 changed files with 194 additions and 90 deletions
+17 -6
View File
@@ -1,4 +1,5 @@
from datetime import date
from decimal import Decimal
import pytest
@@ -12,24 +13,30 @@ class TestCategoryComputedFields:
def test_hash_id_computed_field_simple(self):
"""Test hash_id for single-level category."""
c = Category.from_str("single")
assert c
assert hasattr(c, "hash_id")
assert isinstance(c.hash_id, str)
# Hash should be deterministic for same inputs
c2 = Category.from_str("single")
assert c2
assert c.hash_id == c2.hash_id
def test_hash_id_computed_field_nested(self):
"""Test hash_id for multi-level category hierarchy."""
c1 = Category.from_str("level1:level2:level3")
assert c1
assert hasattr(c1, "hash_id")
c2 = Category.from_str("level1:level2:level3")
assert c2
assert c1.hash_id == c2.hash_id
def test_hash_id_different_hierarchy(self):
"""Test that different hierarchies have different hash_ids."""
c1 = Category.from_str("A:B")
c2 = Category.from_str("A:C")
assert c1
assert c2
# Different last level -> different hash_id
assert c1.hash_id != c2.hash_id
@@ -40,22 +47,26 @@ class TestCategoryComputedFields:
# Create another with same name but no parent
orphan = Category.from_str("Budget")
assert orphan
assert cat1.hash_id != orphan.hash_id
def test_to_str_single_level(self):
"""Test to_str() for single-level category."""
c = Category.from_str("single")
assert c
assert c.to_str() == "single"
def test_to_str_nested(self):
"""Test to_str() for nested category."""
c = Category.from_str("parent:child:grandchild")
assert c
assert c.to_str() == "parent:child:grandchild"
def test_str_uses_to_str(self):
"""Test that __str__ delegates to to_str()."""
c = Category.from_str("A:B:C")
assert c
assert str(c) == c.to_str() == "A:B:C"
def test_repr_simple(self):
@@ -79,7 +90,7 @@ class TestCategoryBudgetValidation:
cat = CategoryFactory.build()
budget = CategoryBudget(
category=cat,
amount_eur=100.00,
amount_eur=Decimal("100.00"),
)
assert budget.valid_from is None
assert budget.valid_to is None
@@ -90,7 +101,7 @@ class TestCategoryBudgetValidation:
cat = CategoryFactory.build()
budget = CategoryBudget(
category=cat,
amount_eur=100.00,
amount_eur=Decimal("100.00"),
valid_from=date(2026, 10, 1),
valid_to=date(2026, 10, 31),
)
@@ -105,7 +116,7 @@ class TestCategoryBudgetValidation:
with pytest.raises(ValueError) as exc_info:
CategoryBudget(
category=cat,
amount_eur=100.00,
amount_eur=Decimal("100.00"),
valid_from=date(2026, 10, 31),
valid_to=date(2026, 10, 1),
)
@@ -120,7 +131,7 @@ class TestCategoryBudgetValidation:
cat = CategoryFactory.build()
budget = CategoryBudget(
category=cat,
amount_eur=100.00,
amount_eur=Decimal("100.00"),
valid_from=date(2026, 10, 1),
valid_to=date(2026, 10, 1),
)
@@ -133,7 +144,7 @@ class TestCategoryBudgetValidation:
cat = CategoryFactory.build()
budget = CategoryBudget(
category=cat,
amount_eur=150.75,
amount_eur=Decimal("150.75"),
valid_from=date(2026, 9, 1),
valid_to=date(2026, 9, 30),
)
@@ -142,7 +153,7 @@ class TestCategoryBudgetValidation:
try:
CategoryBudget(
category=cat,
amount_eur=200.00,
amount_eur=Decimal("200.00"),
valid_from=date(2026, 12, 31),
valid_to=date(2026, 12, 30),
)