mirror of
https://github.com/nothingworksinc/ticketbeast.git
synced 2026-02-18 20:54:40 +00:00
6.9 - Respecting Reservations
This commit is contained in:
@@ -58,7 +58,9 @@ class Concert extends Model
|
|||||||
|
|
||||||
public function reserveTickets($quantity)
|
public function reserveTickets($quantity)
|
||||||
{
|
{
|
||||||
return $this->findTickets($quantity);
|
return $this->findTickets($quantity)->each(function ($ticket) {
|
||||||
|
$ticket->reserve();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public function findTickets($quantity)
|
public function findTickets($quantity)
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ class ConcertOrdersController extends Controller
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
// Find some tickets
|
// Find some tickets
|
||||||
$tickets = $concert->findTickets(request('ticket_quantity'));
|
$tickets = $concert->reserveTickets(request('ticket_quantity'));
|
||||||
$reservation = new Reservation($tickets);
|
$reservation = new Reservation($tickets);
|
||||||
|
|
||||||
// Charge the customer for the tickets
|
// Charge the customer for the tickets
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ class Ticket extends Model
|
|||||||
|
|
||||||
public function scopeAvailable($query)
|
public function scopeAvailable($query)
|
||||||
{
|
{
|
||||||
return $query->whereNull('order_id');
|
return $query->whereNull('order_id')->whereNull('reserved_at');
|
||||||
}
|
}
|
||||||
|
|
||||||
public function reserve()
|
public function reserve()
|
||||||
|
|||||||
@@ -129,4 +129,36 @@ class ConcertTest extends TestCase
|
|||||||
$this->assertCount(2, $reservedTickets);
|
$this->assertCount(2, $reservedTickets);
|
||||||
$this->assertEquals(1, $concert->ticketsRemaining());
|
$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