Skip to content

Commit d6481e1

Browse files
ENGCOM-5926: Added description discount for each summary(cart, order) #24595
- Merge Pull Request #24595 from MaxSouza/magento2:fix-3594 - Merged commits: 1. 23382ed 2. 217ab79 3. 83a84a3 4. 7ec7d65 5. 42edfaf 6. fb5c663 7. 7eed116 8. afd489b 9. c1d4190 10. 57247f8
2 parents 502abab + 57247f8 commit d6481e1

File tree

2 files changed

+106
-44
lines changed

2 files changed

+106
-44
lines changed

app/code/Magento/SalesRule/Model/RulesApplier.php

Lines changed: 28 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,15 @@
66
namespace Magento\SalesRule\Model;
77

88
use Magento\Quote\Model\Quote\Address;
9+
use Magento\Quote\Model\Quote\Item\AbstractItem;
910
use Magento\SalesRule\Model\Quote\ChildrenValidationLocator;
1011
use Magento\Framework\App\ObjectManager;
12+
use Magento\SalesRule\Model\ResourceModel\Rule\Collection;
1113
use Magento\SalesRule\Model\Rule\Action\Discount\CalculatorFactory;
1214
use Magento\SalesRule\Model\Rule\Action\Discount\DataFactory;
1315

1416
/**
15-
* Rules Applier Model
17+
* Class RulesApplier
1618
*
1719
* @package Magento\SalesRule\Model\Validator
1820
*/
@@ -70,8 +72,8 @@ public function __construct(
7072
/**
7173
* Apply rules to current order item
7274
*
73-
* @param \Magento\Quote\Model\Quote\Item\AbstractItem $item
74-
* @param \Magento\SalesRule\Model\ResourceModel\Rule\Collection $rules
75+
* @param AbstractItem $item
76+
* @param Collection $rules
7577
* @param bool $skipValidation
7678
* @param mixed $couponCode
7779
* @return array
@@ -81,15 +83,15 @@ public function applyRules($item, $rules, $skipValidation, $couponCode)
8183
{
8284
$address = $item->getAddress();
8385
$appliedRuleIds = [];
84-
/* @var $rule \Magento\SalesRule\Model\Rule */
86+
/* @var $rule Rule */
8587
foreach ($rules as $rule) {
8688
if (!$this->validatorUtility->canProcessRule($rule, $address)) {
8789
continue;
8890
}
8991

9092
if (!$skipValidation && !$rule->getActions()->validate($item)) {
9193
if (!$this->childrenValidationLocator->isChildrenValidationRequired($item)) {
92-
continue;
94+
continue;
9395
}
9496
$childItems = $item->getChildren();
9597
$isContinue = true;
@@ -120,7 +122,7 @@ public function applyRules($item, $rules, $skipValidation, $couponCode)
120122
* Add rule discount description label to address object
121123
*
122124
* @param Address $address
123-
* @param \Magento\SalesRule\Model\Rule $rule
125+
* @param Rule $rule
124126
* @return $this
125127
*/
126128
public function addDiscountDescription($address, $rule)
@@ -133,6 +135,10 @@ public function addDiscountDescription($address, $rule)
133135
} else {
134136
if (strlen($address->getCouponCode())) {
135137
$label = $address->getCouponCode();
138+
139+
if ($rule->getDescription()) {
140+
$label = $rule->getDescription();
141+
}
136142
}
137143
}
138144

@@ -146,10 +152,10 @@ public function addDiscountDescription($address, $rule)
146152
}
147153

148154
/**
149-
* Apply rule
155+
* Apply Rule
150156
*
151-
* @param \Magento\Quote\Model\Quote\Item\AbstractItem $item
152-
* @param \Magento\SalesRule\Model\Rule $rule
157+
* @param AbstractItem $item
158+
* @param Rule $rule
153159
* @param \Magento\Quote\Model\Quote\Address $address
154160
* @param mixed $couponCode
155161
* @return $this
@@ -166,10 +172,10 @@ protected function applyRule($item, $rule, $address, $couponCode)
166172
}
167173

168174
/**
169-
* Get Discount data
175+
* Get discount Data
170176
*
171-
* @param \Magento\Quote\Model\Quote\Item\AbstractItem $item
172-
* @param \Magento\SalesRule\Model\Rule $rule
177+
* @param AbstractItem $item
178+
* @param Rule $rule
173179
* @return \Magento\SalesRule\Model\Rule\Action\Discount\Data
174180
*/
175181
protected function getDiscountData($item, $rule)
@@ -222,7 +228,7 @@ private function setDiscountBreakdown($discountData, $item, $rule)
222228
* Set Discount data
223229
*
224230
* @param \Magento\SalesRule\Model\Rule\Action\Discount\Data $discountData
225-
* @param \Magento\Quote\Model\Quote\Item\AbstractItem $item
231+
* @param AbstractItem $item
226232
* @return $this
227233
*/
228234
protected function setDiscountData($discountData, $item)
@@ -239,7 +245,7 @@ protected function setDiscountData($discountData, $item)
239245
* Set coupon code to address if $rule contains validated coupon
240246
*
241247
* @param Address $address
242-
* @param \Magento\SalesRule\Model\Rule $rule
248+
* @param Rule $rule
243249
* @param mixed $couponCode
244250
* @return $this
245251
*/
@@ -249,7 +255,7 @@ public function maintainAddressCouponCode($address, $rule, $couponCode)
249255
Rule is a part of rules collection, which includes only rules with 'No Coupon' type or with validated coupon.
250256
As a result, if rule uses coupon code(s) ('Specific' or 'Auto' Coupon Type), it always contains validated coupon
251257
*/
252-
if ($rule->getCouponType() != \Magento\SalesRule\Model\Rule::COUPON_TYPE_NO_COUPON) {
258+
if ($rule->getCouponType() != Rule::COUPON_TYPE_NO_COUPON) {
253259
$address->setCouponCode($couponCode);
254260
}
255261

@@ -260,15 +266,15 @@ public function maintainAddressCouponCode($address, $rule, $couponCode)
260266
* Fire event to allow overwriting of discount amounts
261267
*
262268
* @param \Magento\SalesRule\Model\Rule\Action\Discount\Data $discountData
263-
* @param \Magento\Quote\Model\Quote\Item\AbstractItem $item
264-
* @param \Magento\SalesRule\Model\Rule $rule
269+
* @param AbstractItem $item
270+
* @param Rule $rule
265271
* @param float $qty
266272
* @return $this
267273
*/
268274
protected function eventFix(
269275
\Magento\SalesRule\Model\Rule\Action\Discount\Data $discountData,
270-
\Magento\Quote\Model\Quote\Item\AbstractItem $item,
271-
\Magento\SalesRule\Model\Rule $rule,
276+
AbstractItem $item,
277+
Rule $rule,
272278
$qty
273279
) {
274280
$quote = $item->getQuote();
@@ -290,13 +296,13 @@ protected function eventFix(
290296
}
291297

292298
/**
293-
* Set Applied Rule ids
299+
* Set Applied Rule Ids
294300
*
295-
* @param \Magento\Quote\Model\Quote\Item\AbstractItem $item
301+
* @param AbstractItem $item
296302
* @param int[] $appliedRuleIds
297303
* @return $this
298304
*/
299-
public function setAppliedRuleIds(\Magento\Quote\Model\Quote\Item\AbstractItem $item, array $appliedRuleIds)
305+
public function setAppliedRuleIds(AbstractItem $item, array $appliedRuleIds)
300306
{
301307
$address = $item->getAddress();
302308
$quote = $item->getQuote();

app/code/Magento/SalesRule/Test/Unit/Model/RulesApplierTest.php

Lines changed: 78 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,34 @@
66

77
namespace Magento\SalesRule\Test\Unit\Model;
88

9+
use Magento\Framework\Event\Manager;
10+
use Magento\Quote\Model\Quote;
11+
use Magento\Quote\Model\Quote\Address;
12+
use Magento\Quote\Model\Quote\Item;
13+
use Magento\Quote\Model\Quote\Item\AbstractItem;
14+
use Magento\Rule\Model\Action\Collection;
15+
use Magento\SalesRule\Model\Quote\ChildrenValidationLocator;
16+
use Magento\SalesRule\Model\Rule;
17+
use Magento\SalesRule\Model\Rule\Action\Discount\CalculatorFactory;
18+
use Magento\SalesRule\Model\Rule\Action\Discount\Data;
19+
use Magento\SalesRule\Model\Rule\Action\Discount\DiscountInterface;
20+
use Magento\SalesRule\Model\RulesApplier;
21+
use Magento\SalesRule\Model\Utility;
22+
use PHPUnit\Framework\TestCase;
23+
use PHPUnit_Framework_MockObject_MockObject;
24+
925
/**
1026
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
1127
*/
12-
class RulesApplierTest extends \PHPUnit\Framework\TestCase
28+
class RulesApplierTest extends TestCase
1329
{
1430
/**
15-
* @var \Magento\SalesRule\Model\RulesApplier
31+
* @var RulesApplier
1632
*/
1733
protected $rulesApplier;
1834

1935
/**
20-
* @var \Magento\SalesRule\Model\Rule\Action\Discount\CalculatorFactory|\PHPUnit_Framework_MockObject_MockObject
36+
* @var CalculatorFactory|PHPUnit_Framework_MockObject_MockObject
2137
*/
2238
protected $calculatorFactory;
2339

@@ -27,39 +43,39 @@ class RulesApplierTest extends \PHPUnit\Framework\TestCase
2743
protected $discountFactory;
2844

2945
/**
30-
* @var \Magento\Framework\Event\Manager|\PHPUnit_Framework_MockObject_MockObject
46+
* @var Manager|PHPUnit_Framework_MockObject_MockObject
3147
*/
3248
protected $eventManager;
3349

3450
/**
35-
* @var \Magento\SalesRule\Model\Utility|\PHPUnit_Framework_MockObject_MockObject
51+
* @var Utility|PHPUnit_Framework_MockObject_MockObject
3652
*/
3753
protected $validatorUtility;
3854

3955
/**
40-
* @var \Magento\SalesRule\Model\Quote\ChildrenValidationLocator|\PHPUnit_Framework_MockObject_MockObject
56+
* @var ChildrenValidationLocator|PHPUnit_Framework_MockObject_MockObject
4157
*/
4258
protected $childrenValidationLocator;
4359

4460
protected function setUp()
4561
{
4662
$this->calculatorFactory = $this->createMock(
47-
\Magento\SalesRule\Model\Rule\Action\Discount\CalculatorFactory::class
63+
CalculatorFactory::class
4864
);
4965
$this->discountFactory = $this->createPartialMock(
5066
\Magento\SalesRule\Model\Rule\Action\Discount\DataFactory::class,
5167
['create']
5268
);
5369
$this->eventManager = $this->createPartialMock(\Magento\Framework\Event\Manager::class, ['dispatch']);
5470
$this->validatorUtility = $this->createPartialMock(
55-
\Magento\SalesRule\Model\Utility::class,
71+
Utility::class,
5672
['canProcessRule', 'minFix', 'deltaRoundingFix', 'getItemQty']
5773
);
5874
$this->childrenValidationLocator = $this->createPartialMock(
59-
\Magento\SalesRule\Model\Quote\ChildrenValidationLocator::class,
75+
ChildrenValidationLocator::class,
6076
['isChildrenValidationRequired']
6177
);
62-
$this->rulesApplier = new \Magento\SalesRule\Model\RulesApplier(
78+
$this->rulesApplier = new RulesApplier(
6379
$this->calculatorFactory,
6480
$this->eventManager,
6581
$this->validatorUtility,
@@ -98,19 +114,21 @@ public function testApplyRulesWhenRuleWithStopRulesProcessingIsUsed($isChildren,
98114
->with($this->anything())
99115
->will($this->returnValue($discountData));
100116
/**
101-
* @var \Magento\SalesRule\Model\Rule|\PHPUnit_Framework_MockObject_MockObject $ruleWithStopFurtherProcessing
117+
* @var Rule|PHPUnit_Framework_MockObject_MockObject $ruleWithStopFurtherProcessing
102118
*/
103119
$ruleWithStopFurtherProcessing = $this->createPartialMock(
104-
\Magento\SalesRule\Model\Rule::class,
120+
Rule::class,
105121
['getStoreLabel', 'getCouponType', 'getRuleId', '__wakeup', 'getActions']
106122
);
107-
/** @var \Magento\SalesRule\Model\Rule|\PHPUnit_Framework_MockObject_MockObject $ruleThatShouldNotBeRun */
123+
/**
124+
* @var Rule|PHPUnit_Framework_MockObject_MockObject $ruleThatShouldNotBeRun
125+
*/
108126
$ruleThatShouldNotBeRun = $this->createPartialMock(
109-
\Magento\SalesRule\Model\Rule::class,
127+
Rule::class,
110128
['getStopRulesProcessing', '__wakeup']
111129
);
112130

113-
$actionMock = $this->createPartialMock(\Magento\Rule\Model\Action\Collection::class, ['validate']);
131+
$actionMock = $this->createPartialMock(Collection::class, ['validate']);
114132

115133
$ruleWithStopFurtherProcessing->setName('ruleWithStopFurtherProcessing');
116134
$ruleThatShouldNotBeRun->setName('ruleThatShouldNotBeRun');
@@ -163,6 +181,40 @@ public function testApplyRulesWhenRuleWithStopRulesProcessingIsUsed($isChildren,
163181
$this->assertEquals($appliedRuleIds, $result);
164182
}
165183

184+
public function testAddCouponDescriptionWithRuleDescriptionIsUsed()
185+
{
186+
$ruleId = 1;
187+
$ruleDescription = 'Rule description';
188+
189+
/**
190+
* @var Rule|PHPUnit_Framework_MockObject_MockObject $rule
191+
*/
192+
$rule = $this->createPartialMock(
193+
Rule::class,
194+
['getStoreLabel', 'getCouponType', 'getRuleId', '__wakeup', 'getActions']
195+
);
196+
197+
$rule->setDescription($ruleDescription);
198+
199+
/**
200+
* @var Address|PHPUnit_Framework_MockObject_MockObject $address
201+
*/
202+
$address = $this->createPartialMock(
203+
Address::class,
204+
[
205+
'getQuote',
206+
'setCouponCode',
207+
'setAppliedRuleIds',
208+
'__wakeup'
209+
]
210+
);
211+
$description = $address->getDiscountDescriptionArray();
212+
$description[$ruleId] = $rule->getDescription();
213+
$address->setDiscountDescriptionArray($description[$ruleId]);
214+
215+
$this->assertEquals($address->getDiscountDescriptionArray(), $description[$ruleId]);
216+
}
217+
166218
/**
167219
* @return array
168220
*/
@@ -175,23 +227,27 @@ public function dataProviderChildren()
175227
}
176228

177229
/**
178-
* @return \Magento\Quote\Model\Quote\Item\AbstractItem|\PHPUnit_Framework_MockObject_MockObject
230+
* @return AbstractItem|PHPUnit_Framework_MockObject_MockObject
179231
*/
180232
protected function getPreparedItem()
181233
{
182-
/** @var \Magento\Quote\Model\Quote\Address|\PHPUnit_Framework_MockObject_MockObject $address */
234+
/**
235+
* @var Address|PHPUnit_Framework_MockObject_MockObject $address
236+
*/
183237
$address = $this->createPartialMock(
184-
\Magento\Quote\Model\Quote\Address::class,
238+
Address::class,
185239
[
186240
'getQuote',
187241
'setCouponCode',
188242
'setAppliedRuleIds',
189243
'__wakeup'
190244
]
191245
);
192-
/** @var \Magento\Quote\Model\Quote\Item\AbstractItem|\PHPUnit_Framework_MockObject_MockObject $item */
246+
/**
247+
* @var AbstractItem|PHPUnit_Framework_MockObject_MockObject $item
248+
*/
193249
$item = $this->createPartialMock(
194-
\Magento\Quote\Model\Quote\Item::class,
250+
Item::class,
195251
[
196252
'setDiscountAmount',
197253
'setBaseDiscountAmount',
@@ -228,10 +284,10 @@ protected function applyRule($item, $rule)
228284
{
229285
$qty = 2;
230286
$discountCalc = $this->createPartialMock(
231-
\Magento\SalesRule\Model\Rule\Action\Discount\DiscountInterface::class,
287+
DiscountInterface::class,
232288
['fixQuantity', 'calculate']
233289
);
234-
$discountData = $this->getMockBuilder(\Magento\SalesRule\Model\Rule\Action\Discount\Data::class)
290+
$discountData = $this->getMockBuilder(Data::class)
235291
->setConstructorArgs(
236292
[
237293
'amount' => 30,

0 commit comments

Comments
 (0)