From 799164513891a258e858061fc7f86a415cb38821 Mon Sep 17 00:00:00 2001 From: Jennifer Grimes Date: Wed, 2 Nov 2016 12:59:23 -0700 Subject: [PATCH] Add hook functions and tests --- .../Validation/ValidatesWhenResolvedTrait.php | 22 ++++++++ .../Foundation/FoundationFormRequestTest.php | 51 +++++++++++++++++++ 2 files changed, 73 insertions(+) diff --git a/src/Illuminate/Validation/ValidatesWhenResolvedTrait.php b/src/Illuminate/Validation/ValidatesWhenResolvedTrait.php index 2670325ddb68..d8e53dc11dcc 100644 --- a/src/Illuminate/Validation/ValidatesWhenResolvedTrait.php +++ b/src/Illuminate/Validation/ValidatesWhenResolvedTrait.php @@ -14,6 +14,7 @@ trait ValidatesWhenResolvedTrait */ public function validate() { + $this->beforeValidation(); $instance = $this->getValidatorInstance(); if (! $this->passesAuthorization()) { @@ -21,6 +22,7 @@ public function validate() } elseif (! $instance->passes()) { $this->failedValidation($instance); } + $this->afterValidation(); } /** @@ -71,4 +73,24 @@ protected function failedAuthorization() { throw new UnauthorizedException; } + + /** + * Provide a hook for taking action before validation + * + * @return void + */ + protected function beforeValidation() + { + // no default action + } + + /** + * Provide a hook for taking action after validation + * + * @return void + */ + protected function afterValidation() + { + // no default action + } } diff --git a/tests/Foundation/FoundationFormRequestTest.php b/tests/Foundation/FoundationFormRequestTest.php index c207d0c3354e..c5af91502377 100644 --- a/tests/Foundation/FoundationFormRequestTest.php +++ b/tests/Foundation/FoundationFormRequestTest.php @@ -76,6 +76,35 @@ public function testRedirectResponseIsProperlyCreatedWithGivenErrors() $request->response(['errors']); } + + public function testValidateFunctionRunsBeforeValidationFunction() + { + $request = FoundationTestFormRequestHooks::create('/', 'GET', ['name' => 'abigail']); + $request->setContainer($container = new Container); + $factory = m::mock('Illuminate\Validation\Factory'); + $factory->shouldReceive('make')->once()->with(['name' => 'Taylor'], ['name' => 'required'], [], [])->andReturn( + $validator = m::mock('Illuminate\Validation\Validator') + ); + $container->instance('Illuminate\Contracts\Validation\Factory', $factory); + $validator->shouldReceive('passes')->once()->andReturn(true); + + $request->validate($factory); + } + + public function testValidateFunctionRunsAfterValidationFunctionIfValidationPasses() + { + $request = FoundationTestFormRequestStub::create('/', 'GET', ['name' => 'abigail']); + $request->setContainer($container = new Container); + $factory = m::mock('Illuminate\Validation\Factory'); + $factory->shouldReceive('make')->once()->with(['name' => 'abigail'], ['name' => 'required'], [], [])->andReturn( + $validator = m::mock('Illuminate\Validation\Validator') + ); + $container->instance('Illuminate\Contracts\Validation\Factory', $factory); + $validator->shouldReceive('passes')->once()->andReturn(true); + + $request->validate($factory); + $this->assertSame('Jeffrey', $request->get('name')); + } } class FoundationTestFormRequestStub extends Illuminate\Foundation\Http\FormRequest @@ -89,6 +118,11 @@ public function authorize() { return true; } + + public function afterValidation() + { + $this->replace(['name' => 'Jeffrey']); + } } class FoundationTestFormRequestForbiddenStub extends Illuminate\Foundation\Http\FormRequest @@ -103,3 +137,20 @@ public function authorize() return false; } } +class FoundationTestFormRequestHooks extends Illuminate\Foundation\Http\FormRequest +{ + public function rules() + { + return ['name' => 'required']; + } + + public function authorize() + { + return true; + } + + public function beforeValidation() + { + $this->replace(['name' => 'Taylor']); + } +}