backend / tests /test_income_statement.py
praneethys's picture
fix income statement endpoints (#16)
4761dd9 verified
raw
history blame
No virus
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