Skip to content

Commit c45e492

Browse files
author
Yuri Kovsher
committed
Merge remote-tracking branch 'tango-ce/MAGETWO-44116-1' into MAGETWO-48529
2 parents 9085ea0 + 53eb7b7 commit c45e492

File tree

4 files changed

+145
-12
lines changed

4 files changed

+145
-12
lines changed
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
<?php
2+
/**
3+
* Copyright © 2015 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Framework\Config\Test\Unit;
7+
8+
class ViewFactoryTest extends \PHPUnit_Framework_TestCase
9+
{
10+
const AREA = 'frontend';
11+
12+
/**
13+
* @var \Magento\Framework\Config\ViewFactory
14+
*/
15+
protected $model;
16+
17+
/**
18+
* @var \Magento\Framework\ObjectManagerInterface|\PHPUnit_Framework_MockObject_MockObject
19+
*/
20+
protected $objectManager;
21+
22+
/**
23+
* @var \Magento\Framework\View\Design\ThemeInterface|\PHPUnit_Framework_MockObject_MockObject
24+
*/
25+
protected $theme;
26+
27+
/**
28+
* @var \Magento\Framework\Config\View|\PHPUnit_Framework_MockObject_MockObject
29+
*/
30+
protected $view;
31+
32+
protected function setUp()
33+
{
34+
$this->objectManager = $this->getMock('Magento\Framework\ObjectManagerInterface');
35+
$this->model = new \Magento\Framework\Config\ViewFactory($this->objectManager);
36+
$this->theme = $this->getMock('Magento\Framework\View\Design\ThemeInterface');
37+
$this->view = $this->getMock('Magento\Framework\Config\View', [], [], '', false);
38+
}
39+
40+
public function testCreate()
41+
{
42+
$this->objectManager->expects($this->once())
43+
->method('create')
44+
->with('Magento\Framework\Config\View', [])
45+
->willReturn($this->view);
46+
$this->assertEquals($this->view, $this->model->create());
47+
}
48+
49+
public function testCreateWithArguments()
50+
{
51+
/** @var \Magento\Theme\Model\View\Design|\PHPUnit_Framework_MockObject_MockObject $design */
52+
$design = $this->getMock('Magento\Theme\Model\View\Design', [], [], '', false);
53+
$design->expects($this->once())
54+
->method('setDesignTheme')
55+
->with($this->theme, self::AREA);
56+
57+
/** @var \Magento\Framework\Config\FileResolver|\PHPUnit_Framework_MockObject_MockObject $fileResolver */
58+
$fileResolver = $this->getMock('Magento\Framework\Config\FileResolver', [], [], '', false);
59+
60+
$valueMap = [
61+
['Magento\Theme\Model\View\Design', [], $design],
62+
['Magento\Framework\Config\FileResolver', ['designInterface' => $design], $fileResolver],
63+
['Magento\Framework\Config\View', ['fileResolver' => $fileResolver], $this->view],
64+
];
65+
$this->objectManager->expects($this->exactly(3))
66+
->method('create')
67+
->willReturnMap($valueMap);
68+
69+
$this->assertEquals($this->view, $this->model->create($this->getArguments()));
70+
}
71+
72+
/**
73+
* @expectedException \Magento\Framework\Exception\LocalizedException
74+
* @expectedExceptionMessage wrong theme doesn't implement ThemeInterface
75+
*/
76+
public function testCreateException()
77+
{
78+
$this->model->create([
79+
'themeModel' => 'wrong theme',
80+
'area' => self::AREA
81+
]);
82+
}
83+
84+
/**
85+
* @return array
86+
*/
87+
protected function getArguments()
88+
{
89+
return [
90+
'themeModel' => $this->theme,
91+
'area' => self::AREA
92+
];
93+
}
94+
}

lib/internal/Magento/Framework/Config/ViewFactory.php

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,38 @@ public function __construct(ObjectManagerInterface $objectManager)
2626
}
2727

