first ruggedy draft
This commit is contained in:
89
tests/test_observation_review.py
Normal file
89
tests/test_observation_review.py
Normal file
@@ -0,0 +1,89 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import date
|
||||
from decimal import Decimal
|
||||
|
||||
from mousehold_api import models
|
||||
from mousehold_api.routers.observations import (
|
||||
get_import_run_detail,
|
||||
update_observation,
|
||||
)
|
||||
from mousehold_api.schemas import (
|
||||
ManualObservationCreate,
|
||||
ObservationUpdateRequest,
|
||||
)
|
||||
from mousehold_api.services.ingestion import create_observation_with_candidate
|
||||
from mousehold_domain import SourceType
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
|
||||
def test_observation_update_syncs_linked_event(
|
||||
session: Session,
|
||||
household_setup: dict[str, str],
|
||||
) -> None:
|
||||
payload = ManualObservationCreate(
|
||||
household_id=household_setup["household_id"],
|
||||
owner_user_id=household_setup["user_a_id"],
|
||||
source_account_id=household_setup["account_a_id"],
|
||||
amount=Decimal("42.50"),
|
||||
currency="EUR",
|
||||
event_date=date(2026, 1, 2),
|
||||
merchant="Old merchant",
|
||||
description="Old description",
|
||||
)
|
||||
observation, event = create_observation_with_candidate(session, payload)
|
||||
session.commit()
|
||||
|
||||
item = update_observation(
|
||||
observation.id,
|
||||
ObservationUpdateRequest(
|
||||
amount=Decimal("43.25"),
|
||||
event_date=date(2026, 1, 3),
|
||||
merchant="Updated merchant",
|
||||
description="Updated description",
|
||||
),
|
||||
session,
|
||||
None,
|
||||
)
|
||||
|
||||
assert item.observation.parsed_json["amount"] == "43.25"
|
||||
assert item.events[0].merchant == "Updated merchant"
|
||||
assert item.events[0].description == "Updated description"
|
||||
assert item.events[0].amount == Decimal("43.25")
|
||||
assert item.events[0].event_date == date(2026, 1, 3)
|
||||
assert event.id == item.events[0].id
|
||||
|
||||
|
||||
def test_import_run_detail_returns_observations_and_events(
|
||||
session: Session,
|
||||
household_setup: dict[str, str],
|
||||
) -> None:
|
||||
payload = ManualObservationCreate(
|
||||
household_id=household_setup["household_id"],
|
||||
owner_user_id=household_setup["user_a_id"],
|
||||
source_account_id=household_setup["account_a_id"],
|
||||
source_type=SourceType.BANK_CSV,
|
||||
amount=Decimal("20.00"),
|
||||
currency="EUR",
|
||||
event_date=date(2026, 1, 5),
|
||||
merchant="CSV merchant",
|
||||
)
|
||||
observation, event = create_observation_with_candidate(session, payload)
|
||||
run = models.ImportRun(
|
||||
household_id=household_setup["household_id"],
|
||||
imported_count=1,
|
||||
created_event_count=1,
|
||||
summary_json={
|
||||
"imported_observation_ids": [observation.id],
|
||||
"created_event_ids": [event.id],
|
||||
"duplicate_observation_ids": [],
|
||||
},
|
||||
)
|
||||
session.add(run)
|
||||
session.commit()
|
||||
|
||||
detail = get_import_run_detail(run.id, session, None)
|
||||
|
||||
assert detail.run.id == run.id
|
||||
assert [item.id for item in detail.observations] == [observation.id]
|
||||
assert [item.id for item in detail.events] == [event.id]
|
||||
Reference in New Issue
Block a user