Skip to content

Commit

Permalink
Fix whitelist to be modifiable from behaviors to work with validate.
Browse files Browse the repository at this point in the history
  • Loading branch information
euromark committed Oct 7, 2013
1 parent 60b0893 commit c621985
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 1 deletion.
6 changes: 5 additions & 1 deletion lib/Cake/Model/ModelValidator.php
Expand Up @@ -249,7 +249,11 @@ public function errors($options = array()) {
return $model->validationErrors;
}

$fieldList = isset($options['fieldList']) ? $options['fieldList'] : array();
$fieldList = $model->whitelist;
if (empty($fieldList) && !empty($options['fieldList'])) {
$fieldList = $options['fieldList'];
}

$exists = $model->exists();
$methods = $this->getMethods();
$fields = $this->_validationList($fieldList);
Expand Down
42 changes: 42 additions & 0 deletions lib/Cake/Test/Case/Model/ModelValidationTest.php
Expand Up @@ -612,6 +612,30 @@ public function testValidatesWithAssociations() {
$this->assertEquals(0, $joinRecords, 'Records were saved on the join table. %s');
}

public function testValidateWithFieldListAndBehavior() {
$TestModel = new ValidationTest1();
$TestModel->validate = array(
'title' => array(
'rule' => 'alphaNumeric',
'required' => true
),
'name' => array(
'rule' => 'alphaNumeric',
'required' => true
));
$TestModel->Behaviors->attach('ValidationRule', array('fields' => array('name')));

$data = array(
'title' => '',
'name' => '',
);
$result = $TestModel->save($data, array('fieldList' => array('title')));
$this->assertFalse($result);

$expected = array('title' => array('This field cannot be left blank'), 'name' => array('This field cannot be left blank'));
$this->assertEquals($expected, $TestModel->validationErrors);
}

/**
* test that saveAll and with models with validation interact well
*
Expand Down Expand Up @@ -2380,3 +2404,21 @@ public function testValidateManyAtomicFalseDeepTrueWithErrors() {
}

}

/**
* Behavior for testing validation rules.
*/
class ValidationRuleBehavior extends ModelBehavior {

public function setup(Model $Model, $config = array()) {
$this->settings[$Model->alias] = $config;
}

public function beforeValidate(Model $Model, $options = array()) {
$fields = $this->settings[$Model->alias]['fields'];
foreach ($fields as $field) {
$Model->whitelist[] = $field;
}
}

}

0 comments on commit c621985

Please sign in to comment.