first ruggedy draft
This commit is contained in:
107
tests/test_taxonomy_events.py
Normal file
107
tests/test_taxonomy_events.py
Normal file
@@ -0,0 +1,107 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import date
|
||||
from decimal import Decimal
|
||||
|
||||
from mousehold_api import models
|
||||
from mousehold_api.routers import events as events_router
|
||||
from mousehold_api.routers import taxonomy
|
||||
from mousehold_api.schemas import (
|
||||
CategoryCreate,
|
||||
EventTagsUpdate,
|
||||
EventUpdate,
|
||||
ManualObservationCreate,
|
||||
TagCreate,
|
||||
)
|
||||
from mousehold_api.services.ingestion import create_observation_with_candidate
|
||||
from mousehold_domain import FinancialEventStatus, FinancialEventType, RelationType, SourceType
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
|
||||
def test_categories_tags_are_visible_on_event_details(
|
||||
session: Session,
|
||||
household_setup: dict[str, str],
|
||||
) -> None:
|
||||
category = taxonomy.create_category(
|
||||
CategoryCreate(household_id=household_setup["household_id"], name="Groceries"),
|
||||
session=session,
|
||||
)
|
||||
tag = taxonomy.create_tag(
|
||||
TagCreate(household_id=household_setup["household_id"], name="shared"),
|
||||
session=session,
|
||||
)
|
||||
_observation, event = create_observation_with_candidate(
|
||||
session,
|
||||
ManualObservationCreate(
|
||||
household_id=household_setup["household_id"],
|
||||
source_type=SourceType.MANUAL,
|
||||
owner_user_id=household_setup["user_a_id"],
|
||||
amount=Decimal("42.50"),
|
||||
currency="EUR",
|
||||
event_date=date(2026, 3, 1),
|
||||
merchant="REWE",
|
||||
description="Weekly groceries",
|
||||
status=FinancialEventStatus.CONFIRMED,
|
||||
),
|
||||
)
|
||||
assert event is not None
|
||||
session.commit()
|
||||
|
||||
events_router.update_event(event.id, EventUpdate(category_id=category.id), session=session)
|
||||
events_router.update_event_tags(event.id, EventTagsUpdate(tag_ids=[tag.id]), session=session)
|
||||
|
||||
listed = events_router.list_events(household_setup["household_id"], session=session)
|
||||
assert listed[0].category_id == category.id
|
||||
assert listed[0].tag_ids == [tag.id]
|
||||
|
||||
detail = events_router.get_event_details(event.id, session=session)
|
||||
assert detail.category is not None
|
||||
assert detail.category.id == category.id
|
||||
assert [item.id for item in detail.tags] == [tag.id]
|
||||
assert len(detail.observations) == 1
|
||||
|
||||
|
||||
def test_event_list_can_hide_linked_confirmation_rows(
|
||||
session: Session,
|
||||
household_setup: dict[str, str],
|
||||
) -> None:
|
||||
primary = models.FinancialEvent(
|
||||
household_id=household_setup["household_id"],
|
||||
event_type=FinancialEventType.EXPENSE,
|
||||
status=FinancialEventStatus.CONFIRMED,
|
||||
event_date=date(2026, 4, 3),
|
||||
amount=Decimal("18.99"),
|
||||
currency="EUR",
|
||||
merchant="Example Shop",
|
||||
)
|
||||
confirming = models.FinancialEvent(
|
||||
household_id=household_setup["household_id"],
|
||||
event_type=FinancialEventType.EXPENSE,
|
||||
status=FinancialEventStatus.CONFIRMED,
|
||||
event_date=date(2026, 4, 4),
|
||||
amount=Decimal("18.99"),
|
||||
currency="EUR",
|
||||
merchant="PayPal",
|
||||
)
|
||||
session.add_all([primary, confirming])
|
||||
session.flush()
|
||||
session.add(
|
||||
models.EventRelation(
|
||||
from_event_id=primary.id,
|
||||
to_event_id=confirming.id,
|
||||
relation_type=RelationType.SAME_ECONOMIC_EVENT_AS,
|
||||
confidence=Decimal("0.93"),
|
||||
created_by="test",
|
||||
)
|
||||
)
|
||||
session.commit()
|
||||
|
||||
all_events = events_router.list_events(household_setup["household_id"], session=session)
|
||||
visible_events = events_router.list_events(
|
||||
household_setup["household_id"],
|
||||
hide_related_confirmations=True,
|
||||
session=session,
|
||||
)
|
||||
|
||||
assert {item.id for item in all_events} == {primary.id, confirming.id}
|
||||
assert {item.id for item in visible_events} == {primary.id}
|
||||
Reference in New Issue
Block a user