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 $dates = ['date'];
public function user()
{
return $this->belongsTo(User::class);
}
public function scopePublished($query)
{
return $query->whereNotNull('published_at');

View File

@@ -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'),

View File

@@ -26,4 +26,9 @@ class User extends Authenticatable
protected $hidden = [
'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) {
return [
'user_id' => function () {
return factory(App\User::class)->create()->id;
},
'title' => 'Example Band',
'subtitle' => 'with The Fake Openers',
'date' => Carbon::parse('+2 weeks'),

View File

@@ -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();

View File

@@ -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);
});
}