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/Framework/View/Asset/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

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

use Exception;
use Magento\Deploy\Console\ConsoleLogger;
use Magento\Deploy\Console\DeployStaticOptions as Options;
use Magento\Deploy\Service\DeployStaticContent;
use Magento\Deploy\Strategy\DeployStrategyFactory;
use Magento\Framework\App\Filesystem\DirectoryList;
use Magento\Framework\App\ObjectManagerFactory;
use Magento\Framework\App\Request\Http;
use Magento\Framework\App\Response\FileInterface;
use Magento\Framework\App\State as AppState;
use Magento\Framework\App\StaticResource;
use Magento\Framework\App\Utility\Files;
use Magento\Framework\App\View\Deployment\Version\StorageInterface;
use Magento\Framework\Code\Minifier\AdapterInterface;
use Magento\Framework\Exception\LocalizedException;
use Magento\Framework\Filesystem;
use Magento\Framework\Filesystem\Directory\WriteInterface;
use Magento\TestFramework\App\State;
use Magento\TestFramework\Helper\Bootstrap;
use Magento\TestFramework\ObjectManager;
use Magento\Theme\Model\Theme\Registration;
use PHPUnit\Framework\TestCase;
use Symfony\Component\Console\Output\ConsoleOutput;

/**
 * Tests for minifier
 *
 * @magentoComponentsDir Magento/Framework/View/_files/static/theme
 * @magentoDbIsolation enabled
 * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
 */
class MinifierTest extends TestCase
{
    /**
     * @var WriteInterface
     */
    private $staticDir;

    /**
     * @var ObjectManager
     */
    protected $objectManager;

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

    /**
     * {@inheritDoc}
     */
    protected function setUp(): void
    {
        parent::setUp();
        $this->objectManager = Bootstrap::getInstance()->getObjectManager();
        /** @var Registration $registration */
        $registration = $this->objectManager->get(Registration::class);
        $registration->register();
        /** @var State $appState */
        $appState = $this->objectManager->get(State::class);
        $this->origMode = $appState->getMode();
        $appState->setMode(AppState::MODE_DEFAULT);
        /** @var Filesystem $filesystem */
        $filesystem = Bootstrap::getObjectManager()->get(Filesystem::class);
        $this->staticDir = $filesystem->getDirectoryWrite(DirectoryList::STATIC_VIEW);
    }

    /**
     * {@inheritDoc}
     */
    protected function tearDown(): void
    {
        /** @var State $appState */
        $appState = $this->objectManager->get(State::class);
        $appState->setMode($this->origMode);
        if ($this->staticDir->isExist('frontend/FrameworkViewMinifier')) {
            $this->staticDir->delete('frontend/FrameworkViewMinifier');
        }
        parent::tearDown();
    }

    /**
     * CSS Minifier library test
     *
     * When fails on library update or minification handler replacement:
     * 1 - minify `_files/static/css/styles.css` with new library manually
     * 2 - use DIFF tools to see difference between new minified CSS and old minified one
     * 3 - ensure that all differences are acceptable
     * 4 - ensure that new minified CSS is fully workable in all supported browsers
     * 5 - replace `_files/static/css/styles.magento.min.css` with new minified css
     */
    public function testCSSminLibrary()
    {
        /** @var AdapterInterface $adapter */
        $adapter = $this->objectManager->get('cssMinificationAdapter');
        $this->assertEquals(
            file_get_contents(dirname(__DIR__) . '/_files/static/expected/styles.magento.min.css'),
            $adapter->minify(file_get_contents(dirname(__DIR__) . '/_files/static/theme/web/css/styles.css')),
            'Minified CSS differs from initial minified CSS snapshot. '
            . 'Ensure that new CSS is fully valid for all supported browsers '
            . 'and replace old minified snapshot with new one.'
        );
    }

    /**
     * Test JS minification library
     *
     * @return void
     */
    public function testJshrinkLibrary()
    {
        /** @var AdapterInterface $adapter */
        $adapter = $this->objectManager->get('jsMinificationAdapter');
        $this->assertEquals(
            file_get_contents(dirname(__DIR__) . '/_files/static/expected/test.min.js'),
            $adapter->minify(file_get_contents(dirname(__DIR__) . '/_files/static/theme/web/js/test.js')),
            'Minified JS differs from initial minified JS snapshot. '
            . 'Ensure that new JS is fully valid for all supported browsers '
            . 'and replace old minified snapshot with new one.'
        );
    }

    /**
     * Test CSS minification
     *
     * @param string $requestedUri
     * @param callable $assertionCallback
     * @throws LocalizedException|Exception
     */
    private function checkCssMinification(string $requestedUri, callable $assertionCallback): void
    {
        /** @var Http $request */
        $request = $this->objectManager->get(Http::class);
        $request->setRequestUri($requestedUri);
        $request->setParam('resource', $requestedUri);

        $response = $this->getMockBuilder(FileInterface::class)
            ->setMethods(['setFilePath'])
            ->getMockForAbstractClass();
        $response
            ->expects($this->any())
            ->method('setFilePath')
            ->willReturnCallback($assertionCallback);

        /** @var StaticResource $staticResourceApp */
        $staticResourceApp = $this->objectManager->create(
            StaticResource::class,
            ['response' => $response]
        );
        $staticResourceApp->launch();
    }

