142 lines
3.7 KiB
PHP
142 lines
3.7 KiB
PHP
<?php
|
|
/**
|
|
* Copyright © Magento, Inc. All rights reserved.
|
|
* See COPYING.txt for license details.
|
|
*/
|
|
namespace Magento\Developer\Console\Command;
|
|
|
|
use Magento\TestFramework\Helper\Bootstrap;
|
|
use Symfony\Component\Console\Input\InputInterface;
|
|
use Symfony\Component\Console\Output\OutputInterface;
|
|
|
|
/**
|
|
* Class SourceThemeDeployCommandTest
|
|
*
|
|
* @see \Magento\Developer\Console\Command\SourceThemeDeployCommand
|
|
*/
|
|
class SourceThemeDeployCommandTest extends \PHPUnit\Framework\TestCase
|
|
{
|
|
const PUB_STATIC_DIRECTORY = 'pub/static';
|
|
|
|
const AREA_TEST_VALUE = 'frontend';
|
|
|
|
const LOCALE_TEST_VALUE = 'en_US';
|
|
|
|
const THEME_TEST_VALUE = 'Magento/luma';
|
|
|
|
const TYPE_TEST_VALUE = 'less';
|
|
|
|
/**
|
|
* @var SourceThemeDeployCommand
|
|
*/
|
|
private $command;
|
|
|
|
/**
|
|
* @var string
|
|
*/
|
|
private $pubStatic;
|
|
|
|
/**
|
|
* @var array
|
|
*/
|
|
private $compiledFiles = ['css/styles-m', 'css/styles-l'];
|
|
|
|
/**
|
|
* Set up
|
|
*/
|
|
protected function setUp(): void
|
|
{
|
|
global $installDir;
|
|
|
|
$this->pubStatic = $installDir . DIRECTORY_SEPARATOR . self::PUB_STATIC_DIRECTORY;
|
|
$this->command = Bootstrap::getObjectManager()->get(SourceThemeDeployCommand::class);
|
|
}
|
|
|
|
/**
|
|
* Run test for execute method
|
|
*/
|
|
public function testExecute()
|
|
{
|
|
$error = [];
|
|
|
|
/** @var OutputInterface|\PHPUnit\Framework\MockObject\MockObject $outputMock */
|
|
$outputMock = $this->getMockBuilder(OutputInterface::class)
|
|
->getMockForAbstractClass();
|
|
|
|
$this->clearStaticDirectory();
|
|
|
|
$this->command->run($this->getInputMock(), $outputMock);
|
|
|
|
/** @var \SplFileInfo $file */
|
|
foreach ($this->collectFiles($this->pubStatic) as $file) {
|
|
$fileInfo = pathinfo($file->getFilename());
|
|
if (!in_array('css/' . $fileInfo['filename'], $this->compiledFiles, true)
|
|
&& !$file->isLink()
|
|
) {
|
|
$error[] = 'Bad file -> ' . $file->getFilename() . PHP_EOL;
|
|
}
|
|
}
|
|
|
|
$this->clearStaticDirectory();
|
|
|
|
self::assertEmpty($error, implode($error));
|
|
}
|
|
|
|
/**
|
|
* @return void
|
|
*/
|
|
private function clearStaticDirectory()
|
|
{
|
|
if (is_dir($this->pubStatic)) {
|
|
/** @var \SplFileInfo $file */
|
|
foreach ($this->collectFiles($this->pubStatic) as $file) {
|
|
@unlink($file->getPathname());
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* @param string $path
|
|
* @return \RegexIterator|array
|
|
*/
|
|
private function collectFiles($path)
|
|
{
|
|
$flags = \FilesystemIterator::CURRENT_AS_FILEINFO
|
|
| \FilesystemIterator::SKIP_DOTS;
|
|
$iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($path, $flags));
|
|
|
|
return new \RegexIterator(
|
|
$iterator,
|
|
'#\.less$#',
|
|
\RegexIterator::MATCH,
|
|
\RegexIterator::USE_KEY
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @return InputInterface|\PHPUnit\Framework\MockObject\MockObject
|
|
*/
|
|
private function getInputMock()
|
|
{
|
|
$inputMock = $this->getMockBuilder(InputInterface::class)
|
|
->getMockForAbstractClass();
|
|
|
|
$inputMock->expects(self::exactly(4))
|
|
->method('getOption')
|
|
->willReturnMap(
|
|
[
|
|
['area', self::AREA_TEST_VALUE],
|
|
['locale', self::LOCALE_TEST_VALUE],
|
|
['theme', self::THEME_TEST_VALUE],
|
|
['type', self::TYPE_TEST_VALUE]
|
|
]
|
|
);
|
|
$inputMock->expects(self::once())
|
|
->method('getArgument')
|
|
->with('file')
|
|
->willReturn($this->compiledFiles);
|
|
|
|
return $inputMock;
|
|
}
|
|
}
|