diff --git a/app/Http/Controllers/ConcertOrdersController.php b/app/Http/Controllers/ConcertOrdersController.php index e4be215..17e9a23 100644 --- a/app/Http/Controllers/ConcertOrdersController.php +++ b/app/Http/Controllers/ConcertOrdersController.php @@ -6,6 +6,7 @@ use App\Concert; use Illuminate\Http\Request; use App\Billing\PaymentGateway; use App\Billing\PaymentFailedException; +use App\Exceptions\NotEnoughTicketsException; class ConcertOrdersController extends Controller { @@ -27,12 +28,13 @@ class ConcertOrdersController extends Controller ]); try { - $this->paymentGateway->charge(request('ticket_quantity') * $concert->ticket_price, request('payment_token')); $order = $concert->orderTickets(request('email'), request('ticket_quantity')); - + $this->paymentGateway->charge(request('ticket_quantity') * $concert->ticket_price, request('payment_token')); return response()->json([], 201); } catch (PaymentFailedException $e) { return response()->json([], 422); + } catch (NotEnoughTicketsException $e) { + return response()->json([], 422); } } } diff --git a/tests/features/PurchaseTicketsTest.php b/tests/features/PurchaseTicketsTest.php index 9adaa87..6828d2e 100644 --- a/tests/features/PurchaseTicketsTest.php +++ b/tests/features/PurchaseTicketsTest.php @@ -33,6 +33,7 @@ class PurchaseTicketsTest extends TestCase function customer_can_purchase_tickets_to_a_published_concert() { $concert = factory(Concert::class)->states('published')->create(['ticket_price' => 3250]); + $concert->addTickets(3); $this->orderTickets($concert, [ 'email' => 'john@example.com', @@ -51,6 +52,7 @@ class PurchaseTicketsTest extends TestCase function cannot_purchase_tickets_to_an_unpublished_concert() { $concert = factory(Concert::class)->states('unpublished')->create(); + $concert->addTickets(3); $this->orderTickets($concert, [ 'email' => 'john@example.com', @@ -67,6 +69,7 @@ class PurchaseTicketsTest extends TestCase function an_order_is_not_created_if_payment_fails() { $concert = factory(Concert::class)->states('published')->create(['ticket_price' => 3250]); + $concert->addTickets(3); $this->orderTickets($concert, [ 'email' => 'john@example.com', @@ -82,6 +85,8 @@ class PurchaseTicketsTest extends TestCase /** @test */ function cannot_purchase_more_tickets_than_remain() { + $this->disableExceptionHandling(); + $concert = factory(Concert::class)->states('published')->create(); $concert->addTickets(50);