Skip to content

Commit 47970ab

Browse files
slavvkaYaroslav Voronoy
authored andcommitted
MAGETWO-46395: Performance issue in customer form
1 parent 1105423 commit 47970ab

File tree

2 files changed

+216
-7
lines changed

2 files changed

+216
-7
lines changed

app/code/Magento/Ui/Component/Form.php

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,21 +53,22 @@ public function getComponentName()
5353
public function getDataSourceData()
5454
{
5555
$dataSource = [];
56-
$id = $this->getContext()->getRequestParam($this->getContext()->getDataProvider()->getRequestFieldName());
5756

57+
$id = $this->getContext()->getRequestParam($this->getContext()->getDataProvider()->getRequestFieldName());
5858
if ($id) {
5959
$filter = $this->filterBuilder->setField($this->getContext()->getDataProvider()->getPrimaryFieldName())
6060
->setValue($id)
6161
->create();
6262
$this->getContext()->getDataProvider()
6363
->addFilter($filter);
64-
}
65-
$data = $this->getContext()->getDataProvider()->getData();
6664

67-
if (isset($data[$id])) {
68-
$dataSource = [
69-
'data' => $data[$id]
70-
];
65+
$data = $this->getContext()->getDataProvider()->getData();
66+
67+
if (isset($data[$id])) {
68+
$dataSource = [
69+
'data' => $data[$id]
70+
];
71+
}
7172
}
7273

7374
return $dataSource;
Lines changed: 208 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,208 @@
1+
<?php
2+
/**
3+
* Copyright © 2015 Magento. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\Ui\Test\Unit\Component;
7+
8+
use Magento\Framework\Api\Filter;
9+
use Magento\Framework\Api\FilterBuilder;
10+
use Magento\Framework\View\Element\UiComponent\ContextInterface;
11+
use Magento\Framework\View\Element\UiComponent\DataProvider\DataProviderInterface;
12+
use Magento\Framework\View\Element\UiComponent\Processor;
13+
use Magento\Ui\Component\Form;
14+
15+
class FormTest extends \PHPUnit_Framework_TestCase
16+
{
17+
/** @var Form */
18+
protected $model;
19+
20+
/** @var ContextInterface|\PHPUnit_Framework_MockObject_MockObject */
21+
protected $contextMock;
22+
23+
/** @var FilterBuilder|\PHPUnit_Framework_MockObject_MockObject */
24+
protected $filterBuilderMock;
25+
26+
/** @var Processor|\PHPUnit_Framework_MockObject_MockObject */
27+
protected $processorMock;
28+
29+
protected function setUp()
30+
{
31+
$this->contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
32+
->getMockForAbstractClass();
33+
$this->filterBuilderMock = $this->getMockBuilder('Magento\Framework\Api\FilterBuilder')
34+
->disableOriginalConstructor()
35+
->getMock();
36+
$this->processorMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
37+
->disableOriginalConstructor()
38+
->getMock();
39+
40+
$this->contextMock->expects($this->any())
41+
->method('getProcessor')
42+
->willReturn($this->processorMock);
43+
44+
$this->processorMock->expects($this->once())
45+
->method('register');
46+
47+
$this->model = new Form(
48+
$this->contextMock,
49+
$this->filterBuilderMock
50+
);
51+
}
52+
53+
public function testGetComponentName()
54+
{
55+
$this->assertEquals(Form::NAME, $this->model->getComponentName());
56+
}
57+
58+
public function testGetDataSourceData()
59+
{
60+
$requestFieldName = 'request_id';
61+
$primaryFieldName = 'primary_id';
62+
$fieldId = 44;
63+
$row = ['key' => 'value'];
64+
$data = [
65+
$fieldId => $row,
66+
];
67+
$dataSource = [
68+
'data' => $row,
69+
];
70+
71+
/** @var DataProviderInterface|\PHPUnit_Framework_MockObject_MockObject $dataProviderMock */
72+
$dataProviderMock =
73+
$this->getMockBuilder('Magento\Framework\View\Element\UiComponent\DataProvider\DataProviderInterface')
74+
->getMock();
75+
$dataProviderMock->expects($this->once())
76+
->method('getRequestFieldName')
77+
->willReturn($requestFieldName);
78+
$dataProviderMock->expects($this->once())
79+
->method('getPrimaryFieldName')
80+
->willReturn($primaryFieldName);
81+
82+
$this->contextMock->expects($this->any())
83+
->method('getDataProvider')
84+
->willReturn($dataProviderMock);
85+
$this->contextMock->expects($this->once())
86+
->method('getRequestParam')
87+
->with($requestFieldName)
88+
->willReturn($fieldId);
89+
90+
/** @var Filter|\PHPUnit_Framework_MockObject_MockObject $filterMock */
91+
$filterMock = $this->getMockBuilder('Magento\Framework\Api\Filter')
92+
->disableOriginalConstructor()
93+
->getMock();
94+
95+
$this->filterBuilderMock->expects($this->once())
96+
->method('setField')
97+
->with($primaryFieldName)
98+
->willReturnSelf();
99+
$this->filterBuilderMock->expects($this->once())
100+
->method('setValue')
101+
->with($fieldId)
102+
->willReturnSelf();
103+
$this->filterBuilderMock->expects($this->once())
104+
->method('create')
105+
->willReturn($filterMock);
106+
107+
$dataProviderMock->expects($this->once())
108+
->method('addFilter')
109+
->with($filterMock);
110+
$dataProviderMock->expects($this->once())
111+
->method('getData')
112+
->willReturn($data);
113+
114+
$this->assertEquals($dataSource, $this->model->getDataSourceData());
115+
}
116+
117+
public function testGetDataSourceDataWithoutData()
118+
{
119+
$requestFieldName = 'request_id';
120+
$primaryFieldName = 'primary_id';
121+
$fieldId = 44;
122+
$data = [];
123+
$dataSource = [];
124+
125+
/** @var DataProviderInterface|\PHPUnit_Framework_MockObject_MockObject $dataProviderMock */
126+
$dataProviderMock =
127+
$this->getMockBuilder('Magento\Framework\View\Element\UiComponent\DataProvider\DataProviderInterface')
128+
->getMock();
129+
$dataProviderMock->expects($this->once())
130+
->method('getRequestFieldName')
131+
->willReturn($requestFieldName);
132+
$dataProviderMock->expects($this->once())
133+
->method('getPrimaryFieldName')
134+
->willReturn($primaryFieldName);
135+
136+
$this->contextMock->expects($this->any())
137+
->method('getDataProvider')
138+
->willReturn($dataProviderMock);
139+
$this->contextMock->expects($this->once())
140+
->method('getRequestParam')
141+
->with($requestFieldName)
142+
->willReturn($fieldId);
143+
144+
/** @var Filter|\PHPUnit_Framework_MockObject_MockObject $filterMock */
145+
$filterMock = $this->getMockBuilder('Magento\Framework\Api\Filter')
146+
->disableOriginalConstructor()
147+
->getMock();
148+
149+
$this->filterBuilderMock->expects($this->once())
150+
->method('setField')
151+
->with($primaryFieldName)
152+
->willReturnSelf();
153+
$this->filterBuilderMock->expects($this->once())
154+
->method('setValue')
155+
->with($fieldId)
156+
->willReturnSelf();
157+
$this->filterBuilderMock->expects($this->once())
158+
->method('create')
159+
->willReturn($filterMock);
160+
161+
$dataProviderMock->expects($this->once())
162+
->method('addFilter')
163+
->with($filterMock);
164+
$dataProviderMock->expects($this->once())
165+
->method('getData')
166+
->willReturn($data);
167+
168+
$this->assertEquals($dataSource, $this->model->getDataSourceData());
169+
}
170+
171+
public function testGetDataSourceDataWithoutId()
172+
{
173+
$requestFieldName = 'request_id';
174+
$dataSource = [];
175+
176+
/** @var DataProviderInterface|\PHPUnit_Framework_MockObject_MockObject $dataProviderMock */
177+
$dataProviderMock =
178+
$this->getMockBuilder('Magento\Framework\View\Element\UiComponent\DataProvider\DataProviderInterface')
179+
->getMock();
180+
$dataProviderMock->expects($this->once())
181+
->method('getRequestFieldName')
182+
->willReturn($requestFieldName);
183+
$dataProviderMock->expects($this->never())
184+
->method('getPrimaryFieldName');
185+
186+
$this->contextMock->expects($this->any())
187+
->method('getDataProvider')
188+
->willReturn($dataProviderMock);
189+
$this->contextMock->expects($this->once())
190+
->method('getRequestParam')
191+
->with($requestFieldName)
192+
->willReturn(null);
193+
194+
$this->filterBuilderMock->expects($this->never())
195+
->method('setField');
196+
$this->filterBuilderMock->expects($this->never())
197+
->method('setValue');
198+
$this->filterBuilderMock->expects($this->never())
199+
->method('create');
200+
201+
$dataProviderMock->expects($this->never())
202+
->method('addFilter');
203+
$dataProviderMock->expects($this->never())
204+
->method('getData');
205+
206+
$this->assertEquals($dataSource, $this->model->getDataSourceData());
207+
}
208+
}

0 commit comments

Comments
 (0)