From 9353c9c6c65875c68aad0bd7a67626e4090e5869 Mon Sep 17 00:00:00 2001 From: Krishan Koenig Date: Tue, 16 Jul 2024 13:55:29 +0200 Subject: [PATCH] add tests for getReimburesmentAmountForUnusedTime` --- src/Subscription.php | 2 +- tests/Database/Factories/OrderItemFactory.php | 7 +++ tests/SubscriptionTest.php | 49 +++++++++++++++++++ 3 files changed, 57 insertions(+), 1 deletion(-) diff --git a/src/Subscription.php b/src/Subscription.php index 8715c089..5397b43a 100644 --- a/src/Subscription.php +++ b/src/Subscription.php @@ -661,7 +661,7 @@ public static function handlePaymentPaid(OrderItem $item) if ($subscription->ends_at !== null) { DB::transaction(function () use ($item, $subscription) { - if (! $subscription->scheduled_order_item_id) { + if (!$subscription->scheduled_order_item_id) { $item = $subscription->scheduleNewOrderItemAt($subscription->ends_at); } diff --git a/tests/Database/Factories/OrderItemFactory.php b/tests/Database/Factories/OrderItemFactory.php index 08501e57..37dac38e 100644 --- a/tests/Database/Factories/OrderItemFactory.php +++ b/tests/Database/Factories/OrderItemFactory.php @@ -74,4 +74,11 @@ public function USD() 'currency' => 'USD', ]); } + + public function withOrder(): self + { + return $this->state(fn () => [ + 'order_id' => OrderFactory::new(), + ]); + } } diff --git a/tests/SubscriptionTest.php b/tests/SubscriptionTest.php index 0ac7c18e..c1691c25 100644 --- a/tests/SubscriptionTest.php +++ b/tests/SubscriptionTest.php @@ -8,6 +8,7 @@ use Laravel\Cashier\Cashier; use Laravel\Cashier\Events\SubscriptionResumed; use Laravel\Cashier\Subscription; +use Laravel\Cashier\Tests\Database\Factories\OrderFactory; use Laravel\Cashier\Tests\Database\Factories\OrderItemFactory; use Laravel\Cashier\Tests\Database\Factories\SubscriptionFactory; use Laravel\Cashier\Tests\Fixtures\User; @@ -589,4 +590,52 @@ public function canQueryRecurringSubscriptions() $this->assertEquals(1, Subscription::whereRecurring()->count()); $this->assertEquals(2, Subscription::whereNotRecurring()->count()); } + + /** @test */ + public function halfWayThroughSubscriptionReturnsPositiveReimburesmentAmount() + { + $this->withConfiguredPlans(); + + $subscriptionHalfWayThrough = SubscriptionFactory::new() + ->has( + OrderItemFactory::new(['unit_price' => 100]) + ->processed() + ->withOrder() + ->EUR(), + 'scheduledOrderItem' + ) + ->create([ + 'cycle_started_at' => now()->subDays(20), + 'cycle_ends_at' => now()->addDays(20), + ]); + + $this->assertEquals( + money('-50', 'EUR'), + $subscriptionHalfWayThrough->getReimburseAmountForUnusedTime() + ); + } + + /** @test */ + public function nonReimbursableSubscriptionReturnsNoReimbursementAmount() + { + $this->withConfiguredPlans(); + + $nonReimbursable = SubscriptionFactory::new() + ->has( + OrderItemFactory::new(['unit_price' => 100]) + ->processed() + ->withOrder() + ->EUR(), + 'scheduledOrderItem' + ) + ->create([ + 'cycle_started_at' => now()->subMonth(), + 'cycle_ends_at' => now()->subDay(), + ]); + + $this->assertEquals( + null, + $nonReimbursable->getReimburseAmountForUnusedTime() + ); + } }