mirror of
https://github.com/nothingworksinc/ticketbeast.git
synced 2026-01-26 11:14:06 +00:00
6.9 - Respecting Reservations
This commit is contained in:
@@ -58,7 +58,9 @@ class Concert extends Model
|
||||
|
||||
public function reserveTickets($quantity)
|
||||
{
|
||||
return $this->findTickets($quantity);
|
||||
return $this->findTickets($quantity)->each(function ($ticket) {
|
||||
$ticket->reserve();
|
||||
});
|
||||
}
|
||||
|
||||
public function findTickets($quantity)
|
||||
|
||||
@@ -31,7 +31,7 @@ class ConcertOrdersController extends Controller
|
||||
|
||||
try {
|
||||
// Find some tickets
|
||||
$tickets = $concert->findTickets(request('ticket_quantity'));
|
||||
$tickets = $concert->reserveTickets(request('ticket_quantity'));
|
||||
$reservation = new Reservation($tickets);
|
||||
|
||||
// Charge the customer for the tickets
|
||||
|
||||
@@ -11,7 +11,7 @@ class Ticket extends Model
|
||||
|
||||
public function scopeAvailable($query)
|
||||
{
|
||||
return $query->whereNull('order_id');
|
||||
return $query->whereNull('order_id')->whereNull('reserved_at');
|
||||
}
|
||||
|
||||
public function reserve()
|
||||
|
||||
@@ -129,4 +129,36 @@ class ConcertTest extends TestCase
|
||||
$this->assertCount(2, $reservedTickets);
|
||||
$this->assertEquals(1, $concert->ticketsRemaining());
|
||||
}
|
||||
|
||||
/** @test */
|
||||
function cannot_reserve_tickets_that_have_already_been_purchased()
|
||||
{
|
||||
$concert = factory(Concert::class)->create()->addTickets(3);
|
||||
$concert->orderTickets('jane@example.com', 2);
|
||||
|
||||
try {
|
||||
$concert->reserveTickets(2);
|
||||
} catch (NotEnoughTicketsException $e) {
|
||||
$this->assertEquals(1, $concert->ticketsRemaining());
|
||||
return;
|
||||
}
|
||||
|
||||
$this->fail("Reserving tickets succeeded even though the tickets were already sold.");
|
||||
}
|
||||
|
||||
/** @test */
|
||||
function cannot_reserve_tickets_that_have_already_been_reserved()
|
||||
{
|
||||
$concert = factory(Concert::class)->create()->addTickets(3);
|
||||
$concert->reserveTickets(2);
|
||||
|
||||
try {
|
||||
$concert->reserveTickets(2);
|
||||
} catch (NotEnoughTicketsException $e) {
|
||||
$this->assertEquals(1, $concert->ticketsRemaining());
|
||||
return;
|
||||
}
|
||||
|
||||
$this->fail("Reserving tickets succeeded even though the tickets were already reserved.");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user