mirror of
https://github.com/nothingworksinc/ticketbeast.git
synced 2026-01-26 11:14:06 +00:00
108 - Connecting Promoters and Concerts
This commit is contained in:
@@ -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');
|
||||||
|
|||||||
@@ -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'),
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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'),
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user