diff --git a/app/Http/Controllers/ConcertOrdersController.php b/app/Http/Controllers/ConcertOrdersController.php index 3e2eb85..f0491aa 100644 --- a/app/Http/Controllers/ConcertOrdersController.php +++ b/app/Http/Controllers/ConcertOrdersController.php @@ -30,17 +30,9 @@ class ConcertOrdersController extends Controller ]); try { - // Find some tickets $reservation = $concert->reserveTickets(request('ticket_quantity'), request('email')); - - // Charge the customer for the tickets - $this->paymentGateway->charge($reservation->totalCost(), request('payment_token')); - - // Create an order for those tickets - $order = $reservation->complete(); - + $order = $reservation->complete($this->paymentGateway, request('payment_token')); return response()->json($order, 201); - } catch (PaymentFailedException $e) { $reservation->cancel(); return response()->json([], 422); diff --git a/app/Reservation.php b/app/Reservation.php index 9abe62c..f6be4d0 100644 --- a/app/Reservation.php +++ b/app/Reservation.php @@ -28,8 +28,10 @@ class Reservation return $this->email; } - public function complete() + public function complete($paymentGateway, $paymentToken) { + $paymentGateway->charge($this->totalCost(), $paymentToken); + return Order::forTickets($this->tickets(), $this->email(), $this->totalCost()); } diff --git a/app/TicketPurchasingService.php b/app/TicketPurchasingService.php deleted file mode 100644 index 5b80eb9..0000000 --- a/app/TicketPurchasingService.php +++ /dev/null @@ -1,25 +0,0 @@ -paymentGateway = $paymentGateway; - } - - public function purchaseTickets($concert, $ticketQuantity, $email, $paymentToken) - { - $reservation = $concert->reserveTickets($ticketQuantity, $email); - - $this->paymentGateway->charge($reservation->totalCost(), $paymentToken); - - return Order::forTickets($reservation->tickets(), $reservation->email(), $reservation->totalCost()); - } -} diff --git a/tests/unit/ReservationTest.php b/tests/unit/ReservationTest.php index 2ff8a53..9205435 100644 --- a/tests/unit/ReservationTest.php +++ b/tests/unit/ReservationTest.php @@ -3,6 +3,7 @@ use App\Ticket; use App\Concert; use App\Reservation; +use App\Billing\FakePaymentGateway; use Illuminate\Foundation\Testing\WithoutMiddleware; use Illuminate\Foundation\Testing\DatabaseMigrations; use Illuminate\Foundation\Testing\DatabaseTransactions; @@ -71,11 +72,13 @@ class ReservationTest extends TestCase $concert = factory(Concert::class)->create(['ticket_price' => 1200]); $tickets = factory(Ticket::class, 3)->create(['concert_id' => $concert->id]); $reservation = new Reservation($tickets, 'john@example.com'); + $paymentGateway = new FakePaymentGateway; - $order = $reservation->complete(); + $order = $reservation->complete($paymentGateway, $paymentGateway->getValidTestToken()); $this->assertEquals('john@example.com', $order->email); $this->assertEquals(3, $order->ticketQuantity()); $this->assertEquals(3600, $order->amount); + $this->assertEquals(3600, $paymentGateway->totalCharges()); } }