From 4bb502ddb3ad6bc604b67fd6b712afd35b5801af Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Thu, 8 Dec 2016 13:49:42 -0500 Subject: [PATCH] 44 - Cancelling Reservations --- app/Reservation.php | 7 +++++++ tests/features/PurchaseTicketsTest.php | 1 + tests/unit/ReservationTest.php | 20 ++++++++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/app/Reservation.php b/app/Reservation.php index 2993db9..dbc0950 100644 --- a/app/Reservation.php +++ b/app/Reservation.php @@ -15,4 +15,11 @@ class Reservation { return $this->tickets->sum('price'); } + + public function cancel() + { + foreach ($this->tickets as $ticket) { + $ticket->release(); + } + } } diff --git a/tests/features/PurchaseTicketsTest.php b/tests/features/PurchaseTicketsTest.php index bf39b3e..07ab419 100644 --- a/tests/features/PurchaseTicketsTest.php +++ b/tests/features/PurchaseTicketsTest.php @@ -85,6 +85,7 @@ class PurchaseTicketsTest extends TestCase $this->assertResponseStatus(422); $this->assertFalse($concert->hasOrderFor('john@example.com')); + $this->assertEquals(3, $concert->ticketsRemaining()); } /** @test */ diff --git a/tests/unit/ReservationTest.php b/tests/unit/ReservationTest.php index 7dcbf73..ddf2dc6 100644 --- a/tests/unit/ReservationTest.php +++ b/tests/unit/ReservationTest.php @@ -22,4 +22,24 @@ class ReservationTest extends TestCase $this->assertEquals(3600, $reservation->totalCost()); } + + /** @test */ + function reserved_tickets_are_released_when_a_reservation_is_cancelled() + { + $ticket1 = Mockery::mock(Ticket::class); + $ticket1->shouldReceive('release')->once(); + + $ticket2 = Mockery::mock(Ticket::class); + $ticket2->shouldReceive('release')->once(); + + $ticket3 = Mockery::mock(Ticket::class); + $ticket3->shouldReceive('release')->once(); + + $tickets = collect([$ticket1, $ticket2, $ticket3]); + + $reservation = new Reservation($tickets); + + $reservation->cancel(); + + } }