Skip to content

Commit 6ebd6b5

Browse files
Merge remote-tracking branch 'magento-l3/ACP2E-2005' into L3-PR-2023-09-06
2 parents 2bbf38f + 7342410 commit 6ebd6b5

File tree

4 files changed

+25
-5
lines changed

4 files changed

+25
-5
lines changed

app/code/Magento/SalesRule/Model/Quote/Discount.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ public function collect(
158158
$address->setCartFixedRules([]);
159159
$quote->setCartFixedRules([]);
160160
foreach ($items as $item) {
161-
$this->rulesApplier->setAppliedRuleIds($item, []);
161+
$item->setAppliedRuleIds(null);
162162
if ($item->getExtensionAttributes()) {
163163
$item->getExtensionAttributes()->setDiscounts(null);
164164
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,7 @@ public function setAppliedRuleIds(AbstractItem $item, array $appliedRuleIds)
413413
$address = $item->getAddress();
414414
$quote = $item->getQuote();
415415

416-
$item->setAppliedRuleIds(join(',', $appliedRuleIds));
416+
$item->setAppliedRuleIds($this->validatorUtility->mergeIds($item->getAppliedRuleIds(), $appliedRuleIds));
417417
$address->setAppliedRuleIds($this->validatorUtility->mergeIds($address->getAppliedRuleIds(), $appliedRuleIds));
418418
$quote->setAppliedRuleIds($this->validatorUtility->mergeIds($quote->getAppliedRuleIds(), $appliedRuleIds));
419419

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -306,12 +306,15 @@ public function testSetAppliedRuleIds()
306306
$item = $this->getPreparedItem();
307307
$ruleId = 1;
308308
$appliedRuleIds = [$ruleId => $ruleId];
309+
$previouslyAppliedRuleIds = '3';
310+
$expectedAppliedRuleIds = '3,1';
309311

310312
$item->expects($this->once())
311313
->method('setAppliedRuleIds')
312-
->with($ruleId);
313-
$item->expects($this->never())
314-
->method('getAppliedRuleIds');
314+
->with($expectedAppliedRuleIds);
315+
$item->expects($this->once())
316+
->method('getAppliedRuleIds')
317+
->willReturn($previouslyAppliedRuleIds);
315318

316319
$this->rulesApplier->setAppliedRuleIds($item, $appliedRuleIds);
317320
}

dev/tests/integration/testsuite/Magento/SalesRule/Model/Quote/DiscountTest.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,13 @@ private function getQuote(string $reservedOrderId): Quote
363363
public function testDiscountOnSimpleProductWithDiscardSubsequentRule(): void
364364
{
365365
$cartId = (int)$this->fixtures->get('cart')->getId();
366+
$rule1Id = (int)$this->fixtures->get('rule1')->getId();
367+
$rule2Id = (int)$this->fixtures->get('rule2')->getId();
368+
$rule3Id = (int)$this->fixtures->get('rule3')->getId();
369+
$product1Id = (int) $this->fixtures->get('p1')->getId();
370+
$product2Id = (int) $this->fixtures->get('p2')->getId();
371+
$product3Id = (int) $this->fixtures->get('p3')->getId();
372+
$product4Id = (int) $this->fixtures->get('p4')->getId();
366373
$quote = $this->quote->get($cartId);
367374
$quote->setStoreId(1)->setIsActive(true)->setIsMultiShipping(0)->setCouponCode('test');
368375
$address = $quote->getShippingAddress();
@@ -372,5 +379,15 @@ public function testDiscountOnSimpleProductWithDiscardSubsequentRule(): void
372379
$this->subtotalCollector->collect($quote, $this->shippingAssignment, $this->total);
373380
$this->discountCollector->collect($quote, $this->shippingAssignment, $this->total);
374381
$this->assertEquals(-32, $this->total->getDiscountAmount());
382+
$items = [];
383+
foreach ($quote->getAllItems() as $item) {
384+
$items[$item->getProductId()] = $item;
385+
}
386+
$this->assertEqualsCanonicalizing([$rule1Id,$rule2Id,$rule3Id], explode(',', $quote->getAppliedRuleIds()));
387+
$this->assertEqualsCanonicalizing([$rule1Id,$rule2Id,$rule3Id], explode(',', $address->getAppliedRuleIds()));
388+
$this->assertEqualsCanonicalizing([$rule1Id], explode(',', $items[$product1Id]->getAppliedRuleIds()));
389+
$this->assertEqualsCanonicalizing([$rule1Id,$rule2Id], explode(',', $items[$product2Id]->getAppliedRuleIds()));
390+
$this->assertEqualsCanonicalizing([$rule2Id], explode(',', $items[$product3Id]->getAppliedRuleIds()));
391+
$this->assertEqualsCanonicalizing([$rule3Id], explode(',', $items[$product4Id]->getAppliedRuleIds()));
375392
}
376393
}

0 commit comments

Comments
 (0)