Spamworldpro Mini Shell
Spamworldpro


Server : Apache
System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64
User : corals ( 1002)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/corals/old/dev/tests/integration/testsuite/Magento/Deploy/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/old/dev/tests/integration/testsuite/Magento/Deploy/DeployTest.php
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
namespace Magento\Deploy;

use Magento\Deploy\Package\Processor\PreProcessor\Less;
use Magento\Deploy\Service\DeployStaticContent;
use Magento\Deploy\Strategy\DeployStrategyFactory;
use Magento\Framework\App\State;
use Magento\TestFramework\Helper\Bootstrap;
use Magento\Framework\App\Filesystem\DirectoryList;
use Magento\Framework\Filesystem;
use Magento\Framework\Filesystem\Directory\ReadInterface;
use Magento\Deploy\Console\DeployStaticOptions as Options;
use Magento\Framework\Config\View;
use Magento\Deploy\Config\BundleConfig;
use Magento\Framework\Filesystem\Directory\WriteInterface;

/**
 * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
 */
class DeployTest extends \PHPUnit\Framework\TestCase
{
    /**
     * @var Filesystem
     */
    private $filesystem;

    /**
     * @var WriteInterface
     */
    private $staticDir;

    /**
     * @var ReadInterface
     */
    private $rootDir;

    /**
     * @var DeployStaticContent
     */
    private $deployService;

    /**
     * @var View
     */
    private $config;

    /**
     * @var BundleConfig
     */
    private $bundleConfig;

    /**
     * @var DeployStaticContent
     */
    private $staticContentService;

    /**
     * @var string
     */
    private $prevMode;

    /**
     * @var array
     */
    private $options = [
        Options::DRY_RUN => false,
        Options::NO_JAVASCRIPT => false,
        Options::NO_JS_BUNDLE => false,
        Options::NO_CSS => false,
        Options::NO_LESS => false,
        Options::NO_IMAGES => false,
        Options::NO_FONTS => false,
        Options::NO_HTML => false,
        Options::NO_MISC => false,
        Options::NO_HTML_MINIFY => false,
        Options::AREA => ['frontend'],
        Options::EXCLUDE_AREA => ['none'],
        Options::THEME => ['Magento/zoom1', 'Magento/zoom2', 'Magento/zoom3', 'Vendor/parent', 'Vendor/child'],
        Options::EXCLUDE_THEME => ['none'],
        Options::LANGUAGE => ['en_US', 'fr_FR', 'pl_PL'],
        Options::EXCLUDE_LANGUAGE => ['none'],
        Options::JOBS_AMOUNT => 0,
        Options::SYMLINK_LOCALE => false,
        Options::STRATEGY => DeployStrategyFactory::DEPLOY_STRATEGY_COMPACT,
    ];

    protected function setUp(): void
    {
        $objectManager = Bootstrap::getObjectManager();
        $this->prevMode = $objectManager->get(State::class)->getMode();
        $objectManager->get(State::class)->setMode(State::MODE_PRODUCTION);

        $this->filesystem = $objectManager->get(Filesystem::class);
        $this->staticDir = $this->filesystem->getDirectoryWrite(DirectoryList::STATIC_VIEW);
        $this->rootDir = $this->filesystem->getDirectoryRead(DirectoryList::ROOT);

        $logger = $objectManager->get(\Psr\Log\LoggerInterface::class);
        $this->deployService = $objectManager->create(
            DeployStaticContent::class,
            ['logger' => $logger]
        );

        $this->bundleConfig = $objectManager->create(BundleConfig::class);
        $this->config = $objectManager->create(View::class);

        $this->staticContentService = $objectManager->create(DeployStaticContent::class);

        $this->filesystem->getDirectoryWrite(DirectoryList::PUB)->delete(DirectoryList::STATIC_VIEW);
        $this->filesystem->getDirectoryWrite(DirectoryList::VAR_DIR)->delete(DirectoryList::TMP_MATERIALIZATION_DIR);
    }

    protected function tearDown(): void
    {
        $objectManager = Bootstrap::getObjectManager();
        $objectManager->get(State::class)->setMode($this->prevMode);
        $this->filesystem = $objectManager->get(Filesystem::class);
        $this->filesystem->getDirectoryWrite(DirectoryList::PUB)->delete(DirectoryList::STATIC_VIEW);
        $this->staticDir = $this->filesystem->getDirectoryWrite(DirectoryList::STATIC_VIEW);
        $this->staticDir->getDriver()->createDirectory($this->staticDir->getAbsolutePath());

        parent::tearDown();
    }

