Skip to content

Commit 1c6672e

Browse files
product review DataProvider sorting, integration test
1 parent c1eb748 commit 1c6672e

File tree

2 files changed

+123
-12
lines changed

2 files changed

+123
-12
lines changed

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

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@
55
*/
66
namespace Magento\Review\Ui\DataProvider\Product;
77

8+
use Magento\Framework\Api\Filter;
89
use Magento\Framework\App\RequestInterface;
910
use Magento\Ui\DataProvider\AbstractDataProvider;
1011
use Magento\Review\Model\ResourceModel\Review\Product\CollectionFactory;
1112
use Magento\Review\Model\ResourceModel\Review\Product\Collection;
12-
use Magento\Review\Model\Review;
1313

1414
/**
15-
* DataProvider Product ReviewDataProvider
15+
* DataProvider for product reviews
1616
*
1717
* @api
1818
*
@@ -66,13 +66,7 @@ public function getData()
6666
$this->getCollection()->addEntityFilter($this->request->getParam('current_product_id', 0))
6767
->addStoreData();
6868

69-
$params = $this->request->getParams();
70-
if (isset($params['sorting'])) {
71-
$sorting = $params['sorting'];
72-
$field = $sorting['field'];
73-
$direction = $sorting['direction'];
74-
$this->getCollection()->getSelect()->order($field . ' ' . $direction);
75-
}
69+
$this->applySorting();
7670

7771
$arrItems = [
7872
'totalRecords' => $this->getCollection()->getSize(),
@@ -86,12 +80,26 @@ public function getData()
8680
return $arrItems;
8781
}
8882

83+
/**
84+
* Apply sorting if it set
85+
*
86+
* @return void
87+
*/
88+
private function applySorting(): void
89+
{
90+
$sorting = $this->request->getParam('sorting');
91+
if (is_array($sorting)) {
92+
$select = $this->getCollection()->getSelect();
93+
$select->order($sorting['field'] . ' ' . $sorting['direction']);
94+
}
95+
}
96+
8997
/**
9098
* @inheritdoc
9199
* @since 100.1.0
92-
* @return mixed|$this
100+
* @return void
93101
*/
94-
public function addFilter(\Magento\Framework\Api\Filter $filter)
102+
public function addFilter(Filter $filter): void
95103
{
96104
$field = $filter->getField();
97105

@@ -108,6 +116,5 @@ public function addFilter(\Magento\Framework\Api\Filter $filter)
108116
}
109117

110118
parent::addFilter($filter);
111-
return $this;
112119
}
113120
}
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
namespace Magento\Review\Ui\DataProvider\Product;
10+
11+
use Magento\Framework\App\RequestInterface;
12+
use Magento\Framework\ObjectManagerInterface;
13+
use Magento\TestFramework\Helper\Bootstrap;
14+
use PHPUnit\Framework\TestCase;
15+
16+
/**
17+
* Test for \Magento\Review\Ui\DataProvider\Product\ReviewDataProvider.
18+
*/
19+
class ReviewDataProviderTest extends TestCase
20+
{
21+
/**
22+
* @var array
23+
*/
24+
private $modelParams = [
25+
'name' => 'review_listing_data_source',
26+
'primaryFieldName' => 'review_id',
27+
'requestFieldName' => 'entity_id',
28+
];
29+
30+
/**
31+
* @var ObjectManagerInterface
32+
*/
33+
private $objectManager;
34+
35+
/**
36+
* @inheritDoc
37+
*/
38+
protected function setUp(): void
39+
{
40+
$this->objectManager = Bootstrap::getObjectManager();
41+
}
42+
43+
/**
44+
* Sorting dataProvider test
45+
*
46+
* @magentoDataFixture Magento/Review/_files/different_reviews.php
47+
* @dataProvider sortingDataProvider
48+
*
49+
* @param array $sorting
50+
* @param array $expectedSortedTitles
51+
* @return void
52+
*/
53+
public function testSorting(array $sorting, array $expectedSortedTitles): void
54+
{
55+
$request = $this->objectManager->create(RequestInterface::class);
56+
$request->setParam('sorting', $sorting);
57+
$request->setParam('current_product_id', 1);
58+
59+
$dataProvider = $this->objectManager->create(
60+
ReviewDataProvider::class,
61+
array_merge($this->modelParams, ['request' => $request])
62+
);
63+
64+
$result = $dataProvider->getData();
65+
66+
$this->assertEquals($this->getItemsField($result, 'title'), $expectedSortedTitles);
67+
}
68+
69+
/**
70+
* Return items field data
71+
*
72+
* @param array $arrItems
73+
* @param string $field
74+
* @return array
75+
*/
76+
private function getItemsField(array $arrItems, string $field): array
77+
{
78+
$data = [];
79+
foreach ($arrItems['items'] as $review) {
80+
$data[] = $review[$field];
81+
}
82+
83+
return $data;
84+
}
85+
86+
/**
87+
* DataProvider for testSorting
88+
*
89+
* @return array
90+
*/
91+
public function sortingDataProvider(): array
92+
{
93+
return [
94+
[
95+
['field' => 'title', 'direction' => 'asc'],
96+
['1 filter second review', '2 filter first review', 'Review Summary'],
97+
],
98+
[
99+
['field' => 'title', 'direction' => 'desc'],
100+
['Review Summary', '2 filter first review', '1 filter second review'],
101+
],
102+
];
103+
}
104+
}

0 commit comments

Comments
 (0)