Files
TieMeasureFlow/server/tests/test_station_model.py
T
Adriano e36bbbb7d7 fix(models): align Station unique constraint + extend tests
- Station.code: usa UniqueConstraint("code", name="uq_stations_code")
  esplicito in __table_args__ invece di unique=True sulla colonna,
  per allineamento con la migration 002 ed evitare drift Alembic.
- Aggiunge test test_duplicate_assignment_is_rejected per coprire
  il vincolo uq_station_recipe (regola business centrale del modello).
- Sposta import IntegrityError a module-level per consistenza.

Feedback da code-reviewer su Task 2.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 22:22:14 +02:00

74 lines
2.7 KiB
Python

"""Test the Station and StationRecipeAssignment ORM models."""
import pytest
from sqlalchemy import select
from sqlalchemy.exc import IntegrityError
from sqlalchemy.ext.asyncio import AsyncSession
from models.station import Station, StationRecipeAssignment
from tests.conftest import _create_user, create_test_recipe
async def test_create_station(db_session: AsyncSession):
admin = await _create_user(db_session, username="admin1", is_admin=True)
station = Station(
code="ST-001",
name="Linea 1",
location="Reparto Nord",
created_by=admin.id,
)
db_session.add(station)
await db_session.flush()
await db_session.refresh(station)
assert station.id is not None
assert station.active is True
assert station.created_at is not None
async def test_station_code_is_unique(db_session: AsyncSession):
admin = await _create_user(db_session, username="admin2", is_admin=True)
db_session.add(Station(code="ST-DUP", name="A", created_by=admin.id))
await db_session.flush()
db_session.add(Station(code="ST-DUP", name="B", created_by=admin.id))
with pytest.raises(IntegrityError):
await db_session.flush()
await db_session.rollback()
async def test_assign_recipe_to_station(db_session: AsyncSession):
admin = await _create_user(db_session, username="admin3", is_admin=True)
station = Station(code="ST-002", name="Linea 2", created_by=admin.id)
db_session.add(station)
await db_session.flush()
recipe = await create_test_recipe(db_session, user_id=admin.id, code="REC-X")
assignment = StationRecipeAssignment(
station_id=station.id, recipe_id=recipe.id, assigned_by=admin.id,
)
db_session.add(assignment)
await db_session.flush()
result = await db_session.execute(
select(StationRecipeAssignment).where(
StationRecipeAssignment.station_id == station.id
)
)
assignments = result.scalars().all()
assert len(assignments) == 1
assert assignments[0].recipe_id == recipe.id
async def test_duplicate_assignment_is_rejected(db_session: AsyncSession):
admin = await _create_user(db_session, username="admin4", is_admin=True)
station = Station(code="ST-003", name="Linea 3", created_by=admin.id)
db_session.add(station)
await db_session.flush()
recipe = await create_test_recipe(db_session, user_id=admin.id, code="REC-Y")
db_session.add(StationRecipeAssignment(
station_id=station.id, recipe_id=recipe.id, assigned_by=admin.id,
))
await db_session.flush()
db_session.add(StationRecipeAssignment(
station_id=station.id, recipe_id=recipe.id, assigned_by=admin.id,
))
with pytest.raises(IntegrityError):
await db_session.flush()
await db_session.rollback()