    /**
     * @magentoConfigFixture current_store dev/css/minify_files 0
     * @magentoAppIsolation enabled
     */
    public function testCssMinificationOff()
    {
        $this->checkCssMinification(
            '/frontend/FrameworkViewMinifier/default/en_US/css/styles.css',
            function ($path) {
                $content = file_get_contents($path);
                $this->assertNotEmpty($content);
                $this->assertStringContainsString('FrameworkViewMinifier/frontend', $content);
                $this->assertNotEquals(
                    file_get_contents(
                        dirname(__DIR__)
                        . '/_files/static/expected/styles.magento.min.css'
                    ),
                    $content,
                    'CSS is minified when minification turned off'
                );
            }
        );
    }

    /**
     * @magentoConfigFixture current_store dev/css/minify_files 1
     */
    public function testCssMinification()
    {
        $this->checkCssMinification(
            '/frontend/FrameworkViewMinifier/default/en_US/css/styles.min.css',
            function ($path) {
                $this->assertEquals(
                    file_get_contents(
                        dirname(__DIR__)
                        . '/_files/static/expected/styles.magento.min.css'
                    ),
                    file_get_contents($path),
                    'Minified files are not equal or minification did not work for requested CSS'
                );
            }
        );
    }

    /**
     * @magentoConfigFixture current_store dev/css/minify_files 1
     */
    public function testCssMinificationForMinifiedFiles()
    {
        $this->checkCssMinification(
            '/frontend/FrameworkViewMinifier/default/en_US/css/preminified-styles.min.css',
            function ($path) {
                $content = file_get_contents($path);
                $this->assertNotEmpty($content);
                $this->assertStringContainsString('Magento/backend', $content);
                $this->assertStringContainsString('semi-minified file', $content);
            }
        );
    }

    /**
     * @magentoConfigFixture current_store dev/css/minify_files 1
     */
    public function testDeploymentWithMinifierEnabled()
    {
        $staticPath = $this->staticDir->getAbsolutePath();

        $fileToBePublished = $staticPath . '/frontend/FrameworkViewMinifier/default/en_US/css/styles.min.css';
        $fileToTestPublishing = dirname(__DIR__) . '/_files/static/theme/web/css/styles.css';

        $omFactory = $this->createPartialMock(ObjectManagerFactory::class, ['create']);
        $omFactory->expects($this->any())
            ->method('create')
            ->willReturn($this->objectManager);

        $filesUtil = $this->createMock(Files::class);
        $filesUtil->expects($this->any())
            ->method('getStaticLibraryFiles')
            ->willReturn([]);

        $filesUtil->expects($this->any())
            ->method('getPhtmlFiles')
            ->willReturn([]);

        $filesUtil->expects($this->any())
            ->method('getStaticPreProcessingFiles')
            ->willReturn(
                [
                    ['frontend', 'FrameworkViewMinifier/default', '', '', 'css/styles.css', $fileToTestPublishing]
                ]
            );

        $this->objectManager->addSharedInstance($filesUtil, Files::class);

        $output = $this->objectManager->create(ConsoleOutput::class);

        $logger = $this->objectManager->create(ConsoleLogger::class, ['output' => $output]);

        $versionStorage = $this->createPartialMock(StorageInterface::class, ['save', 'load']);

        /** @var DeployStaticContent $deployService */
        $deployService = $this->objectManager->create(
            DeployStaticContent::class,
            [
                'objectManager' => $this->objectManager,
                'logger' => $logger,
                'versionStorage' => $versionStorage,
            ]
        );

        $deployService->deploy(
            [
                Options::DRY_RUN => false,
                Options::NO_JAVASCRIPT => true,
                Options::NO_CSS => false,
                Options::NO_LESS => false,
                Options::NO_IMAGES => true,
                Options::NO_FONTS => true,
                Options::NO_HTML => true,
                Options::NO_MISC => true,
                Options::NO_HTML_MINIFY => true,
                Options::AREA => ['frontend'],
                Options::EXCLUDE_AREA => ['none'],
                Options::THEME => ['FrameworkViewMinifier/default'],
                Options::EXCLUDE_THEME => ['none'],
                Options::LANGUAGE => ['en_US'],
                Options::EXCLUDE_LANGUAGE => ['none'],
                Options::JOBS_AMOUNT => 0,
                Options::SYMLINK_LOCALE => false,
                Options::STRATEGY => DeployStrategyFactory::DEPLOY_STRATEGY_QUICK,
                Options::NO_PARENT => false,
            ]
        );

        $this->assertFileExists($fileToBePublished);
        $this->assertEquals(
            file_get_contents(dirname(__DIR__) . '/_files/static/expected/styles.magento.min.css'),
            file_get_contents($fileToBePublished),
            'Minified file is not equal or minification did not work for deployed CSS'
        );
    }
}

Spamworldpro Mini