123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- <?php
- /**
- * Copyright © Magento, Inc. All rights reserved.
- * See COPYING.txt for license details.
- */
- namespace Magento\Framework\RequireJs\Test\Unit;
- use \Magento\Framework\RequireJs\Config;
- use Magento\Framework\View\Asset\RepositoryMap;
- class ConfigTest extends \PHPUnit\Framework\TestCase
- {
- /**
- * @var \Magento\Framework\RequireJs\Config\File\Collector\Aggregated|\PHPUnit_Framework_MockObject_MockObject
- */
- private $fileSource;
- /**
- * @var \Magento\Framework\View\DesignInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- private $design;
- /**
- * @var \Magento\Framework\Filesystem\File\Read|\PHPUnit_Framework_MockObject_MockObject
- */
- private $fileReader;
- /**
- * @var \Magento\Framework\View\Asset\ContextInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- private $context;
- /**
- * @var Config
- */
- private $object;
- /**
- * @var \Magento\Framework\View\Asset\Minification|\PHPUnit_Framework_MockObject_MockObject
- */
- private $minificationMock;
- /**
- * @var \Magento\Framework\Code\Minifier\AdapterInterface|\PHPUnit_Framework_MockObject_MockObject
- */
- private $minifyAdapterMock;
- /**
- * @var RepositoryMap|\PHPUnit_Framework_MockObject_MockObject
- */
- private $repositoryMapMock;
- protected function setUp()
- {
- $this->fileSource = $this->createMock(\Magento\Framework\RequireJs\Config\File\Collector\Aggregated::class);
- $this->design = $this->getMockForAbstractClass(\Magento\Framework\View\DesignInterface::class);
- $readFactory = $this->createMock(\Magento\Framework\Filesystem\File\ReadFactory::class);
- $this->fileReader = $this->createMock(\Magento\Framework\Filesystem\File\Read::class);
- $readFactory->expects($this->any())
- ->method('create')
- ->will($this->returnValue($this->fileReader));
- $repo = $this->createMock(\Magento\Framework\View\Asset\Repository::class);
- $this->context = $this->getMockBuilder(\Magento\Framework\View\Asset\ContextInterface::class)
- ->setMethods(
- [
- 'getConfigPath',
- 'getPath',
- 'getBaseUrl',
- 'getAreaCode',
- 'getThemePath',
- 'getLocale'
- ]
- )
- ->getMock();
- $repo->expects($this->once())->method('getStaticViewFileContext')->will($this->returnValue($this->context));
- $this->minificationMock = $this->getMockBuilder(\Magento\Framework\View\Asset\Minification::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->minifyAdapterMock = $this->getMockBuilder(\Magento\Framework\Code\Minifier\AdapterInterface::class)
- ->getMockForAbstractClass();
- $this->repositoryMapMock = $this->getMockBuilder(RepositoryMap::class)
- ->disableOriginalConstructor()
- ->getMock();
- $this->object = new Config(
- $this->fileSource,
- $this->design,
- $readFactory,
- $repo,
- $this->minifyAdapterMock,
- $this->minificationMock,
- $this->repositoryMapMock
- );
- }
- public function testGetConfig()
- {
- $this->fileReader->expects($this->any())
- ->method('readAll')
- ->will($this->returnCallback(function ($file) {
- return $file . ' content';
- }));
- $fileOne = $this->createMock(\Magento\Framework\View\File::class);
- $fileOne->expects($this->once())
- ->method('getFilename')
- ->will($this->returnValue('some/full/relative/path/file_one.js'));
- $fileOne->expects($this->once())
- ->method('getName')
- ->will($this->returnValue('file_one.js'));
- $fileOne->expects($this->once())
- ->method('getModule')
- ->will($this->returnValue('Module_One'));
- $fileTwo = $this->createMock(\Magento\Framework\View\File::class);
- $fileTwo->expects($this->once())
- ->method('getFilename')
- ->will($this->returnValue('some/full/relative/path/file_two.js'));
- $fileTwo->expects($this->once())
- ->method('getName')
- ->will($this->returnValue('file_two.js'));
- $theme = $this->getMockForAbstractClass(\Magento\Framework\View\Design\ThemeInterface::class);
- $this->design->expects($this->once())
- ->method('getDesignTheme')
- ->will($this->returnValue($theme));
- $this->fileSource->expects($this->once())
- ->method('getFiles')
- ->with($theme, Config::CONFIG_FILE_NAME)
- ->will($this->returnValue([$fileOne, $fileTwo]));
- $this->minificationMock
- ->expects($this->atLeastOnce())
- ->method('isEnabled')
- ->with('js')
- ->willReturn(true);
- $expected = <<<expected
- (function(require){
- (function() {
- file_one.js content
- require.config(config);
- })();
- (function() {
- file_two.js content
- require.config(config);
- })();
- })(require);
- expected;
- $this->minifyAdapterMock
- ->expects($this->once())
- ->method('minify')
- ->with($expected)
- ->willReturnArgument(0);
- $actual = $this->object->getConfig();
- $this->assertEquals($actual, $expected);
- }
- public function testGetMinResolverCode()
- {
- $this->minificationMock
- ->expects($this->once())
- ->method('getExcludes')
- ->with('js')
- ->willReturn(['\.min\.']);
- $this->minificationMock
- ->expects($this->once())
- ->method('isEnabled')
- ->with('js')
- ->willReturn(true);
- $this->minifyAdapterMock
- ->expects($this->once())
- ->method('minify')
- ->willReturnArgument(0);
- $expected = <<<code
- var ctx = require.s.contexts._,
- origNameToUrl = ctx.nameToUrl;
- ctx.nameToUrl = function() {
- var url = origNameToUrl.apply(ctx, arguments);
- if (!url.match(/\.min\./)) {
- url = url.replace(/(\.min)?\.js$/, '.min.js');
- }
- return url;
- };
- code;
- $this->assertEquals($expected, $this->object->getMinResolverCode());
- }
- public function testGetConfigFileRelativePath()
- {
- $this->minificationMock
- ->expects($this->any())
- ->method('addMinifiedSign')
- ->willReturnArgument(0);
- $this->context->expects($this->once())->method('getConfigPath')->will($this->returnValue('path'));
- $actual = $this->object->getConfigFileRelativePath();
- $this->assertSame('path/requirejs-config.js', $actual);
- }
- public function testGetMixinsFileRelativePath()
- {
- $this->minificationMock
- ->expects($this->any())
- ->method('addMinifiedSign')
- ->willReturnArgument(0);
- $this->context->expects($this->once())->method('getPath')->will($this->returnValue('path'));
- $actual = $this->object->getMixinsFileRelativePath();
- $this->assertSame('path/mage/requirejs/mixins.js', $actual);
- }
- public function testGetMinResolverRelativePath()
- {
- $this->minificationMock
- ->expects($this->any())
- ->method('addMinifiedSign')
- ->willReturnArgument(0);
- $this->context->expects($this->once())->method('getConfigPath')->will($this->returnValue('path'));
- $actual = $this->object->getMinResolverRelativePath();
- $this->assertSame('path/requirejs-min-resolver.js', $actual);
- }
- public function testGetBaseConfig()
- {
- $this->context->expects($this->once())->method('getPath')->will($this->returnValue('area/theme/locale'));
- $this->context->expects($this->once())
- ->method('getBaseUrl')
- ->will($this->returnValue('http://base.url/'));
- $expected = <<<expected
- require.config({"baseUrl":"http://base.url/area/theme/locale"});
- expected;
- $actual = $this->object->getBaseConfig();
- $this->assertSame($expected, $actual);
- }
- }
|