Пример #1
0
 /**
  * @param $groupOne
  * @param $groupTwo
  * @param $expectedResult
  * @dataProvider dataProviderRenderAssets
  */
 public function testRenderAssets($groupOne, $groupTwo, $expectedResult)
 {
     $assetUrl = 'url';
     $assetNoRoutUrl = 'no_route_url';
     $exception = new \Magento\Framework\Exception('my message');
     $assetMockOne = $this->getMock('Magento\\Framework\\View\\Asset\\AssetInterface');
     $assetMockOne->expects($this->exactly(2))->method('getUrl')->willReturn($assetUrl);
     $groupAssetsOne = [$assetMockOne, $assetMockOne];
     $groupMockOne = $this->getMockBuilder('Magento\\Framework\\View\\Asset\\PropertyGroup')->disableOriginalConstructor()->getMock();
     $groupMockOne->expects($this->once())->method('getAll')->willReturn($groupAssetsOne);
     $groupMockOne->expects($this->any())->method('getProperty')->willReturnMap([[GroupedCollection::PROPERTY_CAN_MERGE, true], [GroupedCollection::PROPERTY_CONTENT_TYPE, $groupOne['type']], ['attributes', $groupOne['attributes']], ['ie_condition', $groupOne['condition']]]);
     $assetMockTwo = $this->getMock('Magento\\Framework\\View\\Asset\\AssetInterface');
     $assetMockTwo->expects($this->once())->method('getUrl')->willThrowException($exception);
     $groupAssetsTwo = [$assetMockTwo];
     $groupMockTwo = $this->getMockBuilder('Magento\\Framework\\View\\Asset\\PropertyGroup')->disableOriginalConstructor()->getMock();
     $groupMockTwo->expects($this->once())->method('getAll')->willReturn($groupAssetsTwo);
     $groupMockTwo->expects($this->any())->method('getProperty')->willReturnMap([[GroupedCollection::PROPERTY_CAN_MERGE, true], [GroupedCollection::PROPERTY_CONTENT_TYPE, $groupTwo['type']], ['attributes', $groupTwo['attributes']], ['ie_condition', $groupTwo['condition']]]);
     $this->pageConfigMock->expects($this->once())->method('getAssetCollection')->willReturn($this->assetsCollection);
     $this->assetsCollection->expects($this->once())->method('getGroups')->willReturn([$groupMockOne, $groupMockTwo]);
     $this->assetMinifyServiceMock->expects($this->exactly(2))->method('getAssets')->willReturnArgument(0);
     $this->assetMergeServiceMock->expects($this->exactly(1))->method('getMergedAssets')->willReturnArgument(0);
     $this->loggerMock->expects($this->once())->method('critical')->with($exception);
     $this->urlBuilderMock->expects($this->once())->method('getUrl')->with('', ['_direct' => 'core/index/notFound'])->willReturn($assetNoRoutUrl);
     $this->assertEquals($expectedResult, $this->renderer->renderAssets($this->renderer->getAvailableResultGroups()));
 }
 /**
  * Apply customized static files to frontend
  *
  * @param \Magento\Framework\Event\Observer $observer
  * @return void
  * @SuppressWarnings(PHPMD.UnusedFormalParameter)
  */
 public function execute(\Magento\Framework\Event\Observer $observer)
 {
     /** @var $themeFile \Magento\Theme\Model\Theme\File */
     foreach ($this->currentTheme->getCustomization()->getFiles() as $themeFile) {
         try {
             $service = $themeFile->getCustomizationService();
             if ($service instanceof \Magento\Framework\View\Design\Theme\Customization\FileAssetInterface) {
                 $identifier = $themeFile->getData('file_path');
                 $dirPath = \Magento\Framework\View\Design\Theme\Customization\Path::DIR_NAME . '/' . $this->currentTheme->getId();
                 $asset = $this->assetRepo->createArbitrary($identifier, $dirPath, DirectoryList::MEDIA, \Magento\Framework\UrlInterface::URL_TYPE_MEDIA);
                 $this->pageAssets->add($identifier, $asset);
             }
         } catch (\InvalidArgumentException $e) {
             $this->logger->critical($e);
         }
     }
 }
