diff --git a/app/Http/Controllers/ConcertOrdersController.php b/app/Http/Controllers/ConcertOrdersController.php index 4bea797..3e2eb85 100644 --- a/app/Http/Controllers/ConcertOrdersController.php +++ b/app/Http/Controllers/ConcertOrdersController.php @@ -37,7 +37,7 @@ class ConcertOrdersController extends Controller $this->paymentGateway->charge($reservation->totalCost(), request('payment_token')); // Create an order for those tickets - $order = Order::forTickets($reservation->tickets(), $reservation->email(), $reservation->totalCost()); + $order = $reservation->complete(); return response()->json($order, 201); diff --git a/app/Order.php b/app/Order.php index f8b18d1..d1983ec 100644 --- a/app/Order.php +++ b/app/Order.php @@ -22,18 +22,6 @@ class Order extends Model return $order; } - public static function fromReservation($reservation) - { - $order = self::create([ - 'email' => $reservation->email(), - 'amount' => $reservation->totalCost(), - ]); - - $order->tickets()->saveMany($reservation->tickets()); - - return $order; - } - public function concert() { return $this->belongsTo(Concert::class); diff --git a/app/Reservation.php b/app/Reservation.php index c6f69b6..9abe62c 100644 --- a/app/Reservation.php +++ b/app/Reservation.php @@ -28,6 +28,11 @@ class Reservation return $this->email; } + public function complete() + { + return Order::forTickets($this->tickets(), $this->email(), $this->totalCost()); + } + public function cancel() { foreach ($this->tickets as $ticket) { diff --git a/tests/unit/OrderTest.php b/tests/unit/OrderTest.php index eb94a41..55b95f8 100644 --- a/tests/unit/OrderTest.php +++ b/tests/unit/OrderTest.php @@ -26,20 +26,6 @@ class OrderTest extends TestCase $this->assertEquals(2, $concert->ticketsRemaining()); } - /** @test */ - function creating_an_order_from_a_reservation() - { - $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'); - - $order = Order::fromReservation($reservation); - - $this->assertEquals('john@example.com', $order->email); - $this->assertEquals(3, $order->ticketQuantity()); - $this->assertEquals(3600, $order->amount); - } - /** @test */ function converting_to_an_array() { diff --git a/tests/unit/ReservationTest.php b/tests/unit/ReservationTest.php index 4f0aea2..2ff8a53 100644 --- a/tests/unit/ReservationTest.php +++ b/tests/unit/ReservationTest.php @@ -9,6 +9,8 @@ use Illuminate\Foundation\Testing\DatabaseTransactions; class ReservationTest extends TestCase { + use DatabaseMigrations; + /** @test */ function calculating_the_total_cost() { @@ -62,4 +64,18 @@ class ReservationTest extends TestCase $ticket->shouldHaveReceived('release'); } } + + /** @test */ + function completing_a_reservation() + { + $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'); + + $order = $reservation->complete(); + + $this->assertEquals('john@example.com', $order->email); + $this->assertEquals(3, $order->ticketQuantity()); + $this->assertEquals(3600, $order->amount); + } }