Warenwirtschaft: AP-34 — „-Suffix"-Schema als gewollten Mechanismus dokumentieren

Kunde hat den eigentlichen Varianten-Fall präzisiert (28.08.): Kopiert ein
Anwender ein Produkt für eine Aktion / ein neues Bild, verlangt WooCommerce eine
eindeutige SKU. Konvention: Kernnummer + Suffix (100500, 100500-a, 100500-b) —
derselbe physische Artikel, der auf die Kernnummer gebucht werden muss.

Der bestehende Importer macht das bereits korrekt (volle SKU zuerst, sonst
„-"-Split auf die Kernnummer). Da wp_number eine Integer-Spalte ist, kann keine
echte Artikelnummer einen „-" enthalten — dashed SKUs fallen also immer sauber
auf die Kernnummer zurück, eigenständige Nummern treffen ihr eigenes Produkt.

Nur Doku korrigiert: Kommentare im ShoppingUserController und der Testname waren
als „Legacy-Fallback" fehletikettiert — es ist der beabsichtigte Mechanismus für
Shop-Duplikate. Kommentar erklärt jetzt beide Fälle; Test umbenannt auf
„shop-duplikat kernnummer-suffix bucht dasselbe kern-produkt". Keine Logikänderung.
Suite 338 grün.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-08-28 11:53:34 +00:00
parent e83ef3dc95
commit f42e5a8fd4
2 changed files with 24 additions and 13 deletions

View file

@ -178,12 +178,13 @@ test('AP-34: jede variante wird über ihre eigene volle SKU dem richtigen produk
->and(ShoppingOrderItem::query()->where('shopping_order_id', $log->shopping_order_id)->where('product_id', $parent->id)->count())->toBe(0);
});
test('variations-sku im legacy-format „basisnr-suffix" wird als fallback zugeordnet', function () {
// Rückwärtskompatibilität: sollte der Shop noch eine alte Variations-SKU im
// Format „10042-1" senden, greift der „-"-Split-Fallback auf die Basisnummer.
test('AP-34: shop-duplikat „kernnummer-suffix" bucht dasselbe kern-produkt', function () {
// Kopiert ein Anwender ein Produkt für eine Aktion / ein neues Bild, verlangt
// WooCommerce eine eindeutige SKU (Kernnummer + Suffix, z. B. 10042-1). Das ist
// derselbe physische Artikel und muss auf das Kern-Produkt (10042) gebucht werden.
Mail::fake();
Passport::actingAs(apilogMakeUser());
$product = apilogMakeProduct('Apilog Variante', 10042);
$product = apilogMakeProduct('Apilog Aktionskopie', 10042);
apilogMakeShoppingUser(4716);
$this->postJson('https://api.'.config('app.api_domain').'/wp/order', [