Пример #3
0
 public function testAddRss()
 {
     $title = 'test title';
     $href = 'http://test.com';
     $expected = ['attributes' => 'rel="alternate" type="application/rss+xml" title="test title"'];
     $this->assetRepo->expects($this->once())->method('createRemoteAsset')->with($href, 'unknown')->will($this->returnValue($this->remoteAsset));
     $this->pageAssets->expects($this->once())->method('add')->with('link/http://test.com', $this->remoteAsset, $expected);
     $this->assertInstanceOf('Magento\\Framework\\View\\Page\\Config', $this->model->addRss($title, $href));
 }
Пример #4
0
    /**
     * Add RSS element
     *
     * @param string $title
     * @param string $href
     * @return $this
     */
    public function addRss($title, $href)
    {
        $remoteAsset = $this->assetRepo->createRemoteAsset((string)$href, 'unknown');
        $this->pageAssets->add(
            "link/{$href}",
            $remoteAsset,
            ['attributes' => 'rel="alternate" type="application/rss+xml" title="' . $title . '"']
        );

        return $this;
    }
Пример #5
0
 /**
  * Render HTML for the added head items
  *
  * @SuppressWarnings(PHPMD.CyclomaticComplexity)
  * @SuppressWarnings(PHPMD.NPathComplexity)
  *
  * @return string
  */
 public function getCssJsHtml()
 {
     foreach ($this->getLayout()->getChildBlocks($this->getNameInLayout()) as $block) {
         /** @var $block \Magento\Framework\View\Element\AbstractBlock */
         if ($block instanceof \Magento\Theme\Block\Html\Head\AssetBlockInterface) {
             /** @var \Magento\Framework\View\Asset\AssetInterface $asset */
             $asset = $block->getAsset();
             $this->_pageAssets->add($block->getNameInLayout(), $asset, (array) $block->getProperties());
         }
     }
     $result = '';
     /** @var $group \Magento\Framework\View\Asset\PropertyGroup */
     foreach ($this->_pageAssets->getGroups() as $group) {
         $contentType = $group->getProperty(\Magento\Framework\View\Asset\GroupedCollection::PROPERTY_CONTENT_TYPE);
         $canMerge = $group->getProperty(\Magento\Framework\View\Asset\GroupedCollection::PROPERTY_CAN_MERGE);
         $attributes = $group->getProperty('attributes');
         $ieCondition = $group->getProperty('ie_condition');
         $flagName = $group->getProperty('flag_name');
         if ($flagName && !$this->getData($flagName)) {
             continue;
         }
         $groupAssets = $group->getAll();
         $groupAssets = $this->_assetMinifyService->getAssets($groupAssets);
         if ($canMerge && count($groupAssets) > 1) {
             $groupAssets = $this->_assetMergeService->getMergedAssets($groupAssets, $contentType);
         }
         if (!empty($attributes)) {
             if (is_array($attributes)) {
                 $attributesString = '';
                 foreach ($attributes as $name => $value) {
                     $attributesString .= ' ' . $name . '="' . $this->escapeHtml($value) . '"';
                 }
                 $attributes = $attributesString;
             } else {
                 $attributes = ' ' . $attributes;
             }
         }
         if ($contentType == 'js') {
             $groupTemplate = '<script' . $attributes . ' type="text/javascript" src="%s"></script>' . "\n";
         } else {
             if ($contentType == 'css') {
                 $attributes = ' rel="stylesheet" type="text/css"' . ($attributes ?: ' media="all"');
             }
             $groupTemplate = '<link' . $attributes . ' href="%s" />' . "\n";
         }
         $groupHtml = $this->_renderHtml($groupTemplate, $groupAssets);
         if (!empty($ieCondition)) {
             $groupHtml = '<!--[if ' . $ieCondition . ']>' . "\n" . $groupHtml . '<![endif]-->' . "\n";
         }
         $result .= $groupHtml;
     }
     return $result;
 }
