66
77namespace Magento \Test \Integrity ;
88
9+ use Magento \Framework \App \Filesystem \DirectoryList ;
10+
911/**
1012 * An integrity test that searches for references to static files and asserts that they are resolved via fallback
13+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
1114 */
1215class StaticFilesTest extends \PHPUnit \Framework \TestCase
1316{
@@ -36,6 +39,23 @@ class StaticFilesTest extends \PHPUnit\Framework\TestCase
3639 */
3740 private $ baseTheme ;
3841
42+ /**
43+ * @var \Magento\Framework\View\Design\FileResolution\Fallback\Resolver\Alternative
44+ */
45+ private $ alternativeResolver ;
46+
47+ /**
48+ * Factory for simple rule
49+ *
50+ * @var \Magento\Framework\View\Design\Fallback\Rule\SimpleFactory
51+ */
52+ private $ simpleFactory ;
53+
54+ /**
55+ * @var \Magento\Framework\Filesystem
56+ */
57+ private $ filesystem ;
58+
3959 protected function setUp ()
4060 {
4161 $ om = \Magento \TestFramework \Helper \Bootstrap::getObjectmanager ();
@@ -46,6 +66,11 @@ protected function setUp()
4666 $ this ->themeRepo = $ om ->get (\Magento \Framework \View \Design \Theme \FlyweightFactory::class);
4767 $ this ->design = $ om ->get (\Magento \Framework \View \DesignInterface::class);
4868 $ this ->baseTheme = $ om ->get (\Magento \Framework \View \Design \ThemeInterface::class);
69+ $ this ->alternativeResolver = $ om ->get (
70+ \Magento \Framework \View \Design \FileResolution \Fallback \Resolver \Alternative::class
71+ );
72+ $ this ->simpleFactory = $ om ->get (\Magento \Framework \View \Design \Fallback \Rule \SimpleFactory::class);
73+ $ this ->filesystem = $ om ->get (\Magento \Framework \Filesystem::class);
4974 }
5075
5176 /**
@@ -93,8 +118,17 @@ public function testReferencesFromStaticFiles($area, $themePath, $locale, $modul
93118 $ relatedPath = \Magento \Framework \View \FileSystem::getRelatedPath ($ filePath , $ relatedResource );
94119 }
95120 // the $relatedPath will be suitable for feeding to the fallback system
121+ $ staticFile = $ this ->getStaticFile ($ area , $ themePath , $ locale , $ relatedPath , $ fallbackModule );
122+ if (empty ($ staticFile ) && substr ($ relatedPath , 0 , 2 ) === '.. ' ) {
123+ //check if static file exists on lib level
124+ $ path = substr ($ relatedPath , 2 );
125+ $ libDir = rtrim ($ this ->filesystem ->getDirectoryRead (DirectoryList::LIB_WEB )->getAbsolutePath (), '/ ' );
126+ $ rule = $ this ->simpleFactory ->create (['pattern ' => $ libDir ]);
127+ $ params = ['area ' => $ area , 'theme ' => $ themePath , 'locale ' => $ locale ];
128+ $ staticFile = $ this ->alternativeResolver ->resolveFile ($ rule , $ path , $ params );
129+ }
96130 $ this ->assertNotEmpty (
97- $ this -> getStaticFile ( $ area , $ themePath , $ locale , $ relatedPath , $ fallbackModule ) ,
131+ $ staticFile ,
98132 "The related resource cannot be resolved through fallback: ' {$ relatedResource }' "
99133 );
100134 }
@@ -132,7 +166,7 @@ private function getDefaultThemePath($area)
132166 * @param bool $isExplicit
133167 * @return bool|string
134168 */
135- private function getStaticFile ($ area , $ theme , $ locale , $ filePath , $ module , $ isExplicit = false )
169+ private function getStaticFile ($ area , $ theme , $ locale , $ filePath , $ module = null , $ isExplicit = false )
136170 {
137171 if ($ area == 'base ' ) {
138172 $ theme = $ this ->baseTheme ;
0 commit comments