from __future__ import annotations import pytest from mousehold_api import models from mousehold_api.db import Base from mousehold_domain import AccountType, VisibilityMode from sqlalchemy import create_engine from sqlalchemy.orm import Session, sessionmaker @pytest.fixture def session() -> Session: engine = create_engine("sqlite:///:memory:", connect_args={"check_same_thread": False}) Base.metadata.create_all(engine) SessionLocal = sessionmaker( bind=engine, autoflush=False, autocommit=False, expire_on_commit=False ) with SessionLocal() as test_session: yield test_session @pytest.fixture def household_setup(session: Session) -> dict[str, str]: household = models.Household(name="Test household", default_currency="EUR") session.add(household) session.flush() user_a = models.User(household_id=household.id, display_name="A", email="a@example.test") user_b = models.User(household_id=household.id, display_name="B", email="b@example.test") session.add_all([user_a, user_b]) session.flush() account_a = models.Account( household_id=household.id, owner_user_id=user_a.id, name="A checking", account_type=AccountType.CHECKING, institution_name="Demo Bank", currency="EUR", visibility_mode=VisibilityMode.SHARED_FULL, ) shared_account = models.Account( household_id=household.id, owner_user_id=None, name="Shared wallet", account_type=AccountType.SHARED_CHECKING, institution_name="Demo Bank", currency="EUR", visibility_mode=VisibilityMode.SHARED_FULL, ) session.add_all([account_a, shared_account]) session.commit() return { "household_id": household.id, "user_a_id": user_a.id, "user_b_id": user_b.id, "account_a_id": account_a.id, "shared_account_id": shared_account.id, }