Skip to content

Commit 5532227

Browse files
committed
MAGETWO-97315: [B2B] Configurable Product Price is absent on Storefront
1 parent ba7fc81 commit 5532227

File tree

2 files changed

+91
-12
lines changed

2 files changed

+91
-12
lines changed

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

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,24 @@
55
*/
66
namespace Magento\ConfigurableProduct\Plugin\Catalog\Model\Product\Pricing\Renderer;
77

8-
use Magento\ConfigurableProduct\Pricing\Price\LowestPriceOptionsProviderInterface;
8+
use Magento\ConfigurableProduct\Model\Product\Type\Configurable as TypeConfigurable;
99

1010
/**
1111
* A plugin for a salable resolver.
1212
*/
1313
class SalableResolver
1414
{
1515
/**
16-
* @var LowestPriceOptionsProviderInterface
16+
* @var TypeConfigurable
1717
*/
18-
private $lowestPriceOptionsProvider;
18+
private $typeConfigurable;
1919

2020
/**
21-
* @param LowestPriceOptionsProviderInterface $lowestPriceOptionsProvider
21+
* @param TypeConfigurable $typeConfigurable
2222
*/
23-
public function __construct(
24-
LowestPriceOptionsProviderInterface $lowestPriceOptionsProvider
25-
) {
26-
$this->lowestPriceOptionsProvider = $lowestPriceOptionsProvider;
23+
public function __construct(TypeConfigurable $typeConfigurable)
24+
{
25+
$this->typeConfigurable = $typeConfigurable;
2726
}
2827

2928
/**
@@ -32,18 +31,16 @@ public function __construct(
3231
* @param \Magento\Catalog\Model\Product\Pricing\Renderer\SalableResolver $subject
3332
* @param bool $result
3433
* @param \Magento\Framework\Pricing\SaleableInterface $salableItem
35-
*
3634
* @return bool
37-
*
3835
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
3936
*/
4037
public function afterIsSalable(
4138
\Magento\Catalog\Model\Product\Pricing\Renderer\SalableResolver $subject,
4239
$result,
4340
\Magento\Framework\Pricing\SaleableInterface $salableItem
4441
) {
45-
if ($salableItem->getTypeId() == 'configurable' && $result) {
46-
$result = $salableItem->isSalable();
42+
if ($salableItem->getTypeId() === TypeConfigurable::TYPE_CODE && $result) {
43+
$result = $this->typeConfigurable->isSalable($salableItem);
4744
}
4845

4946
return $result;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
namespace Magento\ConfigurableProduct\Test\Unit\Plugin\Catalog\Model\Product\Pricing\Renderer;
7+
8+
use Magento\Catalog\Model\Product\Pricing\Renderer\SalableResolver;
9+
use Magento\ConfigurableProduct\Model\Product\Type\Configurable as TypeConfigurable;
10+
use Magento\ConfigurableProduct\Plugin\Catalog\Model\Product\Pricing\Renderer\SalableResolver as SalableResolverPlugin;
11+
use Magento\Framework\Pricing\SaleableInterface;
12+
use PHPUnit\Framework\MockObject\MockObject;
13+
use PHPUnit\Framework\TestCase;
14+
15+
class SalableResolverTest extends TestCase
16+
{
17+
/**
18+
* @var TypeConfigurable|MockObject
19+
*/
20+
private $typeConfigurable;
21+
22+
/**
23+
* @var SalableResolverPlugin
24+
*/
25+
private $salableResolver;
26+
27+
protected function setUp()
28+
{
29+
$this->typeConfigurable = $this->createMock(TypeConfigurable::class);
30+
$this->salableResolver = new SalableResolverPlugin($this->typeConfigurable);
31+
}
32+
33+
/**
34+
* @param SaleableInterface|MockObject $salableItem
35+
* @param bool $isSalable
36+
* @param bool $typeIsSalable
37+
* @param bool $expectedResult
38+
* @return void
39+
* @dataProvider afterIsSalableDataProvider
40+
*/
41+
public function testAfterIsSalable($salableItem, bool $isSalable, bool $typeIsSalable, bool $expectedResult): void
42+
{
43+
$salableResolver = $this->createMock(SalableResolver::class);
44+
45+
$this->typeConfigurable->method('isSalable')
46+
->willReturn($typeIsSalable);
47+
48+
$result = $this->salableResolver->afterIsSalable($salableResolver, $isSalable, $salableItem);
49+
$this->assertEquals($expectedResult, $result);
50+
}
51+
52+
/**
53+
* @return array
54+
*/
55+
public function afterIsSalableDataProvider(): array
56+
{
57+
$simpleSalableItem = $this->createMock(SaleableInterface::class);
58+
$simpleSalableItem->expects($this->once())
59+
->method('getTypeId')
60+
->willReturn('simple');
61+
62+
$configurableSalableItem = $this->createMock(SaleableInterface::class);
63+
$configurableSalableItem->expects($this->once())
64+
->method('getTypeId')
65+
->willReturn('configurable');
66+
67+
return [
68+
[
69+
$simpleSalableItem,
70+
true,
71+
false,
72+
true,
73+
],
74+
[
75+
$configurableSalableItem,
76+
true,
77+
false,
78+
false,
79+
],
80+
];
81+
}
82+
}

0 commit comments

Comments
 (0)