Browse Source

Only enable cacheSources if both the datasource + model agree on it.

This prevents models from flipping cacheSources on when the datasource
has it disabled already.

Refs #2364
mark_story 12 years ago
parent
commit
ec38ee1c48
2 changed files with 5 additions and 4 deletions
  1. 2 1
      lib/Cake/Model/Model.php
  2. 3 3
      lib/Cake/Test/Case/Model/ModelIntegrationTest.php

+ 2 - 1
lib/Cake/Model/Model.php

@@ -843,6 +843,7 @@ class Model extends Object implements CakeEventListener {
 			}
 		}
 
+
 		if (!$className) {
 			return false;
 		}
@@ -1128,7 +1129,7 @@ class Model extends Object implements CakeEventListener {
 
 		if (method_exists($db, 'listSources')) {
 			$restore = $db->cacheSources;
-			$db->cacheSources = $this->cacheSources;
+			$db->cacheSources = ($restore && $this->cacheSources);
 			$sources = $db->listSources();
 			$db->cacheSources = $restore;
 

+ 3 - 3
lib/Cake/Test/Case/Model/ModelIntegrationTest.php

@@ -155,17 +155,17 @@ class ModelIntegrationTest extends BaseModelTest {
 	}
 
 /**
- * Tests that $cacheSources can only be disabled in the db using model settings, not enabled
+ * Tests that $cacheSources is restored despite the settings on the model.
  *
  * @return void
  */
-	public function testCacheSourcesDisabling() {
+	public function testCacheSourcesRestored() {
 		$this->loadFixtures('JoinA', 'JoinB', 'JoinAB', 'JoinC', 'JoinAC');
 		$this->db->cacheSources = true;
 		$TestModel = new JoinA();
 		$TestModel->cacheSources = false;
 		$TestModel->setSource('join_as');
-		$this->assertFalse($this->db->cacheSources);
+		$this->assertTrue($this->db->cacheSources);
 
 		$this->db->cacheSources = false;
 		$TestModel = new JoinA();