Skip to content

Commit 960ba65

Browse files
committed
MAGETWO-58042: [Backport] - Search fails with an error when used user-defined price attribute as searchable - for 2.1
1 parent c9da1a1 commit 960ba65

File tree

9 files changed

+152
-30
lines changed

9 files changed

+152
-30
lines changed

app/code/Magento/CatalogSearch/Block/Advanced/Result.php

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,26 +14,26 @@
1414
use Magento\Framework\View\Element\Template\Context;
1515

1616
/**
17-
* Advanced search result
17+
* Advanced search result.
1818
*/
1919
class Result extends Template
2020
{
2121
/**
22-
* Url factory
22+
* Url factory.
2323
*
2424
* @var UrlFactory
2525
*/
2626
protected $_urlFactory;
2727

2828
/**
29-
* Catalog layer
29+
* Catalog layer.
3030
*
3131
* @var \Magento\Catalog\Model\Layer
3232
*/
3333
protected $_catalogLayer;
3434

3535
/**
36-
* Catalog search advanced
36+
* Catalog search advanced.
3737
*
3838
* @var Advanced
3939
*/
@@ -82,11 +82,12 @@ protected function _prepareLayout()
8282
['label' => __('Results')]
8383
);
8484
}
85+
8586
return parent::_prepareLayout();
8687
}
8788

8889
/**
89-
* Get page title
90+
* Get page title.
9091
*
9192
* @return \Magento\Framework\Phrase
9293
*/
@@ -96,7 +97,7 @@ private function getPageTitle()
9697
}
9798

9899
/**
99-
* Set order options
100+
* Set order options.
100101
*
101102
* @return void
102103
*/
@@ -112,7 +113,7 @@ public function setListOrders()
112113
}
113114

114115
/**
115-
* Set view mode options
116+
* Set view mode options.
116117
*
117118
* @return void
118119
*/
@@ -122,6 +123,8 @@ public function setListModes()
122123
}
123124

124125
/**
126+
* Set search result collection.
127+
*
125128
* @return void
126129
*/
127130
public function setListCollection()
@@ -130,6 +133,8 @@ public function setListCollection()
130133
}
131134

132135
/**
136+
* Return product collection.
137+
*
133138
* @return Collection
134139
*/
135140
protected function _getProductCollection()
@@ -138,6 +143,8 @@ protected function _getProductCollection()
138143
}
139144

140145
/**
146+
* Return search model.
147+
*
141148
* @return Advanced
142149
*/
143150
public function getSearchModel()
@@ -146,6 +153,8 @@ public function getSearchModel()
146153
}
147154

148155
/**
156+
* Return results count.
157+
*
149158
* @return mixed
150159
*/
151160
public function getResultCount()
@@ -154,10 +163,13 @@ public function getResultCount()
154163
$size = $this->getSearchModel()->getProductCollection()->getSize();
155164
$this->setResultCount($size);
156165
}
166+
157167
return $this->getData('result_count');
158168
}
159169

160170
/**
171+
* Return search product listing html.
172+
*
161173
* @return string
162174
*/
163175
public function getProductListHtml()
@@ -166,6 +178,8 @@ public function getProductListHtml()
166178
}
167179

168180
/**
181+
* Return form url.
182+
*
169183
* @return string
170184
*/
171185
public function getFormUrl()
@@ -179,6 +193,8 @@ public function getFormUrl()
179193
}
180194

181195
/**
196+
* Return search criteria.
197+
*
182198
* @return array
183199
*/
184200
public function getSearchCriterias()

app/code/Magento/CatalogSearch/Model/Search/RequestGenerator.php

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,15 @@ class RequestGenerator
2525
const BUCKET_SUFFIX = '_bucket';
2626

2727
/**
28+
* Product attribute collection factory.
29+
*
2830
* @var CollectionFactory
2931
*/
3032
private $productAttributeCollectionFactory;
3133

3234
/**
35+
* Search generator resolver.
36+
*
3337
* @var GeneratorResolver
3438
*/
3539
private $generatorResolver;
@@ -48,7 +52,7 @@ public function __construct(
4852
}
4953

5054
/**
51-
* Generate dynamic fields requests
55+
* Generate dynamic fields requests.
5256
*
5357
* @return array
5458
*/
@@ -65,7 +69,7 @@ public function generate()
6569
}
6670

6771
/**
68-
* Generate search request
72+
* Generate search request.
6973
*
7074
* @param string $attributeType
7175
* @param string $container
@@ -115,7 +119,7 @@ private function generateRequest($attributeType, $container, $useFulltext)
115119
}
116120

117121
/**
118-
* Retrieve searchable attributes
122+
* Retrieve searchable attributes.
119123
*
120124
* @return \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection
121125
*/
@@ -132,7 +136,7 @@ protected function getSearchableAttributes()
132136
}
133137

134138
/**
135-
* Generate advanced search request
139+
* Generate advanced search request.
136140
*
137141
* @return array
138142
* @SuppressWarnings(PHPMD.CyclomaticComplexity)

app/code/Magento/CatalogSearch/Model/Search/RequestGenerator/GeneratorInterface.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,17 @@
1414
interface GeneratorInterface
1515
{
1616
/**
17-
* Get filter data for specific attribute
17+
* Get filter data for specific attribute.
18+
*
1819
* @param Attribute $attribute
1920
* @param string $filterName
2021
* @return array
2122
*/
2223
public function getFilterData(Attribute $attribute, $filterName);
2324

2425
/**
25-
* Get aggregation data for specific attribute
26+
* Get aggregation data for specific attribute.
27+
*
2628
* @param Attribute $attribute
2729
* @param string $bucketName
2830
* @return array

app/code/Magento/CatalogSearch/Model/Search/RequestGenerator/GeneratorResolver.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,15 @@
1212
class GeneratorResolver
1313
{
1414
/**
15+
* Search request generators.
16+
*
1517
* @var GeneratorInterface[]
1618
*/
1719
private $generators;
1820

