From 44db85bdb0edefb206fc555566a8a1afe9ac4a99 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Fri, 17 Mar 2017 12:53:42 -0400 Subject: [PATCH] 85 - Storing Charge Details with Orders --- app/Order.php | 5 +++-- app/Reservation.php | 4 ++-- tests/unit/OrderTest.php | 11 ++++++----- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/app/Order.php b/app/Order.php index e996437..7cd469e 100644 --- a/app/Order.php +++ b/app/Order.php @@ -9,12 +9,13 @@ class Order extends Model { protected $guarded = []; - public static function forTickets($tickets, $email, $amount) + public static function forTickets($tickets, $email, $charge) { $order = self::create([ 'confirmation_number' => OrderConfirmationNumber::generate(), 'email' => $email, - 'amount' => $amount, + 'amount' => $charge->amount(), + 'card_last_four' => $charge->cardLastFour(), ]); $order->tickets()->saveMany($tickets); diff --git a/app/Reservation.php b/app/Reservation.php index f6be4d0..7a8e6cc 100644 --- a/app/Reservation.php +++ b/app/Reservation.php @@ -30,9 +30,9 @@ class Reservation public function complete($paymentGateway, $paymentToken) { - $paymentGateway->charge($this->totalCost(), $paymentToken); + $charge = $paymentGateway->charge($this->totalCost(), $paymentToken); - return Order::forTickets($this->tickets(), $this->email(), $this->totalCost()); + return Order::forTickets($this->tickets(), $this->email(), $charge); } public function cancel() diff --git a/tests/unit/OrderTest.php b/tests/unit/OrderTest.php index 7f17e23..8f6c418 100644 --- a/tests/unit/OrderTest.php +++ b/tests/unit/OrderTest.php @@ -4,6 +4,7 @@ use App\Order; use App\Ticket; use App\Concert; use App\Reservation; +use App\Billing\Charge; use Illuminate\Foundation\Testing\WithoutMiddleware; use Illuminate\Foundation\Testing\DatabaseMigrations; use Illuminate\Foundation\Testing\DatabaseTransactions; @@ -14,17 +15,17 @@ class OrderTest extends TestCase use DatabaseMigrations; /** @test */ - function creating_an_order_from_tickets_email_and_amount() + function creating_an_order_from_tickets_email_and_charge() { - $concert = factory(Concert::class)->create()->addTickets(5); - $this->assertEquals(5, $concert->ticketsRemaining()); + $tickets = factory(Ticket::class, 3)->create(); + $charge = new Charge(['amount' => 3600, 'card_last_four' => '1234']); - $order = Order::forTickets($concert->findTickets(3), 'john@example.com', 3600); + $order = Order::forTickets($tickets, 'john@example.com', $charge); $this->assertEquals('john@example.com', $order->email); $this->assertEquals(3, $order->ticketQuantity()); $this->assertEquals(3600, $order->amount); - $this->assertEquals(2, $concert->ticketsRemaining()); + $this->assertEquals('1234', $order->card_last_four); } /** @test */