Bild uebernehmen: sichtbare Rueckmeldung und Nachholen bei fehlender Kopie

Zwei Ursachen dafuer, dass der Knopf folgenlos wirkte.

Sichtbar: Uebernehmen schreibt nur ins Formular, das Artikelbild wechselt erst
beim Speichern - es gab aber nichts, woran man das erkannt haette. Die Spalte
"Bisher" zeigt jetzt sofort das uebernommene Bild mit Kennzeichnung, der Knopf
heisst danach "Uebernommen", und eine Meldung erklaert den naechsten Schritt.

Tatsaechlich folgenlos war der haeufigste Fall: Stimmte die Bildadresse
laengst und nur der Abruf war damals fehlgeschlagen, aenderte sich beim
Speichern nichts - und die Bedingung fragte genau nach einer Aenderung. Sie
richtet sich jetzt danach, woher die vorhandene Kopie stammt. Fehlt sie, wird
geholt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Scarriffle
2026-07-23 14:03:28 +02:00
parent 8766e35e91
commit 0ba968985f
5 changed files with 51 additions and 9 deletions

View File

@@ -99,6 +99,28 @@ def test_import_ueberschreibt_kein_vorhandenes_bild(db, user):
assert vorhanden.image_url == "https://eigenes.example/bild.jpg"
def test_speichern_holt_nach_wenn_die_kopie_fehlt(db, user, monkeypatch):
"""Der haeufigste Fall: Adresse stimmt laengst, der Abruf schlug nur einmal fehl.
Wuerde nur auf eine geaenderte Adresse geachtet, bliebe so ein Artikel
dauerhaft ohne Bild - "Uebernehmen" waere dann folgenlos.
"""
from app.routers.products import update_product
from app.schemas import ProductUpdate
monkeypatch.setattr(images, "fetch", lambda url: (EIN_PIXEL, "image/png"))
artikel = _artikel(db, "https://example.org/pesto.png")
assert db.get(ProductImage, artikel.id) is None
update_product(
artikel.id,
ProductUpdate(image_url="https://example.org/pesto.png"),
db=db,
_=user,
)
assert db.get(ProductImage, artikel.id) is not None
def test_fetch_geht_nur_an_http_adressen(monkeypatch):
"""Ohne diese Schranke waere eine 'file://'-Adresse ein Weg ins Dateisystem."""
monkeypatch.setattr(