123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\TestFramework\Deploy;
- use Magento\Framework\App\ObjectManager;
- use Magento\Framework\Module\ModuleList;
- use Magento\Framework\Module\ModuleListInterface;
- /**
- * The purpose of this class is adding test modules files to Magento code base.
- */
- class TestModuleManager
- {
- /**
- * Name of file of DB XML declaration.
- */
- const DECLARATIVE_FILE_NAME = "db_schema.xml";
- /**
- * Add test module files to Magento code base.
- *
- * @param string $moduleName
- * @return void
- * @throws \RuntimeException
- */
- public function addModuleFiles($moduleName)
- {
- $moduleName = str_replace("Magento_", "", $moduleName);
- $pathToCommittedTestModules = TESTS_MODULES_PATH . '/Magento/' . $moduleName;
- $pathToInstalledMagentoInstanceModules = MAGENTO_MODULES_PATH . $moduleName;
- $iterator = new \RecursiveIteratorIterator(
- new \RecursiveDirectoryIterator(
- $pathToCommittedTestModules,
- \RecursiveDirectoryIterator::FOLLOW_SYMLINKS
- )
- );
- /** @var \SplFileInfo $file */
- foreach ($iterator as $file) {
- if (!$file->isDir()) {
- $source = $file->getPathname();
- $relativePath = substr($source, strlen($pathToCommittedTestModules));
- $destination = $pathToInstalledMagentoInstanceModules . $relativePath;
- $targetDir = dirname($destination);
- if (!is_dir($targetDir)) {
- mkdir($targetDir, 0755, true);
- }
- copy($source, $destination);
- }
- }
- unset($iterator, $file);
- // Register the modules under '_files/'
- $pathPattern = $pathToInstalledMagentoInstanceModules . '/Test*/registration.php';
- $files = glob($pathPattern, GLOB_NOSORT);
- if ($files === false) {
- throw new \RuntimeException('glob() returned error while searching in \'' . $pathPattern . '\'');
- }
- foreach ($files as $file) {
- include $file;
- }
- }
- /**
- * Copy revision folder to main module
- *
- * @param string $moduleName
- * @param string $revisionName
- * @param string $dir
- * @return void
- */
- public function addRevision($moduleName, $revisionName, $dir)
- {
- $modulePath = str_replace("Magento_", "", $moduleName);
- $folder = MAGENTO_MODULES_PATH . $modulePath;
- $desiredPath = $folder . '/' . $dir;
- $revisionPath = $folder . '/revisions/' . $revisionName . '/';
- if (!is_dir($desiredPath)) {
- mkdir($desiredPath, 0777, true);
- }
- rename($revisionPath, $desiredPath);
- }
- /**
- * Update module version.
- *
- * @param string $moduleName Like Magento_TestSetupModule
- * @param string $revisionName Folder name, like reviisions/revision_1/db_schema.xml
- * @param string $fileName For example db_schema.xml
- * @param string $fileDir For example etc or Setup
- */
- public function updateRevision($moduleName, $revisionName, $fileName, $fileDir)
- {
- $modulePath = str_replace("Magento_", "", $moduleName);
- $folder = MAGENTO_MODULES_PATH . $modulePath;
- $oldFile = $folder . DIRECTORY_SEPARATOR . $fileDir . "/" . $fileName;
- $revisionFile = MAGENTO_MODULES_PATH . $modulePath . "/revisions/" .
- $revisionName . DIRECTORY_SEPARATOR . $fileName;
- if (!file_exists($oldFile)) {
- $dir = dirname($oldFile);
- if (!is_dir($dir)) {
- mkdir($dir, 0777, true);
- }
- touch($oldFile);
- }
- if (file_exists($revisionFile)) {
- unlink($oldFile);
- copy($revisionFile, $oldFile);
- } else {
- throw new \InvalidArgumentException("Old File or revision files paths are invalid");
- }
- }
- /**
- * Remove test module files to Magento code base.
- *
- * @param string $moduleName
- * @return void
- */
- public function removeModuleFiles($moduleName)
- {
- $modulePath = str_replace("Magento_", "", $moduleName);
- $folder = MAGENTO_MODULES_PATH . $modulePath;
- //remove test modules from magento codebase
- if (is_dir($folder)) {
- \Magento\Framework\Filesystem\Io\File::rmdirRecursive($folder);
- }
- }
- /**
- * There can be situation when config version of module can be cached
- * So proposed to clean shared instance of
- * @see ModuleList in order to achieve clean installation
- */
- public function cleanModuleList()
- {
- /**
- * @var \Magento\TestFramework\ObjectManager $objectManager
- */
- $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
- $objectManager->removeSharedInstance(ModuleList::class);
- $objectManager->removeSharedInstance(ModuleListInterface::class);
- }
- /**
- * Update module files.
- *
- * @param string $moduleName
- * @return void
- */
- public function updateModuleFiles($moduleName)
- {
- $pathToCommittedTestModules = TESTS_MODULES_PATH . '/UpgradeScripts/' . $moduleName;
- $pathToInstalledMagentoInstanceModules = MAGENTO_MODULES_PATH . $moduleName;
- $iterator = new \RecursiveIteratorIterator(
- new \RecursiveDirectoryIterator(
- $pathToCommittedTestModules,
- \RecursiveDirectoryIterator::FOLLOW_SYMLINKS
- )
- );
- /** @var \SplFileInfo $file */
- foreach ($iterator as $file) {
- if (!$file->isDir()) {
- $source = $file->getPathname();
- $relativePath = substr($source, strlen($pathToCommittedTestModules));
- $destination = $pathToInstalledMagentoInstanceModules . $relativePath;
- $targetDir = dirname($destination);
- if (!is_dir($targetDir)) {
- mkdir($targetDir, 0755, true);
- }
- copy($source, $destination);
- }
- }
- }
- }
|