From 12d91dab85897904d19608632bbaa1c65cee5f2c Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Fri, 18 Nov 2016 18:35:08 -0500 Subject: [PATCH] 6.1 - Uncovering a New Domain Object --- .../Controllers/ConcertOrdersController.php | 6 +++-- app/Reservation.php | 18 +++++++++++++++ tests/unit/ReservationTest.php | 23 +++++++++++++++++++ 3 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 app/Reservation.php create mode 100644 tests/unit/ReservationTest.php diff --git a/app/Http/Controllers/ConcertOrdersController.php b/app/Http/Controllers/ConcertOrdersController.php index 8309212..baa3452 100644 --- a/app/Http/Controllers/ConcertOrdersController.php +++ b/app/Http/Controllers/ConcertOrdersController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers; use App\Order; use App\Concert; +use App\Reservation; use Illuminate\Http\Request; use App\Billing\PaymentGateway; use App\Billing\PaymentFailedException; @@ -31,12 +32,13 @@ class ConcertOrdersController extends Controller try { // Find some tickets $tickets = $concert->findTickets(request('ticket_quantity')); + $reservation = new Reservation($tickets); // Charge the customer for the tickets - $this->paymentGateway->charge($tickets->sum('price'), request('payment_token')); + $this->paymentGateway->charge($reservation->totalCost(), request('payment_token')); // Create an order for those tickets - $order = Order::forTickets($tickets, request('email'), $tickets->sum('price')); + $order = Order::forTickets($tickets, request('email'), $reservation->totalCost()); return response()->json($order, 201); diff --git a/app/Reservation.php b/app/Reservation.php new file mode 100644 index 0000000..2993db9 --- /dev/null +++ b/app/Reservation.php @@ -0,0 +1,18 @@ +tickets = $tickets; + } + + public function totalCost() + { + return $this->tickets->sum('price'); + } +} diff --git a/tests/unit/ReservationTest.php b/tests/unit/ReservationTest.php new file mode 100644 index 0000000..34ab327 --- /dev/null +++ b/tests/unit/ReservationTest.php @@ -0,0 +1,23 @@ +create(['ticket_price' => 1200])->addTickets(3); + $tickets = $concert->findTickets(3); + + $reservation = new Reservation($tickets); + + $this->assertEquals(3600, $reservation->totalCost()); + } +}