27 $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
29 $this->validator = $this->getMockBuilder(
30 \
Magento\SalesRule\Model\Validator::class
31 )->disableOriginalConstructor()->setMethods(
32 [
'getItemPrice',
'getItemBasePrice',
'getItemOriginalPrice',
'getItemBaseOriginalPrice',
'__wakeup']
35 $this->discountDataFactory = $this->getMockBuilder(
36 \
Magento\SalesRule\Model\Rule\Action\Discount\DataFactory::class
37 )->disableOriginalConstructor()->setMethods(
41 $this->model =
$helper->getObject(
42 \
Magento\SalesRule\Model\Rule\Action\Discount\ToPercent::class,
43 [
'discountDataFactory' => $this->discountDataFactory,
'validator' => $this->validator]
62 $expectedRuleDiscountQty,
65 $discountData = $this->getMockBuilder(
66 \
Magento\SalesRule\Model\Rule\Action\Discount\Data::class
67 )->disableOriginalConstructor()->setMethods(
68 [
'setAmount',
'setBaseAmount',
'setOriginalAmount',
'setBaseOriginalAmount']
71 $this->discountDataFactory->expects($this->once())->method(
'create')->will($this->returnValue($discountData));
73 $rule = $this->getMockBuilder(
74 \
Magento\SalesRule\Model\Rule::class
75 )->disableOriginalConstructor()->setMethods(
76 [
'getDiscountAmount',
'getDiscountQty',
'__wakeup']
79 $item = $this->getMockBuilder(
80 \
Magento\Quote\Model\Quote\Item\AbstractItem::class
81 )->disableOriginalConstructor()->setMethods(
84 'getBaseDiscountAmount',
94 $this->validator->expects(
101 $this->returnValue($validItemData[
'price'])
103 $this->validator->expects(
110 $this->returnValue($validItemData[
'basePrice'])
112 $this->validator->expects(
115 'getItemOriginalPrice' 119 $this->returnValue($validItemData[
'originalPrice'])
121 $this->validator->expects(
124 'getItemBaseOriginalPrice' 128 $this->returnValue($validItemData[
'baseOriginalPrice'])
136 $this->returnValue(
$ruleData[
'discountAmount'])
143 $this->returnValue(
$ruleData[
'discountQty'])
151 $this->returnValue($itemData[
'discountAmount'])
156 'getBaseDiscountAmount' 158 $this->returnValue($itemData[
'baseDiscountAmount'])
166 $this->returnValue($itemData[
'discountPercent'])
168 $item->expects($this->atLeastOnce())->method(
'setDiscountPercent')->with($expectedRuleDiscountQty);
171 $discountData->expects($this->once())->method(
'setAmount')->with($expectedDiscountData[
'amount']);
172 $discountData->expects($this->once())->method(
'setBaseAmount')->with($expectedDiscountData[
'baseAmount']);
173 $discountData->expects(
178 $expectedDiscountData[
'originalAmount']
180 $discountData->expects(
183 'setBaseOriginalAmount' 185 $expectedDiscountData[
'baseOriginalAmount']
188 $this->assertEquals($discountData, $this->model->calculate(
$rule,
$item, $qty));
199 'ruleData' => [
'discountAmount' => 30,
'discountQty' => 5],
200 'itemData' => [
'discountAmount' => 10,
'baseDiscountAmount' => 50,
'discountPercent' => 55],
204 'originalPrice' => 60,
205 'baseOriginalPrice' => 55,
207 'expectedRuleDiscountQty' => 100,
208 'expectedDiscountData' => [
210 'baseAmount' => 59.5,
211 'originalAmount' => 119,
212 'baseOriginalAmount' => 80.5,
testCalculate( $qty, $ruleData, $itemData, $validItemData, $expectedRuleDiscountQty, $expectedDiscountData)