From b9a70631042930d563b142137a261e1246bd0433 Mon Sep 17 00:00:00 2001 From: Dennis Garding Date: Tue, 6 Oct 2026 14:30:12 +0200 Subject: [PATCH] fix: assign shipping methods to the demo rule --- src/DataProvider/RuleProvider.php | 4 +++- src/DataProvider/ShippingMethodProvider.php | 17 +-------------- tests/DemoDataServiceTest.php | 23 +++++++++++++++++++++ 3 files changed, 27 insertions(+), 17 deletions(-) diff --git a/src/DataProvider/RuleProvider.php b/src/DataProvider/RuleProvider.php index f1f5e35..0846936 100644 --- a/src/DataProvider/RuleProvider.php +++ b/src/DataProvider/RuleProvider.php @@ -15,6 +15,8 @@ #[Package('fundamentals@after-sales')] class RuleProvider extends DemoDataProvider { + public const CART_AMOUNT_RULE_ID = 'e1378db7808a478f919e0d740d5d6c1a'; + private Connection $connection; public function __construct(Connection $connection) @@ -134,7 +136,7 @@ public function getPayload(): array ], ], [ - 'id' => 'e1378db7808a478f919e0d740d5d6c1a', + 'id' => self::CART_AMOUNT_RULE_ID, 'name' => 'Warenkorbwert größer/gleich 0', 'priority' => 100, 'conditions' => [ diff --git a/src/DataProvider/ShippingMethodProvider.php b/src/DataProvider/ShippingMethodProvider.php index acfed6b..d1e9679 100644 --- a/src/DataProvider/ShippingMethodProvider.php +++ b/src/DataProvider/ShippingMethodProvider.php @@ -34,12 +34,11 @@ public function getEntity(): string public function getPayload(): array { - $ruleId = $this->getRuleId(); $payload = []; foreach ($this->getShippingMethodIds() as $shippingMethodId) { $payload[] = [ 'id' => $shippingMethodId, - 'availabilityRuleId' => $ruleId, + 'availabilityRuleId' => RuleProvider::CART_AMOUNT_RULE_ID, ]; } @@ -56,18 +55,4 @@ private function getShippingMethodIds(): array FROM `shipping_method`; '); } - - private function getRuleId(): string - { - $result = $this->connection->fetchOne(' - SELECT LOWER(HEX(`id`)) - FROM `rule` - '); - - if (!$result) { - throw new \RuntimeException('No rule found, please make sure that basic data is available by running the migrations.'); - } - - return (string) $result; - } } diff --git a/tests/DemoDataServiceTest.php b/tests/DemoDataServiceTest.php index cee4aa8..75c4c2a 100644 --- a/tests/DemoDataServiceTest.php +++ b/tests/DemoDataServiceTest.php @@ -12,12 +12,15 @@ use Doctrine\DBAL\Connection; use PHPUnit\Framework\TestCase; use Shopware\Core\Content\Category\CategoryCollection; +use Shopware\Core\Defaults; use Shopware\Core\Framework\Api\Context\SystemSource; use Shopware\Core\Framework\Context; use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository; use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria; use Shopware\Core\Framework\Log\Package; use Shopware\Core\Framework\Test\TestCaseBase\IntegrationTestBehaviour; +use Shopware\Core\Framework\Uuid\Uuid; +use Swag\PlatformDemoData\DataProvider\RuleProvider; use Swag\PlatformDemoData\DemoDataService; #[Package('fundamentals@after-sales')] @@ -55,6 +58,26 @@ public function testGenerate(): void $this->assertEntityCountGreaterThanOrEqual(16, 'product.repository'); } + public function testGenerateAssignsCartAmountRuleToAllShippingMethods(): void + { + $connection = $this->getContainer()->get(Connection::class); + + // A rule sorting before all others must not become the availability rule of the shipping methods. + $connection->insert('rule', [ + 'id' => Uuid::fromHexToBytes('00000000000000000000000000000001'), + 'name' => 'Never matching', + 'priority' => 1, + 'created_at' => (new \DateTimeImmutable())->format(Defaults::STORAGE_DATE_TIME_FORMAT), + ]); + + $demoDataService = $this->getContainer()->get(DemoDataService::class); + $demoDataService->generate(new Context(new SystemSource())); + + $availabilityRuleIds = $connection->fetchFirstColumn('SELECT DISTINCT LOWER(HEX(availability_rule_id)) FROM shipping_method'); + + static::assertSame([RuleProvider::CART_AMOUNT_RULE_ID], $availabilityRuleIds); + } + private function assertEntityCountGreaterThanOrEqual(int $expectedCount, string $repositoryName): void { /** @var EntityRepository $repository */