diff --git a/src/Renderer/ContentElement/TaxonsListContentElementRenderer.php b/src/Renderer/ContentElement/TaxonsListContentElementRenderer.php index 3ac31132..a0611065 100644 --- a/src/Renderer/ContentElement/TaxonsListContentElementRenderer.php +++ b/src/Renderer/ContentElement/TaxonsListContentElementRenderer.php @@ -35,7 +35,18 @@ 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, 'enabled' => true]) as $taxon) { + $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..48fe97a0 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,43 @@ public function testRendersTaxonsListContentElement(): void $contentConfigurationMock = $this->createMock(ContentConfigurationInterface::class); /** @var Taxon&MockObject $taxon1Mock */ $taxon1Mock = $this->createMock(Taxon::class); + $taxon1Mock->method('getCode')->willReturn('code1'); /** @var Taxon&MockObject $taxon2Mock */ $taxon2Mock = $this->createMock(Taxon::class); + $taxon2Mock->method('getCode')->willReturn('code2'); + $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'], '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], + ])->willReturn('rendered template'); + self::assertSame('rendered template', $this->taxonsListContentElementRenderer->render($contentConfigurationMock)); + } + + public function testSkipsCodesThatResolveToNoEnabledTaxon(): 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'); $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'], 'enabled' => true])->willReturn([$enabledTaxonMock]); $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)); }