58 lines
1.9 KiB
Python
58 lines
1.9 KiB
Python
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,
|
|
}
|