GroupedShippingMethods 1.1.15 Help

Regressions-Register

Jeder behobene Fehler mit dem Test, der ihn festhält. Wer einen Eintrag löscht, nimmt die Absicherung mit.

REG-0001 — Der Gruppenname wurde ungefiltert ausgegeben

Symptom. Auszeichnung im Gruppennamen wurde im Bestellabschluss ausgeführt statt dargestellt. Dieselbe Zeile las zudem shippingGroup.name statt shippingGroup.translated.name, sodass übersetzte Namen in der Standardsprache erschienen.

Test. src/Test/TemplateEscapingTest.php

REG-0006 — Das Storefront-Bündel lag unter einem doppelten Pfad

Symptom. Nachgeladene Programmteile antworteten mit »nicht gefunden«. Der Kern setzt filename und chunkFilename beide auf ./js/<technischer Name>/, sodass der Pfad zweimal auftauchte.

Test. Zurückgezogen am 06.09.2026. Der Wächter prüfte das gebaute Storefront-Bündel — und das Plugin liefert keines mehr: Seine einzige Storefront-JS tat nur, was Bootstrap ohnehin tut, und wurde entfernt. Kehrt Storefront-JS zurück, gehört der Wächter mit zurück; er steht in der Geschichte unter src/Test/StorefrontChunkPathTest.php.

REG-0008 — Versandarten ohne Gruppe verschwanden aus dem Bestellabschluss

Symptom. Eine Versandart, die keiner Gruppe zugeordnet war, ließ sich im Bestellabschluss nicht auswählen. Sie fehlte kommentarlos, während sie im Adminbereich und in jeder anderen Ansicht als verfügbar geführt wurde. In einem Shop, der das Plugin installiert und eine Zuordnung vergisst, fällt eine Versandart damit still aus dem Verkauf.

Ursache. Die Einstiegsvorlage ersetzt den Block, mit dem der Kern die Versandartenliste rendert, vollständig — ohne {% parent %} — und rendert ausschließlich page.groups. Diese Liste entsteht in ShippingMethodGroupCollection::getGroups(), das jede Versandart auf ihre Gruppe abbildet:

$this->shippingMethods->fmap(function (ShippingMethodEntity $shippingMethod) { if ($shippingMethod->hasExtension('groups')) { return $shippingMethod->getExtension('groups')->first(); } return null; });

fmap verwirft die null-Rückgaben. Was keine Gruppe hat, hat damit keinen Reiter — und ohne Reiter keinen Platz auf der Seite. Gruppierung entscheidet aber nur über die Reihenfolge der Liste, nicht über ihre Mitglieder.

Fix. getUngroupedShippingMethods() auf der Sammlung und auf der Seiten-Erweiterung; die Vorlage rendert daraus einen zusätzlichen Reiter am Ende, der nur erscheint, wenn er gefüllt ist. Eine vorhandene, aber leere Gruppenverknüpfung — der Zustand direkt nach dem Löschen einer Gruppe — zählt dabei als ungruppiert.

Test. src/Test/UngroupedShippingMethodsTest.php, src/Test/CheckoutTemplateTest.php

REG-0009 — Eine Gruppe ohne Beschreibung ließ die Seite abstürzen

Symptom. Nach dem Speichern einer Gruppe ohne Beschreibung brach das Laden des Bestellabschlusses mit einem Programmfehler ab.

Ursache. Die Spalte ist description longtext und das Feld trägt kein Required-Kennzeichen — eine Gruppe darf also keine Beschreibung haben, und der Editor verlangt auch keine. ShippingMethodGroupEntity und ShippingMethodGroupTranslationEntity typisierten die Eigenschaft trotzdem als string. Die Hydration weist direkt auf die Eigenschaft zu, und null auf einer nicht-nullbaren typisierten Eigenschaft ist ein Typfehler.

Fix. ?string samt nullbaren Gettern und Settern in beiden Entities. Was die Spalte erlaubt, muss die Entity aushalten.

Test. src/Test/GroupDescriptionTest.php