2828
/**
29+
* Create new view object
30+
*
31+
* @param array $arguments
2932
* @return \Magento\Framework\Config\View
33+
* @throws \Magento\Framework\Exception\LocalizedException
3034
*/
31-
public function create()
35+
public function create(array $arguments = [])
3236
{
37+
$viewConfigArguments = [];
38+
39+
if (isset($arguments['themeModel']) && isset($arguments['area'])) {
40+
if (!($arguments['themeModel'] instanceof \Magento\Framework\View\Design\ThemeInterface)) {
41+
throw new \Magento\Framework\Exception\LocalizedException(
42+
new \Magento\Framework\Phrase('%1 doesn\'t implement ThemeInterface', [$arguments['themeModel']])
43+
);
44+
}
45+
/** @var \Magento\Theme\Model\View\Design $design */
46+
$design = $this->objectManager->create('Magento\Theme\Model\View\Design');
47+
$design->setDesignTheme($arguments['themeModel'], $arguments['area']);
48+
/** @var \Magento\Framework\Config\FileResolver $fileResolver */
49+
$fileResolver = $this->objectManager->create(
50+
'Magento\Framework\Config\FileResolver',
51+
[
52+
'designInterface' => $design,
53+
]
54+
);
55+
$viewConfigArguments['fileResolver'] = $fileResolver;
56+
}
57+
3358
return $this->objectManager->create(
34-
'Magento\Framework\Config\View'
59+
'Magento\Framework\Config\View',
60+
$viewConfigArguments
3561
);
3662
}
3763
}

lib/internal/Magento/Framework/View/Config.php

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -57,16 +57,25 @@ public function __construct(
5757
public function getViewConfig(array $params = [])
5858
{
5959
$this->assetRepo->updateDesignParams($params);
60-
/** @var $currentTheme \Magento\Framework\View\Design\ThemeInterface */
61-
$currentTheme = $params['themeModel'];
62-
$key = $currentTheme->getCode();
63-
if (isset($this->viewConfigs[$key])) {
64-
return $this->viewConfigs[$key];
60+
$viewConfigParams = [];
61+
62+
if (isset($params['themeModel'])) {
63+
/** @var \Magento\Framework\View\Design\ThemeInterface $currentTheme */
64+
$currentTheme = $params['themeModel'];
65+
$key = $currentTheme->getCode();
66+
if (isset($this->viewConfigs[$key])) {
67+
return $this->viewConfigs[$key];
68+
}
69+
$viewConfigParams['themeModel'] = $currentTheme;
6570
}
71+
$viewConfigParams['area'] = (isset($params['area'])) ? $params['area'] : null;
6672

67-
$config = $this->viewConfigFactory->create();
73+
/** @var \Magento\Framework\Config\View $config */
74+
$config = $this->viewConfigFactory->create($viewConfigParams);
6875

69-
$this->viewConfigs[$key] = $config;
76+
if (isset($key)) {
77+
$this->viewConfigs[$key] = $config;
78+
}
7079
return $config;
7180
}
7281
}

lib/internal/Magento/Framework/View/Test/Unit/ConfigTest.php

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
namespace Magento\Framework\View\Test\Unit;
88

9-
use Magento\Framework\App\Filesystem\DirectoryList;
109
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
1110

1211
class ConfigTest extends \PHPUnit_Framework_TestCase
@@ -41,6 +40,8 @@ protected function setUp()
4140

4241
public function testGetViewConfig()
4342
{
43+
$themeCode = 2;
44+
4445
$themeMock = $this->getMock(
4546
'Magento\Theme\Model\Theme',
4647
['getCode'],
@@ -50,8 +51,11 @@ public function testGetViewConfig()
5051
);
5152
$themeMock->expects($this->atLeastOnce())
5253
->method('getCode')
53-
->will($this->returnValue(2));
54-
$params = ['themeModel' => $themeMock];
54+
->will($this->returnValue($themeCode));
55+
$params = [
56+
'themeModel' => $themeMock,
57+
'area' => 'frontend'
58+
];
5559
$this->repositoryMock->expects($this->atLeastOnce())
5660
->method('updateDesignParams')
5761
->with($this->equalTo($params))

0 commit comments

Comments
 (0)