    /**
     * @magentoDataFixture Magento/Deploy/_files/theme.php
     */
    public function testDeploy()
    {
        $this->deployService->deploy($this->options);

        $this->assertFileExists($this->staticDir->getAbsolutePath('frontend/Magento/zoom1/default/css/root.css'));
        $this->assertFileExists($this->staticDir->getAbsolutePath('frontend/Magento/zoom2/default/css/root.css'));
        $this->assertFileExists($this->staticDir->getAbsolutePath('frontend/Magento/zoom3/default/css/root.css'));
        $this->assertFileExists($this->staticDir->getAbsolutePath('frontend/Magento/zoom3/default/css/local.css'));

        $this->assertFileExistsIsGenerated('requirejs-config.js');
        $this->assertFileExistsIsGenerated('requirejs-map.js');
        $this->assertFileExistsIsGenerated('map.json');
        $this->assertFileExistsIsGenerated('js-translation.json');
        $this->assertFileExistsIsGenerated('result_map.json');

        $actualFileContent = $this->staticDir->readFile('frontend/Magento/zoom3/default/css/root.css');
        $this->assertLessPreProcessor($actualFileContent);
        $this->assertCssUrlFixerPostProcessor($actualFileContent);

        $actualFileContent = $this->staticDir->readFile('frontend/Vendor/child/default/css/styles-m.css');
        $this->assertCssFromChildTheme($actualFileContent);

        foreach (['Magento/zoom1', 'Magento/zoom2', 'Magento/zoom3', 'Vendor/parent', 'Vendor/child'] as $theme) {
            $this->assertBundleSize($theme);
            $this->assertExcluded($theme, $this->config->getExcludedFiles());
            $this->assertExcluded($theme, $this->config->getExcludedDir());
        }
    }

    /**
     * Assert file exists in all themes and locales
     *
     * @param string $fileName
     * @return void
     */
    private function assertFileExistsIsGenerated($fileName)
    {
        foreach (['Magento/zoom1', 'Magento/zoom2', 'Magento/zoom3', 'Vendor/parent', 'Vendor/child'] as $theme) {
            foreach ($this->options[Options::LANGUAGE] as $locale) {
                $this->assertFileExists(
                    $this->staticDir->getAbsolutePath(
                        'frontend/' . $theme . '/' . $locale . '/' . $fileName
                    )
                );
            }
        }
    }

    /**
     * Assert Less pre-processor
     *
     * @see Less
     * @param $actualRootCssContent
     * @return void
     */
    private function assertLessPreProcessor($actualRootCssContent)
    {
        //_testA is included from Magento/zoom3
        //_testB is included from Magento/zoom2
        $this->assertStringContainsString('color:#111', $actualRootCssContent);
    }

    /**
     * Assert CssUrlFixer post-processor
     *
     * @param $actualRootCssContent
     * @return void
     */
    private function assertCssUrlFixerPostProcessor($actualRootCssContent)
    {
        //assert CssUrlFixer fix urls
        $this->assertStringContainsString(
            'url("../../../../../frontend/Magento/zoom1/default/images/logo-magento-1.png")',
            $actualRootCssContent
        );
        $this->assertStringContainsString(
            'url("../../../../../frontend/Magento/zoom2/default/images/logo-magento-2.png")',
            $actualRootCssContent
        );
        $this->assertStringContainsString(
            'url("../images/logo-magento-3.png")',
            $actualRootCssContent
        );
        //_testA is included from Magento/zoom3
        //_testB is included from Magento/zoom2
        $this->assertStringContainsString('color:#111', $actualRootCssContent);
    }

    /**
     * Assert CSS from child post-processor
     *
     * @param $actualRootCssContent
     * @return void
     */
    private function assertCssFromChildTheme($actualRootCssContent)
    {
        //assert CssUrlFixer fix urls
        $this->assertStringContainsString(
            'super-test-class-for-easy-find',
            $actualRootCssContent
        );
    }

    /**
     * Assert correct bundle size according to configuration set in view.xml
     *
     * @param string $theme
     * @return void
     */
    private function assertBundleSize($theme)
    {
        $expectedSize = $this->bundleConfig->getBundleFileMaxSize('frontend', $theme);
        $expectedSize *= 1.2;

        $iterator = $this->getDirectoryIterator("frontend/{$theme}/en_US/js/bundle");
        /** @var \SplFileInfo $file */
        foreach ($iterator as $file) {
            if ($file->isFile()) {
                $size = (int)$file->getSize() / 1024;
                $this->assertLessThan($expectedSize, $size);
            }
        }
    }

    /**
     * Assert that file is excluded from view.xml
     *
     * @param string $theme
     * @param array $excluded
     * @return void
     */
    private function assertExcluded($theme, array $excluded)
    {
        $iterator = $this->getDirectoryIterator("frontend/{$theme}/en_US/js/bundle");
        foreach ($excluded as $pathData) {
            $path = $this->splitPath($pathData);
            if ($path['module'] !== null) {
                $path = implode('/', $path);
            } else {
                $path = $path['path'];
            }
            /** @var \SplFileInfo $file */
            foreach ($iterator as $file) {
                if ($file->isFile()) {
                    $bundleContent = $this->staticDir->readFile(
                        $this->staticDir->getRelativePath($file->getPathname())
                    );
                    $this->assertStringNotContainsString('"' . $path . '":"', $bundleContent);
                }
            }
        }
    }

    /**
     * @param string $path
     * @return \RecursiveIteratorIterator
     */
    private function getDirectoryIterator($path)
    {
        $dirIterator = new \RecursiveDirectoryIterator(
            $this->staticDir->getAbsolutePath($path),
            \FilesystemIterator::SKIP_DOTS
        );
        return new \RecursiveIteratorIterator($dirIterator, \RecursiveIteratorIterator::SELF_FIRST);
    }

    /**
     * Get excluded module and path from complex string
     *
     * @param string $path
     * @return array
     */
    private function splitPath($path)
    {
        if (strpos($path, '::') !== false) {
            list($module, $path) = explode('::', $path);
            return [
                'module' => $module != 'Lib' ? $module : null,
                'path' => $path,
            ];
        } else {
            return [
                'module' => null,
                'path' => $path,
            ];
        }
    }
}

Spamworldpro Mini