50 - Refactor "Long Parameter List" Using "Preserve Whole Object"

This commit is contained in:
Adam Wathan
2016-12-15 14:29:25 -05:00
parent 11c3bfaae7
commit d3b19b31ab
2 changed files with 28 additions and 0 deletions

View File

@@ -22,6 +22,18 @@ 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);

View File

@@ -1,7 +1,9 @@
<?php
use App\Order;
use App\Ticket;
use App\Concert;
use App\Reservation;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
@@ -24,6 +26,20 @@ 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()
{