/** * Tests that counter caches are updated when foreign keys of counted records change * * @access public * @return void */ function testCounterCacheUpdated() { $this->loadFixtures('CounterCacheUser', 'CounterCachePost'); $User = new CounterCacheUser(); $Post = new CounterCachePost(); $data = $Post->find('first', array('conditions' => array('id' => 1), 'recursive' => -1)); $data[$Post->alias]['user_id'] = 301; $Post->save($data); $users = $User->find('all', array('order' => 'User.id')); $this->assertEqual($users[0]['User']['post_count'], 1); $this->assertEqual($users[1]['User']['post_count'], 2); }
public function testToggleBoolFields() { $this->loadFixtures('CounterCacheUser', 'CounterCachePost'); $Post = new CounterCachePost(); $Post->unbindModel(array('belongsTo' => array('User')), true); $true = array('Post' => array('published' => true, 'id' => 2)); $false = array('Post' => array('published' => false, 'id' => 2)); $fields = array('Post.published', 'Post.id'); $updateConditions = array('Post.id' => 2); // check its true $result = $Post->find('first', array('conditions' => $updateConditions, 'fields' => $fields)); $this->assertEquals($true, $result); // Testing without the alias $this->assertTrue($Post->updateAll(array('published' => 'NOT published'), $updateConditions)); $result = $Post->find('first', array('conditions' => $updateConditions, 'fields' => $fields)); $this->assertEquals($false, $result); $this->assertTrue($Post->updateAll(array('published' => 'NOT published'), $updateConditions)); $result = $Post->find('first', array('conditions' => $updateConditions, 'fields' => $fields)); $this->assertEquals($true, $result); $db = ConnectionManager::getDataSource('test'); $alias = $db->name('Post.published'); // Testing with the alias $this->assertTrue($Post->updateAll(array('Post.published' => "NOT {$alias}"), $updateConditions)); $result = $Post->find('first', array('conditions' => $updateConditions, 'fields' => $fields)); $this->assertEquals($false, $result); $this->assertTrue($Post->updateAll(array('Post.published' => "NOT {$alias}"), $updateConditions)); $result = $Post->find('first', array('conditions' => $updateConditions, 'fields' => $fields)); $this->assertEquals($true, $result); }
/** * Tests having multiple counter caches for an associated model * * @access public * @return void */ public function testCounterCacheMultipleCaches() { $this->loadFixtures('CounterCacheUser', 'CounterCachePost'); $User = new CounterCacheUser(); $Post = new CounterCachePost(); $Post->unbindModel(array('belongsTo' => array('User')), false); $Post->bindModel(array('belongsTo' => array('User' => array('className' => 'CounterCacheUser', 'foreignKey' => 'user_id', 'counterCache' => array(true, 'posts_published' => array('Post.published' => true))))), false); // Count Increase $user = $User->find('first', array('conditions' => array('id' => 66), 'recursive' => -1)); $data = array('Post' => array('id' => 22, 'title' => 'New Post', 'user_id' => 66, 'published' => true)); $Post->save($data); $result = $User->find('first', array('conditions' => array('id' => 66), 'recursive' => -1)); $this->assertEquals(3, $result[$User->alias]['post_count']); $this->assertEquals(2, $result[$User->alias]['posts_published']); // Count decrease $Post->delete(1); $result = $User->find('first', array('conditions' => array('id' => 66), 'recursive' => -1)); $this->assertEquals(2, $result[$User->alias]['post_count']); $this->assertEquals(2, $result[$User->alias]['posts_published']); // Count update $data = $Post->find('first', array('conditions' => array('id' => 1), 'recursive' => -1)); $data[$Post->alias]['user_id'] = 301; $Post->save($data); $result = $User->find('all', array('order' => 'User.id')); $this->assertEquals(2, $result[0]['User']['post_count']); $this->assertEquals(1, $result[1]['User']['posts_published']); }