backend / tests /test_income_statement.py
praneethys's picture
fix income statement endpoints (#16)
4761dd9 verified
Raw
History Blame
1.85 kB
from fastapi.testclient import TestClient
import pytest
from sqlalchemy.ext.asyncio import AsyncSession
from app.model.transaction import Transaction
from app.model.user import User
from tests.utils import get_fake_transactions
@pytest.mark.asyncio
async def test_income_statement(client: TestClient, get_db_session_fixture: AsyncSession) -> None:
session_override = get_db_session_fixture
# 1. Create a user
user = await User.create(session_override, name="user", email="email", hashed_password="password")
# 2. Create a bunch of transactions
fake_transactions = get_fake_transactions(user.id)
await Transaction.bulk_create(session_override, fake_transactions)
# 3. Create an income statement
min_date = min(t.transaction_date for t in fake_transactions)
max_date = max(t.transaction_date for t in fake_transactions)
print(f"min_date: {min_date}, max_date: {max_date}")
response = client.post(
"/api/v1/income_statement",
json={
"user_id": 1,
"date_from": str(min_date),
"date_to": str(max_date),
},
)
assert response.status_code == 200
# 4. Verify that the income statement matches the transactions
response = client.get(f"/api/v1/income_statement/user/1")
print(response.json())
assert response.status_code == 200
assert response.json()[0].get("income")
assert response.json()[0].get("expenses")
report_id = response.json()[0].get("id")
# # 5. Verify that the income statement can be retrieved
if report_id is not None:
response = client.get(f"/api/v1/income_statement/report/{report_id}")
assert response.status_code == 200
assert response.json().get("income")
assert response.json().get("expenses")
assert response.json().get("id") == report_id