|
43 | 43 | use Magento\SalesRule\Api\RuleRepositoryInterface;
|
44 | 44 | use Magento\SalesRule\Model\Rule;
|
45 | 45 | use Magento\SalesRule\Model\RuleFactory;
|
| 46 | +use Magento\SalesRule\Test\Fixture\ProductCondition as ProductConditionFixture; |
| 47 | +use Magento\SalesRule\Test\Fixture\ProductFoundInCartConditions as ProductFoundInCartConditionsFixture; |
| 48 | +use Magento\SalesRule\Test\Fixture\ProductSubselectionInCartConditions as ProductSubselectionInCartConditionsFixture; |
46 | 49 | use Magento\SalesRule\Test\Fixture\Rule as RuleFixture;
|
47 | 50 | use Magento\Store\Model\StoreManagerInterface;
|
48 | 51 | use Magento\TestFramework\Fixture\DataFixture;
|
@@ -601,6 +604,151 @@ public function testCarFixedDiscountWithApplyToShippingAmountAfterADiscount(): v
|
601 | 604 | $this->assertEquals(-70, $totals->getDiscountAmount());
|
602 | 605 | }
|
603 | 606 |
|
| 607 | + #[ |
| 608 | + DataFixture(ProductFixture::class, ['price' => 10], 'p1'), |
| 609 | + DataFixture(ProductFixture::class, ['price' => 10], 'p2'), |
| 610 | + DataFixture( |
| 611 | + ProductConditionFixture::class, |
| 612 | + ['attribute' => 'sku', 'value' => '$p1.sku$'], |
| 613 | + 'cond1' |
| 614 | + ), |
| 615 | + DataFixture( |
| 616 | + ProductFoundInCartConditionsFixture::class, |
| 617 | + ['conditions' => ['$cond1$']], |
| 618 | + 'cond11' |
| 619 | + ), |
| 620 | + DataFixture( |
| 621 | + ProductConditionFixture::class, |
| 622 | + ['attribute' => 'sku', 'value' => '$p1.sku$'], |
| 623 | + 'applyCond1' |
| 624 | + ), |
| 625 | + DataFixture( |
| 626 | + RuleFixture::class, |
| 627 | + [ |
| 628 | + 'simple_action' => Rule::BY_PERCENT_ACTION, |
| 629 | + 'discount_amount' => 50, |
| 630 | + 'apply_to_shipping' => 0, |
| 631 | + 'stop_rules_processing' => 0, |
| 632 | + 'sort_order' => 1, |
| 633 | + 'conditions' => ['$cond11$'], |
| 634 | + 'actions' => ['$applyCond1$'] |
| 635 | + ] |
| 636 | + ), |
| 637 | + DataFixture( |
| 638 | + ProductConditionFixture::class, |
| 639 | + ['attribute' => 'sku', 'value' => '$p2.sku$'], |
| 640 | + 'cond2' |
| 641 | + ), |
| 642 | + DataFixture( |
| 643 | + ProductFoundInCartConditionsFixture::class, |
| 644 | + ['conditions' => ['$cond2$']], |
| 645 | + 'cond22' |
| 646 | + ), |
| 647 | + DataFixture( |
| 648 | + ProductConditionFixture::class, |
| 649 | + ['attribute' => 'sku', 'value' => '$p2.sku$'], |
| 650 | + 'applyCond2' |
| 651 | + ), |
| 652 | + DataFixture( |
| 653 | + RuleFixture::class, |
| 654 | + [ |
| 655 | + 'simple_action' => Rule::CART_FIXED_ACTION, |
| 656 | + 'discount_amount' => 12, |
| 657 | + 'apply_to_shipping' => 0, |
| 658 | + 'stop_rules_processing' => 0, |
| 659 | + 'sort_order' => 2, |
| 660 | + 'conditions' => ['$cond22$'] |
| 661 | + ] |
| 662 | + ), |
| 663 | + DataFixture(GuestCartFixture::class, as: 'cart'), |
| 664 | + DataFixture(AddProductToCartFixture::class, ['cart_id' => '$cart.id$', 'product_id' => '$p1.id$', 'qty' => 1]), |
| 665 | + DataFixture(AddProductToCartFixture::class, ['cart_id' => '$cart.id$', 'product_id' => '$p2.id$', 'qty' => 1]) |
| 666 | + ] |
| 667 | + public function testFixedAmountToWholeCart2productsAfterPercent1Product(): void |
| 668 | + { |
| 669 | + $cart = DataFixtureStorageManager::getStorage()->get('cart'); |
| 670 | + $totals = $this->getTotals((int) $cart->getId()); |
| 671 | + $this->assertEquals(-17, $totals->getDiscountAmount()); |
| 672 | + } |
| 673 | + |
| 674 | + #[ |
| 675 | + DataFixture(ProductFixture::class, ['price' => 850, 'special_price' => 765], 'p1'), |
| 676 | + DataFixture(ProductFixture::class, ['price' => 85, 'special_price' => 68], 'p2'), |
| 677 | + DataFixture( |
| 678 | + ProductConditionFixture::class, |
| 679 | + ['attribute' => 'sku', 'value' => '$p1.sku$'], |
| 680 | + 'cond1' |
| 681 | + ), |
| 682 | + DataFixture( |
| 683 | + ProductSubselectionInCartConditionsFixture::class, |
| 684 | + ['attribute' => 'qty', 'operator' => '==', 'value' => 2, 'conditions' => ['$cond1$']], |
| 685 | + 'cond11' |
| 686 | + ), |
| 687 | + DataFixture( |
| 688 | + ProductFoundInCartConditionsFixture::class, |
| 689 | + ['conditions' => ['$cond11$']], |
| 690 | + 'cond111' |
| 691 | + ), |
| 692 | + DataFixture( |
| 693 | + ProductConditionFixture::class, |
| 694 | + ['attribute' => 'sku', 'value' => '$p1.sku$'], |
| 695 | + 'applyCond1' |
| 696 | + ), |
| 697 | + DataFixture( |
| 698 | + RuleFixture::class, |
| 699 | + [ |
| 700 | + 'simple_action' => Rule::CART_FIXED_ACTION, |
| 701 | + 'discount_amount' => 153, |
| 702 | + 'apply_to_shipping' => 0, |
| 703 | + 'stop_rules_processing' => 0, |
| 704 | + 'sort_order' => 1, |
| 705 | + 'conditions' => ['$cond111$'], |
| 706 | + 'actions' => ['$applyCond1$'] |
| 707 | + ] |
| 708 | + ), |
| 709 | + DataFixture( |
| 710 | + ProductConditionFixture::class, |
| 711 | + ['attribute' => 'sku', 'value' => '$p2.sku$'], |
| 712 | + 'cond2' |
| 713 | + ), |
| 714 | + DataFixture( |
| 715 | + ProductSubselectionInCartConditionsFixture::class, |
| 716 | + ['attribute' => 'qty', 'operator' => '==', 'value' => 2, 'conditions' => ['$cond2$']], |
| 717 | + 'cond22' |
| 718 | + ), |
| 719 | + DataFixture( |
| 720 | + ProductFoundInCartConditionsFixture::class, |
| 721 | + ['conditions' => ['$cond22$']], |
| 722 | + 'cond222' |
| 723 | + ), |
| 724 | + DataFixture( |
| 725 | + ProductConditionFixture::class, |
| 726 | + ['attribute' => 'sku', 'value' => '$p2.sku$'], |
| 727 | + 'applyCond2' |
| 728 | + ), |
| 729 | + DataFixture( |
| 730 | + RuleFixture::class, |
| 731 | + [ |
| 732 | + 'simple_action' => Rule::CART_FIXED_ACTION, |
| 733 | + 'discount_amount' => 14, |
| 734 | + 'apply_to_shipping' => 0, |
| 735 | + 'stop_rules_processing' => 0, |
| 736 | + 'sort_order' => 2, |
| 737 | + 'conditions' => ['$cond222$'], |
| 738 | + 'actions' => ['$applyCond2$'] |
| 739 | + ] |
| 740 | + ), |
| 741 | + DataFixture(GuestCartFixture::class, as: 'cart'), |
| 742 | + DataFixture(AddProductToCartFixture::class, ['cart_id' => '$cart.id$', 'product_id' => '$p1.id$', 'qty' => 2]), |
| 743 | + DataFixture(AddProductToCartFixture::class, ['cart_id' => '$cart.id$', 'product_id' => '$p2.id$', 'qty' => 2]) |
| 744 | + ] |
| 745 | + public function testFixedAmountToWholeCart1ProductPerRule2ProductsWithSpecialPriceTotal(): void |
| 746 | + { |
| 747 | + $cart = DataFixtureStorageManager::getStorage()->get('cart'); |
| 748 | + $totals = $this->getTotals((int) $cart->getId()); |
| 749 | + $this->assertEquals(-167, $totals->getDiscountAmount()); |
| 750 | + } |
| 751 | + |
604 | 752 | /**
|
605 | 753 | * Get list of orders by quote id.
|
606 | 754 | *
|
|
0 commit comments