Browse Source

Merge pull request #4100 from cakephp/3.0-misc-orm-fixes

3.0 misc orm fixes
Mark Story 11 years ago
parent
commit
168292f732

+ 2 - 1
src/Datasource/EntityTrait.php

@@ -257,7 +257,8 @@ trait EntityTrait {
 		}
 
 		if ($this->_methodExists($method)) {
-			$value = $this->{$method}($value);
+			$result = $this->{$method}($value);
+			return $result;
 		}
 		return $value;
 	}

+ 1 - 1
src/ORM/Table.php

@@ -1199,7 +1199,7 @@ class Table implements RepositoryInterface, EventListener {
 				$this,
 				$entity,
 				$options['associated'],
-				$options->getArrayCopy()
+				['validate' => (bool)$validate] + $options->getArrayCopy()
 			);
 			if ($success || !$options['atomic']) {
 				$entity->clean();

+ 2 - 15
tests/TestCase/ORM/EntityTest.php

@@ -180,7 +180,7 @@ class EntityTest extends TestCase {
  */
 	public function testGetCustomGetters() {
 		$entity = $this->getMock('\Cake\ORM\Entity', ['_getName']);
-		$entity->expects($this->once())->method('_getName')
+		$entity->expects($this->exactly(2))->method('_getName')
 			->with('Jones')
 			->will($this->returnCallback(function($name) {
 				$this->assertSame('Jones', $name);
@@ -188,6 +188,7 @@ class EntityTest extends TestCase {
 			}));
 		$entity->set('name', 'Jones');
 		$this->assertEquals('Dr. Jones', $entity->get('name'));
+		$this->assertEquals('Dr. Jones', $entity->get('name'));
 	}
 
 /**
@@ -250,20 +251,6 @@ class EntityTest extends TestCase {
 	}
 
 /**
- * Test indirectly modifying internal properties with a getter
- *
- * @return void
- */
-	public function testIndirectModificationWithGetter() {
-		$entity = $this->getMock('\Cake\ORM\Entity', ['_getThings']);
-		$entity->expects($this->atLeastOnce())->method('_getThings')
-			->will($this->returnArgument(0));
-		$entity->things = ['a', 'b'];
-		$entity->things[] = 'c';
-		$this->assertEquals(['a', 'b', 'c'], $entity->things);
-	}
-
-/**
  * Tests has() method
  *
  * @return void

+ 12 - 1
tests/TestCase/ORM/TableTest.php

@@ -2136,10 +2136,16 @@ class TableTest extends \Cake\TestSuite\TestCase {
 			'body' => 'bar',
 			'author' => new \Cake\ORM\Entity([
 				'name' => 'Susan'
-			])
+			]),
+			'articles_tags' => [
+				new \Cake\ORM\Entity([
+					'tag_id' => 100
+				])
+			]
 		]);
 		$table = TableRegistry::get('articles');
 		$table->belongsTo('authors');
+		$table->hasMany('ArticlesTags');
 		$validator = (new Validator)->validatePresence('body');
 		$table->validator('custom', $validator);
 
@@ -2147,6 +2153,11 @@ class TableTest extends \Cake\TestSuite\TestCase {
 		$table->authors->validator('default', $validator2);
 		$this->assertFalse($table->save($entity, ['validate' => 'custom']), 'default was not used');
 		$this->assertNotEmpty($entity->author->errors('thing'));
+
+		$table->ArticlesTags->validator('default', $validator2);
+		unset($entity->author);
+		$this->assertFalse($table->save($entity, ['validate' => 'custom']), 'default was not used');
+		$this->assertNotEmpty($entity->articles_tags[0]->errors('thing'));
 	}
 
 /**