Skip to content

Commit 5ce8747

Browse files
authored
ENGCOM-4353: Refactored Retrieval Of Entity ID To Make AbstractDataProvider Usable #21065
2 parents 5429f22 + 2c5ea13 commit 5ce8747

File tree

2 files changed

+66
-4
lines changed

2 files changed

+66
-4
lines changed

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
use Magento\Framework\View\Element\UiComponentInterface;
1111

1212
/**
13+
* Ui component Form
1314
* @api
1415
* @since 100.0.2
1516
*/
@@ -53,14 +54,15 @@ public function getComponentName()
5354
}
5455

5556
/**
56-
* {@inheritdoc}
57+
* @inheritdoc
5758
*/
5859
public function getDataSourceData()
5960
{
6061
$dataSource = [];
6162

6263
$id = $this->getContext()->getRequestParam($this->getContext()->getDataProvider()->getRequestFieldName(), null);
63-
$filter = $this->filterBuilder->setField($this->getContext()->getDataProvider()->getPrimaryFieldName())
64+
$idFieldName = $this->getContext()->getDataProvider()->getPrimaryFieldName();
65+
$filter = $this->filterBuilder->setField($idFieldName)
6466
->setValue($id)
6567
->create();
6668
$this->getContext()->getDataProvider()
@@ -74,7 +76,7 @@ public function getDataSourceData()
7476
];
7577
} elseif (isset($data['items'])) {
7678
foreach ($data['items'] as $item) {
77-
if ($item[$item['id_field_name']] == $id) {
79+
if ($item[$idFieldName] == $id) {
7880
$dataSource = ['data' => ['general' => $item]];
7981
}
8082
}

app/code/Magento/Ui/Test/Unit/Component/FormTest.php

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
use Magento\Framework\Api\FilterBuilder;
1010
use Magento\Framework\View\Element\UiComponent\ContextInterface;
1111
use Magento\Framework\View\Element\UiComponent\DataProvider\DataProviderInterface;
12-
use Magento\Framework\View\Element\UiComponent\Processor;
1312
use Magento\Ui\Component\Form;
1413

1514
class FormTest extends \PHPUnit\Framework\TestCase
@@ -215,4 +214,65 @@ public function testGetDataSourceDataWithoutId()
215214

216215
$this->assertEquals($dataSource, $this->model->getDataSourceData());
217216
}
217+
218+
public function testGetDataSourceDataWithAbstractDataProvider()
219+
{
220+
$requestFieldName = 'request_id';
221+
$primaryFieldName = 'primary_id';
222+
$fieldId = 44;
223+
$row = ['key' => 'value', $primaryFieldName => $fieldId];
224+
$data = [
225+
'items' => [$row],
226+
];
227+
$dataSource = [
228+
'data' => [
229+
'general' => $row
230+
],
231+
];
232+
233+
/** @var DataProviderInterface|\PHPUnit_Framework_MockObject_MockObject $dataProviderMock */
234+
$dataProviderMock =
235+
$this->getMockBuilder(\Magento\Framework\View\Element\UiComponent\DataProvider\DataProviderInterface::class)
236+
->getMock();
237+
$dataProviderMock->expects($this->once())
238+
->method('getRequestFieldName')
239+
->willReturn($requestFieldName);
240+
$dataProviderMock->expects($this->once())
241+
->method('getPrimaryFieldName')
242+
->willReturn($primaryFieldName);
243+
244+
$this->contextMock->expects($this->any())
245+
->method('getDataProvider')
246+
->willReturn($dataProviderMock);
247+
$this->contextMock->expects($this->once())
248+
->method('getRequestParam')
249+
->with($requestFieldName)
250+
->willReturn($fieldId);
251+
252+
/** @var Filter|\PHPUnit_Framework_MockObject_MockObject $filterMock */
253+
$filterMock = $this->getMockBuilder(\Magento\Framework\Api\Filter::class)
254+
->disableOriginalConstructor()
255+
->getMock();
256+
257+
$this->filterBuilderMock->expects($this->once())
258+
->method('setField')
259+
->with($primaryFieldName)
260+
->willReturnSelf();
261+
$this->filterBuilderMock->expects($this->once())
262+
->method('setValue')
263+
->with($fieldId)
264+
->willReturnSelf();
265+
$this->filterBuilderMock->expects($this->once())
266+
->method('create')
267+
->willReturn($filterMock);
268+
269+
$dataProviderMock->expects($this->once())
270+
->method('addFilter')
271+
->with($filterMock);
272+
$dataProviderMock->expects($this->once())
273+
->method('getData')
274+
->willReturn($data);
275+
276+
$this->assertEquals($dataSource, $this->model->getDataSourceData());
277+
}
218278
}

0 commit comments

Comments
 (0)