Skip to content

Commit 5b8eb94

Browse files
committed
MAGETWO-60483: Catalog broken when all child products of configurable are disabled
- Fixes after code review;
1 parent 41065dd commit 5b8eb94

File tree

6 files changed

+42
-36
lines changed

6 files changed

+42
-36
lines changed

app/code/Magento/Catalog/Model/Product/Pricing/Renderer/SalableResolver.php

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66

77
namespace Magento\Catalog\Model\Product\Pricing\Renderer;
88

9+
/**
10+
* Resolver provided to check is product available for sale
11+
*/
912
class SalableResolver implements SalableResolverInterface
1013
{
1114
/**
@@ -14,15 +17,10 @@ class SalableResolver implements SalableResolverInterface
1417
* @param \Magento\Framework\Pricing\SaleableInterface $salableItem
1518
* @return boolean
1619
*/
17-
public function isSalable($salableItem)
20+
public function isSalable(\Magento\Framework\Pricing\SaleableInterface $salableItem)
1821
{
19-
if (!$salableItem ||
20-
$salableItem->getCanShowPrice() === false ||
21-
!$salableItem->isSalable()
22-
) {
23-
return false;
24-
}
25-
26-
return true;
22+
return ($salableItem->getCanShowPrice() === false || !$salableItem->isSalable())
23+
? false
24+
: true;
2725
}
2826
}

app/code/Magento/Catalog/Model/Product/Pricing/Renderer/SalableResolverInterface.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@
77
namespace Magento\Catalog\Model\Product\Pricing\Renderer;
88

99
/**
10-
* Interface SalableResolverInterface
11-
*
10+
* Interface resolver provided to check is product available for sale
1211
*/
1312
interface SalableResolverInterface
1413
{
@@ -18,5 +17,5 @@ interface SalableResolverInterface
1817
* @param \Magento\Framework\Pricing\SaleableInterface $salableItem
1918
* @return boolean
2019
*/
21-
public function isSalable($salableItem);
20+
public function isSalable(\Magento\Framework\Pricing\SaleableInterface $salableItem);
2221
}

app/code/Magento/Catalog/Pricing/Render/FinalPriceBox.php

Lines changed: 28 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@
1111
use Magento\Framework\Pricing\Render\PriceBox as BasePriceBox;
1212
use Magento\Msrp\Pricing\Price\MsrpPrice;
1313
use Magento\Catalog\Model\Product\Pricing\Renderer\SalableResolverInterface;
14+
use Magento\Framework\View\Element\Template\Context;
15+
use Magento\Framework\Pricing\SaleableInterface;
16+
use Magento\Framework\Pricing\Price\PriceInterface;
17+
use Magento\Framework\Pricing\Render\RendererPool;
1418

1519
/**
1620
* Class for final_price rendering
@@ -21,16 +25,38 @@
2125
class FinalPriceBox extends BasePriceBox
2226
{
2327
/**
24-
* @var \Magento\Catalog\Model\Product\Pricing\Renderer\SalableResolverInterface
28+
* @var SalableResolverInterface
2529
*/
2630
private $salableResolver;
2731

