Add category-list factory and seed categories in B4W smoke test
Tests / test (push) Successful in 23s
Tests / lint (push) Failing after 15s

This commit is contained in:
2026-10-18 09:28:19 +02:00
parent c0adc77f56
commit ea7854473f
7 changed files with 80 additions and 30 deletions
+18 -17
View File
@@ -8,6 +8,7 @@ from sqlalchemy.orm import Session
from src.domain_utils import find_category_db, set_category_budget
from src.models import Category, CategoryBudget, CategoryBudgetDb
from src.models.category import upsert_category
from tests.factories import CategoryFactory
# NOTE: MYPY errors suppressed for test fixtures - see AGENTS.md for type checking notes.
@@ -17,7 +18,7 @@ class TestSetCategoryBudgetNoOverlap:
def test_no_overlap_add_new(self, db_session: Session):
"""When new budget has no overlap with existing, add both."""
cat = Category(name="NoOverlap")
cat = CategoryFactory.build()
cat_db = upsert_category(db_session, cat, do_commit=False)
db_session.commit()
@@ -46,7 +47,7 @@ class TestSetCategoryBudgetNoOverlap:
def test_completely_before_no_overlap(self, db_session: Session):
"""New budget completely before existing - should add both."""
cat = Category(name="BeforeExisting")
cat = CategoryFactory.build()
cat_db = upsert_category(db_session, cat, do_commit=False)
db_session.commit()
@@ -79,7 +80,7 @@ class TestSetCategoryBudgetFullOverlap:
def test_full_overlap_replace(self, db_session: Session):
"""When new budget fully overlaps existing, replace entirely."""
cat = Category(name="FullOverlap")
cat = CategoryFactory.build()
cat_db = upsert_category(db_session, cat, do_commit=False)
db_session.commit()
@@ -114,7 +115,7 @@ class TestSetCategoryBudgetPartialOverlapStart:
def test_partial_overlap_at_start(self, db_session: Session):
"""When new budget overlaps existing from the start, keep end and cut before."""
cat = Category(name="OverlapStart")
cat = CategoryFactory.build()
cat_db = upsert_category(db_session, cat, do_commit=False)
db_session.commit()
@@ -150,7 +151,7 @@ class TestSetCategoryBudgetPartialOverlapEnd:
def test_partial_overlap_at_end(self, db_session: Session):
"""When new budget overlaps existing at the end, keep start and cut after."""
cat = Category(name="OverlapEnd")
cat = CategoryFactory.build()
cat_db = upsert_category(db_session, cat, do_commit=False)
db_session.commit()
@@ -186,7 +187,7 @@ class TestSetCategoryBudgetMiddleOverlap:
def test_complex_overlap_middle(self, db_session: Session):
"""Handle overlap in the middle that splits existing budget into two parts."""
cat = Category(name="SplitMiddle")
cat = CategoryFactory.build()
cat_db = upsert_category(db_session, cat, do_commit=False)
db_session.commit()
@@ -223,7 +224,7 @@ class TestSetCategoryBudgetUnbounded:
def test_unbounded_start(self, db_session: Session):
"""Budget with None valid_from (unbounded start)."""
cat = Category(name="UnboundedStart")
cat = CategoryFactory.build()
cat_db = upsert_category(db_session, cat, do_commit=False)
db_session.commit()
@@ -244,7 +245,7 @@ class TestSetCategoryBudgetUnbounded:
def test_unbounded_end(self, db_session: Session):
"""Budget with None valid_to (unbounded end)."""
cat = Category(name="UnboundedEnd")
cat = CategoryFactory.build()
cat_db = upsert_category(db_session, cat, do_commit=False)
db_session.commit()
@@ -265,7 +266,7 @@ class TestSetCategoryBudgetUnbounded:
def test_unbounded_both(self, db_session: Session):
"""Budget with both dates unbounded (None)."""
cat = Category(name="UnboundedBoth")
cat = CategoryFactory.build()
cat_db = upsert_category(db_session, cat, do_commit=False)
db_session.commit()
@@ -290,7 +291,7 @@ class TestSetCategoryBudgetWithExistingUnbounded:
def test_add_bounded_after_unbounded(self, db_session: Session):
"""Add a bounded budget after an unbounded one (no overlap)."""
cat = Category(name="AfterUnbounded")
cat = CategoryFactory.build()
cat_db = upsert_category(db_session, cat, do_commit=False)
db_session.commit()
@@ -319,7 +320,7 @@ class TestSetCategoryBudgetWithExistingUnbounded:
def test_add_bounded_before_unbounded(self, db_session: Session):
"""Add a bounded budget before an unbounded one (no overlap)."""
cat = Category(name="BeforeUnbounded")
cat = CategoryFactory.build()
cat_db = upsert_category(db_session, cat, do_commit=False)
db_session.commit()
@@ -352,7 +353,7 @@ class TestSetCategoryBudgetMultipleWithSameAmount:
def test_same_range_different_amount(self, db_session: Session):
"""When two budgets have same range but different amounts, only one should remain."""
cat = Category(name="SameRangeDifferentAmount")
cat = CategoryFactory.build()
cat_db = upsert_category(db_session, cat, do_commit=False)
db_session.commit()
@@ -386,7 +387,7 @@ class TestSetCategoryBudgetDateEdgeCases:
def test_adjacent_budgets_no_overlap(self, db_session: Session):
"""Two budgets that are adjacent (end of one is start-1 of next) should both exist."""
cat = Category(name="Adjacent")
cat = CategoryFactory.build()
cat_db = upsert_category(db_session, cat, do_commit=False)
db_session.commit()
@@ -497,7 +498,7 @@ class TestSetCategoryBudgetValidation:
def test_valid_budget_no_dates(self):
"""Budget with None dates is valid."""
cat = Category.from_str("test")
cat = CategoryFactory.build()
budget = CategoryBudget(
category=cat,
amount_eur=100.00,
@@ -507,7 +508,7 @@ class TestSetCategoryBudgetValidation:
def test_valid_budget_with_dates(self):
"""Budget with dates is valid."""
cat = Category.from_str("test")
cat = CategoryFactory.build()
budget = CategoryBudget(
category=cat,
amount_eur=100.00,
@@ -519,7 +520,7 @@ class TestSetCategoryBudgetValidation:
def test_invalid_date_range_raises(self):
"""Budget with valid_from > valid_to should raise validation error."""
cat = Category.from_str("test")
cat = CategoryFactory.build()
with pytest.raises(ValueError) as exc_info:
CategoryBudget(
@@ -533,7 +534,7 @@ class TestSetCategoryBudgetValidation:
def test_amount_must_be_positive(self):
"""Amount must be greater than zero."""
cat = Category.from_str("test")
cat = CategoryFactory.build()
with pytest.raises(ValueError) as exc_info:
CategoryBudget(