From 60bf44e8b50f8ac5a675e35374493d2d449ca76d Mon Sep 17 00:00:00 2001 From: ryan599 Date: Mon, 3 Aug 2026 16:50:13 +0200 Subject: [PATCH 1/2] FIX: [Shop] #204 render taxons list in configured order and skip disabled taxons --- .../TaxonsListContentElementRenderer.php | 15 +++++++- .../TaxonsListContentElementRendererTest.php | 38 +++++++++++++++++-- 2 files changed, 49 insertions(+), 4 deletions(-) diff --git a/src/Renderer/ContentElement/TaxonsListContentElementRenderer.php b/src/Renderer/ContentElement/TaxonsListContentElementRenderer.php index 3ac31132..1e453ed3 100644 --- a/src/Renderer/ContentElement/TaxonsListContentElementRenderer.php +++ b/src/Renderer/ContentElement/TaxonsListContentElementRenderer.php @@ -35,7 +35,20 @@ public function render(ContentConfigurationInterface $contentConfiguration): str { $configuration = $contentConfiguration->getConfiguration(); $taxonsCodes = $configuration['taxons_list']['taxons']; - $taxons = $this->taxonRepository->findBy(['code' => $taxonsCodes]); + + $taxonsByCode = []; + foreach ($this->taxonRepository->findBy(['code' => $taxonsCodes]) as $taxon) { + if ($taxon->isEnabled()) { + $taxonsByCode[(string) $taxon->getCode()] = $taxon; + } + } + + $taxons = []; + foreach ($taxonsCodes as $taxonCode) { + if (isset($taxonsByCode[$taxonCode])) { + $taxons[] = $taxonsByCode[$taxonCode]; + } + } return $this->twig->render('@SyliusCmsPlugin/shop/content_element/index.html.twig', [ 'content_element' => $this->template, diff --git a/tests/Unit/Renderer/ContentElement/TaxonsListContentElementRendererTest.php b/tests/Unit/Renderer/ContentElement/TaxonsListContentElementRendererTest.php index baa55438..76f793b4 100644 --- a/tests/Unit/Renderer/ContentElement/TaxonsListContentElementRendererTest.php +++ b/tests/Unit/Renderer/ContentElement/TaxonsListContentElementRendererTest.php @@ -58,7 +58,7 @@ public function testDoesNotSupportOtherContentElementTypes(): void self::assertFalse($this->taxonsListContentElementRenderer->supports($contentConfigurationMock)); } - public function testRendersTaxonsListContentElement(): void + public function testRendersTaxonsListInTheConfiguredOrder(): void { /** @var Environment&MockObject $twigMock */ $twigMock = $this->createMock(Environment::class); @@ -66,18 +66,50 @@ public function testRendersTaxonsListContentElement(): void $contentConfigurationMock = $this->createMock(ContentConfigurationInterface::class); /** @var Taxon&MockObject $taxon1Mock */ $taxon1Mock = $this->createMock(Taxon::class); + $taxon1Mock->method('getCode')->willReturn('code1'); + $taxon1Mock->method('isEnabled')->willReturn(true); /** @var Taxon&MockObject $taxon2Mock */ $taxon2Mock = $this->createMock(Taxon::class); + $taxon2Mock->method('getCode')->willReturn('code2'); + $taxon2Mock->method('isEnabled')->willReturn(true); + $template = 'custom_template'; + $this->taxonsListContentElementRenderer->setTemplate($template); + $this->taxonsListContentElementRenderer->setTwigEnvironment($twigMock); + $contentConfigurationMock->expects(self::once())->method('getConfiguration')->willReturn([ + 'taxons_list' => ['taxons' => ['code2', 'code1']], + ]); + $this->taxonRepositoryMock->expects(self::once())->method('findBy')->with(['code' => ['code2', 'code1']])->willReturn([$taxon1Mock, $taxon2Mock]); + $twigMock->expects(self::once())->method('render')->with('@SyliusCmsPlugin/shop/content_element/index.html.twig', [ + 'content_element' => $template, + 'taxons' => [$taxon2Mock, $taxon1Mock], + ])->willReturn('rendered template'); + self::assertSame('rendered template', $this->taxonsListContentElementRenderer->render($contentConfigurationMock)); + } + + public function testSkipsDisabledTaxons(): void + { + /** @var Environment&MockObject $twigMock */ + $twigMock = $this->createMock(Environment::class); + /** @var ContentConfigurationInterface&MockObject $contentConfigurationMock */ + $contentConfigurationMock = $this->createMock(ContentConfigurationInterface::class); + /** @var Taxon&MockObject $enabledTaxonMock */ + $enabledTaxonMock = $this->createMock(Taxon::class); + $enabledTaxonMock->method('getCode')->willReturn('code1'); + $enabledTaxonMock->method('isEnabled')->willReturn(true); + /** @var Taxon&MockObject $disabledTaxonMock */ + $disabledTaxonMock = $this->createMock(Taxon::class); + $disabledTaxonMock->method('getCode')->willReturn('code2'); + $disabledTaxonMock->method('isEnabled')->willReturn(false); $template = 'custom_template'; $this->taxonsListContentElementRenderer->setTemplate($template); $this->taxonsListContentElementRenderer->setTwigEnvironment($twigMock); $contentConfigurationMock->expects(self::once())->method('getConfiguration')->willReturn([ 'taxons_list' => ['taxons' => ['code1', 'code2']], ]); - $this->taxonRepositoryMock->expects(self::once())->method('findBy')->with(['code' => ['code1', 'code2']])->willReturn([$taxon1Mock, $taxon2Mock]); + $this->taxonRepositoryMock->expects(self::once())->method('findBy')->with(['code' => ['code1', 'code2']])->willReturn([$enabledTaxonMock, $disabledTaxonMock]); $twigMock->expects(self::once())->method('render')->with('@SyliusCmsPlugin/shop/content_element/index.html.twig', [ 'content_element' => $template, - 'taxons' => [$taxon1Mock, $taxon2Mock], + 'taxons' => [$enabledTaxonMock], ])->willReturn('rendered template'); self::assertSame('rendered template', $this->taxonsListContentElementRenderer->render($contentConfigurationMock)); } From 3bfaeb019564f21d6d08767822787c53201e637d Mon Sep 17 00:00:00 2001 From: ryan599 Date: Tue, 4 Aug 2026 14:25:50 +0200 Subject: [PATCH 2/2] FIX: [Shop] #204 filter disabled taxons in the database query --- .../TaxonsListContentElementRenderer.php | 6 ++---- .../TaxonsListContentElementRendererTest.php | 13 +++---------- 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/src/Renderer/ContentElement/TaxonsListContentElementRenderer.php b/src/Renderer/ContentElement/TaxonsListContentElementRenderer.php index 1e453ed3..a0611065 100644 --- a/src/Renderer/ContentElement/TaxonsListContentElementRenderer.php +++ b/src/Renderer/ContentElement/TaxonsListContentElementRenderer.php @@ -37,10 +37,8 @@ public function render(ContentConfigurationInterface $contentConfiguration): str $taxonsCodes = $configuration['taxons_list']['taxons']; $taxonsByCode = []; - foreach ($this->taxonRepository->findBy(['code' => $taxonsCodes]) as $taxon) { - if ($taxon->isEnabled()) { - $taxonsByCode[(string) $taxon->getCode()] = $taxon; - } + foreach ($this->taxonRepository->findBy(['code' => $taxonsCodes, 'enabled' => true]) as $taxon) { + $taxonsByCode[(string) $taxon->getCode()] = $taxon; } $taxons = []; diff --git a/tests/Unit/Renderer/ContentElement/TaxonsListContentElementRendererTest.php b/tests/Unit/Renderer/ContentElement/TaxonsListContentElementRendererTest.php index 76f793b4..48fe97a0 100644 --- a/tests/Unit/Renderer/ContentElement/TaxonsListContentElementRendererTest.php +++ b/tests/Unit/Renderer/ContentElement/TaxonsListContentElementRendererTest.php @@ -67,18 +67,16 @@ public function testRendersTaxonsListInTheConfiguredOrder(): void /** @var Taxon&MockObject $taxon1Mock */ $taxon1Mock = $this->createMock(Taxon::class); $taxon1Mock->method('getCode')->willReturn('code1'); - $taxon1Mock->method('isEnabled')->willReturn(true); /** @var Taxon&MockObject $taxon2Mock */ $taxon2Mock = $this->createMock(Taxon::class); $taxon2Mock->method('getCode')->willReturn('code2'); - $taxon2Mock->method('isEnabled')->willReturn(true); $template = 'custom_template'; $this->taxonsListContentElementRenderer->setTemplate($template); $this->taxonsListContentElementRenderer->setTwigEnvironment($twigMock); $contentConfigurationMock->expects(self::once())->method('getConfiguration')->willReturn([ 'taxons_list' => ['taxons' => ['code2', 'code1']], ]); - $this->taxonRepositoryMock->expects(self::once())->method('findBy')->with(['code' => ['code2', 'code1']])->willReturn([$taxon1Mock, $taxon2Mock]); + $this->taxonRepositoryMock->expects(self::once())->method('findBy')->with(['code' => ['code2', 'code1'], 'enabled' => true])->willReturn([$taxon1Mock, $taxon2Mock]); $twigMock->expects(self::once())->method('render')->with('@SyliusCmsPlugin/shop/content_element/index.html.twig', [ 'content_element' => $template, 'taxons' => [$taxon2Mock, $taxon1Mock], @@ -86,7 +84,7 @@ public function testRendersTaxonsListInTheConfiguredOrder(): void self::assertSame('rendered template', $this->taxonsListContentElementRenderer->render($contentConfigurationMock)); } - public function testSkipsDisabledTaxons(): void + public function testSkipsCodesThatResolveToNoEnabledTaxon(): void { /** @var Environment&MockObject $twigMock */ $twigMock = $this->createMock(Environment::class); @@ -95,18 +93,13 @@ public function testSkipsDisabledTaxons(): void /** @var Taxon&MockObject $enabledTaxonMock */ $enabledTaxonMock = $this->createMock(Taxon::class); $enabledTaxonMock->method('getCode')->willReturn('code1'); - $enabledTaxonMock->method('isEnabled')->willReturn(true); - /** @var Taxon&MockObject $disabledTaxonMock */ - $disabledTaxonMock = $this->createMock(Taxon::class); - $disabledTaxonMock->method('getCode')->willReturn('code2'); - $disabledTaxonMock->method('isEnabled')->willReturn(false); $template = 'custom_template'; $this->taxonsListContentElementRenderer->setTemplate($template); $this->taxonsListContentElementRenderer->setTwigEnvironment($twigMock); $contentConfigurationMock->expects(self::once())->method('getConfiguration')->willReturn([ 'taxons_list' => ['taxons' => ['code1', 'code2']], ]); - $this->taxonRepositoryMock->expects(self::once())->method('findBy')->with(['code' => ['code1', 'code2']])->willReturn([$enabledTaxonMock, $disabledTaxonMock]); + $this->taxonRepositoryMock->expects(self::once())->method('findBy')->with(['code' => ['code1', 'code2'], 'enabled' => true])->willReturn([$enabledTaxonMock]); $twigMock->expects(self::once())->method('render')->with('@SyliusCmsPlugin/shop/content_element/index.html.twig', [ 'content_element' => $template, 'taxons' => [$enabledTaxonMock],