Skip to content

Commit d0564c1

Browse files
committed
Merge remote-tracking branch 'origin/imported-magento-magento2-30807' into 2.4-develop-pr111
2 parents ec12bd8 + ba1ce66 commit d0564c1

File tree

4 files changed

+102
-3
lines changed

4 files changed

+102
-3
lines changed

app/code/Magento/Catalog/Block/Product/View/Options/AbstractOptions.php

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@
1212

1313
namespace Magento\Catalog\Block\Product\View\Options;
1414

15-
use Magento\Catalog\Pricing\Price\BasePrice;
1615
use Magento\Catalog\Pricing\Price\CalculateCustomOptionCatalogRule;
1716
use Magento\Catalog\Pricing\Price\CustomOptionPriceInterface;
1817
use Magento\Framework\App\ObjectManager;
18+
use Magento\Framework\Pricing\Adjustment\CalculatorInterface;
19+
use Magento\Framework\Pricing\PriceCurrencyInterface;
1920

2021
/**
2122
* Product options section abstract block.
@@ -55,24 +56,42 @@ abstract class AbstractOptions extends \Magento\Framework\View\Element\Template
5556
*/
5657
private $calculateCustomOptionCatalogRule;
5758

59+
/**
60+
* @var CalculatorInterface
61+
*/
62+
private $calculator;
63+
64+
/**
65+
* @var PriceCurrencyInterface
66+
*/
67+
private $priceCurrency;
68+
5869
/**
5970
* @param \Magento\Framework\View\Element\Template\Context $context
6071
* @param \Magento\Framework\Pricing\Helper\Data $pricingHelper
6172
* @param \Magento\Catalog\Helper\Data $catalogData
6273
* @param array $data
6374
* @param CalculateCustomOptionCatalogRule|null $calculateCustomOptionCatalogRule
75+
* @param CalculatorInterface|null $calculator
76+
* @param PriceCurrencyInterface|null $priceCurrency
6477
*/
6578
public function __construct(
6679
\Magento\Framework\View\Element\Template\Context $context,
6780
\Magento\Framework\Pricing\Helper\Data $pricingHelper,
6881
\Magento\Catalog\Helper\Data $catalogData,
6982
array $data = [],
70-
CalculateCustomOptionCatalogRule $calculateCustomOptionCatalogRule = null
83+
CalculateCustomOptionCatalogRule $calculateCustomOptionCatalogRule = null,
84+
CalculatorInterface $calculator = null,
85+
PriceCurrencyInterface $priceCurrency = null
7186
) {
7287
$this->pricingHelper = $pricingHelper;
7388
$this->_catalogHelper = $catalogData;
7489
$this->calculateCustomOptionCatalogRule = $calculateCustomOptionCatalogRule
7590
?? ObjectManager::getInstance()->get(CalculateCustomOptionCatalogRule::class);
91+
$this->calculator = $calculator
92+
?? ObjectManager::getInstance()->get(CalculatorInterface::class);
93+
$this->priceCurrency = $priceCurrency
94+
?? ObjectManager::getInstance()->get(PriceCurrencyInterface::class);
7695
parent::__construct($context, $data);
7796
}
7897

@@ -188,7 +207,13 @@ protected function _formatPrice($value, $flag = true)
188207
}
189208

