From 8c6b2cbb248a46db83ebf32de43951acac28ffb7 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Thu, 29 Jun 2017 14:36:27 -0400 Subject: [PATCH] 115 - Driving Out Basic Concert Updates --- .../Backstage/ConcertsController.php | 23 +++++++++ routes/web.php | 4 +- tests/Feature/Backstage/EditConcertTest.php | 49 +++++++++++++++++++ 3 files changed, 75 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/Backstage/ConcertsController.php b/app/Http/Controllers/Backstage/ConcertsController.php index 7030596..7be10bc 100644 --- a/app/Http/Controllers/Backstage/ConcertsController.php +++ b/app/Http/Controllers/Backstage/ConcertsController.php @@ -66,4 +66,27 @@ class ConcertsController extends Controller 'concert' => $concert, ]); } + + public function update($id) + { + $concert = Auth::user()->concerts()->findOrFail($id); + + $concert->update([ + 'title' => request('title'), + 'subtitle' => request('subtitle'), + 'additional_information' => request('additional_information'), + 'date' => Carbon::parse(vsprintf('%s %s', [ + request('date'), + request('time'), + ])), + 'venue' => request('venue'), + 'venue_address' => request('venue_address'), + 'city' => request('city'), + 'state' => request('state'), + 'zip' => request('zip'), + 'ticket_price' => request('ticket_price') * 100, + ]); + + return redirect()->route('backstage.concerts.index'); + } } diff --git a/routes/web.php b/routes/web.php index bb49481..9e0dbd6 100644 --- a/routes/web.php +++ b/routes/web.php @@ -20,8 +20,10 @@ Route::post('/login', 'Auth\LoginController@login')->name('auth.login'); Route::post('/logout', 'Auth\LoginController@logout')->name('auth.logout'); Route::group(['middleware' => 'auth', 'prefix' => 'backstage', 'namespace' => 'Backstage'], function () { - Route::get('/concerts', 'ConcertsController@index'); + Route::get('/concerts', 'ConcertsController@index')->name('backstage.concerts.index'); Route::get('/concerts/new', 'ConcertsController@create')->name('backstage.concerts.new'); Route::post('/concerts', 'ConcertsController@store'); Route::get('/concerts/{id}/edit', 'ConcertsController@edit')->name('backstage.concerts.edit'); }); + +Route::patch('/backstage/concerts/{id}', 'Backstage\ConcertsController@update')->name('backstage.concerts.update'); diff --git a/tests/Feature/Backstage/EditConcertTest.php b/tests/Feature/Backstage/EditConcertTest.php index 4a5ee7d..7b242bd 100644 --- a/tests/Feature/Backstage/EditConcertTest.php +++ b/tests/Feature/Backstage/EditConcertTest.php @@ -131,4 +131,53 @@ class EditConcertTest extends TestCase $this->assertEquals(7250, $concert->ticket_price); }); } + + /** @test */ + function promoters_cannot_edit_other_unpublished_concerts() + { + $user = factory(User::class)->create(); + $otherUser = factory(User::class)->create(); + $concert = factory(Concert::class)->create([ + 'user_id' => $otherUser->id, + 'title' => 'Old title', + 'subtitle' => 'Old subtitle', + 'additional_information' => 'Old additional information', + 'date' => Carbon::parse('2017-01-01 5:00pm'), + 'venue' => 'Old venue', + 'venue_address' => 'Old address', + 'city' => 'Old city', + 'state' => 'Old state', + 'zip' => '00000', + 'ticket_price' => 2000, + ]); + $this->assertFalse($concert->isPublished()); + + $response = $this->actingAs($user)->patch("/backstage/concerts/{$concert->id}", [ + 'title' => 'New title', + 'subtitle' => 'New subtitle', + 'additional_information' => 'New additional information', + 'date' => '2018-12-12', + 'time' => '8:00pm', + 'venue' => 'New venue', + 'venue_address' => 'New address', + 'city' => 'New city', + 'state' => 'New state', + 'zip' => '99999', + 'ticket_price' => '72.50', + ]); + + $response->assertStatus(404); + tap($concert->fresh(), function ($concert) { + $this->assertEquals('Old title', $concert->title); + $this->assertEquals('Old subtitle', $concert->subtitle); + $this->assertEquals('Old additional information', $concert->additional_information); + $this->assertEquals(Carbon::parse('2017-01-01 5:00pm'), $concert->date); + $this->assertEquals('Old venue', $concert->venue); + $this->assertEquals('Old address', $concert->venue_address); + $this->assertEquals('Old city', $concert->city); + $this->assertEquals('Old state', $concert->state); + $this->assertEquals('00000', $concert->zip); + $this->assertEquals(2000, $concert->ticket_price); + }); + } }