123 - Creating Published Concerts

This commit is contained in:
Adam Wathan
2017-07-10 14:31:14 -04:00
parent f327a322c1
commit 85a81dc0ea
3 changed files with 75 additions and 0 deletions

View File

@@ -0,0 +1,23 @@
<?php
namespace App\Http\Controllers\Backstage;
use App\Concert;
use Carbon\Carbon;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class PublishedConcertsController extends Controller
{
public function store()
{
$concert = Concert::find(request('concert_id'));
if ($concert->isPublished()) {
abort(422);
}
$concert->publish();
return redirect()->route('backstage.concerts.index');
}
}

View File

@@ -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');

View File

@@ -0,0 +1,51 @@
<?php
namespace Tests\Feature\Backstage;
use App\User;
use App\Concert;
use Tests\TestCase;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;
class PublishConcertTest extends TestCase
{
use DatabaseMigrations;
/** @test */
function a_promoter_can_publish_their_own_concert()
{
$user = factory(User::class)->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());
}
}