From 85a81dc0eab4fd9a9cbd5595371b5126223f0aed Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Mon, 10 Jul 2017 14:31:14 -0400 Subject: [PATCH] 123 - Creating Published Concerts --- .../Backstage/PublishedConcertsController.php | 23 +++++++++ routes/web.php | 1 + .../Feature/Backstage/PublishConcertTest.php | 51 +++++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 app/Http/Controllers/Backstage/PublishedConcertsController.php create mode 100644 tests/Feature/Backstage/PublishConcertTest.php diff --git a/app/Http/Controllers/Backstage/PublishedConcertsController.php b/app/Http/Controllers/Backstage/PublishedConcertsController.php new file mode 100644 index 0000000..6968cd8 --- /dev/null +++ b/app/Http/Controllers/Backstage/PublishedConcertsController.php @@ -0,0 +1,23 @@ +isPublished()) { + abort(422); + } + + $concert->publish(); + return redirect()->route('backstage.concerts.index'); + } +} diff --git a/routes/web.php b/routes/web.php index afe496b..bf67966 100644 --- a/routes/web.php +++ b/routes/web.php @@ -27,3 +27,4 @@ Route::group(['middleware' => 'auth', 'prefix' => 'backstage', 'namespace' => 'B Route::patch('/concerts/{id}', 'ConcertsController@update')->name('backstage.concerts.update'); }); +Route::post('/backstage/published-concerts', 'Backstage\PublishedConcertsController@store'); diff --git a/tests/Feature/Backstage/PublishConcertTest.php b/tests/Feature/Backstage/PublishConcertTest.php new file mode 100644 index 0000000..14d5566 --- /dev/null +++ b/tests/Feature/Backstage/PublishConcertTest.php @@ -0,0 +1,51 @@ +create(); + $concert = factory(Concert::class)->states('unpublished')->create([ + 'user_id' => $user->id, + 'ticket_quantity' => 3, + ]); + + $response = $this->actingAs($user)->post('/backstage/published-concerts', [ + 'concert_id' => $concert->id, + ]); + + $response->assertRedirect('/backstage/concerts'); + $concert = $concert->fresh(); + $this->assertTrue($concert->isPublished()); + $this->assertEquals(3, $concert->ticketsRemaining()); + } + + /** @test */ + function a_concert_can_only_be_published_once() + { + $user = factory(User::class)->create(); + $concert = \ConcertFactory::createPublished([ + 'user_id' => $user->id, + 'ticket_quantity' => 3, + ]); + + $response = $this->actingAs($user)->post('/backstage/published-concerts', [ + 'concert_id' => $concert->id, + ]); + + $response->assertStatus(422); + $this->assertEquals(3, $concert->fresh()->ticketsRemaining()); + } +}