Skip to content

Commit

Permalink
Added resume subscription method/added cancel immediately method
Browse files Browse the repository at this point in the history
  • Loading branch information
TijmenWierenga committed Jul 5, 2016
1 parent be06352 commit 304f3c4
Show file tree
Hide file tree
Showing 4 changed files with 77 additions and 8 deletions.
22 changes: 17 additions & 5 deletions .idea/workspace.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 15 additions & 2 deletions src/Subscriber.php
Original file line number Diff line number Diff line change
Expand Up @@ -144,10 +144,23 @@ public function swap(Subscription $subscription, $plan)
* @param Subscription $subscription
* @return null
*/
public function cancel(Subscription $subscription)
public function cancel(Subscription $subscription, $cancelImmediately = false)
{
// TODO: Check if subscription is active or in trial
return ChargeBee_Subscription::cancel($subscription->subscription_id)->subscription();
return ChargeBee_Subscription::cancel($subscription->subscription_id, [
'end_of_term' => ! $cancelImmediately
])->subscription();
}

/**
* Resume a subscription that has a scheduled cancellation
*
* @param Subscription $subscription
* @return null
*/
public function resume(Subscription $subscription)
{
return ChargeBee_Subscription::removeScheduledCancellation($subscription->subscription_id)->subscription();
}

/**
Expand Down
35 changes: 35 additions & 0 deletions src/Subscription.php
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,41 @@ public function cancel()
return $this;
}

/**
* Cancel a subscription immediately
*
* @return $this
*/
public function cancelImmediately()
{
$subscriber = new Subscriber();
$subscriptionDetails = $subscriber->cancel($this, true);

$this->ends_at = $subscriptionDetails->cancelledAt;
$this->trial_ends_at = $subscriptionDetails->cancelledAt;
$this->save();

return $this;
}

/**
* Resume a subscription that has a scheduled cancellation.
*
* @return $this
*/
public function resume()
{
$subscriber = new Subscriber();
$subscriptionDetails = $subscriber->resume($this);

$this->ends_at = null;
$this->next_billing_at = $subscriptionDetails->currentTermEnd;
$this->trial_ends_at = $subscriptionDetails->trialEnd;
$this->save();

return $this;
}

/**
* Reactivate a cancelled subscription
*
Expand Down
11 changes: 10 additions & 1 deletion tests/BillableTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -161,10 +161,19 @@ public function it_registers_a_paid_subscription_within_chargebee()
$subscription->cancel();
// Test if subscription is cancelled
$this->assertTrue($subscription->cancelled());
// TODO: Check if subscription ends after trial period
$this->assertTrue($subscription->ends_at->eq($subscription->trial_ends_at));

// Test if a subscription can be reactivated
$subscription->reactivate();
$subscription->resume();
$this->assertFalse($subscription->cancelled());
$this->assertTrue($subscription->active());
$this->assertTrue($subscription->onTrial());

$subscription->cancelImmediately();
$this->assertTrue(\Carbon\Carbon::now()->gte($subscription->ends_at));
$this->assertFalse($subscription->active());
$this->assertFalse($subscription->onTrial());
}

/**
Expand Down

0 comments on commit 304f3c4

Please sign in to comment.