1921
/**
22+
* Default search request generator.
23+
*
2024
* @var GeneratorInterface
2125
*/
2226
private $defaultGenerator;

app/code/Magento/CatalogSearch/Test/Unit/Model/Search/RequestGenerator/DecimalTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
use Magento\Framework\Search\Request\BucketInterface;
1212
use Magento\Framework\Search\Request\FilterInterface;
1313

14+
/**
15+
* Test for Magento\CatalogSearch\Model\Search\RequestGenerator\Decimal.
16+
*/
1417
class DecimalTest extends \PHPUnit_Framework_TestCase
1518
{
1619
/** @var Decimal */
@@ -19,6 +22,9 @@ class DecimalTest extends \PHPUnit_Framework_TestCase
1922
/** @var Attribute|\PHPUnit_Framework_MockObject_MockObject */
2023
private $attribute;
2124

25+
/**
26+
* {@inheritdoc}
27+
*/
2228
protected function setUp()
2329
{
2430
$this->attribute = $this->getMockBuilder(Attribute::class)
@@ -29,6 +35,11 @@ protected function setUp()
2935
$this->decimal = $objectManager->getObject(Decimal::class);
3036
}
3137

38+
/**
39+
* Tests retrieving filter data by search request generator.
40+
*
41+
* @return void
42+
*/
3243
public function testGetFilterData()
3344
{
3445
$filterName = 'test_filter_name';
@@ -47,6 +58,11 @@ public function testGetFilterData()
4758
$this->assertEquals($expected, $actual);
4859
}
4960

61+
/**
62+
* Test retrieving aggregation data by search request generator.
63+
*
64+
* @return void
65+
*/
5066
public function testGetAggregationData()
5167
{
5268
$bucketName = 'test_bucket_name';

app/code/Magento/CatalogSearch/Test/Unit/Model/Search/RequestGenerator/GeneralTest.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
use Magento\Framework\Search\Request\BucketInterface;
1212
use Magento\Framework\Search\Request\FilterInterface;
1313

14+
/**
15+
* Test for Magento\CatalogSearch\Model\Search\RequestGenerator\General.
16+
*/
1417
class GeneralTest extends \PHPUnit_Framework_TestCase
1518
{
1619
/** @var General */
@@ -19,6 +22,9 @@ class GeneralTest extends \PHPUnit_Framework_TestCase
1922
/** @var Attribute|\PHPUnit_Framework_MockObject_MockObject */
2023
private $attribute;
2124

25+
/**
26+
* {@inheritdoc}
27+
*/
2228
protected function setUp()
2329
{
2430
$this->attribute = $this->getMockBuilder(Attribute::class)
@@ -29,6 +35,11 @@ protected function setUp()
2935
$this->general = $objectManager->getObject(General::class);
3036
}
3137

38+
/**
39+
* Tests retrieving filter data by search request generator.
40+
*
41+
* @return void
42+
*/
3243
public function testGetFilterData()
3344
{
3445
$filterName = 'test_general_filter_name';
@@ -46,6 +57,11 @@ public function testGetFilterData()
4657
$this->assertEquals($expected, $actual);
4758
}
4859

60+
/**
61+
* Test retrieving aggregation data by search request generator.
62+
*
63+
* @return void
64+
*/
4965
public function testGetAggregationData()
5066
{
5167
$bucketName = 'test_bucket_name';

app/code/Magento/CatalogSearch/Test/Unit/Model/Search/RequestGenerator/GeneratorResolverTest.php

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@
66

77
namespace Magento\CatalogSearch\Test\Unit\Model\Search\RequestGenerator;
88

9-
109
use Magento\CatalogSearch\Model\Search\RequestGenerator\GeneratorResolver;
1110
use Magento\CatalogSearch\Model\Search\RequestGenerator\GeneratorInterface;
1211

12+
/**
13+
* Test for Magento\CatalogSearch\Model\Search\RequestGenerator\GeneratorResolver.
14+
*/
1315
class GeneratorResolverTest extends \PHPUnit_Framework_TestCase
1416
{
1517
/** @var GeneratorResolver */
@@ -24,6 +26,9 @@ class GeneratorResolverTest extends \PHPUnit_Framework_TestCase
2426
/** @var GeneratorInterface|\PHPUnit_Framework_MockObject_MockObject */
2527
private $rangeGenerator;
2628

29+
/**
30+
* {@inheritdoc}
31+
*/
2732
protected function setUp()
2833
{
2934
$this->defaultGenerator = $this->getMockBuilder(GeneratorInterface::class)
@@ -55,19 +60,32 @@ protected function setUp()
5560
);
5661
}
5762

63+
/**
64+
* Tests resolving type specific search generator.
65+
*
66+
* @return void
67+
*/
5868
public function testGetSpecificGenerator()
5969
{
6070
$this->assertEquals($this->rangeGenerator, $this->resolver->getGeneratorForType('range'));
6171
$this->assertEquals($this->datetimeGenerator, $this->resolver->getGeneratorForType('datetime'));
6272
}
6373

74+
/**
75+
* Tests resolving fallback search generator.
76+
*
77+
* @return void
78+
*/
6479
public function testGetFallbackGenerator()
6580
{
6681
$this->assertEquals($this->defaultGenerator, $this->resolver->getGeneratorForType('unknown_type'));
6782
}
6883

6984
/**
85+
* Tests resolving search generator with invalid type.
86+
*
7087
* @expectedException InvalidArgumentException
88+
* @return void
7189
*/
7290
public function testGetInvalidGeneratorType()
7391
{

0 commit comments

Comments
 (0)