From d31f42e3845298be7f046053c33d542b2650108d Mon Sep 17 00:00:00 2001 From: tim Date: Fri, 25 Oct 2024 13:50:15 +0200 Subject: [PATCH] Fix an issue where the AmountOff percentage is cast to an int, even though it could contain a decimal value (#2003) --- packages/core/src/DiscountTypes/AmountOff.php | 2 +- .../core/Unit/DiscountTypes/AmountOffTest.php | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/packages/core/src/DiscountTypes/AmountOff.php b/packages/core/src/DiscountTypes/AmountOff.php index 105bca64e9..a915a6f48d 100644 --- a/packages/core/src/DiscountTypes/AmountOff.php +++ b/packages/core/src/DiscountTypes/AmountOff.php @@ -224,7 +224,7 @@ protected function getEligibleLines(Cart $cart): \Illuminate\Support\Collection /** * Apply the percentage to the cart line. */ - private function applyPercentage(int $value, Cart $cart): Cart + private function applyPercentage(float $value, Cart $cart): Cart { $lines = $this->getEligibleLines($cart); diff --git a/tests/core/Unit/DiscountTypes/AmountOffTest.php b/tests/core/Unit/DiscountTypes/AmountOffTest.php index 06e9a03b74..4e53fb8e76 100644 --- a/tests/core/Unit/DiscountTypes/AmountOffTest.php +++ b/tests/core/Unit/DiscountTypes/AmountOffTest.php @@ -794,7 +794,7 @@ $cart = Cart::factory()->create([ 'channel_id' => $channel->id, 'currency_id' => $currency->id, - 'coupon_code' => '10PERCENTOFF', + 'coupon_code' => '10PT5PERCENTOFF', ]); $purchasable = ProductVariant::factory()->create(); @@ -816,9 +816,9 @@ $discount = Discount::factory()->create([ 'type' => AmountOff::class, 'name' => 'Test Coupon', - 'coupon' => '10PERCENTOFF', + 'coupon' => '10PT5PERCENTOFF', 'data' => [ - 'percentage' => 10, + 'percentage' => 10.5, 'fixed_value' => false, ], ]); @@ -843,9 +843,9 @@ $cart = $cart->calculate(); - expect($cart->discountTotal->value)->toEqual(100); - expect($cart->taxTotal->value)->toEqual(180); - expect($cart->total->value)->toEqual(1080); + expect($cart->discountTotal->value)->toEqual(105); + expect($cart->taxTotal->value)->toEqual(179); + expect($cart->total->value)->toEqual(1074); $cart->lines()->delete(); @@ -857,9 +857,9 @@ $cart = $cart->refresh()->calculate(); - expect($cart->discountTotal->value)->toEqual(200); - expect($cart->taxTotal->value)->toEqual(360); - expect($cart->total->value)->toEqual(2160); + expect($cart->discountTotal->value)->toEqual(210); + expect($cart->taxTotal->value)->toEqual(358); + expect($cart->total->value)->toEqual(2148); }); test('can only same discount to line once', function () {