|
784 | 784 | expect($lastLine->discountTotal->value)->toEqual(333);
|
785 | 785 | });
|
786 | 786 |
|
787 |
| -test('can apply percentage discount', function () { |
| 787 | +test('can apply percentage discount', function ( |
| 788 | + string $coupon, |
| 789 | + float $percentage, |
| 790 | + int $discountTotalForOne, |
| 791 | + int $taxTotalForOne, |
| 792 | + int $totalForOne, |
| 793 | + int $discountTotalForTwo, |
| 794 | + int $taxTotalForTwo, |
| 795 | + int $totalForTwo |
| 796 | +) { |
788 | 797 | $customerGroup = CustomerGroup::getDefault();
|
789 | 798 |
|
790 | 799 | $channel = Channel::getDefault();
|
|
794 | 803 | $cart = Cart::factory()->create([
|
795 | 804 | 'channel_id' => $channel->id,
|
796 | 805 | 'currency_id' => $currency->id,
|
797 |
| - 'coupon_code' => '10PERCENTOFF', |
| 806 | + 'coupon_code' => $coupon, |
798 | 807 | ]);
|
799 | 808 |
|
800 | 809 | $purchasable = ProductVariant::factory()->create();
|
|
816 | 825 | $discount = Discount::factory()->create([
|
817 | 826 | 'type' => AmountOff::class,
|
818 | 827 | 'name' => 'Test Coupon',
|
819 |
| - 'coupon' => '10PERCENTOFF', |
| 828 | + 'coupon' => $coupon, |
820 | 829 | 'data' => [
|
821 |
| - 'percentage' => 10, |
| 830 | + 'percentage' => $percentage, |
822 | 831 | 'fixed_value' => false,
|
823 | 832 | ],
|
824 | 833 | ]);
|
|
843 | 852 |
|
844 | 853 | $cart = $cart->calculate();
|
845 | 854 |
|
846 |
| - expect($cart->discountTotal->value)->toEqual(100); |
847 |
| - expect($cart->taxTotal->value)->toEqual(180); |
848 |
| - expect($cart->total->value)->toEqual(1080); |
| 855 | + expect($cart->discountTotal->value)->toEqual($discountTotalForOne); |
| 856 | + expect($cart->taxTotal->value)->toEqual($taxTotalForOne); |
| 857 | + expect($cart->total->value)->toEqual($totalForOne); |
849 | 858 |
|
850 | 859 | $cart->lines()->delete();
|
851 | 860 |
|
|
857 | 866 |
|
858 | 867 | $cart = $cart->refresh()->calculate();
|
859 | 868 |
|
860 |
| - expect($cart->discountTotal->value)->toEqual(200); |
861 |
| - expect($cart->taxTotal->value)->toEqual(360); |
862 |
| - expect($cart->total->value)->toEqual(2160); |
863 |
| -}); |
| 869 | + expect($cart->discountTotal->value)->toEqual($discountTotalForTwo); |
| 870 | + expect($cart->taxTotal->value)->toEqual($taxTotalForTwo); |
| 871 | + expect($cart->total->value)->toEqual($totalForTwo); |
| 872 | +})->with([ |
| 873 | + '10% Discount' => ['10PERCENTOFF', 10, 100, 180, 1080, 200, 360, 2160], |
| 874 | + '10.25% Discount' => ['10PT25PERCENTOFF', 10.25, 103, 179, 1076, 205, 359, 2154], |
| 875 | + '10.5% Discount' => ['10PT5PERCENTOFF', 10.5, 105, 179, 1074, 210, 358, 2148], |
| 876 | +]); |
864 | 877 |
|
865 | 878 | test('can only same discount to line once', function () {
|
866 | 879 | $customerGroup = CustomerGroup::getDefault();
|
|
0 commit comments