From 57e1ce97a72e60105c3119ab078940eebb14db7f Mon Sep 17 00:00:00 2001 From: Adam Wathan Date: Fri, 29 Sep 2017 15:24:47 -0400 Subject: [PATCH] 142 - Optional Files and the Null Object Pattern --- .../Backstage/ConcertsController.php | 3 ++- app/NullFile.php | 11 ++++++++++ tests/Feature/Backstage/AddConcertTest.php | 20 +++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 app/NullFile.php diff --git a/app/Http/Controllers/Backstage/ConcertsController.php b/app/Http/Controllers/Backstage/ConcertsController.php index 2d17427..cfb0892 100644 --- a/app/Http/Controllers/Backstage/ConcertsController.php +++ b/app/Http/Controllers/Backstage/ConcertsController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Backstage; use App\Concert; +use App\NullFile; use Carbon\Carbon; use Illuminate\Http\Request; use Illuminate\Validation\Rule; @@ -55,7 +56,7 @@ class ConcertsController extends Controller 'zip' => request('zip'), 'ticket_price' => request('ticket_price') * 100, 'ticket_quantity' => (int) request('ticket_quantity'), - 'poster_image_path' => request('poster_image')->store('posters', 's3'), + 'poster_image_path' => request('poster_image', new NullFile)->store('posters', 's3'), ]); return redirect()->route('backstage.concerts.index'); diff --git a/app/NullFile.php b/app/NullFile.php new file mode 100644 index 0000000..15db2a7 --- /dev/null +++ b/app/NullFile.php @@ -0,0 +1,11 @@ +assertSessionHasErrors('poster_image'); $this->assertEquals(0, Concert::count()); } + + /** @test */ + function poster_image_is_optional() + { + $this->disableExceptionHandling(); + + $user = factory(User::class)->create(); + + $response = $this->actingAs($user)->post('/backstage/concerts', $this->validParams([ + 'poster_image' => null, + ])); + + tap(Concert::first(), function ($concert) use ($response, $user) { + $response->assertRedirect('/backstage/concerts'); + + $this->assertTrue($concert->user->is($user)); + + $this->assertNull($concert->poster_image_path); + }); + } }