79 $this->productMock = $this->createPartialMock(
80 \
Magento\Catalog\Model\Product::class,
81 [
'__wakeup',
'getPriceInfo',
'getSelectionPriceType',
'getSelectionPriceValue']
84 $this->bundleMock = $this->createPartialMock(
85 \
Magento\Catalog\Model\Product::class,
86 [
'__wakeup',
'getPriceType',
'getPriceInfo',
'setFinalPrice',
'getData']
88 $this->calculatorMock = $this->getMockBuilder(\
Magento\Framework\Pricing\Adjustment\CalculatorInterface::class)
89 ->getMockForAbstractClass();
90 $this->eventManagerMock = $this->createPartialMock(\
Magento\Framework\Event\Manager::class, [
'dispatch']);
91 $this->priceInfoMock = $this->createPartialMock(\
Magento\Framework\Pricing\PriceInfo\Base::class, [
'getPrice']);
92 $this->discountCalculatorMock = $this->createMock(\
Magento\Bundle\Pricing\
Price\DiscountCalculator::class);
93 $this->finalPriceMock = $this->createMock(\
Magento\Catalog\Pricing\
Price\FinalPrice::class);
94 $this->regularPriceMock = $this->createMock(\
Magento\Catalog\Pricing\
Price\RegularPrice::class);
95 $this->productMock->expects($this->atLeastOnce())
96 ->method(
'getPriceInfo')
97 ->will($this->returnValue($this->priceInfoMock));
99 $this->priceCurrencyMock = $this->createMock(\
Magento\Framework\Pricing\PriceCurrencyInterface::class);
111 $this->selectionPrice = new \Magento\Bundle\Pricing\Price\BundleSelectionPrice(
114 $this->calculatorMock,
115 $this->priceCurrencyMock,
117 $this->eventManagerMock,
118 $this->discountCalculatorMock,
134 $regularPrice = 100.125;
135 $discountedPrice = 70.453;
136 $actualPrice = $useRegularPrice ? $regularPrice : $discountedPrice;
137 $expectedPrice = $useRegularPrice ? round($regularPrice, 2) : round($discountedPrice, 2);
139 $this->bundleMock->expects($this->once())
140 ->method(
'getPriceType')
142 $this->priceInfoMock->expects($this->once())
144 ->with($this->equalTo($priceCode))
145 ->will($this->returnValue($this->finalPriceMock));
146 $this->finalPriceMock->expects($this->once())
148 ->will($this->returnValue($actualPrice));
150 if (!$useRegularPrice) {
151 $this->discountCalculatorMock->expects($this->once())
152 ->method(
'calculateDiscount')
154 $this->equalTo($this->bundleMock),
155 $this->equalTo($actualPrice)
157 ->will($this->returnValue($discountedPrice));
160 $this->priceCurrencyMock->expects($this->once())
163 ->will($this->returnValue($expectedPrice));
165 $this->assertEquals($expectedPrice, $this->selectionPrice->getValue());
179 $regularPrice = 100.125;
180 $discountedPrice = 70.453;
181 $actualPrice = $useRegularPrice ? $regularPrice : $discountedPrice;
182 $expectedPrice = $useRegularPrice ? round($regularPrice, 2) : round($discountedPrice, 2);
184 $this->bundleMock->expects($this->once())
185 ->method(
'getPriceType')
187 $this->bundleMock->expects($this->atLeastOnce())
188 ->method(
'getPriceInfo')
189 ->willReturn($this->priceInfoMock);
190 $this->priceInfoMock->expects($this->once())
193 ->willReturn($this->regularPriceMock);
194 $this->regularPriceMock->expects($this->once())
196 ->willReturn($actualPrice);
197 $this->bundleMock->expects($this->once())
198 ->method(
'setFinalPrice')
200 $this->eventManagerMock->expects($this->once())
201 ->method(
'dispatch');
202 $this->bundleMock->expects($this->exactly(2))
207 [
'final_price',
null, 100],
208 [
'price',
null, 100],
211 $this->productMock->expects($this->once())
212 ->method(
'getSelectionPriceType')
214 $this->productMock->expects($this->any())
215 ->method(
'getSelectionPriceValue')
216 ->willReturn($actualPrice);
218 if (!$useRegularPrice) {
219 $this->discountCalculatorMock->expects($this->once())
220 ->method(
'calculateDiscount')
221 ->with($this->bundleMock, $actualPrice)
222 ->willReturn($discountedPrice);
225 $this->priceCurrencyMock->expects($this->once())
228 ->willReturn($expectedPrice);
230 $this->assertEquals($expectedPrice, $this->selectionPrice->getValue());
242 $regularPrice = 100.125;
243 $discountedPrice = 70.453;
244 $convertedValue = 100.247;
245 $actualPrice = $useRegularPrice ? $convertedValue : $discountedPrice;
246 $expectedPrice = $useRegularPrice ? round($convertedValue, 2) : round($discountedPrice, 2);
248 $this->bundleMock->expects($this->once())
249 ->method(
'getPriceType')
251 $this->productMock->expects($this->once())
252 ->method(
'getSelectionPriceType')
253 ->will($this->returnValue(
false));
254 $this->productMock->expects($this->any())
255 ->method(
'getSelectionPriceValue')
256 ->will($this->returnValue($regularPrice));
258 $this->priceCurrencyMock->expects($this->once())
260 ->with($regularPrice)
261 ->will($this->returnValue($convertedValue));
263 if (!$useRegularPrice) {
264 $this->discountCalculatorMock->expects($this->once())
265 ->method(
'calculateDiscount')
267 $this->equalTo($this->bundleMock),
268 $this->equalTo($convertedValue)
270 ->will($this->returnValue($discountedPrice));
273 $this->priceCurrencyMock->expects($this->once())
276 ->will($this->returnValue($expectedPrice));
278 $this->assertEquals($expectedPrice, $this->selectionPrice->getValue());
291 $selectionPrice = new \Magento\Bundle\Pricing\Price\BundleSelectionPrice(
294 $this->calculatorMock,
295 $this->priceCurrencyMock,
297 $this->eventManagerMock,
298 $this->discountCalculatorMock,
303 $regularPrice = 100.125;
304 $discountedPrice = 70.453;
305 $convertedValue = 100.247;
306 $actualPrice = $useRegularPrice ? $convertedValue : $discountedPrice;
307 $expectedPrice = $useRegularPrice ? round($convertedValue, 2) : round($discountedPrice, 2);
309 $this->bundleMock->expects($this->once())
310 ->method(
'getPriceType')
312 $this->productMock->expects($this->once())
313 ->method(
'getSelectionPriceType')
314 ->will($this->returnValue(
false));
315 $this->productMock->expects($this->any())
316 ->method(
'getSelectionPriceValue')
317 ->will($this->returnValue($regularPrice));
319 $this->priceCurrencyMock->expects($this->once())
321 ->with($regularPrice)
322 ->will($this->returnValue($convertedValue));
324 if (!$useRegularPrice) {
325 $this->discountCalculatorMock->expects($this->once())
326 ->method(
'calculateDiscount')
328 $this->equalTo($this->bundleMock),
329 $this->equalTo($convertedValue)
331 ->will($this->returnValue($discountedPrice));
334 $this->priceCurrencyMock->expects($this->once())
337 ->will($this->returnValue($expectedPrice));
348 'useRegularPrice' => [
351 'notUseRegularPrice' => [
359 $this->bundleMock->expects($this->any())
360 ->method(
'getPriceType')
362 $product = $this->selectionPrice->getProduct();
363 $this->assertEquals($this->bundleMock,
$product);
368 $this->bundleMock->expects($this->any())
369 ->method(
'getPriceType')
371 $product = $this->selectionPrice->getProduct();
372 $this->assertEquals($this->productMock,
$product);
382 $this->priceInfoMock->expects($this->once())
385 ->willReturn($this->finalPriceMock);
387 $this->finalPriceMock->expects($this->once())
391 $this->discountCalculatorMock->expects($this->once())
392 ->method(
'calculateDiscount')
393 ->with($this->bundleMock,
$price)
396 $this->priceCurrencyMock->expects($this->once())
401 $this->bundleMock->expects($this->any())
402 ->method(
'getPriceType')
405 $this->calculatorMock->expects($this->once())
406 ->method(
'getAmount')
407 ->with(
$price, $this->productMock,
null)
410 $this->assertEquals(
$amount, $this->selectionPrice->getAmount());
testGetValueTypeDynamic($useRegularPrice)
testGetValueTypeFixedWithSelectionPriceType(bool $useRegularPrice)
testGetProductFixedBundle()
testGetValueTypeFixedWithoutSelectionPriceType($useRegularPrice)
useRegularPriceDataProvider()
setupSelectionPrice($useRegularPrice=false)
testGetProductDynamicBundle()
testFixedPriceWithMultipleQty($useRegularPrice)