From fc6389ca012f984f1f68dd204b366bc0f6f4d600 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Tue, 23 May 2017 10:28:00 -0400 Subject: [PATCH] 108 - Connecting Promoters and Concerts --- app/Concert.php | 5 +++++ .../Controllers/Backstage/ConcertsController.php | 3 ++- app/User.php | 5 +++++ database/factories/ModelFactory.php | 3 +++ .../2016_11_01_200307_create_concerts_table.php | 1 + tests/Feature/Backstage/AddConcertTest.php | 12 +++++++++--- 6 files changed, 25 insertions(+), 4 deletions(-) diff --git a/app/Concert.php b/app/Concert.php index 6339f40..6c9ae03 100644 --- a/app/Concert.php +++ b/app/Concert.php @@ -10,6 +10,11 @@ class Concert extends Model protected $guarded = []; protected $dates = ['date']; + public function user() + { + return $this->belongsTo(User::class); + } + public function scopePublished($query) { return $query->whereNotNull('published_at'); diff --git a/app/Http/Controllers/Backstage/ConcertsController.php b/app/Http/Controllers/Backstage/ConcertsController.php index 16d0dbd..e5e2dfb 100644 --- a/app/Http/Controllers/Backstage/ConcertsController.php +++ b/app/Http/Controllers/Backstage/ConcertsController.php @@ -6,6 +6,7 @@ use App\Concert; use Carbon\Carbon; use Illuminate\Http\Request; use App\Http\Controllers\Controller; +use Illuminate\Support\Facades\Auth; class ConcertsController extends Controller { @@ -29,7 +30,7 @@ class ConcertsController extends Controller 'ticket_quantity' => ['required', 'numeric', 'min:1'], ]); - $concert = Concert::create([ + $concert = Auth::user()->concerts()->create([ 'title' => request('title'), 'subtitle' => request('subtitle'), 'additional_information' => request('additional_information'), diff --git a/app/User.php b/app/User.php index bfd96a6..0e66d16 100644 --- a/app/User.php +++ b/app/User.php @@ -26,4 +26,9 @@ class User extends Authenticatable protected $hidden = [ 'password', 'remember_token', ]; + + public function concerts() + { + return $this->hasMany(Concert::class); + } } diff --git a/database/factories/ModelFactory.php b/database/factories/ModelFactory.php index 876f4b5..65c9018 100644 --- a/database/factories/ModelFactory.php +++ b/database/factories/ModelFactory.php @@ -26,6 +26,9 @@ $factory->define(App\User::class, function (Faker\Generator $faker) { $factory->define(App\Concert::class, function (Faker\Generator $faker) { return [ + 'user_id' => function () { + return factory(App\User::class)->create()->id; + }, 'title' => 'Example Band', 'subtitle' => 'with The Fake Openers', 'date' => Carbon::parse('+2 weeks'), diff --git a/database/migrations/2016_11_01_200307_create_concerts_table.php b/database/migrations/2016_11_01_200307_create_concerts_table.php index f89f4fb..f93c6b3 100644 --- a/database/migrations/2016_11_01_200307_create_concerts_table.php +++ b/database/migrations/2016_11_01_200307_create_concerts_table.php @@ -15,6 +15,7 @@ class CreateConcertsTable extends Migration { Schema::create('concerts', function (Blueprint $table) { $table->increments('id'); + $table->unsignedInteger('user_id'); $table->string('title'); $table->string('subtitle')->nullable(); $table->text('additional_information')->nullable(); diff --git a/tests/Feature/Backstage/AddConcertTest.php b/tests/Feature/Backstage/AddConcertTest.php index 208f4c3..d4a5692 100644 --- a/tests/Feature/Backstage/AddConcertTest.php +++ b/tests/Feature/Backstage/AddConcertTest.php @@ -77,10 +77,12 @@ class AddConcertTest extends TestCase 'ticket_quantity' => '75', ]); - tap(Concert::first(), function ($concert) use ($response) { + tap(Concert::first(), function ($concert) use ($response, $user) { $response->assertStatus(302); $response->assertRedirect("/concerts/{$concert->id}"); + $this->assertTrue($concert->user->is($user)); + $this->assertEquals('No Warning', $concert->title); $this->assertEquals('with Cruel Hand and Backtrack', $concert->subtitle); $this->assertEquals("You must be 19 years of age to attend this concert.", $concert->additional_information); @@ -131,10 +133,12 @@ class AddConcertTest extends TestCase 'subtitle' => '', ])); - tap(Concert::first(), function ($concert) use ($response) { + tap(Concert::first(), function ($concert) use ($response, $user) { $response->assertStatus(302); $response->assertRedirect("/concerts/{$concert->id}"); + $this->assertTrue($concert->user->is($user)); + $this->assertNull($concert->subtitle); }); } @@ -150,10 +154,12 @@ class AddConcertTest extends TestCase 'additional_information' => "", ])); - tap(Concert::first(), function ($concert) use ($response) { + tap(Concert::first(), function ($concert) use ($response, $user) { $response->assertStatus(302); $response->assertRedirect("/concerts/{$concert->id}"); + $this->assertTrue($concert->user->is($user)); + $this->assertNull($concert->additional_information); }); }