51 - Green with Feature Envy

This commit is contained in:
Adam Wathan
2016-12-15 17:51:45 -05:00
parent d3b19b31ab
commit 4efdc94e2f
5 changed files with 22 additions and 27 deletions

View File

@@ -37,7 +37,7 @@ class ConcertOrdersController extends Controller
$this->paymentGateway->charge($reservation->totalCost(), request('payment_token')); $this->paymentGateway->charge($reservation->totalCost(), request('payment_token'));
// Create an order for those tickets // Create an order for those tickets
$order = Order::forTickets($reservation->tickets(), $reservation->email(), $reservation->totalCost()); $order = $reservation->complete();
return response()->json($order, 201); return response()->json($order, 201);

View File

@@ -22,18 +22,6 @@ class Order extends Model
return $order; 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() public function concert()
{ {
return $this->belongsTo(Concert::class); return $this->belongsTo(Concert::class);

View File

@@ -28,6 +28,11 @@ class Reservation
return $this->email; return $this->email;
} }
public function complete()
{
return Order::forTickets($this->tickets(), $this->email(), $this->totalCost());
}
public function cancel() public function cancel()
{ {
foreach ($this->tickets as $ticket) { foreach ($this->tickets as $ticket) {

View File

@@ -26,20 +26,6 @@ class OrderTest extends TestCase
$this->assertEquals(2, $concert->ticketsRemaining()); $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 */ /** @test */
function converting_to_an_array() function converting_to_an_array()
{ {

View File

@@ -9,6 +9,8 @@ use Illuminate\Foundation\Testing\DatabaseTransactions;
class ReservationTest extends TestCase class ReservationTest extends TestCase
{ {
use DatabaseMigrations;
/** @test */ /** @test */
function calculating_the_total_cost() function calculating_the_total_cost()
{ {
@@ -62,4 +64,18 @@ class ReservationTest extends TestCase
$ticket->shouldHaveReceived('release'); $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);
}
} }