From ffee09b62aedd0d9cc468f523d20b25de2b9ee56 Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Tue, 4 Jul 2017 10:22:11 -0400 Subject: [PATCH] 117 - Storing the Intended Ticket Quantity --- .../Backstage/ConcertsController.php | 2 + ...016_11_01_200307_create_concerts_table.php | 1 + tests/Feature/Backstage/EditConcertTest.php | 66 +++++++++++++++++++ 3 files changed, 69 insertions(+) diff --git a/app/Http/Controllers/Backstage/ConcertsController.php b/app/Http/Controllers/Backstage/ConcertsController.php index f193273..53855fe 100644 --- a/app/Http/Controllers/Backstage/ConcertsController.php +++ b/app/Http/Controllers/Backstage/ConcertsController.php @@ -79,6 +79,7 @@ class ConcertsController extends Controller 'state' => ['required'], 'zip' => ['required'], 'ticket_price' => ['required', 'numeric', 'min:5'], + 'ticket_quantity' => ['required', 'integer', 'min:1'], ]); $concert = Auth::user()->concerts()->findOrFail($id); @@ -99,6 +100,7 @@ class ConcertsController extends Controller 'state' => request('state'), 'zip' => request('zip'), 'ticket_price' => request('ticket_price') * 100, + 'ticket_quantity' => (int) request('ticket_quantity'), ]); return redirect()->route('backstage.concerts.index'); diff --git a/database/migrations/2016_11_01_200307_create_concerts_table.php b/database/migrations/2016_11_01_200307_create_concerts_table.php index f93c6b3..85faced 100644 --- a/database/migrations/2016_11_01_200307_create_concerts_table.php +++ b/database/migrations/2016_11_01_200307_create_concerts_table.php @@ -26,6 +26,7 @@ class CreateConcertsTable extends Migration $table->string('state'); $table->string('zip'); $table->integer('ticket_price'); + $table->integer('ticket_quantity'); $table->datetime('published_at')->nullable(); $table->timestamps(); }); diff --git a/tests/Feature/Backstage/EditConcertTest.php b/tests/Feature/Backstage/EditConcertTest.php index 7436efa..0606b7e 100644 --- a/tests/Feature/Backstage/EditConcertTest.php +++ b/tests/Feature/Backstage/EditConcertTest.php @@ -117,6 +117,7 @@ class EditConcertTest extends TestCase 'state' => 'Old state', 'zip' => '00000', 'ticket_price' => 2000, + 'ticket_quantity' => 5, ]); $this->assertFalse($concert->isPublished()); @@ -132,6 +133,7 @@ class EditConcertTest extends TestCase 'state' => 'New state', 'zip' => '99999', 'ticket_price' => '72.50', + 'ticket_quantity' => '10', ]); $response->assertRedirect("/backstage/concerts"); @@ -146,6 +148,7 @@ class EditConcertTest extends TestCase $this->assertEquals('New state', $concert->state); $this->assertEquals('99999', $concert->zip); $this->assertEquals(7250, $concert->ticket_price); + $this->assertEquals(10, $concert->ticket_quantity); }); } @@ -606,4 +609,67 @@ class EditConcertTest extends TestCase $this->assertEquals(5250, $concert->ticket_price); }); } + + /** @test */ + function ticket_quantity_is_required() + { + $user = factory(User::class)->create(); + $concert = factory(Concert::class)->create([ + 'user_id' => $user->id, + 'ticket_quantity' => 5, + ]); + $this->assertFalse($concert->isPublished()); + + $response = $this->actingAs($user)->from("/backstage/concerts/{$concert->id}/edit")->patch("/backstage/concerts/{$concert->id}", $this->validParams([ + 'ticket_quantity' => '', + ])); + + $response->assertRedirect("/backstage/concerts/{$concert->id}/edit"); + $response->assertSessionHasErrors('ticket_quantity'); + tap($concert->fresh(), function ($concert) { + $this->assertEquals(5, $concert->ticket_quantity); + }); + } + + /** @test */ + function ticket_quantity_must_be_an_integer() + { + $user = factory(User::class)->create(); + $concert = factory(Concert::class)->create([ + 'user_id' => $user->id, + 'ticket_quantity' => 5, + ]); + $this->assertFalse($concert->isPublished()); + + $response = $this->actingAs($user)->from("/backstage/concerts/{$concert->id}/edit")->patch("/backstage/concerts/{$concert->id}", $this->validParams([ + 'ticket_quantity' => '7.8', + ])); + + $response->assertRedirect("/backstage/concerts/{$concert->id}/edit"); + $response->assertSessionHasErrors('ticket_quantity'); + tap($concert->fresh(), function ($concert) { + $this->assertEquals(5, $concert->ticket_quantity); + }); + } + + /** @test */ + function ticket_quantity_must_be_at_least_1() + { + $user = factory(User::class)->create(); + $concert = factory(Concert::class)->create([ + 'user_id' => $user->id, + 'ticket_quantity' => 5, + ]); + $this->assertFalse($concert->isPublished()); + + $response = $this->actingAs($user)->from("/backstage/concerts/{$concert->id}/edit")->patch("/backstage/concerts/{$concert->id}", $this->validParams([ + 'ticket_quantity' => '0', + ])); + + $response->assertRedirect("/backstage/concerts/{$concert->id}/edit"); + $response->assertSessionHasErrors('ticket_quantity'); + tap($concert->fresh(), function ($concert) { + $this->assertEquals(5, $concert->ticket_quantity); + }); + } }