From 9b48c7f78e391112063aa60222ef3ccd4dcf9709 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Fri, 19 May 2017 13:59:41 -0400 Subject: [PATCH] 104 - Adding a Valid Concert --- .../Backstage/ConcertsController.php | 23 +++++++ routes/web.php | 8 ++- tests/Feature/Backstage/AddConcertTest.php | 63 +++++++++++++++++++ 3 files changed, 91 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/Backstage/ConcertsController.php b/app/Http/Controllers/Backstage/ConcertsController.php index d49c4c6..855ac28 100644 --- a/app/Http/Controllers/Backstage/ConcertsController.php +++ b/app/Http/Controllers/Backstage/ConcertsController.php @@ -2,6 +2,8 @@ namespace App\Http\Controllers\Backstage; +use App\Concert; +use Carbon\Carbon; use Illuminate\Http\Request; use App\Http\Controllers\Controller; @@ -11,4 +13,25 @@ class ConcertsController extends Controller { return view('backstage.concerts.create'); } + + public function store() + { + $concert = Concert::create([ + 'title' => request('title'), + 'subtitle' => request('subtitle'), + 'date' => Carbon::parse(vsprintf('%s %s', [ + request('date'), + request('time'), + ])), + 'ticket_price' => request('ticket_price') * 100, + 'venue' => request('venue'), + 'venue_address' => request('venue_address'), + 'city' => request('city'), + 'state' => request('state'), + 'zip' => request('zip'), + 'additional_information' => request('additional_information'), + ])->addTickets(request('ticket_quantity')); + + return redirect()->route('concerts.show', $concert); + } } diff --git a/routes/web.php b/routes/web.php index 972638c..af2b620 100644 --- a/routes/web.php +++ b/routes/web.php @@ -11,7 +11,7 @@ | */ -Route::get('/concerts/{id}', 'ConcertsController@show'); +Route::get('/concerts/{id}', 'ConcertsController@show')->name('concerts.show'); Route::post('/concerts/{id}/orders', 'ConcertOrdersController@store'); Route::get('/orders/{confirmationNumber}', 'OrdersController@show'); @@ -19,6 +19,8 @@ Route::get('/login', 'Auth\LoginController@showLoginForm')->name('auth.show-logi Route::post('/login', 'Auth\LoginController@login')->name('auth.login'); Route::post('/logout', 'Auth\LoginController@logout')->name('auth.logout'); -Route::group(['middleware' => 'auth'], function () { - Route::get('/backstage/concerts/new', 'Backstage\ConcertsController@create'); +Route::group(['middleware' => 'auth', 'prefix' => 'backstage', 'namespace' => 'Backstage'], function () { + Route::get('/concerts/new', 'ConcertsController@create'); + Route::post('/concerts', 'ConcertsController@store'); }); + diff --git a/tests/Feature/Backstage/AddConcertTest.php b/tests/Feature/Backstage/AddConcertTest.php index 1af3b64..7076494 100644 --- a/tests/Feature/Backstage/AddConcertTest.php +++ b/tests/Feature/Backstage/AddConcertTest.php @@ -30,4 +30,67 @@ class AddConcertTest extends TestCase $response->assertStatus(302); $response->assertRedirect('/login'); } + + /** @test */ + function adding_a_valid_concert() + { + $this->disableExceptionHandling(); + + $user = factory(User::class)->create(); + + $response = $this->actingAs($user)->post('/backstage/concerts', [ + 'title' => 'No Warning', + 'subtitle' => 'with Cruel Hand and Backtrack', + 'additional_information' => "You must be 19 years of age to attend this concert.", + 'date' => '2017-11-18', + 'time' => '8:00pm', + 'venue' => 'The Mosh Pit', + 'venue_address' => '123 Fake St.', + 'city' => 'Laraville', + 'state' => 'ON', + 'zip' => '12345', + 'ticket_price' => '32.50', + 'ticket_quantity' => '75', + ]); + + tap(Concert::first(), function ($concert) use ($response) { + $response->assertStatus(302); + $response->assertRedirect("/concerts/{$concert->id}"); + + $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); + $this->assertEquals(Carbon::parse('2017-11-18 8:00pm'), $concert->date); + $this->assertEquals('The Mosh Pit', $concert->venue); + $this->assertEquals('123 Fake St.', $concert->venue_address); + $this->assertEquals('Laraville', $concert->city); + $this->assertEquals('ON', $concert->state); + $this->assertEquals('12345', $concert->zip); + $this->assertEquals(3250, $concert->ticket_price); + $this->assertEquals(75, $concert->ticketsRemaining()); + }); + } + + /** @test */ + function guests_cannot_add_new_concerts() + { + $response = $this->post('/backstage/concerts', [ + 'title' => 'No Warning', + 'subtitle' => 'with Cruel Hand and Backtrack', + 'additional_information' => "You must be 19 years of age to attend this concert.", + 'date' => '2017-11-18', + 'time' => '8:00pm', + 'venue' => 'The Mosh Pit', + 'venue_address' => '123 Fake St.', + 'city' => 'Laraville', + 'state' => 'ON', + 'zip' => '12345', + 'ticket_price' => '32.50', + 'ticket_quantity' => '75', + ]); + + $response->assertStatus(302); + $response->assertRedirect('/login'); + $this->assertEquals(0, Concert::count()); + } }