48 - Cleaning up a Loose Variable

This commit is contained in:
Adam Wathan
2016-12-14 20:32:25 -05:00
parent 29910e02c9
commit 2ab35a2f14
5 changed files with 26 additions and 6 deletions

View File

@@ -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)

View File

@@ -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);

View File

@@ -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) {

View File

@@ -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());
}

View File

@@ -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()
{