1010
1111use Ibexa \AutomatedTranslation \Encoder \BlockAttribute \BlockAttributeEncoderManager ;
1212use Ibexa \AutomatedTranslation \Encoder \Field \PageBuilderFieldEncoder ;
13+ use Ibexa \AutomatedTranslation \TextFieldCdataCleaner ;
1314use Ibexa \Contracts \Core \Repository \Values \Content \Field ;
1415use Ibexa \Contracts \FieldTypePage \FieldType \LandingPage \Model \Attribute ;
1516use Ibexa \Contracts \FieldTypePage \FieldType \LandingPage \Model \BlockValue ;
2425final class PageBuilderFieldEncoderTest extends TestCase
2526{
2627 public const ATTRIBUTE_VALUE = 'ibexa ' ;
28+ public const ATTRIBUTE_VALUE_CDATA = 'ibexa & ibexa ' ;
2729
2830 /** @var \Ibexa\AutomatedTranslation\Encoder\BlockAttribute\BlockAttributeEncoderManager&\PHPUnit\Framework\MockObject\MockObject */
2931 private BlockAttributeEncoderManager $ blockAttributeEncoderManagerMock ;
@@ -52,7 +54,8 @@ public function testEncode(): void
5254 $ field = $ this ->getLandingPageField ();
5355 $ subject = new PageBuilderFieldEncoder (
5456 $ this ->blockAttributeEncoderManagerMock ,
55- $ this ->blockDefinitionFactoryMock
57+ $ this ->blockDefinitionFactoryMock ,
58+ new TextFieldCdataCleaner ()
5659 );
5760
5861 $ result = $ subject ->encode ($ field );
@@ -75,7 +78,8 @@ public function testEncodeMissingAttribute(): void
7578 $ field = $ this ->getLandingPageField ();
7679 $ subject = new PageBuilderFieldEncoder (
7780 $ this ->blockAttributeEncoderManagerMock ,
78- $ this ->blockDefinitionFactoryMock
81+ $ this ->blockDefinitionFactoryMock ,
82+ new TextFieldCdataCleaner ()
7983 );
8084
8185 $ result = $ subject ->encode ($ field );
@@ -85,12 +89,38 @@ public function testEncodeMissingAttribute(): void
8589 self ::assertEquals ($ expectedResult , $ result );
8690 }
8791
92+ public function testEncodeCDATAInTextField (): void
93+ {
94+ $ this ->blockDefinitionFactoryMock
95+ ->method ('getBlockDefinition ' )
96+ ->withAnyParameters ()
97+ ->willReturn ($ this ->getBlockDefinition ());
98+
99+ $ this ->blockAttributeEncoderManagerMock
100+ ->method ('encode ' )
101+ ->withAnyParameters ()
102+ ->willReturn (self ::ATTRIBUTE_VALUE_CDATA );
103+
104+ $ field = $ this ->getLandingPageField ();
105+ $ subject = new PageBuilderFieldEncoder (
106+ $ this ->blockAttributeEncoderManagerMock ,
107+ $ this ->blockDefinitionFactoryMock ,
108+ new TextFieldCdataCleaner ()
109+ );
110+
111+ $ result = $ subject ->encode ($ field );
112+ $ encodedValue = htmlspecialchars (self ::ATTRIBUTE_VALUE_CDATA );
113+
114+ self ::assertEquals ($ this ->getEncodeResult ($ encodedValue ), $ result );
115+ }
116+
88117 public function testCanEncode (): void
89118 {
90119 $ field = $ this ->getLandingPageField ();
91120 $ subject = new PageBuilderFieldEncoder (
92121 $ this ->blockAttributeEncoderManagerMock ,
93- $ this ->blockDefinitionFactoryMock
122+ $ this ->blockDefinitionFactoryMock ,
123+ new TextFieldCdataCleaner ()
94124 );
95125
96126 self ::assertTrue ($ subject ->canEncode ($ field ));
@@ -107,7 +137,8 @@ public function testDecode(): void
107137 $ field = $ this ->getLandingPageField ();
108138 $ subject = new PageBuilderFieldEncoder (
109139 $ this ->blockAttributeEncoderManagerMock ,
110- $ this ->blockDefinitionFactoryMock
140+ $ this ->blockDefinitionFactoryMock ,
141+ new TextFieldCdataCleaner ()
111142 );
112143
113144 $ result = $ subject ->decode (
@@ -124,7 +155,8 @@ public function testCanDecode(): void
124155 $ field = $ this ->getLandingPageField ();
125156 $ subject = new PageBuilderFieldEncoder (
126157 $ this ->blockAttributeEncoderManagerMock ,
127- $ this ->blockDefinitionFactoryMock
158+ $ this ->blockDefinitionFactoryMock ,
159+ new TextFieldCdataCleaner ()
128160 );
129161
130162 self ::assertTrue ($ subject ->canDecode (get_class ($ field ->value )));
@@ -202,10 +234,10 @@ private function createBlockDefinition(): BlockDefinition
202234 return $ blockDefinition ;
203235 }
204236
205- private function getEncodeResult (): string
237+ private function getEncodeResult (string $ value = self :: ATTRIBUTE_VALUE ): string
206238 {
207239 return '<blocks><item key="1"><name>Code</name><attributes><content type="string"> ' .
208- self :: ATTRIBUTE_VALUE . '</content></attributes></item></blocks>
240+ $ value . '</content></attributes></item></blocks>
209241 ' ;
210242 }
211243}
0 commit comments