Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fixing yet another issue related to beforeValidate and

validateAssociated
  • Loading branch information...
commit 111a23274e5c6ab315dabacf87f39dee3d6df621 1 parent 8966f1b
@lorenzo lorenzo authored
View
4 lib/Cake/Model/Model.php
@@ -2357,7 +2357,9 @@ public function validateAssociated(&$data, $options = array()) {
if ($options['deep']) {
$validates = $this->{$association}->validateAssociated($values, $options);
} else {
- $validates = $this->{$association}->create($values) !== null && $this->{$association}->validates($options);
+ $this->{$association}->create(null);
+ $validates = $this->{$association}->set($values) && $this->{$association}->validates($options);
+ $data[$association] = $this->{$association}->data[$this->{$association}->alias];
}
if (is_array($validates)) {
if (in_array(false, $validates, true)) {
View
30 lib/Cake/Test/Case/Model/ModelValidationTest.php
@@ -1127,4 +1127,34 @@ public function testFirstWithDefaults() {
$this->assertEquals($expected['Article'], $result['Article']);
}
+/**
+ * Tests that altering data in a beforeValidate callback will lead to saving those
+ * values in database, this time with belongsTo associations
+ *
+ * @return void
+ */
+ public function testValidateFirstAssociatedWithBeforeValidate2() {
+ $this->loadFixtures('Article', 'User');
+ $model = new CustomArticle();
+ $model->validate = array(
+ 'title' => array(
+ 'notempty' => array(
+ 'rule' => 'notEmpty',
+ 'required' => true
+ )
+ )
+ );
+
+ $data = array(
+ 'User' => array('user' => 'foo', 'password' => 'bar'),
+ 'CustomArticle' => array(
+ 'body' => 'a test'
+ )
+ );
+ $result = $model->saveAll($data, array('validate' => 'first'));
+ $this->assertTrue($result);
+
+ $this->assertEquals('foo', $model->field('title', array('body' => 'a test')));
+ }
+
}
View
1  lib/Cake/Test/Case/Model/ModelWriteTest.php
@@ -5947,6 +5947,7 @@ public function testSaveManyValidateFirstAtomicFalse() {
* @return void
*/
public function testValidateAssociated() {
+ $this->loadFixtures('Attachment', 'Article', 'Comment');
$TestModel = new Comment();
$TestModel->Attachment->validate = array('attachment' => 'notEmpty');
Please sign in to comment.
Something went wrong with that request. Please try again.