Skip to content

Commit

Permalink
Test triggering an event after creating orders
Browse files Browse the repository at this point in the history
  • Loading branch information
unclexo committed Jan 11, 2023
1 parent a889a51 commit 0c51d73
Show file tree
Hide file tree
Showing 6 changed files with 54 additions and 2 deletions.
15 changes: 13 additions & 2 deletions app/Http/Controllers/OrderController.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,20 @@

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Events\OrderCreatedEvent;

class OrderController extends Controller
{
//
public function store()
{
$attributes = \request()->validate([
'shipper_id' => ['required'],
'name' => ['required'],
'price' => ['required'],
]);

$order = auth()->user()->orders()->create($attributes);

OrderCreatedEvent::dispatch($order);
}
}
2 changes: 2 additions & 0 deletions app/Models/Order.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,6 @@
class Order extends Model
{
use HasFactory;

protected $guarded = [];
}
5 changes: 5 additions & 0 deletions app/Models/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,11 @@ public function posts()
return $this->hasMany(Post::class);
}

public function orders()
{
return $this->hasMany(Order::class);
}

public function ccEmails()
{
// Apply logic for getting cc emails
Expand Down
5 changes: 5 additions & 0 deletions routes/web.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

use App\Http\Controllers\HomeController;
use App\Http\Controllers\MediaUploaderController;
use App\Http\Controllers\OrderController;
use App\Http\Controllers\OrderShipmentController;
use App\Http\Controllers\PostController;
use App\Http\Controllers\PostPublishController;
Expand Down Expand Up @@ -69,4 +70,8 @@
Route::post('orders/{order}/shipped/advanced', [OrderShipmentController::class, 'shipOrderAdvanced'])
->name('order.shipped.advanced');
});

Route::prefix('orders')->group(function() {
Route::post('/', [OrderController::class, 'store'])->name('orders.store');
});
});
21 changes: 21 additions & 0 deletions tests/Feature/EventTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,16 @@
use App\Listeners\OrderCreationListener;
use App\Listeners\OrderDeletionListener;
use App\Listeners\OrderUpdateListener;
use App\Models\User;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithFaker;
use Illuminate\Support\Facades\Event;
use Tests\TestCase;

class EventTest extends TestCase
{
use RefreshDatabase;

/** @test */
public function event_listeners_are_listening_to_given_events()
{
Expand All @@ -35,4 +38,22 @@ public function event_listeners_are_listening_to_given_events()
OrderDeletionListener::class
);
}

/** @test */
public function triggering_an_event_after_creating_orders()
{
$this->actingAs($user = User::factory()->create());

Event::fake();

Event::assertNotDispatched(OrderCreatedEvent::class);

$this->post(route('orders.store'), [
'shipper_id' => 4,
'name' => 'test order',
'price' => 345,
]);

Event::assertDispatched(OrderCreatedEvent::class);
}
}
8 changes: 8 additions & 0 deletions tests/Unit/UserTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,12 @@ public function a_user_has_posts()

$this->assertInstanceOf(Collection::class, $user->posts);
}

/** @test */
public function a_user_has_orders()
{
$user = User::factory()->create();

$this->assertInstanceOf(Collection::class, $user->orders);
}
}

0 comments on commit 0c51d73

Please sign in to comment.