33 * Copyright 2019 Adobe
44 * All Rights Reserved.
55 */
6-
76declare (strict_types=1 );
87
98namespace Magento \PageBuilder \Plugin \Filter ;
109
10+ use Magento \Framework \App \Area ;
11+ use Magento \Framework \Filter \Template as FrameworkTemplateFilter ;
1112use Magento \Store \Model \Store ;
12- use Magento \Widget \Model \Template \Filter as TemplateFilter ;
13+ use Magento \TestFramework \Fixture \AppArea ;
14+ use Magento \TestFramework \Fixture \DataFixture ;
1315use Magento \TestFramework \Helper \Bootstrap ;
16+ use Magento \Widget \Model \Template \Filter as WidgetTemplateFilter ;
17+ use PHPUnit \Framework \Attributes \CoversClass ;
18+ use PHPUnit \Framework \Attributes \DataProvider ;
19+ use PHPUnit \Framework \TestCase ;
1420
15- /**
16- * @magentoAppArea frontend
17- */
18- class TemplatePluginTest extends \PHPUnit \Framework \TestCase
21+ #[
22+ CoversClass(TemplatePlugin::class),
23+ DataFixture('Magento/PageBuilder/_files/custom_variable_xss.php ' ),
24+ ]
25+ class TemplatePluginTest extends TestCase
1926{
2027 /**
21- * @var \Magento\Framework\ObjectManagerInterface
22- */
23- private $ objectManager ;
24-
25- /**
26- * @var TemplateFilter
28+ * @param string $preFiltered
29+ * @param string $postFiltered
30+ * @param string $preFilteredBasename
2731 */
28- private $ templateFilter ;
29-
30- protected function setUp (): void
32+ #[
33+ AppArea(Area::AREA_GLOBAL ),
34+ DataProvider('filterDataProvider ' ),
35+ ]
36+ public function testFilter (string $ preFiltered , string $ postFiltered , string $ preFilteredBasename ): void
3137 {
32- $ this ->objectManager = Bootstrap::getObjectManager ();
33- $ this ->templateFilter = $ this ->objectManager ->get (TemplateFilter::class);
34-
35- // set store id to 0 to recognize that escaping is required in custom variable
36- $ this ->templateFilter ->setStoreId (Store::DEFAULT_STORE_ID );
38+ $ templateFilter = Bootstrap::getObjectManager ()->create (FrameworkTemplateFilter::class);
39+ $ filtered = $ templateFilter ->filter ($ preFiltered );
40+ $ this ->assertEquals (
41+ $ this ->formatHtml ($ postFiltered ),
42+ $ this ->formatHtml ($ filtered ),
43+ "Failed asserting that two strings are equal after filtering $ preFilteredBasename "
44+ );
3745 }
3846
3947 /**
4048 * @param string $preFiltered
4149 * @param string $postFiltered
4250 * @param string $preFilteredBasename
43- * @dataProvider filterDataProvider
44- * @magentoDataFixture Magento/PageBuilder/_files/custom_variable_xss.php
45- * @magentoDbIsolation enabled
4651 */
47- public function testFiltering (string $ preFiltered , string $ postFiltered , string $ preFilteredBasename )
52+ #[
53+ AppArea(Area::AREA_FRONTEND ),
54+ DataProvider('filterFrontendDataProvider ' ),
55+ ]
56+ public function testFilterFrontend (string $ preFiltered , string $ postFiltered , string $ preFilteredBasename ): void
4857 {
58+ $ templateFilter = Bootstrap::getObjectManager ()->create (WidgetTemplateFilter::class);
59+ // set store id to 0 to recognize that escaping is required in custom variable
60+ $ templateFilter ->setStoreId (Store::DEFAULT_STORE_ID );
61+ $ filtered = $ templateFilter ->filter ($ preFiltered );
4962 $ this ->assertEquals (
5063 $ this ->formatHtml ($ postFiltered ),
51- $ this ->formatHtml ($ this -> templateFilter -> filter ( $ preFiltered ) ),
64+ $ this ->formatHtml ($ filtered ),
5265 "Failed asserting that two strings are equal after filtering $ preFilteredBasename "
5366 );
5467 }
5568
5669 /**
57- * @return array
70+ * @param array $preFilteredFiles
71+ * @return array[]
5872 */
59- public static function filterDataProvider ( ): array
73+ private static function loadFiles ( array $ preFilteredFiles ): array
6074 {
61- $ preFilteredFiles = glob (__DIR__ . '/../../_files/template_plugin/*pre_filter* ' );
62-
6375 $ dataProviderArgs = [];
64-
6576 foreach ($ preFilteredFiles as $ preFilteredFile ) {
6677 $ preFilteredBasename = basename ($ preFilteredFile );
6778 $ postFilteredFile = pathinfo ($ preFilteredFile , PATHINFO_DIRNAME ) . '/ ' . str_replace (
68- 'pre_filter ' ,
69- 'post_filter ' ,
70- $ preFilteredBasename
71- );
79+ 'pre_filter ' ,
80+ 'post_filter ' ,
81+ $ preFilteredBasename
82+ );
7283
7384 $ dataProviderArgs [] = [
7485 file_get_contents ($ preFilteredFile ),
@@ -80,11 +91,34 @@ public static function filterDataProvider(): array
8091 return $ dataProviderArgs ;
8192 }
8293
94+ /**
95+ * @return array
96+ */
97+ public static function filterDataProvider (): array
98+ {
99+ $ preFilteredFiles = glob (__DIR__ . '/../../_files/template_plugin/*pre_filter* ' );
100+ $ dataProviderArgs = self ::loadFiles ($ preFilteredFiles );
101+
102+ return $ dataProviderArgs ;
103+ }
104+
105+ /**
106+ * @return array
107+ */
108+ public static function filterFrontendDataProvider (): array
109+ {
110+ $ dataProviderArgs = self ::filterDataProvider ();
111+ $ preFilteredFiles = glob (__DIR__ . '/../../_files/template_plugin/frontend/*pre_filter* ' );
112+ $ dataProviderArgs = array_merge ($ dataProviderArgs , self ::loadFiles ($ preFilteredFiles ));
113+
114+ return $ dataProviderArgs ;
115+ }
116+
83117 /**
84118 * Strip whitespace from the HTML to conduct a fairer comparison
85119 *
86120 * @param string $html
87- * @return string|string[]|null
121+ * @return string
88122 */
89123 private function formatHtml (string $ html ): string
90124 {
0 commit comments