From ad5cb2fa3b1584eac8c85baf684ea4db7b03cb57 Mon Sep 17 00:00:00 2001 From: Timo Altholtmann Date: Mon, 1 Feb 2021 14:07:03 +0100 Subject: [PATCH] NEXT-13521 - Fix cms text element with null value --- .../Element/TextCmsElementResolver.php | 2 +- .../Type/TextTypeDataResolverTest.php | 50 +++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/src/Core/Content/Cms/DataResolver/Element/TextCmsElementResolver.php b/src/Core/Content/Cms/DataResolver/Element/TextCmsElementResolver.php index b2686103505..e77a3ca7445 100644 --- a/src/Core/Content/Cms/DataResolver/Element/TextCmsElementResolver.php +++ b/src/Core/Content/Cms/DataResolver/Element/TextCmsElementResolver.php @@ -38,7 +38,7 @@ public function enrich(CmsSlotEntity $slot, ResolverContext $resolverContext, El if ($config->isStatic()) { if ($resolverContext instanceof EntityResolverContext) { - $content = $this->resolveEntityValues($resolverContext, $config->getValue()); + $content = $this->resolveEntityValues($resolverContext, (string) $config->getValue()); $text->setContent((string) $content); } else { diff --git a/src/Core/Content/Test/Cms/SlotDataResolver/Type/TextTypeDataResolverTest.php b/src/Core/Content/Test/Cms/SlotDataResolver/Type/TextTypeDataResolverTest.php index 962e91df417..9957ad4372d 100644 --- a/src/Core/Content/Test/Cms/SlotDataResolver/Type/TextTypeDataResolverTest.php +++ b/src/Core/Content/Test/Cms/SlotDataResolver/Type/TextTypeDataResolverTest.php @@ -214,4 +214,54 @@ public function testWithStaticContentAndMappedVariableNotFound(): void static::assertInstanceOf(TextStruct::class, $textStruct); static::assertSame('

Title {{ product.unknownProperty }}

', $textStruct->getContent()); } + + public function testWithStaticContentAndNullValue(): void + { + $product = new ProductEntity(); + $product->setName('TextProduct'); + + $resolverContext = new EntityResolverContext($this->createMock(SalesChannelContext::class), new Request(), $this->createMock(ProductDefinition::class), $product); + $result = new ElementDataCollection(); + + $fieldConfig = new FieldConfigCollection(); + $fieldConfig->add(new FieldConfig('content', FieldConfig::SOURCE_STATIC, null)); + + $slot = new CmsSlotEntity(); + $slot->setUniqueIdentifier('id'); + $slot->setType('text'); + $slot->setConfig([]); + $slot->setFieldConfig($fieldConfig); + + $this->textResolver->enrich($slot, $resolverContext, $result); + + /** @var TextStruct|null $textStruct */ + $textStruct = $slot->getData(); + static::assertInstanceOf(TextStruct::class, $textStruct); + static::assertSame('', $textStruct->getContent()); + } + + public function testWithStaticContentAndEmptyValue(): void + { + $product = new ProductEntity(); + $product->setName('TextProduct'); + + $resolverContext = new EntityResolverContext($this->createMock(SalesChannelContext::class), new Request(), $this->createMock(ProductDefinition::class), $product); + $result = new ElementDataCollection(); + + $fieldConfig = new FieldConfigCollection(); + $fieldConfig->add(new FieldConfig('content', FieldConfig::SOURCE_STATIC, '')); + + $slot = new CmsSlotEntity(); + $slot->setUniqueIdentifier('id'); + $slot->setType('text'); + $slot->setConfig([]); + $slot->setFieldConfig($fieldConfig); + + $this->textResolver->enrich($slot, $resolverContext, $result); + + /** @var TextStruct|null $textStruct */ + $textStruct = $slot->getData(); + static::assertInstanceOf(TextStruct::class, $textStruct); + static::assertSame('', $textStruct->getContent()); + } }