Sprint 2: Beladungsvorlagen (Versionierung), Objekte anlegen/duplizieren, Override-Logik
CI / backend-tests (push) Successful in 29s
CI / backend-tests (push) Successful in 29s
- Beladungsvorlage/Vorlagenposition-Modelle + Endpunkte: erstellen, neue Version
(Prompt 08 Punkt 4 - alte Version bleibt unverändert lesbar statt überschrieben)
- Objekt-Anlage aus Vorlage: Objektpositionen werden initialisiert, Ist-Menge startet
bei 0 ("nicht kontrolliert", Prompt 09)
- Duplizieren: Struktur/Sollmengen-Override kopiert, Ist-Menge/SN/Ablauf/Charge NICHT,
neuer Code Pflicht (409 bei Kollision)
- Sollmengen-Auflösung (Prompt 10): Override schlägt Vorlagenwert, sonst dynamisch aus
aktueller Vorlagenposition des Objekts
- GET /objekte/code/{code} bewusst vor /objekte/{id} registriert (Routing-Reihenfolge)
- Bugfix: app.models muss vollständig importiert werden (main.py + conftest.py), sonst
schlägt FK-Auflösung zwischen Modellen fehl, die noch von keinem Endpoint berührt
werden (Fund im dritten echten CI-Lauf)
- Tests: U8 (Override schlägt Vorlage), U9 (Duplizieren-Kopierregeln + Code-Konflikt),
U10 (neue Version, alte bleibt lesbar), Rollenrechte
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01L85hmKbvX7Cqkq47KnQhFt
This commit is contained in:
@@ -3,13 +3,17 @@ import pytest_asyncio
|
||||
from httpx import ASGITransport, AsyncClient
|
||||
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
|
||||
|
||||
import app.models # noqa: F401 (registriert ALLE ORM-Modelle an Base.metadata, auch
|
||||
# solche, die noch von keinem API-Endpunkt importiert werden - sonst schlägt die
|
||||
# FK-Auflösung für andere Modelle fehl, sobald z. B. Objekt.vorlage_id auf eine noch
|
||||
# nicht importierte Tabelle zeigt. Fund im dritten echten CI-Lauf.)
|
||||
from app.core.app_settings import settings
|
||||
from app.core.security import hash_password
|
||||
from app.db.session import get_db
|
||||
from app.main import app
|
||||
from app.models.auth import Benutzer, BenutzerRolle, RolleTyp
|
||||
from app.models.objekt import Objekt
|
||||
from app.models.stammdaten import Bereich, Objekttyp, Standort
|
||||
from app.models.stammdaten import Bereich, Material, MaterialTyp, Objekttyp, Standort
|
||||
|
||||
|
||||
@pytest_asyncio.fixture
|
||||
@@ -144,3 +148,28 @@ async def objekt_factory(db_session, hauptserver_id):
|
||||
return objekt
|
||||
|
||||
return _make
|
||||
|
||||
|
||||
@pytest_asyncio.fixture
|
||||
async def material_factory(db_session):
|
||||
async def _make(name: str) -> Material:
|
||||
material = Material(name=name, einheit="Stück", materialtyp=MaterialTyp.standard)
|
||||
db_session.add(material)
|
||||
await db_session.flush()
|
||||
return material
|
||||
|
||||
return _make
|
||||
|
||||
|
||||
@pytest_asyncio.fixture
|
||||
async def objekttyp_factory(db_session):
|
||||
async def _make(name: str) -> Objekttyp:
|
||||
bereich = Bereich(name=f"Bereich-{name}")
|
||||
db_session.add(bereich)
|
||||
await db_session.flush()
|
||||
objekttyp = Objekttyp(bereich_id=bereich.id, name=name)
|
||||
db_session.add(objekttyp)
|
||||
await db_session.flush()
|
||||
return objekttyp
|
||||
|
||||
return _make
|
||||
|
||||
Reference in New Issue
Block a user