From 8f0d85e3d2d2f6c83d50d58c8a1b4c980d8fbfc4 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Wed, 19 Jul 2017 15:01:45 -0400 Subject: [PATCH] 127 - Calculating Tickets Sold --- app/Concert.php | 5 +++++ app/Ticket.php | 5 +++++ .../published-concert-orders/index.blade.php | 4 ++-- tests/Unit/ConcertTest.php | 17 ++++++++++++++--- 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/app/Concert.php b/app/Concert.php index aeb5e49..8dac06b 100644 --- a/app/Concert.php +++ b/app/Concert.php @@ -99,4 +99,9 @@ class Concert extends Model { return $this->tickets()->available()->count(); } + + public function ticketsSold() + { + return $this->tickets()->sold()->count(); + } } diff --git a/app/Ticket.php b/app/Ticket.php index 31ffc85..38aa0a9 100644 --- a/app/Ticket.php +++ b/app/Ticket.php @@ -15,6 +15,11 @@ class Ticket extends Model return $query->whereNull('order_id')->whereNull('reserved_at'); } + public function scopeSold($query) + { + return $query->whereNotNull('order_id'); + } + public function reserve() { $this->update(['reserved_at' => Carbon::now()]); diff --git a/resources/views/backstage/published-concert-orders/index.blade.php b/resources/views/backstage/published-concert-orders/index.blade.php index 1df283c..01b2bcf 100644 --- a/resources/views/backstage/published-concert-orders/index.blade.php +++ b/resources/views/backstage/published-concert-orders/index.blade.php @@ -33,7 +33,7 @@

Total Tickets Remaining

- 243 + {{ $concert->ticketsRemaining() }}
@@ -41,7 +41,7 @@

Total Tickets Sold

- 357 + {{ $concert->ticketsSold() }}
diff --git a/tests/Unit/ConcertTest.php b/tests/Unit/ConcertTest.php index c19d422..cf2d2b6 100644 --- a/tests/Unit/ConcertTest.php +++ b/tests/Unit/ConcertTest.php @@ -78,10 +78,21 @@ class ConcertTest extends TestCase function tickets_remaining_does_not_include_tickets_associated_with_an_order() { $concert = factory(Concert::class)->create(); - $concert->tickets()->saveMany(factory(Ticket::class, 30)->create(['order_id' => 1])); - $concert->tickets()->saveMany(factory(Ticket::class, 20)->create(['order_id' => null])); + $concert->tickets()->saveMany(factory(Ticket::class, 3)->create(['order_id' => 1])); + $concert->tickets()->saveMany(factory(Ticket::class, 2)->create(['order_id' => null])); - $this->assertEquals(20, $concert->ticketsRemaining()); + $this->assertEquals(2, $concert->ticketsRemaining()); + } + + /** @test */ + function tickets_sold_only_includes_tickets_associated_with_an_order() + { + $concert = factory(Concert::class)->create(); + $concert->tickets()->saveMany(factory(Ticket::class, 3)->create(['order_id' => 1])); + $concert->tickets()->saveMany(factory(Ticket::class, 2)->create(['order_id' => null])); + + $this->assertEquals(3, $concert->ticketsSold()); + } } /** @test */