diff --git a/app/Http/Controllers/Backstage/PublishedConcertOrdersController.php b/app/Http/Controllers/Backstage/PublishedConcertOrdersController.php new file mode 100644 index 0000000..648b906 --- /dev/null +++ b/app/Http/Controllers/Backstage/PublishedConcertOrdersController.php @@ -0,0 +1,19 @@ +concerts()->published()->findOrFail($concertId); + + return view('backstage.published-concert-orders.index', [ + 'concert' => $concert, + ]); + } +} diff --git a/resources/views/backstage/published-concert-orders/index.blade.php b/resources/views/backstage/published-concert-orders/index.blade.php new file mode 100644 index 0000000..e69de29 diff --git a/routes/web.php b/routes/web.php index 5faf340..856d302 100644 --- a/routes/web.php +++ b/routes/web.php @@ -25,6 +25,8 @@ Route::group(['middleware' => 'auth', 'prefix' => 'backstage', 'namespace' => 'B Route::post('/concerts', 'ConcertsController@store'); Route::get('/concerts/{id}/edit', 'ConcertsController@edit')->name('backstage.concerts.edit'); Route::patch('/concerts/{id}', 'ConcertsController@update')->name('backstage.concerts.update'); + Route::post('/published-concerts', 'PublishedConcertsController@store')->name('backstage.published-concerts.store'); + Route::get('/published-concerts/{id}/orders', 'PublishedConcertOrdersController@index')->name('backstage.published-concert-orders.index'); }); diff --git a/tests/Feature/Backstage/ViewPublishedConcertOrdersTest.php b/tests/Feature/Backstage/ViewPublishedConcertOrdersTest.php new file mode 100644 index 0000000..b15b04f --- /dev/null +++ b/tests/Feature/Backstage/ViewPublishedConcertOrdersTest.php @@ -0,0 +1,62 @@ +disableExceptionHandling(); + $user = factory(User::class)->create(); + $concert = ConcertFactory::createPublished(['user_id' => $user->id]); + + $response = $this->actingAs($user)->get("/backstage/published-concerts/{$concert->id}/orders"); + + $response->assertStatus(200); + $response->assertViewIs('backstage.published-concert-orders.index'); + $this->assertTrue($response->data('concert')->is($concert)); + } + + /** @test */ + function a_promoter_cannot_view_the_orders_of_unpublished_concerts() + { + $user = factory(User::class)->create(); + $concert = ConcertFactory::createUnpublished(['user_id' => $user->id]); + + $response = $this->actingAs($user)->get("/backstage/published-concerts/{$concert->id}/orders"); + + $response->assertStatus(404); + } + + /** @test */ + function a_promoter_cannot_view_the_orders_of_another_published_concert() + { + $user = factory(User::class)->create(); + $otherUser = factory(User::class)->create(); + $concert = ConcertFactory::createPublished(['user_id' => $otherUser->id]); + + $response = $this->actingAs($user)->get("/backstage/published-concerts/{$concert->id}/orders"); + + $response->assertStatus(404); + } + + /** @test */ + function a_guest_cannot_view_the_orders_of_any_published_concert() + { + $concert = ConcertFactory::createPublished(); + + $response = $this->get("/backstage/published-concerts/{$concert->id}/orders"); + + $response->assertRedirect('/login'); + } +} diff --git a/tests/TestCase.php b/tests/TestCase.php index e45b1c8..9112cd3 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -4,6 +4,7 @@ namespace Tests; use Exception; use App\Exceptions\Handler; +use PHPUnit\Framework\Assert; use Illuminate\Foundation\Testing\TestResponse; use Illuminate\Contracts\Debug\ExceptionHandler; @@ -25,6 +26,10 @@ abstract class TestCase extends \Illuminate\Foundation\Testing\TestCase TestResponse::macro('data', function ($key) { return $this->original->getData()[$key]; }); + + TestResponse::macro('assertViewIs', function ($name) { + Assert::assertEquals($name, $this->original->name()); + }); } protected function disableExceptionHandling()