@@ -1202,4 +1202,92 @@ protected function _isFake($module)
1202
1202
{
1203
1203
return isset (self ::$ mapDependencies [$ module ]) ? false : true ;
1204
1204
}
1205
+
1206
+ /**
1207
+ * Test modules don't have direct dependencies on modules that might be disabled by 3rd-party Magento extensions.
1208
+ *
1209
+ * @inheritdoc
1210
+ * @throws \Exception
1211
+ * @return void
1212
+ */
1213
+ public function testDirectExtensionDependencies ()
1214
+ {
1215
+ $ invoker = new \Magento \Framework \App \Utility \AggregateInvoker ($ this );
1216
+
1217
+ // @todo - move to config
1218
+ $ extensionConflictList = [
1219
+ // the following modules must be disabled when Live Search is used
1220
+ // so core modules must not be dependent on them
1221
+ 'Magento\LiveSearch ' => [
1222
+ 'Magento\Elasticsearch ' ,
1223
+ 'Magento\Elasticsearch6 ' ,
1224
+ 'Magento\Elasticsearch7 ' ,
1225
+ 'Magento\ElasticsearchCatalogPermissions ' ,
1226
+ ],
1227
+ ];
1228
+
1229
+ // @todo - move to config
1230
+ $ allowedDependencies = [
1231
+ 'Magento\Elasticsearch ' => [
1232
+ 'Magento\Elasticsearch ' ,
1233
+ 'Magento\Elasticsearch6 ' ,
1234
+ 'Magento\Elasticsearch7 '
1235
+ ]
1236
+ ];
1237
+
1238
+ $ invoker (
1239
+ /**
1240
+ * Check modules dependencies for specified file
1241
+ *
1242
+ * @param string $fileType
1243
+ * @param string $file
1244
+ */
1245
+ function ($ fileType , $ file ) use ($ extensionConflictList , $ allowedDependencies ) {
1246
+ $ module = $ this ->getModuleNameForRelevantFile ($ file );
1247
+ if (!$ module ) {
1248
+ return ;
1249
+ }
1250
+
1251
+ $ contents = $ this ->_getCleanedFileContents ($ fileType , $ file );
1252
+
1253
+ $ dependencies = $ this ->getDependenciesFromFiles ($ module , $ fileType , $ file , $ contents );
1254
+
1255
+ $ modules = [];
1256
+ foreach ($ dependencies as $ dependency ) {
1257
+ $ modules [] = $ dependency ['modules ' ];
1258
+ }
1259
+
1260
+ $ modulesDependencies = array_merge (...$ modules );
1261
+
1262
+ foreach ($ extensionConflictList as $ extension => $ disabledModules ) {
1263
+ $ foundedModules = \array_unique (array_intersect ($ modulesDependencies , $ disabledModules ));
1264
+ if (!empty ($ foundedModules )) {
1265
+
1266
+ foreach ($ foundedModules as $ foundedModule ) {
1267
+ if (!empty ($ allowedDependencies [$ foundedModule ])
1268
+ && \in_array ($ module , $ allowedDependencies [$ foundedModule ])
1269
+ ) {
1270
+ // skip, this dependency is allowed
1271
+ continue ;
1272
+ }
1273
+
1274
+ $ this ->fail (
1275
+ \sprintf (
1276
+ 'Module "%s" has dependency on: "%s". ' .
1277
+ ' No direct dependencies must be added on "%s", ' .
1278
+ ' because it must be disabled when "%s" extension is used. ' .
1279
+ ' See AC-2516 for more details ' ,
1280
+ $ module ,
1281
+ \implode (', ' , $ foundedModules ),
1282
+ $ module ,
1283
+ $ extension
1284
+ )
1285
+ );
1286
+ }
1287
+ }
1288
+ }
1289
+ },
1290
+ $ this ->getAllFiles ()
1291
+ );
1292
+ }
1205
1293
}
0 commit comments