Skip to content

Commit d002aa8

Browse files
Merge pull request #1478 from magento-qwerty/PR-2
Fixed issues: - MAGETWO-71982: bundle_values required for import - for 2.2 - MAGETWO-70377: [GitHub] Tier price saving percentage wrong when VAT is included in price #8833
2 parents c52240b + 1a6efc9 commit d002aa8

File tree

5 files changed

+60
-23
lines changed

5 files changed

+60
-23
lines changed

app/code/Magento/Bundle/Test/Unit/Pricing/Price/TierPriceTest.php

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -180,19 +180,28 @@ public function providerForGetterTierPriceList()
180180
/**
181181
* @dataProvider providerForTestGetSavePercent
182182
*/
183-
public function testGetSavePercent($baseAmount, $savePercent)
183+
public function testGetSavePercent($baseAmount, $tierPrice, $savePercent)
184184
{
185-
$basePrice = 10.;
185+
/** @var \Magento\Framework\Pricing\Amount\AmountInterface|\PHPUnit_Framework_MockObject_MockObject $amount */
186186
$amount = $this->getMockForAbstractClass(\Magento\Framework\Pricing\Amount\AmountInterface::class);
187-
$amount->expects($this->once())->method('getBaseAmount')->willReturn($baseAmount);
187+
$amount->expects($this->any())
188+
->method('getValue')
189+
->will($this->returnValue($tierPrice));
190+
191+
$priceAmount = $this->getMockForAbstractClass(\Magento\Framework\Pricing\Amount\AmountInterface::class);
192+
$priceAmount->expects($this->any())
193+
->method('getValue')
194+
->will($this->returnValue($baseAmount));
195+
188196
$price = $this->createMock(\Magento\Framework\Pricing\Price\PriceInterface::class);
189197
$price->expects($this->any())
190-
->method('getValue')
191-
->will($this->returnValue($basePrice));
198+
->method('getAmount')
199+
->will($this->returnValue($priceAmount));
192200

193201
$this->priceInfo->expects($this->any())
194202
->method('getPrice')
195203
->will($this->returnValue($price));
204+
196205
$this->assertEquals($savePercent, $this->model->getSavePercent($amount));
197206
}
198207

@@ -202,8 +211,8 @@ public function testGetSavePercent($baseAmount, $savePercent)
202211
public function providerForTestGetSavePercent()
203212
{
204213
return [
205-
'no fraction' => [9.0000, 10],
206-
'lower half' => [9.1234, 9],
214+
'no fraction' => [9.0000, 8.1, 10],
215+
'lower half' => [9.1234, 8.3, 9],
207216
];
208217
}
209218
}

