diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index ec696a5..21c9784 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -44,7 +44,6 @@ class Handler extends ExceptionHandler */ public function render($request, Exception $exception) { - throw $exception; return parent::render($request, $exception); } diff --git a/app/Http/Controllers/ConcertOrdersController.php b/app/Http/Controllers/ConcertOrdersController.php index 0c0755c..c8a4ce9 100644 --- a/app/Http/Controllers/ConcertOrdersController.php +++ b/app/Http/Controllers/ConcertOrdersController.php @@ -17,6 +17,10 @@ class ConcertOrdersController extends Controller public function store($concertId) { + $this->validate(request(), [ + 'email' => 'required', + ]); + $concert = Concert::find($concertId); $this->paymentGateway->charge(request('ticket_quantity') * $concert->ticket_price, request('payment_token')); $order = $concert->orderTickets(request('email'), request('ticket_quantity')); diff --git a/tests/features/PurchaseTicketsTest.php b/tests/features/PurchaseTicketsTest.php index 9390670..2a3b9f7 100644 --- a/tests/features/PurchaseTicketsTest.php +++ b/tests/features/PurchaseTicketsTest.php @@ -11,29 +11,47 @@ class PurchaseTicketsTest extends TestCase { use DatabaseMigrations; + protected function setUp() + { + parent::setUp(); + $this->paymentGateway = new FakePaymentGateway; + $this->app->instance(PaymentGateway::class, $this->paymentGateway); + } + /** @test */ function customer_can_purchase_concert_tickets() { // Arrange - $paymentGateway = new FakePaymentGateway; - $this->app->instance(PaymentGateway::class, $paymentGateway); - $concert = factory(Concert::class)->create(['ticket_price' => 3250]); // Act $this->json('POST', "/concerts/{$concert->id}/orders", [ 'email' => 'john@example.com', 'ticket_quantity' => 3, - 'payment_token' => $paymentGateway->getValidTestToken(), + 'payment_token' => $this->paymentGateway->getValidTestToken(), ]); // Assert $this->assertResponseStatus(201); - $this->assertEquals(9750, $paymentGateway->totalCharges()); + $this->assertEquals(9750, $this->paymentGateway->totalCharges()); $order = $concert->orders()->where('email', 'john@example.com')->first(); $this->assertNotNull($order); $this->assertEquals(3, $order->tickets()->count()); } + + /** @test */ + function email_is_required_to_purchase_tickets() + { + $concert = factory(Concert::class)->create(); + + $this->json('POST', "/concerts/{$concert->id}/orders", [ + 'ticket_quantity' => 3, + 'payment_token' => $this->paymentGateway->getValidTestToken(), + ]); + + $this->assertResponseStatus(422); + $this->assertArrayHasKey('email', $this->decodeResponseJson()); + } }