190209
$context = [CustomOptionPriceInterface::CONFIGURATION_OPTION_FLAG => true];
191-
$optionAmount = $customOptionPrice->getCustomAmount($value['pricing_value'], null, $context);
210+
$optionAmount = $isPercent
211+
? $this->calculator->getAmount(
212+
$this->priceCurrency->roundPrice($value['pricing_value']),
213+
$this->getProduct(),
214+
null,
215+
$context
216+
) : $customOptionPrice->getCustomAmount($value['pricing_value'], null, $context);
192217
$priceStr .= $this->getLayout()->getBlock('product.price.render.default')->renderAmount(
193218
$optionAmount,
194219
$customOptionPrice,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
9+
<actionGroups xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
10+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/actionGroupSchema.xsd">
11+
<actionGroup name="AssertStorefrontCustomOptionCheckboxByPriceActionGroup">
12+
<annotations>
13+
<description>Validates that the provided price for Custom Option Checkbox is present on the Storefront Product page.</description>
14+
</annotations>
15+
<arguments>
16+
<argument name="optionTitle" type="string" defaultValue="{{ProductOptionCheckbox.title}}"/>
17+
<argument name="price" type="string" defaultValue="10"/>
18+
</arguments>
19+
20+
<seeElement selector="{{StorefrontProductInfoMainSection.productAttributeOptionsCheckbox(optionTitle, price)}}" stepKey="checkPriceProductOptionCheckbox"/>
21+
</actionGroup>
22+
</actionGroups>

app/code/Magento/Catalog/Test/Mftf/Data/ProductData.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -577,6 +577,10 @@
577577
<var key="sku" entityType="product" entityKey="sku" />
578578
<requiredEntity type="product_option">ProductOptionDropDownWithLongValuesTitle</requiredEntity>
579579
</entity>
580+
<entity name="productWithCheckbox" type="product">
581+
<var key="sku" entityType="product" entityKey="sku" />
582+
<requiredEntity type="product_option">ProductOptionCheckbox</requiredEntity>
583+
</entity>
580584
<entity name="productWithDropdownOption" type="product">
581585
<var key="sku" entityType="product" entityKey="sku" />
582586
<requiredEntity type="product_option">ProductOptionValueDropdown</requiredEntity>
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<tests xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9+
xsi:noNamespaceSchemaLocation="urn:magento:mftf:Test/etc/testSchema.xsd">
10+
<test name="StorefrontCheckCustomOptionPriceDifferentCurrencyTest">
11+
<annotations>
12+
<features value="Catalog"/>
13+
<stories value="Custom options"/>
14+
<title value="Check custom option price with different currency"/>
15+
<description value="Check custom option price with different currency on the product page"/>
16+
<severity value="CRITICAL"/>
17+
<testCaseId value="MC-38926"/>
18+
<useCaseId value="MC-30626"/>
19+
<group value="catalog"/>
20+
</annotations>
21+
<before>
22+
<magentoCLI command="config:set {{SetAllowedCurrenciesConfigForUSD.path}} {{SetAllowedCurrenciesConfigForUSD.value}},{{SetAllowedCurrenciesConfigForEUR.value}}" stepKey="setCurrencyAllow"/>
23+
<createData entity="_defaultCategory" stepKey="createCategory"/>
24+
<createData entity="_defaultProduct" stepKey="createProduct">
25+
<requiredEntity createDataKey="createCategory"/>
26+
<field key="price">10</field>
27+
</createData>
28+
<updateData createDataKey="createProduct" entity="productWithCheckbox" stepKey="updateProductWithOptions"/>
29+
</before>
30+
<after>
31+
<magentoCLI command="config:set {{SetAllowedCurrenciesConfigForUSD.path}} {{SetAllowedCurrenciesConfigForUSD.value}}" stepKey="setCurrencyAllow"/>
32+
<deleteData createDataKey="createProduct" stepKey="deleteProduct"/>
33+
<deleteData createDataKey="createCategory" stepKey="deleteCategory"/>
34+
</after>
35+
<actionGroup ref="StorefrontOpenProductEntityPageActionGroup" stepKey="openProductPageOnStorefront">
36+
<argument name="product" value="$createProduct$"/>
37+
</actionGroup>
38+
<actionGroup ref="AssertStorefrontCustomOptionCheckboxByPriceActionGroup" stepKey="checkPriceProductOptionUSD">
39+
<argument name="price" value="12.3"/>
40+
</actionGroup>
41+
<actionGroup ref="StorefrontSwitchCurrencyActionGroup" stepKey="switchEURCurrency">
42+
<argument name="currency" value="EUR"/>
43+
</actionGroup>
44+
<actionGroup ref="AssertStorefrontCustomOptionCheckboxByPriceActionGroup" stepKey="checkPriceProductOptionEUR">
45+
<argument name="price" value="8.7"/>
46+
</actionGroup>
47+
</test>
48+
</tests>

0 commit comments

Comments
 (0)