app/code/Magento/BundleImportExport/Model/Import/Product/Type/Bundle.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,10 @@ public function __construct(
168168
*/
169169
protected function parseSelections($rowData, $entityId)
170170
{
171+
if (empty($rowData['bundle_values'])) {
172+
return [];
173+
}
174+
171175
$rowData['bundle_values'] = str_replace(
172176
self::BEFORE_OPTION_VALUE_DELIMITER,
173177
$this->_entityModel->getMultipleValueSeparator(),

app/code/Magento/BundleImportExport/Test/Unit/Model/Import/Product/Type/BundleTest.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,11 @@ public function saveDataProvider()
294294
'bunch' => ['bundle_values' => 'value1', 'sku' => 'sku', 'name' => 'name'],
295295
'allowImport' => false
296296
],
297+
'Import without bundle values' => [
298+
'skus' => ['newSku' => ['sku' => ['sku' => 'sku', 'entity_id' => 3, 'type_id' => 'bundle']]],
299+
'bunch' => ['sku' => 'sku', 'name' => 'name'],
300+
'allowImport' => true,
301+
],
297302
[
298303
'skus' => ['newSku' => [
299304
'sku' => ['sku' => 'sku', 'entity_id' => 3, 'type_id' => 'bundle'],

app/code/Magento/Catalog/Pricing/Price/TierPrice.php

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -215,14 +215,21 @@ protected function getBasePrice()
215215
}
216216

217217
/**
218+
* Calculates savings percentage according to the given tier price amount
219+
* and related product price amount.
220+
*
218221
* @param AmountInterface $amount
222+
*
219223
* @return float
220224
*/
221225
public function getSavePercent(AmountInterface $amount)
222226
{
227+
$productPriceAmount = $this->priceInfo->getPrice(
228+
FinalPrice::PRICE_CODE
229+
)->getAmount();
230+
223231
return round(
224-
100 - ((100 / $this->priceInfo->getPrice(FinalPrice::PRICE_CODE)->getValue())
225-
* $amount->getBaseAmount())
232+
100 - ((100 / $productPriceAmount->getValue()) * $amount->getValue())
226233
);
227234
}
228235

app/code/Magento/Catalog/Test/Unit/Pricing/Price/TierPriceTest.php

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010

1111
use Magento\Catalog\Pricing\Price\TierPrice;
1212
use Magento\Catalog\Pricing\Price\FinalPrice;
13+
use Magento\Framework\Pricing\Amount\AmountInterface;
14+
use Magento\Framework\Pricing\Price\PriceInterface;
1315
use Magento\Customer\Model\Group;
1416
use Magento\Customer\Model\GroupManagement;
1517

@@ -250,7 +252,7 @@ public function testGetterTierPriceList($tierPrices, $basePrice, $expectedResult
250252
{
251253
$this->product->setData(TierPrice::PRICE_CODE, $tierPrices);
252254

253-
$price = $this->createMock(\Magento\Framework\Pricing\Price\PriceInterface::class);
255+
$price = $this->createMock(PriceInterface::class);
254256
$price->expects($this->any())->method('getValue')->will($this->returnValue($basePrice));
255257

256258
$this->calculator->expects($this->atLeastOnce())->method('getAmount')
@@ -341,27 +343,37 @@ public function providerForGetterTierPriceList()
341343
}
342344

343345
/**
344-
* @covers \Magento\Catalog\Pricing\Price\TierPrice::__construct
345-
* @covers \Magento\Catalog\Pricing\Price\TierPrice::getSavePercent
346-
* @covers \Magento\Catalog\Pricing\Price\TierPrice::getBasePrice
346+
* @param float $basePrice
347+
* @param float $tierPrice
348+
* @param float $savedPercent
349+
*
347350
* @dataProvider dataProviderGetSavePercent
348351
*/
349352
public function testGetSavePercent($basePrice, $tierPrice, $savedPercent)
350353
{
351-
$price = $this->createMock(\Magento\Framework\Pricing\Price\PriceInterface::class);
354+
/** @var AmountInterface|\PHPUnit_Framework_MockObject_MockObject $amount */
355+
$amount = $this->getMockForAbstractClass(AmountInterface::class);
352356

353-
$this->priceInfo->expects(static::atLeastOnce())
354-
->method('getPrice')
355-
->with(FinalPrice::PRICE_CODE)
356-
->willReturn($price);
357-
$price->expects(static::atLeastOnce())
357+
$amount->expects($this->any())
358+
->method('getValue')
359+
->willReturn($tierPrice);
360+
361+
$basePriceAmount = $this->getMockForAbstractClass(AmountInterface::class);
362+
363+
$basePriceAmount->expects($this->any())
358364
->method('getValue')
359365
->willReturn($basePrice);
360366

361-
$amount = $this->getMockForAbstractClass(\Magento\Framework\Pricing\Amount\AmountInterface::class);
362-
$amount->expects($this->atLeastOnce())
363-
->method('getBaseAmount')
364-
->will($this->returnValue($tierPrice));
367+
$price = $this->getMockForAbstractClass(PriceInterface::class);
368+
369+
$price->expects($this->any())
370+
->method('getAmount')
371+
->willReturn($basePriceAmount);
372+
373+
$this->priceInfo->expects($this->any())
374+
->method('getPrice')
375+
->with(FinalPrice::PRICE_CODE)
376+
->willReturn($price);
365377

366378
$this->assertEquals($savedPercent, $this->model->getSavePercent($amount));
367379
}

0 commit comments

Comments
 (0)