REG-0010 — Die 6.7-Fassung hing an einer gelöschten Kernvorlage

Symptom. Auf der 6.7-Linie wirkte das Plugin im Bestellabschluss überhaupt nicht.

Ursache. Die Vorlage erweitert @Storefront/storefront/component/shipping/shipping-fields.html.twig. Diese Datei wurde in Shopware 6.7 entfernt; die Liste rendert seither shipping-form.html.twig über den Block component_shipping_form_list. Twig löst Vorlagen erst beim Ausliefern auf, deshalb sieht weder der Bau noch die Testsuite den Bruch.

Fix. Auf dieser Linie heißt die Vorlage jetzt shipping-form.html.twig und überschreibt component_shipping_form_list. CheckoutTemplateTest prüft, dass die erweiterte Kernvorlage im ausgelieferten Storefront tatsächlich existiert und dass jeder überschriebene Block darin vorkommt. Der Test sucht die Vorlage über ihr sw_extends statt über ihren Dateinamen — der unterscheidet sich je Linie.

Test. src/Test/CheckoutTemplateTest.php

REG-0011 — Die Admin-Tests fanden die eigenen Entitäten nicht

Symptom. Von vier Admin-Testsuiten scheiterten drei mit [EntityDefinitionRegistry] No definition found for entity type leoparden_shipping_method_group. Ausgeführt wurden zwei Tests statt acht.

Ursache. Das geteilte Testpaket lädt in seinem jest.init nur das Entitätsschema des Shopware-Kerns. Die drei Entitäten dieses Plugins liegen in test/fixtures/schema.json — und niemand las die Datei. Die eigene jest.init.ts setzte lediglich den Importkontext und registrierte das Modul.

Fix. Eine Zeile: await global.helper.readSchema(join(__dirname, 'fixtures/schema.json')).

Test. Die vier Suiten selbst — sie führen jetzt acht Tests aus statt zwei.

REG-0012 — Die Storefront-Tests liefen nur im CI-Abbild

Symptom. npm test im Storefront-Verzeichnis brach ab: Cannot find module 'src/plugin-system/plugin.class', dazu Folgefehler. Null Tests auf beiden Linien.

Ursache. tsconfig.json verwies fest auf /opt/shopware/…, den Pfad im CI-Abbild. Dort stimmt er, deshalb war die Pipeline grün und niemandem fiel etwas auf; lokal gab es aus diesen Tests keine Rückmeldung.

Fix. Die betroffenen paths führen jetzt beide Möglichkeiten: CI-Abbild zuerst, danach die Produktionsvorlage. Gleiches in der Admin-tsconfig.

Test. Die Suite selbst — zwei Tests laufen wieder.

REG-0013 — Eine Spalte, zweimal abgebildet, und eine dynamische Eigenschaft

Symptom. Der Testlauf meldete: Creation of dynamic property ShippingMethodGroupTranslationEntity::$leopardenShippingMethodGroupId is deprecated. Unter PHP 9 wäre das ein Fehler, kein Hinweis.

Ursache. EntityTranslationDefinition legt für die Elternentität selbsttätig Fremdschlüssel und Assoziation an und leitet die Namen aus dem Entitätsnamen ab: leoparden_shipping_method_groupleopardenShippingMethodGroupId/leopardenShippingMethodGroup. Das Plugin bildete dieselbe Spalte zusätzlich unter eigenen Namen ab (shippingMethodGroupId, shippingMethodGroup). Die Entität deklarierte nur die Plugin-Namen — die des Kerns entstanden dynamisch. Im API-Schema standen beide Paare nebeneinander.

Fix. Die doppelten Felder aus der Definition entfernt und die Entität auf die Namen des Kerns umgestellt. Benutzt wurden die Plugin-Namen nirgends außer im plugin-eigenen Test; Admin-Quellen und Vorlagen kennen sie nicht.

Test. src/Test/GroupedShippingMethodsEntitiesTest — der Lauf meldet keine Abkündigung mehr, und das Testfixture des API-Schemas führt die Doppelung nicht mehr.

Last modified: 06 September 2026