Skip to content

Commit

Permalink
Fixes #424 (#434)
Browse files Browse the repository at this point in the history
* Fixes #424

* Updated tests
  • Loading branch information
bytestream committed Apr 19, 2020
1 parent 686af3b commit a4a1f41
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 4 deletions.
7 changes: 7 additions & 0 deletions config/jsvalidation.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,11 @@
* Whether to escape all validation messages with htmlentities.
*/
'escape' => false,

/*
* Set a default value for the validate ignore property.
*
* See https://jqueryvalidation.org/validate/#ignore
*/
'ignore' => ":hidden, [contenteditable='true']"
];
12 changes: 9 additions & 3 deletions src/Javascript/JavascriptValidator.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class JavascriptValidator implements Arrayable
/**
* Registered validator instance.
*
* @var \Proengsoft\JsValidation\Javascript\ValidatorHandler
* @var ValidatorHandler
*/
protected $validator;

Expand Down Expand Up @@ -45,8 +45,10 @@ class JavascriptValidator implements Arrayable
protected $ignore;

/**
* @param \Proengsoft\JsValidation\Javascript\ValidatorHandler $validator
* @param array $options
* Constructor.
*
* @param ValidatorHandler $validator
* @param array $options
*/
public function __construct(ValidatorHandler $validator, $options = [])
{
Expand All @@ -65,6 +67,10 @@ protected function setDefaults($options)
$this->selector = empty($options['selector']) ? 'form' : $options['selector'];
$this->view = empty($options['view']) ? 'jsvalidation::bootstrap' : $options['view'];
$this->remote = isset($options['remote']) ? $options['remote'] : true;

if (isset($options['ignore'])) {
$this->ignore = $options['ignore'];
}
}

/**
Expand Down
3 changes: 2 additions & 1 deletion src/JsValidatorFactory.php
Original file line number Diff line number Diff line change
Expand Up @@ -207,14 +207,15 @@ protected function jsValidator(Validator $validator, $selector = null)
$remote = ! $this->options['disable_remote_validation'];
$view = $this->options['view'];
$selector = is_null($selector) ? $this->options['form_selector'] : $selector;
$ignore = $this->options['ignore'];

$delegated = new DelegatedValidator($validator, new ValidationRuleParserProxy($validator->getData()));
$rules = new RuleParser($delegated, $this->getSessionToken());
$messages = new MessageParser($delegated, isset($this->options['escape']) ? $this->options['escape'] : false);

$jsValidator = new ValidatorHandler($rules, $messages);

$manager = new JavascriptValidator($jsValidator, compact('view', 'selector', 'remote'));
$manager = new JavascriptValidator($jsValidator, compact('view', 'selector', 'remote', 'ignore'));

return $manager;
}
Expand Down
41 changes: 41 additions & 0 deletions tests/Javascript/JavascriptValidatorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,47 @@ public function testIgnore()
$this->assertEquals($expected,$viewData);
}

/**
* Test the default ignore parameter value.
*
* @return void
*/
public function testIgnoreDefault()
{
$jsValidator = $this->app['jsvalidator']->make([]);

$this->assertArrayHasKey('ignore', $jsValidator->toArray());
$this->assertEquals(":hidden, [contenteditable='true']", $jsValidator->toArray()['ignore']);
}

/**
* Test a custom ignore parameter value.
*
* @return void
*/
public function testIgnoreCustom()
{
$this->app['config']->set('jsvalidation.ignore', ':hidden');
$jsValidator = $this->app['jsvalidator']->make([]);

$this->assertArrayHasKey('ignore', $jsValidator->toArray());
$this->assertEquals(":hidden", $jsValidator->toArray()['ignore']);
}

/**
* Test a custom ignore parameter value.
*
* @return void
*/
public function testIgnoreCustom2()
{
$jsValidator = $this->app['jsvalidator']->make([]);
$jsValidator->ignore(':hidden');

$this->assertArrayHasKey('ignore', $jsValidator->toArray());
$this->assertEquals(":hidden", $jsValidator->toArray()['ignore']);
}

public function testRemote()
{
$remote = true;
Expand Down
6 changes: 6 additions & 0 deletions tests/JsValidatorFactoryTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ public function testMake()
->with('encrypter')
->willReturn(null);

$options = $this->app['config']->get('jsvalidation');
$options['disable_remote_validation'] = false;
$options['view'] = 'jsvalidation::bootstrap';
$options['form_selector'] = 'form';
Expand Down Expand Up @@ -91,6 +92,7 @@ public function testMakeArrayRules()
->with('encrypter')
->willReturn(null);

$options = $this->app['config']->get('jsvalidation');
$options['disable_remote_validation'] = false;
$options['view'] = 'jsvalidation::bootstrap';
$options['form_selector'] = 'form';
Expand Down Expand Up @@ -123,6 +125,7 @@ public function testMakeArrayRulesAndAttributes()
->with('encrypter')
->willReturn(null);

$options = $this->app['config']->get('jsvalidation');
$options['disable_remote_validation'] = false;
$options['view'] = 'jsvalidation::bootstrap';
$options['form_selector'] = 'form';
Expand Down Expand Up @@ -168,6 +171,7 @@ public function testMakeWithToken()
->with('encrypter')
->willReturn($encrypterMock);

$options = $this->app['config']->get('jsvalidation');
$options['disable_remote_validation'] = false;
$options['view'] = 'jsvalidation::bootstrap';
$options['form_selector'] = 'form';
Expand All @@ -186,6 +190,7 @@ public function testCreateFromFormRequestInstance()
$customAttributes = [];
$selector = null;

$options = $this->app['config']->get('jsvalidation');
$options['disable_remote_validation'] = false;
$options['view'] = 'jsvalidation::bootstrap';
$options['form_selector'] = 'form';
Expand Down Expand Up @@ -214,6 +219,7 @@ public function testCreateFromFormRequestClassName()
$customAttributes = [];
$selector = null;

$options = $this->app['config']->get('jsvalidation');
$options['disable_remote_validation'] = false;
$options['view'] = 'jsvalidation::bootstrap';
$options['form_selector'] = 'form';
Expand Down

0 comments on commit a4a1f41

Please sign in to comment.