Skip to content

Commit

Permalink
Add hook functions and tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Jennifer Grimes committed Nov 2, 2016
1 parent 590bc97 commit 7991645
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 0 deletions.
22 changes: 22 additions & 0 deletions src/Illuminate/Validation/ValidatesWhenResolvedTrait.php
Expand Up @@ -14,13 +14,15 @@ trait ValidatesWhenResolvedTrait
*/
public function validate()
{
$this->beforeValidation();
$instance = $this->getValidatorInstance();

if (! $this->passesAuthorization()) {
$this->failedAuthorization();
} elseif (! $instance->passes()) {
$this->failedValidation($instance);
}
$this->afterValidation();
}

/**
Expand Down Expand Up @@ -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
}
}
51 changes: 51 additions & 0 deletions tests/Foundation/FoundationFormRequestTest.php
Expand Up @@ -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
Expand All @@ -89,6 +118,11 @@ public function authorize()
{
return true;
}

public function afterValidation()
{
$this->replace(['name' => 'Jeffrey']);
}
}

class FoundationTestFormRequestForbiddenStub extends Illuminate\Foundation\Http\FormRequest
Expand All @@ -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']);
}
}

0 comments on commit 7991645

Please sign in to comment.