Пример #6
0
 /**
  * @param $contentType
  * @param $attributes
  * @param $ieCondition
  * @param $expectedResult
  * @dataProvider dataProviderRenderAsset
  */
 public function testRenderAsset($contentType, $attributes, $ieCondition, $expectedResult)
 {
     $assetUrl = 'url';
     $assetNoRoutUrl = 'no_route_url';
     $exception = new \Magento\Framework\Exception('my message');
     $assetMock1 = $this->getMock('Magento\\Framework\\View\\Asset\\AssetInterface');
     $assetMock1->expects($this->once())->method('getUrl')->willReturn($assetUrl);
     $assetMock2 = $this->getMock('Magento\\Framework\\View\\Asset\\AssetInterface');
     $assetMock2->expects($this->once())->method('getUrl')->willThrowException($exception);
     $groupAssets = [$assetMock1, $assetMock2];
     $this->pageConfigMock->expects($this->once())->method('getAssetCollection')->willReturn($this->assetsCollection);
     $this->assetsCollection->expects($this->once())->method('getGroups')->willReturn([$this->propertyGroupMock]);
     $this->propertyGroupMock->expects($this->once())->method('getAll')->willReturn($groupAssets);
     $this->propertyGroupMock->expects($this->any())->method('getProperty')->willReturnMap([[GroupedCollection::PROPERTY_CAN_MERGE, true], [GroupedCollection::PROPERTY_CONTENT_TYPE, $contentType], ['attributes', $attributes], ['ie_condition', $ieCondition]]);
     $this->assetMinifyServiceMock->expects($this->once())->method('getAssets')->with($groupAssets)->willReturn($groupAssets);
     $this->assetMergeServiceMock->expects($this->once())->method('getMergedAssets')->with($groupAssets, $contentType)->willReturnArgument(0);
     $this->loggerMock->expects($this->once())->method('critical')->with($exception);
     $this->urlBuilderMock->expects($this->once())->method('getUrl')->with('', ['_direct' => 'core/index/notFound'])->willReturn($assetNoRoutUrl);
     $this->assertEquals($expectedResult, $this->renderer->renderAssets());
 }
Пример #7
0
 public function testGetGroups()
 {
     $cssAsset = new \Magento\Framework\View\Asset\Remote('http://127.0.0.1/style.css', 'css');
     $jsAsset = new \Magento\Framework\View\Asset\Remote('http://127.0.0.1/script.js', 'js');
     $jsAssetAllowingMerge = $this->getMockForAbstractClass('Magento\\Framework\\View\\Asset\\MergeableInterface');
     $jsAssetAllowingMerge->expects($this->any())->method('getContentType')->will($this->returnValue('js'));
     // assets with identical properties should be grouped together
     $this->_object->add('css_asset_one', $cssAsset, ['property' => 'test_value']);
     $this->_object->add('css_asset_two', $cssAsset, ['property' => 'test_value']);
     // assets with identical properties but empty properties should be grouped together
     $this->_object->add('css_asset_four', $cssAsset, ['property' => 'test_value2', 'junk1' => null]);
     $this->_object->add('css_asset_five', $cssAsset, ['property' => 'test_value2', 'junk2' => '']);
     // assets with different properties should go to different groups
     $this->_object->add('css_asset_three', $cssAsset, ['property' => 'different_value']);
     $this->_object->add('js_asset_one', $jsAsset, ['property' => 'test_value']);
     // assets with identical properties in a different order should be grouped
     $this->_object->add('js_asset_two', $jsAsset, ['property1' => 'value1', 'property2' => 'value2']);
     $this->_object->add('js_asset_three', $jsAsset, ['property2' => 'value2', 'property1' => 'value1']);
     // assets allowing merge should go to separate group regardless of having identical properties
     $this->_object->add('asset_allowing_merge', $jsAssetAllowingMerge, ['property' => 'test_value']);
     $expectedGroups = [['properties' => ['content_type' => 'unknown', 'can_merge' => false], 'assets' => ['asset' => $this->_asset]], ['properties' => ['property' => 'test_value', 'content_type' => 'css', 'can_merge' => false], 'assets' => ['css_asset_one' => $cssAsset, 'css_asset_two' => $cssAsset]], ['properties' => ['property' => 'test_value2', 'content_type' => 'css', 'can_merge' => false], 'assets' => ['css_asset_four' => $cssAsset, 'css_asset_five' => $cssAsset]], ['properties' => ['property' => 'different_value', 'content_type' => 'css', 'can_merge' => false], 'assets' => ['css_asset_three' => $cssAsset]], ['properties' => ['property' => 'test_value', 'content_type' => 'js', 'can_merge' => false], 'assets' => ['js_asset_one' => $jsAsset]], ['properties' => ['property1' => 'value1', 'property2' => 'value2', 'content_type' => 'js', 'can_merge' => false], 'assets' => ['js_asset_two' => $jsAsset, 'js_asset_three' => $jsAsset]], ['properties' => ['property' => 'test_value', 'content_type' => 'js', 'can_merge' => true], 'assets' => ['asset_allowing_merge' => $jsAssetAllowingMerge]]];
     $this->_assertGroups($expectedGroups, $this->_object->getGroups());
 }