diff --git a/app/Concert.php b/app/Concert.php index 4be36e2..5108354 100644 --- a/app/Concert.php +++ b/app/Concert.php @@ -69,7 +69,7 @@ class Concert extends Model public function createOrder($email, $tickets) { - return Order::forTickets($tickets, $email); + return Order::forTickets($tickets, $email, $tickets->sum('price')); } public function addTickets($quantity) diff --git a/app/Http/Controllers/ConcertOrdersController.php b/app/Http/Controllers/ConcertOrdersController.php index 7d43c76..8309212 100644 --- a/app/Http/Controllers/ConcertOrdersController.php +++ b/app/Http/Controllers/ConcertOrdersController.php @@ -29,15 +29,14 @@ class ConcertOrdersController extends Controller ]); try { - // Find some tickets $tickets = $concert->findTickets(request('ticket_quantity')); // Charge the customer for the tickets - $this->paymentGateway->charge(request('ticket_quantity') * $concert->ticket_price, request('payment_token')); + $this->paymentGateway->charge($tickets->sum('price'), request('payment_token')); // Create an order for those tickets - $order = Order::forTickets($tickets, request('email')); + $order = Order::forTickets($tickets, request('email'), $tickets->sum('price')); return response()->json($order, 201); diff --git a/app/Order.php b/app/Order.php index 9d6e4d6..12fe698 100644 --- a/app/Order.php +++ b/app/Order.php @@ -8,11 +8,11 @@ class Order extends Model { protected $guarded = []; - public static function forTickets($tickets, $email) + public static function forTickets($tickets, $email, $amount) { $order = self::create([ 'email' => $email, - 'amount' => $tickets->sum('price'), + 'amount' => $amount, ]); foreach ($tickets as $ticket) { diff --git a/tests/unit/OrderTest.php b/tests/unit/OrderTest.php index 82cf123..63dbebf 100644 --- a/tests/unit/OrderTest.php +++ b/tests/unit/OrderTest.php @@ -11,12 +11,12 @@ class OrderTest extends TestCase use DatabaseMigrations; /** @test */ - function creating_an_order_from_tickets_and_email() + function creating_an_order_from_tickets_email_and_amount() { - $concert = factory(Concert::class)->create(['ticket_price' => 1200])->addTickets(5); + $concert = factory(Concert::class)->create()->addTickets(5); $this->assertEquals(5, $concert->ticketsRemaining()); - $order = Order::forTickets($concert->findTickets(3), 'john@example.com'); + $order = Order::forTickets($concert->findTickets(3), 'john@example.com', 3600); $this->assertEquals('john@example.com', $order->email); $this->assertEquals(3, $order->ticketQuantity());