-
Notifications
You must be signed in to change notification settings - Fork 823
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #4542 from patricknelson/issue-4417-validator-remo…
…ve-validation-master FIX for #4417: Ensuring ->removeValidation() is defined on instances of Validator. Setup new API for enabling/disabling validation. Documentation and better type handling.
- Loading branch information
Showing
4 changed files
with
118 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
<?php | ||
|
||
namespace SilverStripe\Forms\Tests; | ||
|
||
use SilverStripe\Control\Controller; | ||
use SilverStripe\Dev\SapphireTest; | ||
use SilverStripe\Forms\FieldList; | ||
use SilverStripe\Forms\Form; | ||
use SilverStripe\Forms\Tests\ValidatorTest\TestValidator; | ||
use SilverStripe\Forms\TextField; | ||
|
||
/** | ||
* @package framework | ||
* @subpackage tests | ||
*/ | ||
class ValidatorTest extends SapphireTest | ||
{ | ||
|
||
/** | ||
* Common method for setting up form, since that will always be a dependency for the validator. | ||
* | ||
* @param array $fieldNames | ||
* @return Form | ||
*/ | ||
protected function getForm(array $fieldNames = array()) | ||
{ | ||
// Setup field list now. We're only worried about names right now. | ||
$fieldList = new FieldList(); | ||
foreach ($fieldNames as $name) { | ||
$fieldList->add(new TextField($name)); | ||
} | ||
|
||
return new Form(new Controller(), "testForm", $fieldList, new FieldList([/* no actions */])); | ||
} | ||
|
||
|
||
public function testRemoveValidation() | ||
{ | ||
$validator = new TestValidator(); | ||
|
||
// Setup a form with the fields/data we're testing (a form is a dependency for validation right now). | ||
$data = array("foobar" => ""); | ||
$form = $this->getForm(array_keys($data)); // We only care right now about the fields we've got setup in this array. | ||
$form->disableSecurityToken(); | ||
$form->setValidator($validator); // Setup validator now that we've got our form. | ||
$form->loadDataFrom($data); // Put data into the form so the validator can pull it back out again. | ||
|
||
$result = $form->validationResult(); | ||
$this->assertFalse($result->isValid()); | ||
$this->assertCount(1, $result->getMessages()); | ||
|
||
// Make sure it doesn't fail after removing validation AND has no errors (since calling validate should reset errors). | ||
$validator->removeValidation(); | ||
$result = $form->validationResult(); | ||
$this->assertTrue($result->isValid()); | ||
$this->assertEmpty($result->getMessages()); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
<?php | ||
|
||
namespace SilverStripe\Forms\Tests\ValidatorTest; | ||
|
||
use SilverStripe\Dev\TestOnly; | ||
use SilverStripe\Forms\Validator; | ||
|
||
class TestValidator extends Validator implements TestOnly | ||
{ | ||
|
||
/** | ||
* Requires a specific field for test purposes. | ||
* | ||
* @param array $data | ||
* @return null | ||
*/ | ||
public function php($data) | ||
{ | ||
foreach ($data as $field => $data) { | ||
$this->validationError($field, 'error'); | ||
} | ||
} | ||
} |