backend / tests /test_income_statement.py
Praneeth Yerrapragada
chore(pr/14): fix income statement endpoints, pytests
93bae48
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