diff --git a/app/Concert.php b/app/Concert.php index 1ac6f44..7f22bc3 100644 --- a/app/Concert.php +++ b/app/Concert.php @@ -58,9 +58,11 @@ class Concert extends Model public function reserveTickets($quantity) { - return $this->findTickets($quantity)->each(function ($ticket) { + $tickets = $this->findTickets($quantity)->each(function ($ticket) { $ticket->reserve(); }); + + return new Reservation($tickets); } public function findTickets($quantity) diff --git a/app/Http/Controllers/ConcertOrdersController.php b/app/Http/Controllers/ConcertOrdersController.php index b2910be..6c11304 100644 --- a/app/Http/Controllers/ConcertOrdersController.php +++ b/app/Http/Controllers/ConcertOrdersController.php @@ -31,14 +31,13 @@ class ConcertOrdersController extends Controller try { // Find some tickets - $tickets = $concert->reserveTickets(request('ticket_quantity')); - $reservation = new Reservation($tickets); + $reservation = $concert->reserveTickets(request('ticket_quantity')); // Charge the customer for the tickets $this->paymentGateway->charge($reservation->totalCost(), request('payment_token')); // Create an order for those tickets - $order = Order::forTickets($tickets, request('email'), $reservation->totalCost()); + $order = Order::forTickets($reservation->tickets(), request('email'), $reservation->totalCost()); return response()->json($order, 201); diff --git a/app/Reservation.php b/app/Reservation.php index dbc0950..49c1312 100644 --- a/app/Reservation.php +++ b/app/Reservation.php @@ -16,6 +16,11 @@ class Reservation return $this->tickets->sum('price'); } + public function tickets() + { + return $this->tickets; + } + public function cancel() { foreach ($this->tickets as $ticket) { diff --git a/tests/unit/ConcertTest.php b/tests/unit/ConcertTest.php index cd6d210..3c4d575 100644 --- a/tests/unit/ConcertTest.php +++ b/tests/unit/ConcertTest.php @@ -124,9 +124,9 @@ class ConcertTest extends TestCase $concert = factory(Concert::class)->create()->addTickets(3); $this->assertEquals(3, $concert->ticketsRemaining()); - $reservedTickets = $concert->reserveTickets(2); + $reservation = $concert->reserveTickets(2); - $this->assertCount(2, $reservedTickets); + $this->assertCount(2, $reservation->tickets()); $this->assertEquals(1, $concert->ticketsRemaining()); } diff --git a/tests/unit/ReservationTest.php b/tests/unit/ReservationTest.php index d25f7bd..eba517c 100644 --- a/tests/unit/ReservationTest.php +++ b/tests/unit/ReservationTest.php @@ -23,6 +23,20 @@ class ReservationTest extends TestCase $this->assertEquals(3600, $reservation->totalCost()); } + /** @test */ + function retrieving_the_reservations_tickets() + { + $tickets = collect([ + (object) ['price' => 1200], + (object) ['price' => 1200], + (object) ['price' => 1200], + ]); + + $reservation = new Reservation($tickets); + + $this->assertEquals($tickets, $reservation->tickets()); + } + /** @test */ function reserved_tickets_are_released_when_a_reservation_is_cancelled() {