Skip to content

Commit da7bb72

Browse files
fix review sorting via rewrite addOrder, fix tests
1 parent f18ab23 commit da7bb72

File tree

3 files changed

+38
-34
lines changed

3 files changed

+38
-34
lines changed

app/code/Magento/Review/Test/Unit/Ui/DataProvider/Product/ReviewDataProviderTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,10 @@ public function testGetData()
8181
$this->collectionMock->expects($this->once())
8282
->method('addStoreData')
8383
->willReturnSelf();
84-
$this->requestMock->expects($this->exactly(2))
84+
$this->requestMock->expects($this->once())
8585
->method('getParam')
86-
->withConsecutive(['current_product_id', 0], ['sorting'])
87-
->willReturnOnConsecutiveCalls(1, null);
86+
->with('current_product_id', 0)
87+
->willReturn(1);
8888

8989
$this->assertSame($expected, $this->model->getData());
9090
}

app/code/Magento/Review/Ui/DataProvider/Product/ReviewDataProvider.php

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77

88
use Magento\Framework\Api\Filter;
99
use Magento\Framework\App\RequestInterface;
10-
use Magento\Ui\DataProvider\AbstractDataProvider;
11-
use Magento\Review\Model\ResourceModel\Review\Product\CollectionFactory;
1210
use Magento\Review\Model\ResourceModel\Review\Product\Collection;
11+
use Magento\Review\Model\ResourceModel\Review\Product\CollectionFactory;
12+
use Magento\Ui\DataProvider\AbstractDataProvider;
1313

1414
/**
1515
* DataProvider for product reviews
@@ -66,8 +66,6 @@ public function getData()
6666
$this->getCollection()->addEntityFilter($this->request->getParam('current_product_id', 0))
6767
->addStoreData();
6868

69-
$this->applySorting();
70-
7169
$arrItems = [
7270
'totalRecords' => $this->getCollection()->getSize(),
7371
'items' => [],
@@ -81,17 +79,32 @@ public function getData()
8179
}
8280

8381
/**
84-
* Apply sorting if it set
82+
* Returns prepared field name
8583
*
86-
* @return void
84+
* @param string $name
85+
* @return string
8786
*/
88-
private function applySorting(): void
87+
private function getPreparedField(string $name): string
8988
{
90-
$sorting = $this->request->getParam('sorting');
91-
if (is_array($sorting)) {
92-
$select = $this->getCollection()->getSelect();
93-
$select->order($sorting['field'] . ' ' . $sorting['direction']);
89+
$preparedName = '';
90+
91+
if (in_array($name, ['review_id', 'created_at', 'status_id'])) {
92+
$preparedName = 'rt.' . $name;
93+
} elseif (in_array($name, ['title', 'nickname', 'detail'])) {
94+
$preparedName = 'rdt.' . $name;
95+
} elseif ($name === 'review_created_at') {
96+
$preparedName = 'rt.created_at';
9497
}
98+
99+
return $preparedName ?: $name;
100+
}
101+
102+
/**
103+
* @inheritDoc
104+
*/
105+
public function addOrder($field, $direction): void
106+
{
107+
$this->getCollection()->setOrder($this->getPreparedField($field), $direction);
95108
}
96109

97110
/**
@@ -102,18 +115,7 @@ private function applySorting(): void
102115
public function addFilter(Filter $filter): void
103116
{
104117
$field = $filter->getField();
105-
106-
if (in_array($field, ['review_id', 'created_at', 'status_id'])) {
107-
$filter->setField('rt.' . $field);
108-
}
109-
110-
if (in_array($field, ['title', 'nickname', 'detail'])) {
111-
$filter->setField('rdt.' . $field);
112-
}
113-
114-
if ($field === 'review_created_at') {
115-
$filter->setField('rt.created_at');
116-
}
118+
$filter->setField($this->getPreparedField($field));
117119

118120
parent::addFilter($filter);
119121
}

dev/tests/integration/testsuite/Magento/Review/Ui/DataProvider/Product/ReviewDataProviderTest.php

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -46,21 +46,21 @@ protected function setUp(): void
4646
* @magentoDataFixture Magento/Review/_files/different_reviews.php
4747
* @dataProvider sortingDataProvider
4848
*
49-
* @param array $sorting
49+
* @param string $field
50+
* @param string $direction
5051
* @param array $expectedSortedTitles
5152
* @return void
5253
*/
53-
public function testSorting(array $sorting, array $expectedSortedTitles): void
54+
public function testSorting(string $field, string $direction, array $expectedSortedTitles): void
5455
{
5556
$request = $this->objectManager->create(RequestInterface::class);
56-
$request->setParam('sorting', $sorting);
5757
$request->setParam('current_product_id', 1);
5858

5959
$dataProvider = $this->objectManager->create(
6060
ReviewDataProvider::class,
6161
array_merge($this->modelParams, ['request' => $request])
6262
);
63-
63+
$dataProvider->addOrder($field, $direction);
6464
$result = $dataProvider->getData();
6565

6666
$this->assertEquals($this->getItemsField($result, 'title'), $expectedSortedTitles);
@@ -91,12 +91,14 @@ private function getItemsField(array $arrItems, string $field): array
9191
public function sortingDataProvider(): array
9292
{
9393
return [
94-
[
95-
['field' => 'title', 'direction' => 'asc'],
94+
'sort by title field ascending' => [
95+
'title',
96+
'asc',
9697
['1 filter second review', '2 filter first review', 'Review Summary'],
9798
],
98-
[
99-
['field' => 'title', 'direction' => 'desc'],
99+
'sort by title field descending' => [
100+
'title',
101+
'desc',
100102
['Review Summary', '2 filter first review', '1 filter second review'],
101103
],
102104
];

0 commit comments

Comments
 (0)