diff --git a/app/Concert.php b/app/Concert.php index 3e5e6a4..7c669fd 100644 --- a/app/Concert.php +++ b/app/Concert.php @@ -9,6 +9,11 @@ class Concert extends Model protected $guarded = []; protected $dates = ['date']; + public function scopePublished($query) + { + return $query->whereNotNull('published_at'); + } + public function getFormattedDateAttribute() { return $this->date->format('F j, Y'); diff --git a/app/Http/Controllers/ConcertsController.php b/app/Http/Controllers/ConcertsController.php index ae93cf3..5972486 100644 --- a/app/Http/Controllers/ConcertsController.php +++ b/app/Http/Controllers/ConcertsController.php @@ -9,7 +9,7 @@ class ConcertsController extends Controller { public function show($id) { - $concert = Concert::whereNotNull('published_at')->findOrFail($id); + $concert = Concert::published()->findOrFail($id); return view('concerts.show', ['concert' => $concert]); } } diff --git a/tests/features/ViewConcertListingTest.php b/tests/features/ViewConcertListingTest.php index 5a774cc..ee18b65 100644 --- a/tests/features/ViewConcertListingTest.php +++ b/tests/features/ViewConcertListingTest.php @@ -11,7 +11,7 @@ class ViewConcertListingTest extends TestCase use DatabaseMigrations; /** @test */ - function user_can_view_a_concert_listing() + function user_can_view_a_published_concert_listing() { $concert = Concert::create([ 'title' => 'The Red Chord', @@ -24,6 +24,7 @@ class ViewConcertListingTest extends TestCase 'state' => 'ON', 'zip' => '17916', 'additional_information' => 'For tickets, call (555) 555-5555.', + 'published_at' => Carbon::parse('-1 week'), ]); $this->visit('/concerts/'.$concert->id); diff --git a/tests/unit/ConcertTest.php b/tests/unit/ConcertTest.php index 29ed9f5..d634a5d 100644 --- a/tests/unit/ConcertTest.php +++ b/tests/unit/ConcertTest.php @@ -8,6 +8,8 @@ use Illuminate\Foundation\Testing\DatabaseTransactions; class ConcertTest extends TestCase { + use DatabaseMigrations; + /** @test */ function can_get_formatted_date() { @@ -37,4 +39,18 @@ class ConcertTest extends TestCase $this->assertEquals('67.50', $concert->ticket_price_in_dollars); } + + /** @test */ + function concerts_with_a_published_at_date_are_published() + { + $publishedConcertA = factory(Concert::class)->create(['published_at' => Carbon::parse('-1 week')]); + $publishedConcertB = factory(Concert::class)->create(['published_at' => Carbon::parse('-1 week')]); + $unpublishedConcert = factory(Concert::class)->create(['published_at' => null]); + + $publishedConcerts = Concert::published()->get(); + + $this->assertTrue($publishedConcerts->contains($publishedConcertA)); + $this->assertTrue($publishedConcerts->contains($publishedConcertB)); + $this->assertFalse($publishedConcerts->contains($unpublishedConcert)); + } }