Gebinde verwalten - mit Einzahl und Mehrzahl
Bisher war die Auswahl eine fest im Frontend verdrahtete Liste und es gab nur eine Form: ueberall stand "3 Glas". Neu unter Verwaltung > Gebinde: anlegen, umbenennen, loeschen, jeweils mit Einzahl und Mehrzahl. Die eingebauten Gebinde lassen sich in der Schreibweise aendern, aber nicht loeschen; ein Gebinde, das ein Artikel verwendet, ebenfalls nicht. Der Artikel speichert weiterhin nur die Einzahl als Text - so bleiben vorhandene Artikel, Sicherungen und CSV-Dateien gueltig, und eine unbekannte Bezeichnung faellt schlicht auf die Einzahl zurueck. Deshalb zieht ein Umbenennen die Artikel mit; sonst zeigten sie auf eine Bezeichnung, die es nicht mehr gibt. Die Mehrzahl greift jetzt in Artikelliste, Artikelseite (Chargen und Gebinde- Auswahl), Auslagern und in allen Ablauf- und Einkaufslisten samt Startseite. Einheiten wie Gramm oder Liter bleiben unveraendert - die haben im Deutschen keine Mehrzahl. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
79
backend/tests/test_package_types.py
Normal file
79
backend/tests/test_package_types.py
Normal file
@@ -0,0 +1,79 @@
|
||||
import pytest
|
||||
from fastapi import HTTPException
|
||||
|
||||
from app.models import BaseUnit, PackageType, Product, Role, User
|
||||
from app.routers import package_types
|
||||
from app.schemas import PackageTypeCreate, PackageTypeUpdate
|
||||
from app.seed import ensure_builtin_package_types
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
def admin(db):
|
||||
person = User(username="chef", password_hash="x", role=Role.admin)
|
||||
db.add(person)
|
||||
db.commit()
|
||||
db.refresh(person)
|
||||
return person
|
||||
|
||||
|
||||
def test_eingebaute_gebinde_werden_angelegt(db):
|
||||
ensure_builtin_package_types(db)
|
||||
glas = db.query(PackageType).filter(PackageType.singular == "Glas").one()
|
||||
assert glas.plural == "Gläser"
|
||||
assert glas.is_builtin is True
|
||||
|
||||
# Zweiter Durchlauf darf nichts verdoppeln.
|
||||
vorher = db.query(PackageType).count()
|
||||
ensure_builtin_package_types(db)
|
||||
assert db.query(PackageType).count() == vorher
|
||||
|
||||
|
||||
def test_umbenennen_zieht_die_artikel_mit(db, admin):
|
||||
"""Artikel verweisen ueber den Text, nicht ueber eine ID.
|
||||
|
||||
Ohne das Mitziehen zeigte ein Artikel nach dem Umbenennen auf eine
|
||||
Bezeichnung, die es nicht mehr gibt - und verloere still seine Mehrzahl.
|
||||
"""
|
||||
art = package_types.create_package_type(
|
||||
PackageTypeCreate(singular="Kanister", plural="Kanister"), db=db, _=admin
|
||||
)
|
||||
pesto = Product(name="Öl", base_unit=BaseUnit.milliliter, package_label="Kanister")
|
||||
db.add(pesto)
|
||||
db.commit()
|
||||
|
||||
package_types.update_package_type(
|
||||
art.id, PackageTypeUpdate(singular="Kanne", plural="Kannen"), db=db, _=admin
|
||||
)
|
||||
db.refresh(pesto)
|
||||
assert pesto.package_label == "Kanne"
|
||||
|
||||
|
||||
def test_benutztes_gebinde_laesst_sich_nicht_loeschen(db, admin):
|
||||
art = package_types.create_package_type(
|
||||
PackageTypeCreate(singular="Kanister", plural="Kanister"), db=db, _=admin
|
||||
)
|
||||
db.add(Product(name="Öl", base_unit=BaseUnit.milliliter, package_label="Kanister"))
|
||||
db.commit()
|
||||
|
||||
with pytest.raises(HTTPException) as fehler:
|
||||
package_types.delete_package_type(art.id, db=db, _=admin)
|
||||
assert fehler.value.status_code == 409
|
||||
|
||||
|
||||
def test_eingebaute_gebinde_sind_nicht_loeschbar(db, admin):
|
||||
ensure_builtin_package_types(db)
|
||||
glas = db.query(PackageType).filter(PackageType.singular == "Glas").one()
|
||||
with pytest.raises(HTTPException) as fehler:
|
||||
package_types.delete_package_type(glas.id, db=db, _=admin)
|
||||
assert fehler.value.status_code == 400
|
||||
|
||||
|
||||
def test_doppelte_bezeichnung_wird_abgelehnt(db, admin):
|
||||
package_types.create_package_type(
|
||||
PackageTypeCreate(singular="Kanister", plural="Kanister"), db=db, _=admin
|
||||
)
|
||||
with pytest.raises(HTTPException) as fehler:
|
||||
package_types.create_package_type(
|
||||
PackageTypeCreate(singular="kanister", plural="Kanister"), db=db, _=admin
|
||||
)
|
||||
assert fehler.value.status_code == 409
|
||||
Reference in New Issue
Block a user