Files
hms-licht-ton/backend/tests/test_models.py
T

99 lines
3.1 KiB
Python
Raw Normal View History

"""Tests for SQLAlchemy model definitions and table creation."""
from datetime import date
import pytest
from sqlalchemy import select
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.orm import selectinload
from app.models.admin_user import AdminUser
from app.models.contact import Contact
from app.models.equipment import EquipmentCache
from app.models.rental_request import RentalRequest, RentalRequestItem
from app.models.sync_log import SyncLog
@pytest.mark.asyncio
async def test_equipment_cache_model(db_session: AsyncSession):
"""EquipmentCache model can be instantiated and queried."""
item = EquipmentCache(
rentman_id="999", name="Test Speaker", number="TS-001",
category="Lautsprecher", description="Test item",
)
db_session.add(item)
await db_session.commit()
await db_session.refresh(item)
assert item.id is not None
assert item.rentman_id == "999"
assert item.available is True
@pytest.mark.asyncio
async def test_rental_request_model(db_session: AsyncSession):
"""RentalRequest and RentalRequestItem models work with relationships."""
req = RentalRequest(
reference_number="HMS-2026-00001",
event_name="Test Event",
date_start=date(2026, 8, 15),
date_end=date(2026, 8, 16),
contact_name="Max Mustermann",
contact_email="max@example.com",
)
db_session.add(req)
await db_session.commit()
await db_session.refresh(req)
item = RentalRequestItem(
rental_request_id=req.id,
equipment_name="Test Speaker",
quantity=2,
)
db_session.add(item)
await db_session.commit()
# Use explicit query with selectinload to avoid lazy loading in async
result = await db_session.execute(
select(RentalRequest).options(selectinload(RentalRequest.items)).where(RentalRequest.id == req.id)
)
loaded_req = result.scalar_one()
assert len(loaded_req.items) == 1
assert loaded_req.items[0].quantity == 2
@pytest.mark.asyncio
async def test_contact_model(db_session: AsyncSession):
"""Contact model can store a contact form submission."""
contact = Contact(
name="Max", email="max@example.com", message="Hello",
privacy_consent=True,
)
db_session.add(contact)
await db_session.commit()
await db_session.refresh(contact)
assert contact.id is not None
assert contact.email_sent is False
@pytest.mark.asyncio
async def test_admin_user_model(db_session: AsyncSession):
"""AdminUser model stores username and password hash."""
user = AdminUser(username="admin", password_hash="hashed_secret")
db_session.add(user)
await db_session.commit()
await db_session.refresh(user)
assert user.id is not None
assert user.username == "admin"
@pytest.mark.asyncio
async def test_sync_log_model(db_session: AsyncSession):
"""SyncLog model stores sync metadata."""
log = SyncLog(sync_type="equipment", status="running")
db_session.add(log)
await db_session.commit()
await db_session.refresh(log)
assert log.id is not None
assert log.status == "running"
assert log.items_processed == 0