108 - Connecting Promoters and Concerts

This commit is contained in:
Adam Wathan
2017-05-23 10:28:00 -04:00
parent 68a1d94540
commit fc6389ca01
6 changed files with 25 additions and 4 deletions

View File

@@ -10,6 +10,11 @@ class Concert extends Model
protected $guarded = []; protected $guarded = [];
protected $dates = ['date']; protected $dates = ['date'];
public function user()
{
return $this->belongsTo(User::class);
}
public function scopePublished($query) public function scopePublished($query)
{ {
return $query->whereNotNull('published_at'); return $query->whereNotNull('published_at');

View File

@@ -6,6 +6,7 @@ use App\Concert;
use Carbon\Carbon; use Carbon\Carbon;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
class ConcertsController extends Controller class ConcertsController extends Controller
{ {
@@ -29,7 +30,7 @@ class ConcertsController extends Controller
'ticket_quantity' => ['required', 'numeric', 'min:1'], 'ticket_quantity' => ['required', 'numeric', 'min:1'],
]); ]);
$concert = Concert::create([ $concert = Auth::user()->concerts()->create([
'title' => request('title'), 'title' => request('title'),
'subtitle' => request('subtitle'), 'subtitle' => request('subtitle'),
'additional_information' => request('additional_information'), 'additional_information' => request('additional_information'),

View File

@@ -26,4 +26,9 @@ class User extends Authenticatable
protected $hidden = [ protected $hidden = [
'password', 'remember_token', 'password', 'remember_token',
]; ];
public function concerts()
{
return $this->hasMany(Concert::class);
}
} }

View File

@@ -26,6 +26,9 @@ $factory->define(App\User::class, function (Faker\Generator $faker) {
$factory->define(App\Concert::class, function (Faker\Generator $faker) { $factory->define(App\Concert::class, function (Faker\Generator $faker) {
return [ return [
'user_id' => function () {
return factory(App\User::class)->create()->id;
},
'title' => 'Example Band', 'title' => 'Example Band',
'subtitle' => 'with The Fake Openers', 'subtitle' => 'with The Fake Openers',
'date' => Carbon::parse('+2 weeks'), 'date' => Carbon::parse('+2 weeks'),

View File

@@ -15,6 +15,7 @@ class CreateConcertsTable extends Migration
{ {
Schema::create('concerts', function (Blueprint $table) { Schema::create('concerts', function (Blueprint $table) {
$table->increments('id'); $table->increments('id');
$table->unsignedInteger('user_id');
$table->string('title'); $table->string('title');
$table->string('subtitle')->nullable(); $table->string('subtitle')->nullable();
$table->text('additional_information')->nullable(); $table->text('additional_information')->nullable();

View File

@@ -77,10 +77,12 @@ class AddConcertTest extends TestCase
'ticket_quantity' => '75', 'ticket_quantity' => '75',
]); ]);
tap(Concert::first(), function ($concert) use ($response) { tap(Concert::first(), function ($concert) use ($response, $user) {
$response->assertStatus(302); $response->assertStatus(302);
$response->assertRedirect("/concerts/{$concert->id}"); $response->assertRedirect("/concerts/{$concert->id}");
$this->assertTrue($concert->user->is($user));
$this->assertEquals('No Warning', $concert->title); $this->assertEquals('No Warning', $concert->title);
$this->assertEquals('with Cruel Hand and Backtrack', $concert->subtitle); $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); $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' => '', 'subtitle' => '',
])); ]));
tap(Concert::first(), function ($concert) use ($response) { tap(Concert::first(), function ($concert) use ($response, $user) {
$response->assertStatus(302); $response->assertStatus(302);
$response->assertRedirect("/concerts/{$concert->id}"); $response->assertRedirect("/concerts/{$concert->id}");
$this->assertTrue($concert->user->is($user));
$this->assertNull($concert->subtitle); $this->assertNull($concert->subtitle);
}); });
} }
@@ -150,10 +154,12 @@ class AddConcertTest extends TestCase
'additional_information' => "", 'additional_information' => "",
])); ]));
tap(Concert::first(), function ($concert) use ($response) { tap(Concert::first(), function ($concert) use ($response, $user) {
$response->assertStatus(302); $response->assertStatus(302);
$response->assertRedirect("/concerts/{$concert->id}"); $response->assertRedirect("/concerts/{$concert->id}");
$this->assertTrue($concert->user->is($user));
$this->assertNull($concert->additional_information); $this->assertNull($concert->additional_information);
}); });
} }