Skip to content

Commit

Permalink
Add SubscriptionCreated event
Browse files Browse the repository at this point in the history
  • Loading branch information
gerardojbaez committed Nov 28, 2017
1 parent 1719b8d commit 330a7c5
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 0 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this p
- `canceled_immediately` column to `plan_subscriptions` table
- `isCanceledImmediately()` method to `PlanSubscription` model.
- `SubscriptionBuilderInterface`
- `SubscriptionCreated` event.

### Changed
- Now when a subscription is *immediately* canceled the `canceled_immediately` column will be set to true.
Expand Down
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ SaaS style recurring plans for Laravel 5.
- [Cancel a Subscription](#cancel-a-subscription)
- [Scopes](#scopes)
- [Events](#events)
- [`SubscriptionCreated`](#subscriptioncreated)
- [`SubscriptionRenewed`](#subscriptionrenewed)
- [`SubscriptionCanceled`](#subscriptioncanceled)
- [`SubscriptionPlanChanged`](#subscriptionplanchanged)
Expand Down Expand Up @@ -301,6 +302,10 @@ $subscriptions = PlanSubscription::findEndedPeriod()->get();

Events are under the namespace `Gerardojbaez\Laraplans\Events`. The following are the events triggered by the package.

### `SubscriptionCreated`

Fired when a subscription is created.

### `SubscriptionRenewed`

Fired when a subscription is renewed using the `renew()` method.
Expand Down
27 changes: 27 additions & 0 deletions src/Laraplans/Events/SubscriptionCreated.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

namespace Gerardojbaez\Laraplans\Events;

use Gerardojbaez\Laraplans\Models\PlanSubscription;
use Illuminate\Queue\SerializesModels;

class SubscriptionCreated
{
use SerializesModels;

/**
* @var \Laraplans\Models\PlanSubscription
*/
public $subscription;

/**
* Create a new event instance.
*
* @param \Laraplans\Models\PlanSubscription $subscription
* @return void
*/
public function __construct(PlanSubscription $subscription)
{
$this->subscription = $subscription;
}
}
6 changes: 6 additions & 0 deletions src/Laraplans/Models/PlanSubscription.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,14 @@
use Carbon\Carbon;
use LogicException;
use Gerardojbaez\Laraplans\Period;
use Illuminate\Support\Facades\Event;
use Illuminate\Database\Eloquent\Model;
use Gerardojbaez\Laraplans\Models\PlanFeature;
use Gerardojbaez\Laraplans\SubscriptionAbility;
use Gerardojbaez\Laraplans\Traits\BelongsToPlan;
use Gerardojbaez\Laraplans\Contracts\PlanInterface;
use Gerardojbaez\Laraplans\SubscriptionUsageManager;
use Gerardojbaez\Laraplans\Events\SubscriptionCreated;
use Gerardojbaez\Laraplans\Events\SubscriptionRenewed;
use Gerardojbaez\Laraplans\Events\SubscriptionCanceled;
use Gerardojbaez\Laraplans\Events\SubscriptionPlanChanged;
Expand Down Expand Up @@ -81,6 +83,10 @@ protected static function boot()
{
parent::boot();

static::created(function ($model) {
Event::fire(new SubscriptionCreated($model));
});

static::saving(function ($model) {
// Set period if it wasn't set
if (! $model->ends_at) {
Expand Down
16 changes: 16 additions & 0 deletions tests/integration/Models/PlanSubscriptionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
use Gerardojbaez\Laraplans\Tests\Models\User;
use Gerardojbaez\Laraplans\Models\PlanFeature;
use Gerardojbaez\Laraplans\Models\PlanSubscription;
use Gerardojbaez\Laraplans\Events\SubscriptionCreated;
use Gerardojbaez\Laraplans\Events\SubscriptionRenewed;
use Gerardojbaez\Laraplans\Events\SubscriptionCanceled;
use Gerardojbaez\Laraplans\Models\PlanSubscriptionUsage;
Expand Down Expand Up @@ -71,6 +72,21 @@ public function setUp()
$this->subscription = $this->user->subscription('main');
}

/** @test */
public function it_triggers_create_event_when_created()
{
// Arrange
Event::fake();

// Act
$subscription = factory(PlanSubscription::class)->create();

// Assert
Event::assertFired(SubscriptionCreated::class, function ($event) use ($subscription) {
return (int) $event->subscription->id === (int) $subscription->id;
});
}

/**
* Can get subscription user.
*
Expand Down

0 comments on commit 330a7c5

Please sign in to comment.