mirror of
https://github.com/nothingworksinc/ticketbeast.git
synced 2026-01-26 03:04:05 +00:00
51 - Green with Feature Envy
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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()
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user