32+
/**
33+
* @param Context $context
34+
* @param SaleableInterface $saleableItem
35+
* @param PriceInterface $price
36+
* @param RendererPool $rendererPool
37+
* @param array $data
38+
* @param SalableResolverInterface $salableResolver
39+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
40+
*/
41+
public function __construct(
42+
Context $context,
43+
SaleableInterface $saleableItem,
44+
PriceInterface $price,
45+
RendererPool $rendererPool,
46+
array $data = [],
47+
SalableResolverInterface $salableResolver = null
48+
) {
49+
parent::__construct($context, $saleableItem, $price, $rendererPool);
50+
$this->salableResolver = $salableResolver ?: \Magento\Framework\App\ObjectManager::getInstance()
51+
->get(SalableResolverInterface::class);
52+
}
53+
2854
/**
2955
* @return string
3056
*/
3157
protected function _toHtml()
3258
{
33-
if (!$this->getSalableResolver()->isSalable($this->getSaleableItem())) {
59+
if (!$this->salableResolver->isSalable($this->getSaleableItem())) {
3460
return '';
3561
}
3662

@@ -62,22 +88,6 @@ protected function _toHtml()
6288
return $this->wrapResult($result);
6389
}
6490

65-
/**
66-
* The getter function to get the new SalableResolver dependency
67-
*
68-
* @return \Magento\Catalog\Model\Product\Pricing\Renderer\SalableResolverInterface
69-
*
70-
* @deprecated
71-
*/
72-
private function getSalableResolver()
73-
{
74-
if ($this->salableResolver === null) {
75-
$this->salableResolver = \Magento\Framework\App\ObjectManager::getInstance()->
76-
get(\Magento\Catalog\Model\Product\Pricing\Renderer\SalableResolverInterface::class);
77-
}
78-
return $this->salableResolver;
79-
}
80-
8191
/**
8292
* Wrap with standard required container
8393
*

app/code/Magento/Catalog/Test/Unit/Model/Product/Pricing/Renderer/SalableResolverTest.php

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,7 @@ protected function setUp()
3030

3131
$objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
3232
$this->object = $objectManager->getObject(
33-
\Magento\Catalog\Model\Product\Pricing\Renderer\SalableResolver::class,
34-
[]
33+
\Magento\Catalog\Model\Product\Pricing\Renderer\SalableResolver::class
3534
);
3635
}
3736

@@ -47,19 +46,19 @@ public function testSalableItem()
4746
{
4847
$this->product->expects($this->any())
4948
->method('getCanShowPrice')
50-
->will($this->returnValue(true));
49+
->willReturn(true);
5150

5251
$this->product->expects($this->any())->method('isSalable')->willReturn(true);
5352

5453
$result = $this->object->isSalable($this->product);
55-
$this->assertNotFalse($result);
54+
$this->assertTrue($result);
5655
}
5756

5857
public function testNotSalableItem()
5958
{
6059
$this->product->expects($this->any())
6160
->method('getCanShowPrice')
62-
->will($this->returnValue(true));
61+
->willReturn(true);
6362

6463
$this->product->expects($this->any())->method('isSalable')->willReturn(false);
6564

app/code/Magento/Catalog/etc/di.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
<preference for="Magento\Catalog\Api\Data\CategorySearchResultsInterface" type="Magento\Framework\Api\SearchResults" />
4949
<preference for="Magento\Catalog\Model\Config\Source\ProductPriceOptionsInterface" type="Magento\Catalog\Model\Config\Source\Product\Options\Price"/>
5050
<preference for="Magento\Catalog\Model\Indexer\Product\Flat\Table\BuilderInterface" type="Magento\Catalog\Model\Indexer\Product\Flat\Table\Builder"/>
51+
<preference for="Magento\Catalog\Model\Product\Pricing\Renderer\SalableResolverInterface" type="Magento\Catalog\Model\Product\Pricing\Renderer\SalableResolver"/>
5152
<type name="Magento\Customer\Model\ResourceModel\Visitor">
5253
<plugin name="catalogLog" type="Magento\Catalog\Model\Plugin\Log" />
5354
</type>

app/code/Magento/Catalog/etc/frontend/di.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
*/
77
-->
88
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
9-
<preference for="Magento\Catalog\Model\Product\Pricing\Renderer\SalableResolverInterface" type="Magento\Catalog\Model\Product\Pricing\Renderer\SalableResolver"/>
109
<virtualType name="Magento\Catalog\Model\ResourceModel\Category\Collection\FetchStrategy" type="Magento\Framework\Data\Collection\Db\FetchStrategy\Cache">
1110
<arguments>
1211
<argument name="cacheTags" xsi:type="array">

0 commit comments

Comments
 (0)