Subversion Repositories SmartDukaan

Rev

Blame | Last modification | View Log | RSS feed

<?php
/**
 * ModelReadTest file
 *
 * CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
 * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 *
 * Licensed under The MIT License
 * For full copyright and license information, please see the LICENSE.txt
 * Redistributions of files must retain the above copyright notice
 *
 * @copyright     Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
 * @link          http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
 * @package       Cake.Test.Case.Model
 * @since         CakePHP(tm) v 1.2.0.4206
 * @license       http://www.opensource.org/licenses/mit-license.php MIT License
 */

require_once dirname(__FILE__) . DS . 'ModelTestBase.php';

/**
 * ModelReadTest
 *
 * @package       Cake.Test.Case.Model
 */
class ModelReadTest extends BaseModelTest {

/**
 * testExists function
 * @return void
 */
        public function testExists() {
                $this->loadFixtures('User');
                $TestModel = new User();

                $this->assertTrue($TestModel->exists(1));

                $TestModel->id = 2;
                $this->assertTrue($TestModel->exists());

                $TestModel->delete();
                $this->assertFalse($TestModel->exists());

                $this->assertFalse($TestModel->exists(2));
        }

/**
 * testFetchingNonUniqueFKJoinTableRecords()
 *
 * Tests if the results are properly returned in the case there are non-unique FK's
 * in the join table but another fields value is different. For example:
 * something_id | something_else_id | doomed = 1
 * something_id | something_else_id | doomed = 0
 * Should return both records and not just one.
 *
 * @return void
 */
        public function testFetchingNonUniqueFKJoinTableRecords() {
                $this->loadFixtures('Something', 'SomethingElse', 'JoinThing');
                $Something = new Something();

                $joinThingData = array(
                        'JoinThing' => array(
                                'something_id' => 1,
                                'something_else_id' => 2,
                                'doomed' => '0',
                                'created' => '2007-03-18 10:39:23',
                                'updated' => '2007-03-18 10:41:31'
                        )
                );

                $Something->JoinThing->create($joinThingData);
                $Something->JoinThing->save();

                $result = $Something->JoinThing->find('all', array('conditions' => array('something_else_id' => 2)));

                $this->assertEquals(true, $result[0]['JoinThing']['doomed']);
                $this->assertEquals(false, $result[1]['JoinThing']['doomed']);

                $result = $Something->find('first');

                $this->assertEquals(2, count($result['SomethingElse']));

                $doomed = Hash::extract($result['SomethingElse'], '{n}.JoinThing.doomed');
                $this->assertTrue(in_array(true, $doomed));
                $this->assertTrue(in_array(false, $doomed));
        }

/**
 * testGroupBy method
 *
 * These tests will never pass with Postgres or Oracle as all fields in a select must be
 * part of an aggregate function or in the GROUP BY statement.
 *
 * @return void
 */
        public function testGroupBy() {
                $isStrictGroupBy = $this->db instanceof Postgres || $this->db instanceof Sqlite || $this->db instanceof Oracle || $this->db instanceof Sqlserver;
                $message = 'Postgres, Oracle, SQLite and SQL Server have strict GROUP BY and are incompatible with this test.';

                $this->skipIf($isStrictGroupBy, $message);

                $this->loadFixtures('Project', 'Product', 'Thread', 'Message', 'Bid');
                $Thread = new Thread();
                $Product = new Product();

                $result = $Thread->find('all', array(
                        'group' => 'Thread.project_id',
                        'order' => 'Thread.id ASC'
                ));

                $expected = array(
                        array(
                                'Thread' => array(
                                        'id' => 1,
                                        'project_id' => 1,
                                        'name' => 'Project 1, Thread 1'
                                ),
                                'Project' => array(
                                        'id' => 1,
                                        'name' => 'Project 1'
                                ),
                                'Message' => array(
                                        array(
                                                'id' => 1,
                                                'thread_id' => 1,
                                                'name' => 'Thread 1, Message 1'
                        ))),
                        array(
                                'Thread' => array(
                                        'id' => 3,
                                        'project_id' => 2,
                                        'name' => 'Project 2, Thread 1'
                                ),
                                'Project' => array(
                                        'id' => 2,
                                        'name' => 'Project 2'
                                ),
                                'Message' => array(
                                        array(
                                                'id' => 3,
                                                'thread_id' => 3,
                                                'name' => 'Thread 3, Message 1'
                ))));
                $this->assertEquals($expected, $result);

                $rows = $Thread->find('all', array(
                        'group' => 'Thread.project_id',
                        'fields' => array('Thread.project_id', 'COUNT(*) AS total')
                ));
                $result = array();
                foreach ($rows as $row) {
                        $result[$row['Thread']['project_id']] = $row[0]['total'];
                }
                $expected = array(
                        1 => 2,
                        2 => 1
                );
                $this->assertEquals($expected, $result);

                $rows = $Thread->find('all', array(
                        'group' => 'Thread.project_id',
                        'fields' => array('Thread.project_id', 'COUNT(*) AS total'),
                        'order' => 'Thread.project_id'
                ));
                $result = array();
                foreach ($rows as $row) {
                        $result[$row['Thread']['project_id']] = $row[0]['total'];
                }
                $expected = array(
                        1 => 2,
                        2 => 1
                );
                $this->assertEquals($expected, $result);

                $result = $Thread->find('all', array(
                        'conditions' => array('Thread.project_id' => 1),
                        'group' => 'Thread.project_id'
                ));
                $expected = array(
                        array(
                                'Thread' => array(
                                        'id' => 1,
                                        'project_id' => 1,
                                        'name' => 'Project 1, Thread 1'
                                ),
                                'Project' => array(
                                        'id' => 1,
                                        'name' => 'Project 1'
                                ),
                                'Message' => array(
                                        array(
                                                'id' => 1,
                                                'thread_id' => 1,
                                                'name' => 'Thread 1, Message 1'
                ))));
                $this->assertEquals($expected, $result);

                $result = $Thread->find('all', array(
                        'conditions' => array('Thread.project_id' => 1),
                        'group' => 'Thread.project_id, Project.id'
                ));
                $this->assertEquals($expected, $result);

                $result = $Thread->find('all', array(
                        'conditions' => array('Thread.project_id' => 1),
                        'group' => 'project_id'
                ));
                $this->assertEquals($expected, $result);

                $result = $Thread->find('all', array(
                        'conditions' => array('Thread.project_id' => 1),
                        'group' => array('project_id')
                ));
                $this->assertEquals($expected, $result);

                $result = $Thread->find('all', array(
                        'conditions' => array('Thread.project_id' => 1),
                        'group' => array('project_id', 'Project.id')
                ));
                $this->assertEquals($expected, $result);

                $result = $Thread->find('all', array(
                        'conditions' => array('Thread.project_id' => 1),
                        'group' => array('Thread.project_id', 'Project.id')
                ));
                $this->assertEquals($expected, $result);

                $expected = array(
                        array('Product' => array('type' => 'Clothing'), array('price' => 32)),
                        array('Product' => array('type' => 'Food'), array('price' => 9)),
                        array('Product' => array('type' => 'Music'), array('price' => 4)),
                        array('Product' => array('type' => 'Toy'), array('price' => 3))
                );
                $result = $Product->find('all', array(
                        'fields' => array('Product.type', 'MIN(Product.price) as price'),
                        'group' => 'Product.type',
                        'order' => 'Product.type ASC'
                        ));
                $this->assertEquals($expected, $result);

                $result = $Product->find('all', array(
                        'fields' => array('Product.type', 'MIN(Product.price) as price'),
                        'group' => array('Product.type'),
                        'order' => 'Product.type ASC'));
                $this->assertEquals($expected, $result);
        }

/**
 * testOldQuery method
 *
 * @return void
 */
        public function testOldQuery() {
                $this->loadFixtures('Article', 'User', 'Tag', 'ArticlesTag', 'Comment', 'Attachment');
                $Article = new Article();

                $query = 'SELECT title FROM ';
                $query .= $this->db->fullTableName('articles');
                $query .= ' WHERE ' . $this->db->fullTableName('articles') . '.id IN (1,2)';

                $results = $Article->query($query);
                $this->assertTrue(is_array($results));
                $this->assertEquals(2, count($results));

                $query = 'SELECT title, body FROM ';
                $query .= $this->db->fullTableName('articles');
                $query .= ' WHERE ' . $this->db->fullTableName('articles') . '.id = 1';

                $results = $Article->query($query, false);
                $this->assertFalse($this->db->getQueryCache($query));
                $this->assertTrue(is_array($results));

                $query = 'SELECT title, id FROM ';
                $query .= $this->db->fullTableName('articles');
                $query .= ' WHERE ' . $this->db->fullTableName('articles');
                $query .= '.published = ' . $this->db->value('Y');

                $results = $Article->query($query, true);
                $result = $this->db->getQueryCache($query);
                $this->assertFalse(empty($result));
                $this->assertTrue(is_array($results));
        }

/**
 * testPreparedQuery method
 *
 * @return void
 */
        public function testPreparedQuery() {
                $this->loadFixtures('Article', 'User', 'Tag', 'ArticlesTag');
                $Article = new Article();

                $query = 'SELECT title, published FROM ';
                $query .= $this->db->fullTableName('articles');
                $query .= ' WHERE ' . $this->db->fullTableName('articles');
                $query .= '.id = ? AND ' . $this->db->fullTableName('articles') . '.published = ?';

                $params = array(1, 'Y');
                $result = $Article->query($query, $params);
                $expected = array(
                        '0' => array(
                                $this->db->fullTableName('articles', false, false) => array(
                                        'title' => 'First Article', 'published' => 'Y')
                ));

                if (isset($result[0][0])) {
                        $expected[0][0] = $expected[0][$this->db->fullTableName('articles', false, false)];
                        unset($expected[0][$this->db->fullTableName('articles', false, false)]);
                }

                $this->assertEquals($expected, $result);
                $result = $this->db->getQueryCache($query, $params);
                $this->assertFalse(empty($result));

                $query = 'SELECT id, created FROM ';
                $query .= $this->db->fullTableName('articles');
                $query .= '  WHERE ' . $this->db->fullTableName('articles') . '.title = ?';

                $params = array('First Article');
                $result = $Article->query($query, $params, false);
                $this->assertTrue(is_array($result));
                $this->assertTrue(
                        isset($result[0][$this->db->fullTableName('articles', false, false)]) ||
                        isset($result[0][0])
                );
                $result = $this->db->getQueryCache($query, $params);
                $this->assertTrue(empty($result));

                $query = 'SELECT title FROM ';
                $query .= $this->db->fullTableName('articles');
                $query .= ' WHERE ' . $this->db->fullTableName('articles') . '.title LIKE ?';

                $params = array('%First%');
                $result = $Article->query($query, $params);
                $this->assertTrue(is_array($result));
                $this->assertTrue(
                        isset($result[0][$this->db->fullTableName('articles', false, false)]['title']) ||
                        isset($result[0][0]['title'])
                );

                //related to ticket #5035
                $query = 'SELECT title FROM ';
                $query .= $this->db->fullTableName('articles') . ' WHERE title = ? AND published = ?';
                $params = array('First? Article', 'Y');
                $Article->query($query, $params);

                $result = $this->db->getQueryCache($query, $params);
                $this->assertFalse($result === false);
        }

/**
 * testParameterMismatch method
 *
 * @expectedException PDOException
 * @return void
 */
        public function testParameterMismatch() {
                $this->skipIf($this->db instanceof Sqlite, 'Sqlite does not accept real prepared statements, no way to check this');
                $this->loadFixtures('Article', 'User', 'Tag', 'ArticlesTag');
                $Article = new Article();

                $query = 'SELECT * FROM ' . $this->db->fullTableName('articles');
                $query .= ' WHERE ' . $this->db->fullTableName('articles');
                $query .= '.published = ? AND ' . $this->db->fullTableName('articles') . '.user_id = ?';
                $params = array('Y');

                $Article->query($query, $params);
        }

/**
 * testVeryStrangeUseCase method
 *
 * @expectedException PDOException
 * @return void
 */
        public function testVeryStrangeUseCase() {
                $this->loadFixtures('Article', 'User', 'Tag', 'ArticlesTag');
                $Article = new Article();

                $query = 'SELECT * FROM ? WHERE ? = ? AND ? = ?';
                $param = array(
                        $this->db->fullTableName('articles'),
                        $this->db->fullTableName('articles') . '.user_id', '3',
                        $this->db->fullTableName('articles') . '.published', 'Y'
                );

                $Article->query($query, $param);
        }

/**
 * testRecursiveUnbind method
 *
 * @return void
 */
        public function testRecursiveUnbind() {
                $this->skipIf($this->db instanceof Sqlserver, 'The test of testRecursiveUnbind test is not compatible with SQL Server, because it check for time columns.');

                $this->loadFixtures('Apple', 'Sample');
                $TestModel = new Apple();
                $TestModel->recursive = 2;

                $result = $TestModel->find('all');
                $expected = array(
                        array(
                                'Apple' => array(
                                        'id' => 1,
                                        'apple_id' => 2,
                                        'color' => 'Red 1',
                                        'name' => 'Red Apple 1',
                                        'created' => '2006-11-22 10:38:58',
                                        'date' => '1951-01-04',
                                        'modified' => '2006-12-01 13:31:26',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => 2,
                                        'apple_id' => 1,
                                        'color' => 'Bright Red 1',
                                        'name' => 'Bright Red Apple',
                                        'created' => '2006-11-22 10:43:13',
                                        'date' => '2014-01-01',
                                        'modified' => '2006-11-30 18:38:10',
                                        'mytime' => '22:57:17',
                                        'Parent' => array(
                                                'id' => 1,
                                                'apple_id' => 2,
                                                'color' => 'Red 1',
                                                'name' => 'Red Apple 1',
                                                'created' => '2006-11-22 10:38:58',
                                                'date' => '1951-01-04',
                                                'modified' => '2006-12-01 13:31:26',
                                                'mytime' => '22:57:17'
                                        ),
                                        'Sample' => array(
                                                'id' => 2,
                                                'apple_id' => 2,
                                                'name' => 'sample2'
                                        ),
                                        'Child' => array(
                                                array(
                                                        'id' => 1,
                                                        'apple_id' => 2,
                                                        'color' => 'Red 1',
                                                        'name' => 'Red Apple 1',
                                                        'created' => '2006-11-22 10:38:58',
                                                        'date' => '1951-01-04',
                                                        'modified' => '2006-12-01 13:31:26',
                                                        'mytime' => '22:57:17'
                                                ),
                                                array(
                                                        'id' => 3,
                                                        'apple_id' => 2,
                                                        'color' => 'blue green',
                                                        'name' => 'green blue',
                                                        'created' => '2006-12-25 05:13:36',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:23:24',
                                                        'mytime' => '22:57:17'
                                                ),
                                                array(
                                                        'id' => 4,
                                                        'apple_id' => 2,
                                                        'color' => 'Blue Green',
                                                        'name' => 'Test Name',
                                                        'created' => '2006-12-25 05:23:36',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:23:36',
                                                        'mytime' => '22:57:17'
                                        ))),
                                        'Sample' => array(
                                                'id' => '',
                                                'apple_id' => '',
                                                'name' => ''
                                        ),
                                        'Child' => array(
                                                array(
                                                        'id' => 2,
                                                        'apple_id' => 1,
                                                        'color' => 'Bright Red 1',
                                                        'name' => 'Bright Red Apple',
                                                        'created' => '2006-11-22 10:43:13',
                                                        'date' => '2014-01-01',
                                                        'modified' => '2006-11-30 18:38:10',
                                                        'mytime' => '22:57:17',
                                                        'Parent' => array(
                                                                'id' => 1,
                                                                'apple_id' => 2,
                                                                'color' => 'Red 1',
                                                                'name' => 'Red Apple 1',
                                                                'created' => '2006-11-22 10:38:58',
                                                                'date' => '1951-01-04',
                                                                'modified' => '2006-12-01 13:31:26',
                                                                'mytime' => '22:57:17'
                                                        ),
                                                        'Sample' => array(
                                                                'id' => 2,
                                                                'apple_id' => 2,
                                                                'name' => 'sample2'
                                                        ),
                                                        'Child' => array(
                                                                array(
                                                                        'id' => 1,
                                                                        'apple_id' => 2,
                                                                        'color' => 'Red 1',
                                                                        'name' => 'Red Apple 1',
                                                                        'created' => '2006-11-22 10:38:58',
                                                                        'date' => '1951-01-04',
                                                                        'modified' => '2006-12-01 13:31:26',
                                                                        'mytime' => '22:57:17'
                                                                ),
                                                                array(
                                                                        'id' => 3,
                                                                        'apple_id' => 2,
                                                                        'color' => 'blue green',
                                                                        'name' => 'green blue',
                                                                        'created' => '2006-12-25 05:13:36',
                                                                        'date' => '2006-12-25',
                                                                        'modified' => '2006-12-25 05:23:24',
                                                                        'mytime' => '22:57:17'
                                                                ),
                                                                array(
                                                                        'id' => 4,
                                                                        'apple_id' => 2,
                                                                        'color' => 'Blue Green',
                                                                        'name' => 'Test Name',
                                                                        'created' => '2006-12-25 05:23:36',
                                                                        'date' => '2006-12-25',
                                                                        'modified' => '2006-12-25 05:23:36',
                                                                        'mytime' => '22:57:17'
                        ))))),
                        array(
                                'Apple' => array(
                                        'id' => 2,
                                        'apple_id' => 1,
                                        'color' => 'Bright Red 1',
                                        'name' => 'Bright Red Apple',
                                        'created' => '2006-11-22 10:43:13',
                                        'date' => '2014-01-01',
                                        'modified' => '2006-11-30 18:38:10',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                                'id' => 1,
                                                'apple_id' => 2,
                                                'color' => 'Red 1',
                                                'name' => 'Red Apple 1',
                                                'created' => '2006-11-22 10:38:58',
                                                'date' => '1951-01-04',
                                                'modified' => '2006-12-01 13:31:26',
                                                'mytime' => '22:57:17',
                                                'Parent' => array(
                                                        'id' => 2,
                                                        'apple_id' => 1,
                                                        'color' => 'Bright Red 1',
                                                        'name' => 'Bright Red Apple',
                                                        'created' => '2006-11-22 10:43:13',
                                                        'date' => '2014-01-01',
                                                        'modified' => '2006-11-30 18:38:10',
                                                        'mytime' => '22:57:17'
                                                ),
                                                'Sample' => array(),
                                                'Child' => array(
                                                        array(
                                                                'id' => 2,
                                                                'apple_id' => 1,
                                                                'color' => 'Bright Red 1',
                                                                'name' => 'Bright Red Apple',
                                                                'created' => '2006-11-22 10:43:13',
                                                                'date' => '2014-01-01',
                                                                'modified' => '2006-11-30 18:38:10',
                                                                'mytime' => '22:57:17'
                                        ))),
                                        'Sample' => array(
                                                'id' => 2,
                                                'apple_id' => 2,
                                                'name' => 'sample2',
                                                'Apple' => array(
                                                        'id' => 2,
                                                        'apple_id' => 1,
                                                        'color' => 'Bright Red 1',
                                                        'name' => 'Bright Red Apple',
                                                        'created' => '2006-11-22 10:43:13',
                                                        'date' => '2014-01-01',
                                                        'modified' => '2006-11-30 18:38:10',
                                                        'mytime' => '22:57:17'
                                        )),
                                        'Child' => array(
                                                array(
                                                        'id' => 1,
                                                        'apple_id' => 2,
                                                        'color' => 'Red 1',
                                                        'name' => 'Red Apple 1',
                                                        'created' => '2006-11-22 10:38:58',
                                                        'date' => '1951-01-04',
                                                        'modified' => '2006-12-01 13:31:26',
                                                        'mytime' => '22:57:17',
                                                        'Parent' => array(
                                                                'id' => 2,
                                                                'apple_id' => 1,
                                                                'color' => 'Bright Red 1',
                                                                'name' => 'Bright Red Apple',
                                                                'created' => '2006-11-22 10:43:13',
                                                                'date' => '2014-01-01',
                                                                'modified' => '2006-11-30 18:38:10',
                                                                'mytime' => '22:57:17'
                                                        ),
                                                        'Sample' => array(),
                                                        'Child' => array(
                                                                array(
                                                                        'id' => 2,
                                                                        'apple_id' => 1,
                                                                        'color' => 'Bright Red 1',
                                                                        'name' => 'Bright Red Apple',
                                                                        'created' => '2006-11-22 10:43:13',
                                                                        'date' => '2014-01-01',
                                                                        'modified' => '2006-11-30 18:38:10',
                                                                        'mytime' => '22:57:17'
                                                ))),
                                                array(
                                                        'id' => 3,
                                                        'apple_id' => 2,
                                                        'color' => 'blue green',
                                                        'name' => 'green blue',
                                                        'created' => '2006-12-25 05:13:36',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:23:24',
                                                        'mytime' => '22:57:17',
                                                        'Parent' => array(
                                                                'id' => 2,
                                                                'apple_id' => 1,
                                                                'color' => 'Bright Red 1',
                                                                'name' => 'Bright Red Apple',
                                                                'created' => '2006-11-22 10:43:13',
                                                                'date' => '2014-01-01',
                                                                'modified' => '2006-11-30 18:38:10',
                                                                'mytime' => '22:57:17'
                                                        ),
                                                        'Sample' => array(
                                                                'id' => 1,
                                                                'apple_id' => 3,
                                                                'name' => 'sample1'
                                                )),
                                                array(
                                                        'id' => 4,
                                                        'apple_id' => 2,
                                                        'color' => 'Blue Green',
                                                        'name' => 'Test Name',
                                                        'created' => '2006-12-25 05:23:36',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:23:36',
                                                        'mytime' => '22:57:17',
                                                        'Parent' => array(
                                                                'id' => 2,
                                                                'apple_id' => 1,
                                                                'color' => 'Bright Red 1',
                                                                'name' => 'Bright Red Apple',
                                                                'created' => '2006-11-22 10:43:13',
                                                                'date' => '2014-01-01',
                                                                'modified' => '2006-11-30 18:38:10',
                                                                'mytime' => '22:57:17'
                                                        ),
                                                        'Sample' => array(
                                                                'id' => 3,
                                                                'apple_id' => 4,
                                                                'name' => 'sample3'
                                                        ),
                                                        'Child' => array(
                                                                array(
                                                                        'id' => 6,
                                                                        'apple_id' => 4,
                                                                        'color' => 'My new appleOrange',
                                                                        'name' => 'My new apple',
                                                                        'created' => '2006-12-25 05:29:39',
                                                                        'date' => '2006-12-25',
                                                                        'modified' => '2006-12-25 05:29:39',
                                                                        'mytime' => '22:57:17'
                        ))))),
                        array(
                                'Apple' => array(
                                        'id' => 3,
                                        'apple_id' => 2,
                                        'color' => 'blue green',
                                        'name' => 'green blue',
                                        'created' => '2006-12-25 05:13:36',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:23:24',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => 2,
                                        'apple_id' => 1,
                                        'color' => 'Bright Red 1',
                                        'name' => 'Bright Red Apple',
                                        'created' => '2006-11-22 10:43:13',
                                        'date' => '2014-01-01',
                                        'modified' => '2006-11-30 18:38:10',
                                        'mytime' => '22:57:17',
                                        'Parent' => array(
                                                'id' => 1,
                                                'apple_id' => 2,
                                                'color' => 'Red 1',
                                                'name' => 'Red Apple 1',
                                                'created' => '2006-11-22 10:38:58',
                                                'date' => '1951-01-04',
                                                'modified' => '2006-12-01 13:31:26',
                                                'mytime' => '22:57:17'
                                        ),
                                        'Sample' => array(
                                                'id' => 2,
                                                'apple_id' => 2,
                                                'name' => 'sample2'
                                        ),
                                        'Child' => array(
                                                array(
                                                        'id' => 1,
                                                        'apple_id' => 2,
                                                        'color' => 'Red 1',
                                                        'name' => 'Red Apple 1',
                                                        'created' => '2006-11-22 10:38:58',
                                                        'date' => '1951-01-04',
                                                        'modified' => '2006-12-01 13:31:26',
                                                        'mytime' => '22:57:17'
                                                ),
                                                array(
                                                        'id' => 3,
                                                        'apple_id' => 2,
                                                        'color' => 'blue green',
                                                        'name' => 'green blue',
                                                        'created' => '2006-12-25 05:13:36',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:23:24',
                                                        'mytime' => '22:57:17'
                                                ),
                                                array(
                                                        'id' => 4,
                                                        'apple_id' => 2,
                                                        'color' => 'Blue Green',
                                                        'name' => 'Test Name',
                                                        'created' => '2006-12-25 05:23:36',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:23:36',
                                                        'mytime' => '22:57:17'
                                ))),
                                'Sample' => array(
                                        'id' => 1,
                                        'apple_id' => 3,
                                        'name' => 'sample1',
                                        'Apple' => array(
                                                'id' => 3,
                                                'apple_id' => 2,
                                                'color' => 'blue green',
                                                'name' => 'green blue',
                                                'created' => '2006-12-25 05:13:36',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:23:24',
                                                'mytime' => '22:57:17'
                                )),
                                'Child' => array()
                        ),
                        array(
                                'Apple' => array(
                                        'id' => 4,
                                        'apple_id' => 2,
                                        'color' => 'Blue Green',
                                        'name' => 'Test Name',
                                        'created' => '2006-12-25 05:23:36',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:23:36',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => 2,
                                        'apple_id' => 1,
                                        'color' => 'Bright Red 1',
                                        'name' => 'Bright Red Apple',
                                        'created' => '2006-11-22 10:43:13',
                                        'date' => '2014-01-01',
                                        'modified' => '2006-11-30 18:38:10',
                                        'mytime' => '22:57:17',
                                        'Parent' => array(
                                                'id' => 1,
                                                'apple_id' => 2,
                                                'color' => 'Red 1',
                                                'name' => 'Red Apple 1',
                                                'created' => '2006-11-22 10:38:58',
                                                'date' => '1951-01-04',
                                                'modified' => '2006-12-01 13:31:26', 'mytime' => '22:57:17'),
                                                'Sample' => array('id' => 2, 'apple_id' => 2, 'name' => 'sample2'),
                                                'Child' => array(
                                                        array(
                                                                'id' => 1,
                                                                'apple_id' => 2,
                                                                'color' => 'Red 1',
                                                                'name' => 'Red Apple 1',
                                                                'created' => '2006-11-22 10:38:58',
                                                                'date' => '1951-01-04',
                                                                'modified' => '2006-12-01 13:31:26',
                                                                'mytime' => '22:57:17'
                                                        ),
                                                        array(
                                                                'id' => 3,
                                                                'apple_id' => 2,
                                                                'color' => 'blue green',
                                                                'name' => 'green blue',
                                                                'created' => '2006-12-25 05:13:36',
                                                                'date' => '2006-12-25',
                                                                'modified' => '2006-12-25 05:23:24',
                                                                'mytime' => '22:57:17'
                                                        ),
                                                        array(
                                                                'id' => 4,
                                                                'apple_id' => 2,
                                                                'color' => 'Blue Green',
                                                                'name' => 'Test Name',
                                                                'created' => '2006-12-25 05:23:36',
                                                                'date' => '2006-12-25',
                                                                'modified' => '2006-12-25 05:23:36',
                                                                'mytime' => '22:57:17'
                                ))),
                                'Sample' => array(
                                        'id' => 3,
                                        'apple_id' => 4,
                                        'name' => 'sample3',
                                        'Apple' => array(
                                                'id' => 4,
                                                'apple_id' => 2,
                                                'color' => 'Blue Green',
                                                'name' => 'Test Name',
                                                'created' => '2006-12-25 05:23:36',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:23:36',
                                                'mytime' => '22:57:17'
                                )),
                                'Child' => array(
                                        array(
                                                'id' => 6,
                                                'apple_id' => 4,
                                                'color' => 'My new appleOrange',
                                                'name' => 'My new apple',
                                                'created' => '2006-12-25 05:29:39',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:29:39',
                                                'mytime' => '22:57:17',
                                                'Parent' => array(
                                                        'id' => 4,
                                                        'apple_id' => 2,
                                                        'color' => 'Blue Green',
                                                        'name' => 'Test Name',
                                                        'created' => '2006-12-25 05:23:36',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:23:36',
                                                        'mytime' => '22:57:17'
                                                ),
                                                'Sample' => array(),
                                                'Child' => array(
                                                        array(
                                                                'id' => 7,
                                                                'apple_id' => 6,
                                                                'color' => 'Some wierd color',
                                                                'name' => 'Some odd color',
                                                                'created' => '2006-12-25 05:34:21',
                                                                'date' => '2006-12-25',
                                                                'modified' => '2006-12-25 05:34:21',
                                                                'mytime' => '22:57:17'
                        ))))),
                        array(
                                'Apple' => array(
                                        'id' => 5,
                                        'apple_id' => 5,
                                        'color' => 'Green',
                                        'name' => 'Blue Green',
                                        'created' => '2006-12-25 05:24:06',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:29:16',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => 5,
                                        'apple_id' => 5,
                                        'color' => 'Green',
                                        'name' => 'Blue Green',
                                        'created' => '2006-12-25 05:24:06',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:29:16',
                                        'mytime' => '22:57:17',
                                        'Parent' => array(
                                                'id' => 5,
                                                'apple_id' => 5,
                                                'color' => 'Green',
                                                'name' => 'Blue Green',
                                                'created' => '2006-12-25 05:24:06',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:29:16',
                                                'mytime' => '22:57:17'
                                        ),
                                        'Sample' => array(
                                                'id' => 4,
                                                'apple_id' => 5,
                                                'name' => 'sample4'
                                        ),
                                        'Child' => array(
                                                array(
                                                        'id' => 5,
                                                        'apple_id' => 5,
                                                        'color' => 'Green',
                                                        'name' => 'Blue Green',
                                                        'created' => '2006-12-25 05:24:06',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:29:16',
                                                        'mytime' => '22:57:17'
                                ))),
                                'Sample' => array(
                                        'id' => 4,
                                        'apple_id' => 5,
                                        'name' => 'sample4',
                                        'Apple' => array(
                                                'id' => 5,
                                                'apple_id' => 5,
                                                'color' => 'Green',
                                                'name' => 'Blue Green',
                                                'created' => '2006-12-25 05:24:06',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:29:16',
                                                'mytime' => '22:57:17'
                                        )),
                                        'Child' => array(
                                                array(
                                                        'id' => 5,
                                                        'apple_id' => 5,
                                                        'color' => 'Green',
                                                        'name' => 'Blue Green',
                                                        'created' => '2006-12-25 05:24:06',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:29:16',
                                                        'mytime' => '22:57:17',
                                                        'Parent' => array(
                                                                'id' => 5,
                                                                'apple_id' => 5,
                                                                'color' => 'Green',
                                                                'name' => 'Blue Green',
                                                                'created' => '2006-12-25 05:24:06',
                                                                'date' => '2006-12-25',
                                                                'modified' => '2006-12-25 05:29:16',
                                                                'mytime' => '22:57:17'
                                                        ),
                                                        'Sample' => array(
                                                                'id' => 4,
                                                                'apple_id' => 5,
                                                                'name' => 'sample4'
                                                        ),
                                                        'Child' => array(
                                                                array(
                                                                        'id' => 5,
                                                                        'apple_id' => 5,
                                                                        'color' => 'Green',
                                                                        'name' => 'Blue Green',
                                                                        'created' => '2006-12-25 05:24:06',
                                                                        'date' => '2006-12-25',
                                                                        'modified' => '2006-12-25 05:29:16',
                                                                        'mytime' => '22:57:17'
                        ))))),
                        array(
                                'Apple' => array(
                                        'id' => 6,
                                        'apple_id' => 4,
                                        'color' => 'My new appleOrange',
                                        'name' => 'My new apple',
                                        'created' => '2006-12-25 05:29:39',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:29:39',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => 4,
                                        'apple_id' => 2,
                                        'color' => 'Blue Green',
                                        'name' => 'Test Name',
                                        'created' => '2006-12-25 05:23:36',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:23:36',
                                        'mytime' => '22:57:17',
                                        'Parent' => array(
                                                'id' => 2,
                                                'apple_id' => 1,
                                                'color' => 'Bright Red 1',
                                                'name' => 'Bright Red Apple',
                                                'created' => '2006-11-22 10:43:13',
                                                'date' => '2014-01-01',
                                                'modified' => '2006-11-30 18:38:10',
                                                'mytime' => '22:57:17'
                                        ),
                                        'Sample' => array(
                                                'id' => 3,
                                                'apple_id' => 4,
                                                'name' => 'sample3'
                                        ),
                                        'Child' => array(
                                                array(
                                                        'id' => 6,
                                                        'apple_id' => 4,
                                                        'color' => 'My new appleOrange',
                                                        'name' => 'My new apple',
                                                        'created' => '2006-12-25 05:29:39',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:29:39',
                                                        'mytime' => '22:57:17'
                                ))),
                                'Sample' => array(
                                        'id' => '',
                                        'apple_id' => '',
                                        'name' => ''
                                ),
                                'Child' => array(
                                        array(
                                                'id' => 7,
                                                'apple_id' => 6,
                                                'color' => 'Some wierd color',
                                                'name' => 'Some odd color',
                                                'created' => '2006-12-25 05:34:21',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:34:21',
                                                'mytime' => '22:57:17',
                                                'Parent' => array(
                                                        'id' => 6,
                                                        'apple_id' => 4,
                                                        'color' => 'My new appleOrange',
                                                        'name' => 'My new apple',
                                                        'created' => '2006-12-25 05:29:39',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:29:39',
                                                        'mytime' => '22:57:17'
                                                ),
                                                'Sample' => array()
                        ))),
                        array(
                                'Apple' => array(
                                        'id' => 7,
                                        'apple_id' => 6,
                                        'color' =>
                                        'Some wierd color',
                                        'name' => 'Some odd color',
                                        'created' => '2006-12-25 05:34:21',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:34:21',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => 6,
                                        'apple_id' => 4,
                                        'color' => 'My new appleOrange',
                                        'name' => 'My new apple',
                                        'created' => '2006-12-25 05:29:39',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:29:39',
                                        'mytime' => '22:57:17',
                                        'Parent' => array(
                                                'id' => 4,
                                                'apple_id' => 2,
                                                'color' => 'Blue Green',
                                                'name' => 'Test Name',
                                                'created' => '2006-12-25 05:23:36',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:23:36',
                                                'mytime' => '22:57:17'
                                        ),
                                        'Sample' => array(),
                                        'Child' => array(
                                                array(
                                                        'id' => 7,
                                                        'apple_id' => 6,
                                                        'color' => 'Some wierd color',
                                                        'name' => 'Some odd color',
                                                        'created' => '2006-12-25 05:34:21',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:34:21',
                                                        'mytime' => '22:57:17'
                                ))),
                                'Sample' => array(
                                        'id' => '',
                                        'apple_id' => '',
                                        'name' => ''
                                ),
                                'Child' => array()));
                $this->assertEquals($expected, $result);

                $result = $TestModel->Parent->unbindModel(array('hasOne' => array('Sample')));
                $this->assertTrue($result);

                $result = $TestModel->find('all');
                $expected = array(
                        array(
                                'Apple' => array(
                                        'id' => 1,
                                        'apple_id' => 2,
                                        'color' => 'Red 1',
                                        'name' => 'Red Apple 1',
                                        'created' => '2006-11-22 10:38:58',
                                        'date' => '1951-01-04',
                                        'modified' => '2006-12-01 13:31:26',
                                        'mytime' => '22:57:17'),
                                        'Parent' => array(
                                                'id' => 2,
                                                'apple_id' => 1,
                                                'color' => 'Bright Red 1',
                                                'name' => 'Bright Red Apple',
                                                'created' => '2006-11-22 10:43:13',
                                                'date' => '2014-01-01',
                                                'modified' => '2006-11-30 18:38:10',
                                                'mytime' => '22:57:17',
                                                'Parent' => array(
                                                        'id' => 1,
                                                        'apple_id' => 2,
                                                        'color' => 'Red 1',
                                                        'name' => 'Red Apple 1',
                                                        'created' => '2006-11-22 10:38:58',
                                                        'date' => '1951-01-04',
                                                        'modified' => '2006-12-01 13:31:26',
                                                        'mytime' => '22:57:17'
                                                ),
                                                'Child' => array(
                                                        array(
                                                                'id' => 1,
                                                                'apple_id' => 2,
                                                                'color' => 'Red 1',
                                                                'name' => 'Red Apple 1',
                                                                'created' => '2006-11-22 10:38:58',
                                                                'date' => '1951-01-04',
                                                                'modified' => '2006-12-01 13:31:26',
                                                                'mytime' => '22:57:17'
                                                        ),
                                                        array(
                                                                'id' => 3,
                                                                'apple_id' => 2,
                                                                'color' => 'blue green',
                                                                'name' => 'green blue',
                                                                'created' => '2006-12-25 05:13:36',
                                                                'date' => '2006-12-25',
                                                                'modified' => '2006-12-25 05:23:24',
                                                                'mytime' => '22:57:17'
                                                        ),
                                                        array(
                                                                'id' => 4,
                                                                'apple_id' => 2,
                                                                'color' => 'Blue Green',
                                                                'name' => 'Test Name',
                                                                'created' => '2006-12-25 05:23:36',
                                                                'date' => '2006-12-25',
                                                                'modified' => '2006-12-25 05:23:36',
                                                                'mytime' => '22:57:17'
                                        ))),
                                        'Sample' => array(
                                                'id' => '',
                                                'apple_id' => '',
                                                'name' => ''
                                        ),
                                        'Child' => array(
                                                array(
                                                        'id' => 2,
                                                        'apple_id' => 1,
                                                        'color' => 'Bright Red 1',
                                                        'name' => 'Bright Red Apple',
                                                        'created' => '2006-11-22 10:43:13',
                                                        'date' => '2014-01-01',
                                                        'modified' => '2006-11-30 18:38:10',
                                                        'mytime' => '22:57:17',
                                                        'Parent' => array(
                                                                'id' => 1,
                                                                'apple_id' => 2,
                                                                'color' => 'Red 1',
                                                                'name' => 'Red Apple 1',
                                                                'created' => '2006-11-22 10:38:58',
                                                                'date' => '1951-01-04',
                                                                'modified' => '2006-12-01 13:31:26',
                                                                'mytime' => '22:57:17'
                                                        ),
                                                        'Sample' => array(
                                                                'id' => 2,
                                                                'apple_id' => 2,
                                                                'name' => 'sample2'
                                                        ),
                                                        'Child' => array(
                                                                array(
                                                                        'id' => 1,
                                                                        'apple_id' => 2,
                                                                        'color' => 'Red 1',
                                                                        'name' => 'Red Apple 1',
                                                                        'created' => '2006-11-22 10:38:58',
                                                                        'date' => '1951-01-04',
                                                                        'modified' => '2006-12-01 13:31:26',
                                                                        'mytime' => '22:57:17'
                                                                ),
                                                                array(
                                                                        'id' => 3,
                                                                        'apple_id' => 2,
                                                                        'color' => 'blue green',
                                                                        'name' => 'green blue',
                                                                        'created' => '2006-12-25 05:13:36',
                                                                        'date' => '2006-12-25',
                                                                        'modified' => '2006-12-25 05:23:24',
                                                                        'mytime' => '22:57:17'
                                                                ),
                                                                array(
                                                                        'id' => 4,
                                                                        'apple_id' => 2,
                                                                        'color' => 'Blue Green',
                                                                        'name' => 'Test Name',
                                                                        'created' => '2006-12-25 05:23:36',
                                                                        'date' => '2006-12-25',
                                                                        'modified' => '2006-12-25 05:23:36',
                                                                        'mytime' => '22:57:17'
                        ))))),
                        array(
                                'Apple' => array(
                                        'id' => 2,
                                        'apple_id' => 1,
                                        'color' => 'Bright Red 1',
                                        'name' => 'Bright Red Apple',
                                        'created' => '2006-11-22 10:43:13',
                                        'date' => '2014-01-01',
                                        'modified' => '2006-11-30 18:38:10',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => 1,
                                        'apple_id' => 2,
                                        'color' => 'Red 1',
                                        'name' => 'Red Apple 1',
                                        'created' => '2006-11-22 10:38:58',
                                        'date' => '1951-01-04',
                                        'modified' => '2006-12-01 13:31:26',
                                        'mytime' => '22:57:17',
                                        'Parent' => array(
                                                'id' => 2,
                                                'apple_id' => 1,
                                                'color' => 'Bright Red 1',
                                                'name' => 'Bright Red Apple',
                                                'created' => '2006-11-22 10:43:13',
                                                'date' => '2014-01-01',
                                                'modified' => '2006-11-30 18:38:10',
                                                'mytime' => '22:57:17'
                                        ),
                                        'Child' => array(
                                                array(
                                                        'id' => 2,
                                                        'apple_id' => 1,
                                                        'color' => 'Bright Red 1',
                                                        'name' => 'Bright Red Apple',
                                                        'created' => '2006-11-22 10:43:13',
                                                        'date' => '2014-01-01',
                                                        'modified' => '2006-11-30 18:38:10',
                                                        'mytime' => '22:57:17'
                                ))),
                                'Sample' => array(
                                        'id' => 2,
                                        'apple_id' => 2,
                                        'name' => 'sample2',
                                        'Apple' => array(
                                                'id' => 2,
                                                'apple_id' => 1,
                                                'color' => 'Bright Red 1',
                                                'name' => 'Bright Red Apple',
                                                'created' => '2006-11-22 10:43:13',
                                                'date' => '2014-01-01',
                                                'modified' => '2006-11-30 18:38:10',
                                                'mytime' => '22:57:17'
                                )),
                                'Child' => array(
                                        array(
                                                'id' => 1,
                                                'apple_id' => 2,
                                                'color' => 'Red 1',
                                                'name' => 'Red Apple 1',
                                                'created' => '2006-11-22 10:38:58',
                                                'date' => '1951-01-04',
                                                'modified' => '2006-12-01 13:31:26',
                                                'mytime' => '22:57:17',
                                                'Parent' => array(
                                                        'id' => 2,
                                                        'apple_id' => 1,
                                                        'color' => 'Bright Red 1',
                                                        'name' => 'Bright Red Apple',
                                                        'created' => '2006-11-22 10:43:13',
                                                        'date' => '2014-01-01',
                                                        'modified' => '2006-11-30 18:38:10',
                                                        'mytime' => '22:57:17'
                                                ),
                                                'Sample' => array(),
                                                'Child' => array(
                                                        array(
                                                                'id' => 2,
                                                                'apple_id' => 1,
                                                                'color' => 'Bright Red 1',
                                                                'name' => 'Bright Red Apple',
                                                                'created' => '2006-11-22 10:43:13',
                                                                'date' => '2014-01-01', 'modified' =>
                                                                '2006-11-30 18:38:10',
                                                                'mytime' => '22:57:17'
                                        ))),
                                        array(
                                                'id' => 3,
                                                'apple_id' => 2,
                                                'color' => 'blue green',
                                                'name' => 'green blue',
                                                'created' => '2006-12-25 05:13:36',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:23:24',
                                                'mytime' => '22:57:17',
                                                'Parent' => array(
                                                        'id' => 2,
                                                        'apple_id' => 1,
                                                        'color' => 'Bright Red 1',
                                                        'name' => 'Bright Red Apple',
                                                        'created' => '2006-11-22 10:43:13',
                                                        'date' => '2014-01-01',
                                                        'modified' => '2006-11-30 18:38:10',
                                                        'mytime' => '22:57:17'
                                                ),
                                                'Sample' => array(
                                                        'id' => 1,
                                                        'apple_id' => 3,
                                                        'name' => 'sample1'
                                        )),
                                        array(
                                                'id' => 4,
                                                'apple_id' => 2,
                                                'color' => 'Blue Green',
                                                'name' => 'Test Name',
                                                'created' => '2006-12-25 05:23:36',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:23:36',
                                                'mytime' => '22:57:17',
                                                'Parent' => array(
                                                        'id' => 2,
                                                        'apple_id' => 1,
                                                        'color' => 'Bright Red 1',
                                                        'name' => 'Bright Red Apple',
                                                        'created' => '2006-11-22 10:43:13',
                                                        'date' => '2014-01-01',
                                                        'modified' => '2006-11-30 18:38:10',
                                                        'mytime' => '22:57:17'
                                                ),
                                                'Sample' => array(
                                                        'id' => 3,
                                                        'apple_id' => 4,
                                                        'name' => 'sample3'
                                                ),
                                                'Child' => array(
                                                        array(
                                                                'id' => 6,
                                                                'apple_id' => 4,
                                                                'color' => 'My new appleOrange',
                                                                'name' => 'My new apple',
                                                                'created' => '2006-12-25 05:29:39',
                                                                'date' => '2006-12-25',
                                                                'modified' => '2006-12-25 05:29:39',
                                                                'mytime' => '22:57:17'
                        ))))),
                        array(
                                'Apple' => array(
                                        'id' => 3,
                                        'apple_id' => 2,
                                        'color' => 'blue green',
                                        'name' => 'green blue',
                                        'created' => '2006-12-25 05:13:36',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:23:24',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => 2,
                                        'apple_id' => 1,
                                        'color' => 'Bright Red 1',
                                        'name' => 'Bright Red Apple',
                                        'created' => '2006-11-22 10:43:13',
                                        'date' => '2014-01-01',
                                        'modified' => '2006-11-30 18:38:10',
                                        'mytime' => '22:57:17',
                                        'Parent' => array(
                                                'id' => 1,
                                                'apple_id' => 2,
                                                'color' => 'Red 1',
                                                'name' => 'Red Apple 1',
                                                'created' => '2006-11-22 10:38:58',
                                                'date' => '1951-01-04',
                                                'modified' => '2006-12-01 13:31:26',
                                                'mytime' => '22:57:17'
                                        ),
                                        'Child' => array(
                                                array(
                                                        'id' => 1,
                                                        'apple_id' => 2,
                                                        'color' => 'Red 1',
                                                        'name' => 'Red Apple 1',
                                                        'created' => '2006-11-22 10:38:58',
                                                        'date' => '1951-01-04',
                                                        'modified' => '2006-12-01 13:31:26',
                                                        'mytime' => '22:57:17'
                                                ),
                                                array(
                                                        'id' => 3,
                                                        'apple_id' => 2,
                                                        'color' => 'blue green',
                                                        'name' => 'green blue',
                                                        'created' => '2006-12-25 05:13:36',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:23:24',
                                                        'mytime' => '22:57:17'
                                                ),
                                                array(
                                                        'id' => 4,
                                                        'apple_id' => 2,
                                                        'color' => 'Blue Green',
                                                        'name' => 'Test Name',
                                                        'created' => '2006-12-25 05:23:36',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:23:36',
                                                        'mytime' => '22:57:17'
                                ))),
                                'Sample' => array(
                                        'id' => 1,
                                        'apple_id' => 3,
                                        'name' => 'sample1',
                                        'Apple' => array(
                                                'id' => 3,
                                                'apple_id' => 2,
                                                'color' => 'blue green',
                                                'name' => 'green blue',
                                                'created' => '2006-12-25 05:13:36',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:23:24',
                                                'mytime' => '22:57:17'
                                )),
                                'Child' => array()
                        ),
                        array(
                                'Apple' => array(
                                        'id' => 4,
                                        'apple_id' => 2,
                                        'color' => 'Blue Green',
                                        'name' => 'Test Name',
                                        'created' => '2006-12-25 05:23:36',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:23:36',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => 2,
                                        'apple_id' => 1,
                                        'color' => 'Bright Red 1',
                                        'name' => 'Bright Red Apple',
                                        'created' => '2006-11-22 10:43:13',
                                        'date' => '2014-01-01',
                                        'modified' => '2006-11-30 18:38:10',
                                        'mytime' => '22:57:17',
                                        'Parent' => array(
                                                'id' => 1,
                                                'apple_id' => 2,
                                                'color' => 'Red 1',
                                                'name' => 'Red Apple 1',
                                                'created' => '2006-11-22 10:38:58',
                                                'date' => '1951-01-04',
                                                'modified' => '2006-12-01 13:31:26',
                                                'mytime' => '22:57:17'
                                        ),
                                        'Child' => array(
                                                array(
                                                        'id' => 1,
                                                        'apple_id' => 2,
                                                        'color' => 'Red 1',
                                                        'name' => 'Red Apple 1',
                                                        'created' => '2006-11-22 10:38:58',
                                                        'date' => '1951-01-04',
                                                        'modified' => '2006-12-01 13:31:26',
                                                        'mytime' => '22:57:17'
                                                ),
                                                array(
                                                        'id' => 3,
                                                        'apple_id' => 2,
                                                        'color' => 'blue green',
                                                        'name' => 'green blue',
                                                        'created' => '2006-12-25 05:13:36',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:23:24',
                                                        'mytime' => '22:57:17'
                                                ),
                                                array(
                                                        'id' => 4,
                                                        'apple_id' => 2,
                                                        'color' => 'Blue Green',
                                                        'name' => 'Test Name',
                                                        'created' => '2006-12-25 05:23:36',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:23:36',
                                                        'mytime' => '22:57:17'
                                ))),
                                'Sample' => array(
                                        'id' => 3,
                                        'apple_id' => 4,
                                        'name' => 'sample3',
                                        'Apple' => array(
                                                'id' => 4,
                                                'apple_id' => 2,
                                                'color' => 'Blue Green',
                                                'name' => 'Test Name',
                                                'created' => '2006-12-25 05:23:36',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:23:36',
                                                'mytime' => '22:57:17'
                                )),
                                'Child' => array(
                                        array(
                                                'id' => 6,
                                                'apple_id' => 4,
                                                'color' => 'My new appleOrange',
                                                'name' => 'My new apple',
                                                'created' => '2006-12-25 05:29:39',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:29:39',
                                                'mytime' => '22:57:17',
                                                'Parent' => array(
                                                        'id' => 4,
                                                        'apple_id' => 2,
                                                        'color' => 'Blue Green',
                                                        'name' => 'Test Name',
                                                        'created' => '2006-12-25 05:23:36',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:23:36',
                                                        'mytime' => '22:57:17'
                                                ),
                                                'Sample' => array(),
                                                        'Child' => array(
                                                                array(
                                                                        'id' => 7,
                                                                        'apple_id' => 6,
                                                                        'color' => 'Some wierd color',
                                                                        'name' => 'Some odd color',
                                                                        'created' => '2006-12-25 05:34:21',
                                                                        'date' => '2006-12-25',
                                                                        'modified' => '2006-12-25 05:34:21',
                                                                        'mytime' => '22:57:17'
                        ))))),
                        array(
                                'Apple' => array(
                                        'id' => 5,
                                        'apple_id' => 5,
                                        'color' => 'Green',
                                        'name' => 'Blue Green',
                                        'created' => '2006-12-25 05:24:06',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:29:16',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => 5,
                                        'apple_id' => 5,
                                        'color' => 'Green',
                                        'name' => 'Blue Green',
                                        'created' => '2006-12-25 05:24:06',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:29:16',
                                        'mytime' => '22:57:17',
                                        'Parent' => array(
                                                'id' => 5,
                                                'apple_id' => 5,
                                                'color' => 'Green',
                                                'name' => 'Blue Green',
                                                'created' => '2006-12-25 05:24:06',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:29:16',
                                                'mytime' => '22:57:17'
                                        ),
                                        'Child' => array(
                                                array(
                                                        'id' => 5,
                                                        'apple_id' => 5,
                                                        'color' => 'Green',
                                                        'name' => 'Blue Green',
                                                        'created' => '2006-12-25 05:24:06',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:29:16',
                                                        'mytime' => '22:57:17'
                                ))),
                                'Sample' => array(
                                        'id' => 4,
                                        'apple_id' => 5,
                                        'name' => 'sample4',
                                        'Apple' => array(
                                                'id' => 5,
                                                'apple_id' => 5,
                                                'color' => 'Green',
                                                'name' => 'Blue Green',
                                                'created' => '2006-12-25 05:24:06',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:29:16',
                                                'mytime' => '22:57:17'
                                )),
                                'Child' => array(
                                        array(
                                                'id' => 5,
                                                'apple_id' => 5,
                                                'color' => 'Green',
                                                'name' => 'Blue Green',
                                                'created' => '2006-12-25 05:24:06',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:29:16',
                                                'mytime' => '22:57:17',
                                                'Parent' => array(
                                                        'id' => 5,
                                                        'apple_id' => 5,
                                                        'color' => 'Green',
                                                        'name' => 'Blue Green',
                                                        'created' => '2006-12-25 05:24:06',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:29:16',
                                                        'mytime' => '22:57:17'
                                                ),
                                                'Sample' => array(
                                                        'id' => 4,
                                                        'apple_id' => 5,
                                                        'name' => 'sample4'
                                                ),
                                                'Child' => array(
                                                        array(
                                                                'id' => 5,
                                                                'apple_id' => 5,
                                                                'color' => 'Green',
                                                                'name' => 'Blue Green',
                                                                'created' => '2006-12-25 05:24:06',
                                                                'date' => '2006-12-25',
                                                                'modified' => '2006-12-25 05:29:16',
                                                                'mytime' => '22:57:17'
                        ))))),
                        array(
                                'Apple' => array(
                                        'id' => 6,
                                        'apple_id' => 4,
                                        'color' => 'My new appleOrange',
                                        'name' => 'My new apple',
                                        'created' => '2006-12-25 05:29:39',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:29:39',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => 4,
                                        'apple_id' => 2,
                                        'color' => 'Blue Green',
                                        'name' => 'Test Name',
                                        'created' => '2006-12-25 05:23:36',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:23:36',
                                        'mytime' => '22:57:17',
                                        'Parent' => array(
                                                'id' => 2,
                                                'apple_id' => 1,
                                                'color' => 'Bright Red 1',
                                                'name' => 'Bright Red Apple',
                                                'created' => '2006-11-22 10:43:13',
                                                'date' => '2014-01-01',
                                                'modified' => '2006-11-30 18:38:10',
                                                'mytime' => '22:57:17'
                                        ),
                                        'Child' => array(
                                                array(
                                                        'id' => 6,
                                                        'apple_id' => 4,
                                                        'color' => 'My new appleOrange',
                                                        'name' => 'My new apple',
                                                        'created' => '2006-12-25 05:29:39',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:29:39',
                                                        'mytime' => '22:57:17'
                                ))),
                                'Sample' => array(
                                        'id' => '',
                                        'apple_id' => '',
                                        'name' => ''
                                ),
                                'Child' => array(
                                        array(
                                                'id' => 7,
                                                'apple_id' => 6,
                                                'color' => 'Some wierd color',
                                                'name' => 'Some odd color',
                                                'created' => '2006-12-25 05:34:21',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:34:21',
                                                'mytime' => '22:57:17',
                                                'Parent' => array(
                                                        'id' => 6,
                                                        'apple_id' => 4,
                                                        'color' => 'My new appleOrange',
                                                        'name' => 'My new apple',
                                                        'created' => '2006-12-25 05:29:39',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:29:39',
                                                        'mytime' => '22:57:17'
                                                ),
                                                'Sample' => array()
                        ))),
                        array(
                                'Apple' => array(
                                        'id' => 7,
                                        'apple_id' => 6,
                                        'color' => 'Some wierd color',
                                        'name' => 'Some odd color',
                                        'created' => '2006-12-25 05:34:21',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:34:21',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => 6,
                                        'apple_id' => 4,
                                        'color' => 'My new appleOrange',
                                        'name' => 'My new apple',
                                        'created' => '2006-12-25 05:29:39',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:29:39',
                                        'mytime' => '22:57:17',
                                        'Parent' => array(
                                                'id' => 4,
                                                'apple_id' => 2,
                                                'color' => 'Blue Green',
                                                'name' => 'Test Name',
                                                'created' => '2006-12-25 05:23:36',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:23:36',
                                                'mytime' => '22:57:17'
                                        ),
                                        'Child' => array(
                                                array(
                                                        'id' => 7,
                                                        'apple_id' => 6,
                                                        'color' => 'Some wierd color',
                                                        'name' => 'Some odd color',
                                                        'created' => '2006-12-25 05:34:21',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:34:21',
                                                        'mytime' => '22:57:17'
                                ))),
                                'Sample' => array(
                                        'id' => '',
                                        'apple_id' => '',
                                        'name' => ''
                                ),
                                'Child' => array()
                ));

                $this->assertEquals($expected, $result);

                $result = $TestModel->Parent->unbindModel(array('hasOne' => array('Sample')));
                $this->assertTrue($result);

                $result = $TestModel->unbindModel(array('hasMany' => array('Child')));
                $this->assertTrue($result);

                $result = $TestModel->find('all');
                $expected = array(
                        array(
                                'Apple' => array(
                                        'id' => 1,
                                        'apple_id' => 2,
                                        'color' => 'Red 1',
                                        'name' => 'Red Apple 1',
                                        'created' => '2006-11-22 10:38:58',
                                        'date' => '1951-01-04',
                                        'modified' => '2006-12-01 13:31:26',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => 2,
                                        'apple_id' => 1,
                                        'color' => 'Bright Red 1',
                                        'name' => 'Bright Red Apple',
                                        'created' => '2006-11-22 10:43:13',
                                        'date' => '2014-01-01',
                                        'modified' => '2006-11-30 18:38:10',
                                        'mytime' => '22:57:17',
                                        'Parent' => array(
                                                'id' => 1,
                                                'apple_id' => 2,
                                                'color' => 'Red 1',
                                                'name' => 'Red Apple 1',
                                                'created' => '2006-11-22 10:38:58',
                                                'date' => '1951-01-04',
                                                'modified' => '2006-12-01 13:31:26',
                                                'mytime' => '22:57:17'
                                        ),
                                        'Child' => array(
                                                array(
                                                        'id' => 1,
                                                        'apple_id' => 2,
                                                        'color' => 'Red 1',
                                                        'name' => 'Red Apple 1',
                                                        'created' => '2006-11-22 10:38:58',
                                                        'date' => '1951-01-04',
                                                        'modified' => '2006-12-01 13:31:26',
                                                        'mytime' => '22:57:17'
                                                ),
                                                array(
                                                        'id' => 3,
                                                        'apple_id' => 2,
                                                        'color' => 'blue green',
                                                        'name' => 'green blue',
                                                        'created' => '2006-12-25 05:13:36',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:23:24',
                                                        'mytime' => '22:57:17'
                                                ),
                                                array(
                                                        'id' => 4,
                                                        'apple_id' => 2,
                                                        'color' => 'Blue Green',
                                                        'name' => 'Test Name',
                                                        'created' => '2006-12-25 05:23:36',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:23:36',
                                                        'mytime' => '22:57:17'
                                ))),
                                'Sample' => array(
                                        'id' => '',
                                        'apple_id' => '',
                                        'name' => ''
                        )),
                        array(
                                'Apple' => array(
                                        'id' => 2,
                                        'apple_id' => 1,
                                        'color' => 'Bright Red 1',
                                        'name' => 'Bright Red Apple',
                                        'created' => '2006-11-22 10:43:13',
                                        'date' => '2014-01-01',
                                        'modified' => '2006-11-30 18:38:10',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => 1,
                                        'apple_id' => 2,
                                        'color' => 'Red 1',
                                        'name' => 'Red Apple 1',
                                        'created' => '2006-11-22 10:38:58',
                                        'date' => '1951-01-04',
                                        'modified' => '2006-12-01 13:31:26',
                                        'mytime' => '22:57:17',
                                        'Parent' => array(
                                                'id' => 2,
                                                'apple_id' => 1,
                                                'color' => 'Bright Red 1',
                                                'name' => 'Bright Red Apple',
                                                'created' => '2006-11-22 10:43:13',
                                                'date' => '2014-01-01',
                                                'modified' => '2006-11-30 18:38:10',
                                                'mytime' => '22:57:17'
                                        ),
                                        'Child' => array(
                                                array(
                                                        'id' => 2,
                                                        'apple_id' => 1,
                                                        'color' => 'Bright Red 1',
                                                        'name' => 'Bright Red Apple',
                                                        'created' => '2006-11-22 10:43:13',
                                                        'date' => '2014-01-01',
                                                        'modified' => '2006-11-30 18:38:10',
                                                        'mytime' => '22:57:17'
                                ))),
                                'Sample' => array(
                                        'id' => 2,
                                        'apple_id' => 2,
                                        'name' => 'sample2',
                                        'Apple' => array(
                                                'id' => 2,
                                                'apple_id' => 1,
                                                'color' => 'Bright Red 1',
                                                'name' => 'Bright Red Apple',
                                                'created' => '2006-11-22 10:43:13',
                                                'date' => '2014-01-01',
                                                'modified' => '2006-11-30 18:38:10',
                                                'mytime' => '22:57:17'
                        ))),
                        array(
                                'Apple' => array(
                                'id' => 3,
                                'apple_id' => 2,
                                'color' => 'blue green',
                                'name' => 'green blue',
                                'created' => '2006-12-25 05:13:36',
                                'date' => '2006-12-25',
                                'modified' => '2006-12-25 05:23:24',
                                'mytime' => '22:57:17'
                        ),
                        'Parent' => array(
                                'id' => 2,
                                'apple_id' => 1,
                                'color' => 'Bright Red 1',
                                'name' => 'Bright Red Apple',
                                'created' => '2006-11-22 10:43:13',
                                'date' => '2014-01-01',
                                'modified' => '2006-11-30 18:38:10',
                                'mytime' => '22:57:17',
                                'Parent' => array(
                                        'id' => 1,
                                        'apple_id' => 2,
                                        'color' => 'Red 1',
                                        'name' => 'Red Apple 1',
                                        'created' => '2006-11-22 10:38:58',
                                        'date' => '1951-01-04',
                                        'modified' => '2006-12-01 13:31:26',
                                        'mytime' => '22:57:17'
                                ),
                                'Child' => array(
                                        array(
                                                'id' => 1,
                                                'apple_id' => 2,
                                                'color' => 'Red 1',
                                                'name' => 'Red Apple 1',
                                                'created' => '2006-11-22 10:38:58',
                                                'date' => '1951-01-04',
                                                'modified' => '2006-12-01 13:31:26',
                                                'mytime' => '22:57:17'
                                        ),
                                        array(
                                                'id' => 3,
                                                'apple_id' => 2,
                                                'color' => 'blue green',
                                                'name' => 'green blue',
                                                'created' => '2006-12-25 05:13:36',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:23:24',
                                                'mytime' => '22:57:17'
                                        ),
                                        array(
                                                'id' => 4,
                                                'apple_id' => 2,
                                                'color' => 'Blue Green',
                                                'name' => 'Test Name',
                                                'created' => '2006-12-25 05:23:36',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:23:36',
                                                'mytime' => '22:57:17'
                        ))),
                        'Sample' => array(
                                'id' => 1,
                                'apple_id' => 3,
                                'name' => 'sample1',
                                'Apple' => array(
                                        'id' => 3,
                                        'apple_id' => 2,
                                        'color' => 'blue green',
                                        'name' => 'green blue',
                                        'created' => '2006-12-25 05:13:36',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:23:24',
                                        'mytime' => '22:57:17'
                ))),
                array(
                        'Apple' => array(
                                'id' => 4,
                                'apple_id' => 2,
                                'color' => 'Blue Green',
                                'name' => 'Test Name',
                                'created' => '2006-12-25 05:23:36',
                                'date' => '2006-12-25',
                                'modified' => '2006-12-25 05:23:36',
                                'mytime' => '22:57:17'
                        ),
                        'Parent' => array(
                                'id' => 2,
                                'apple_id' => 1,
                                'color' => 'Bright Red 1',
                                'name' => 'Bright Red Apple',
                                'created' => '2006-11-22 10:43:13',
                                'date' => '2014-01-01',
                                'modified' => '2006-11-30 18:38:10',
                                'mytime' => '22:57:17',
                                'Parent' => array(
                                        'id' => 1,
                                        'apple_id' => 2,
                                        'color' => 'Red 1',
                                        'name' => 'Red Apple 1',
                                        'created' => '2006-11-22 10:38:58',
                                        'date' => '1951-01-04',
                                        'modified' => '2006-12-01 13:31:26',
                                        'mytime' => '22:57:17'
                                ),
                                'Child' => array(
                                        array(
                                                'id' => 1,
                                                'apple_id' => 2,
                                                'color' => 'Red 1',
                                                'name' => 'Red Apple 1',
                                                'created' => '2006-11-22 10:38:58',
                                                'date' => '1951-01-04',
                                                'modified' => '2006-12-01 13:31:26',
                                                'mytime' => '22:57:17'
                                        ),
                                        array(
                                                'id' => 3,
                                                'apple_id' => 2,
                                                'color' => 'blue green',
                                                'name' => 'green blue',
                                                'created' => '2006-12-25 05:13:36',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:23:24',
                                                'mytime' => '22:57:17'
                                        ),
                                        array(
                                                'id' => 4,
                                                'apple_id' => 2,
                                                'color' => 'Blue Green',
                                                'name' => 'Test Name',
                                                'created' => '2006-12-25 05:23:36',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:23:36',
                                                'mytime' => '22:57:17'
                        ))),
                        'Sample' => array(
                                'id' => 3,
                                'apple_id' => 4,
                                'name' => 'sample3',
                                'Apple' => array(
                                        'id' => 4,
                                        'apple_id' => 2,
                                        'color' => 'Blue Green',
                                        'name' => 'Test Name',
                                        'created' => '2006-12-25 05:23:36',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:23:36',
                                        'mytime' => '22:57:17'
                ))),
                array(
                        'Apple' => array(
                                'id' => 5,
                                'apple_id' => 5,
                                'color' => 'Green',
                                'name' => 'Blue Green',
                                'created' => '2006-12-25 05:24:06',
                                'date' => '2006-12-25',
                                'modified' => '2006-12-25 05:29:16',
                                'mytime' => '22:57:17'
                        ),
                        'Parent' => array(
                                'id' => 5,
                                'apple_id' => 5,
                                'color' => 'Green',
                                'name' => 'Blue Green',
                                'created' => '2006-12-25 05:24:06',
                                'date' => '2006-12-25',
                                'modified' => '2006-12-25 05:29:16',
                                'mytime' => '22:57:17',
                                'Parent' => array(
                                        'id' => 5,
                                        'apple_id' => 5,
                                        'color' => 'Green',
                                        'name' => 'Blue Green',
                                        'created' => '2006-12-25 05:24:06',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:29:16',
                                        'mytime' => '22:57:17'
                                ),
                                'Child' => array(
                                        array(
                                                'id' => 5,
                                                'apple_id' => 5,
                                                'color' => 'Green',
                                                'name' => 'Blue Green',
                                                'created' => '2006-12-25 05:24:06',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:29:16',
                                                'mytime' => '22:57:17'
                        ))),
                        'Sample' => array(
                                'id' => 4,
                                'apple_id' => 5,
                                'name' => 'sample4',
                                'Apple' => array(
                                        'id' => 5,
                                        'apple_id' => 5,
                                        'color' => 'Green',
                                        'name' => 'Blue Green',
                                        'created' => '2006-12-25 05:24:06',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:29:16',
                                        'mytime' => '22:57:17'
                ))),
                array(
                        'Apple' => array(
                                'id' => 6,
                                'apple_id' => 4,
                                'color' => 'My new appleOrange',
                                'name' => 'My new apple',
                                'created' => '2006-12-25 05:29:39',
                                'date' => '2006-12-25',
                                'modified' => '2006-12-25 05:29:39',
                                'mytime' => '22:57:17'
                        ),
                        'Parent' => array(
                                'id' => 4,
                                'apple_id' => 2,
                                'color' => 'Blue Green',
                                'name' => 'Test Name',
                                'created' => '2006-12-25 05:23:36',
                                'date' => '2006-12-25',
                                'modified' => '2006-12-25 05:23:36',
                                'mytime' => '22:57:17',
                                'Parent' => array(
                                        'id' => 2,
                                        'apple_id' => 1,
                                        'color' => 'Bright Red 1',
                                        'name' => 'Bright Red Apple',
                                        'created' => '2006-11-22 10:43:13',
                                        'date' => '2014-01-01',
                                        'modified' => '2006-11-30 18:38:10',
                                        'mytime' => '22:57:17'
                                ),
                                'Child' => array(
                                        array(
                                                'id' => 6,
                                                'apple_id' => 4,
                                                'color' => 'My new appleOrange',
                                                'name' => 'My new apple',
                                                'created' => '2006-12-25 05:29:39',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:29:39',
                                                'mytime' => '22:57:17'
                        ))),
                        'Sample' => array(
                                'id' => '',
                                'apple_id' => '',
                                'name' => ''
                )),
                array(
                        'Apple' => array(
                                'id' => 7,
                                'apple_id' => 6,
                                'color' => 'Some wierd color',
                                'name' => 'Some odd color',
                                'created' => '2006-12-25 05:34:21',
                                'date' => '2006-12-25',
                                'modified' => '2006-12-25 05:34:21',
                                'mytime' => '22:57:17'
                        ),
                        'Parent' => array(
                                'id' => 6,
                                'apple_id' => 4,
                                'color' => 'My new appleOrange',
                                'name' => 'My new apple',
                                'created' => '2006-12-25 05:29:39',
                                'date' => '2006-12-25',
                                'modified' => '2006-12-25 05:29:39',
                                'mytime' => '22:57:17',
                                'Parent' => array(
                                        'id' => 4,
                                        'apple_id' => 2,
                                        'color' => 'Blue Green',
                                        'name' => 'Test Name',
                                        'created' => '2006-12-25 05:23:36',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:23:36',
                                        'mytime' => '22:57:17'
                                ),
                                'Child' => array(
                                        array(
                                                'id' => 7,
                                                'apple_id' => 6,
                                                'color' => 'Some wierd color',
                                                'name' => 'Some odd color',
                                                'created' => '2006-12-25 05:34:21',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:34:21',
                                                'mytime' => '22:57:17'
                        ))),
                        'Sample' => array(
                                'id' => '',
                                'apple_id' => '',
                                'name' => ''
                )));

                $this->assertEquals($expected, $result);

                $result = $TestModel->unbindModel(array('hasMany' => array('Child')));
                $this->assertTrue($result);

                $result = $TestModel->Sample->unbindModel(array('belongsTo' => array('Apple')));
                $this->assertTrue($result);

                $result = $TestModel->find('all');
                $expected = array(
                        array(
                                'Apple' => array(
                                        'id' => 1,
                                        'apple_id' => 2,
                                        'color' => 'Red 1',
                                        'name' => 'Red Apple 1',
                                        'created' => '2006-11-22 10:38:58',
                                        'date' => '1951-01-04',
                                        'modified' => '2006-12-01 13:31:26',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => 2,
                                        'apple_id' => 1,
                                        'color' => 'Bright Red 1',
                                        'name' => 'Bright Red Apple',
                                        'created' => '2006-11-22 10:43:13',
                                        'date' => '2014-01-01',
                                        'modified' => '2006-11-30 18:38:10',
                                        'mytime' => '22:57:17',
                                        'Parent' => array(
                                                'id' => 1,
                                                'apple_id' => 2,
                                                'color' => 'Red 1',
                                                'name' => 'Red Apple 1',
                                                'created' => '2006-11-22 10:38:58',
                                                'date' => '1951-01-04',
                                                'modified' => '2006-12-01 13:31:26',
                                                'mytime' => '22:57:17'
                                        ),
                                        'Sample' => array(
                                                'id' => 2,
                                                'apple_id' => 2,
                                                'name' => 'sample2'
                                        ),
                                        'Child' => array(
                                                array(
                                                        'id' => 1,
                                                        'apple_id' => 2,
                                                        'color' => 'Red 1',
                                                        'name' => 'Red Apple 1',
                                                        'created' => '2006-11-22 10:38:58',
                                                        'date' => '1951-01-04',
                                                        'modified' => '2006-12-01 13:31:26',
                                                        'mytime' => '22:57:17'
                                                ),
                                                array(
                                                        'id' => 3,
                                                        'apple_id' => 2,
                                                        'color' => 'blue green',
                                                        'name' => 'green blue',
                                                        'created' => '2006-12-25 05:13:36',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:23:24',
                                                        'mytime' => '22:57:17'
                                                ),
                                                array(
                                                        'id' => 4,
                                                        'apple_id' => 2,
                                                        'color' => 'Blue Green',
                                                        'name' => 'Test Name',
                                                        'created' => '2006-12-25 05:23:36',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:23:36',
                                                        'mytime' => '22:57:17'
                                ))),
                                'Sample' => array(
                                        'id' => '',
                                        'apple_id' => '',
                                        'name' => ''
                        )),
                        array(
                                'Apple' => array(
                                        'id' => 2,
                                        'apple_id' => 1,
                                        'color' => 'Bright Red 1',
                                        'name' => 'Bright Red Apple',
                                        'created' => '2006-11-22 10:43:13',
                                        'date' => '2014-01-01',
                                        'modified' => '2006-11-30 18:38:10',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => 1,
                                        'apple_id' => 2,
                                        'color' => 'Red 1',
                                        'name' => 'Red Apple 1',
                                        'created' => '2006-11-22 10:38:58',
                                        'date' => '1951-01-04',
                                        'modified' => '2006-12-01 13:31:26',
                                        'mytime' => '22:57:17',
                                        'Parent' => array(
                                                'id' => 2,
                                                'apple_id' => 1,
                                                'color' => 'Bright Red 1',
                                                'name' => 'Bright Red Apple',
                                                'created' => '2006-11-22 10:43:13',
                                                'date' => '2014-01-01',
                                                'modified' => '2006-11-30 18:38:10',
                                                'mytime' => '22:57:17'
                                        ),
                                        'Sample' => array(),
                                        'Child' => array(
                                                array(
                                                        'id' => 2,
                                                        'apple_id' => 1,
                                                        'color' => 'Bright Red 1',
                                                        'name' => 'Bright Red Apple',
                                                        'created' => '2006-11-22 10:43:13',
                                                        'date' => '2014-01-01',
                                                        'modified' => '2006-11-30 18:38:10',
                                                        'mytime' => '22:57:17'
                                ))),
                                'Sample' => array(
                                        'id' => 2,
                                        'apple_id' => 2,
                                        'name' => 'sample2'
                        )),
                        array(
                                'Apple' => array(
                                        'id' => 3,
                                        'apple_id' => 2,
                                        'color' => 'blue green',
                                        'name' => 'green blue',
                                        'created' => '2006-12-25 05:13:36',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:23:24',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => 2,
                                        'apple_id' => 1,
                                        'color' => 'Bright Red 1',
                                        'name' => 'Bright Red Apple',
                                        'created' => '2006-11-22 10:43:13',
                                        'date' => '2014-01-01',
                                        'modified' => '2006-11-30 18:38:10',
                                        'mytime' => '22:57:17',
                                        'Parent' => array(
                                                'id' => 1,
                                                'apple_id' => 2,
                                                'color' => 'Red 1',
                                                'name' => 'Red Apple 1',
                                                'created' => '2006-11-22 10:38:58',
                                                'date' => '1951-01-04',
                                                'modified' => '2006-12-01 13:31:26',
                                                'mytime' => '22:57:17'
                                        ),
                                        'Sample' => array(
                                                'id' => 2,
                                                'apple_id' => 2,
                                                'name' => 'sample2'
                                        ),
                                        'Child' => array(
                                                array(
                                                        'id' => 1,
                                                        'apple_id' => 2,
                                                        'color' => 'Red 1',
                                                        'name' => 'Red Apple 1',
                                                        'created' => '2006-11-22 10:38:58',
                                                        'date' => '1951-01-04',
                                                        'modified' => '2006-12-01 13:31:26',
                                                        'mytime' => '22:57:17'
                                                ),
                                                array(
                                                        'id' => 3,
                                                        'apple_id' => 2,
                                                        'color' => 'blue green',
                                                        'name' => 'green blue',
                                                        'created' => '2006-12-25 05:13:36',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:23:24',
                                                        'mytime' => '22:57:17'
                                                ),
                                                array(
                                                        'id' => 4,
                                                        'apple_id' => 2,
                                                        'color' => 'Blue Green',
                                                        'name' => 'Test Name',
                                                        'created' => '2006-12-25 05:23:36',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:23:36',
                                                        'mytime' => '22:57:17'
                                ))),
                                'Sample' => array(
                                        'id' => 1,
                                        'apple_id' => 3,
                                        'name' => 'sample1'
                        )),
                        array(
                                'Apple' => array(
                                        'id' => 4,
                                        'apple_id' => 2,
                                        'color' => 'Blue Green',
                                        'name' => 'Test Name',
                                        'created' => '2006-12-25 05:23:36',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:23:36',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => 2,
                                        'apple_id' => 1,
                                        'color' => 'Bright Red 1',
                                        'name' => 'Bright Red Apple',
                                        'created' => '2006-11-22 10:43:13',
                                        'date' => '2014-01-01',
                                        'modified' => '2006-11-30 18:38:10',
                                        'mytime' => '22:57:17',
                                        'Parent' => array(
                                                'id' => 1,
                                                'apple_id' => 2,
                                                'color' => 'Red 1',
                                                'name' => 'Red Apple 1',
                                                'created' => '2006-11-22 10:38:58',
                                                'date' => '1951-01-04',
                                                'modified' => '2006-12-01 13:31:26',
                                                'mytime' => '22:57:17'
                                        ),
                                        'Sample' => array(
                                                'id' => 2,
                                                'apple_id' => 2,
                                                'name' => 'sample2'
                                        ),
                                        'Child' => array(
                                                array(
                                                        'id' => 1,
                                                        'apple_id' => 2,
                                                        'color' => 'Red 1',
                                                        'name' => 'Red Apple 1',
                                                        'created' => '2006-11-22 10:38:58',
                                                        'date' => '1951-01-04',
                                                        'modified' => '2006-12-01 13:31:26',
                                                        'mytime' => '22:57:17'
                                                ),
                                                array(
                                                        'id' => 3,
                                                        'apple_id' => 2,
                                                        'color' => 'blue green',
                                                        'name' => 'green blue',
                                                        'created' => '2006-12-25 05:13:36',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:23:24',
                                                        'mytime' => '22:57:17'
                                                ),
                                                array(
                                                        'id' => 4,
                                                        'apple_id' => 2,
                                                        'color' => 'Blue Green',
                                                        'name' => 'Test Name',
                                                        'created' => '2006-12-25 05:23:36',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:23:36',
                                                        'mytime' => '22:57:17'
                                ))),
                                'Sample' => array(
                                        'id' => 3,
                                        'apple_id' => 4,
                                        'name' => 'sample3'
                        )),
                        array(
                                'Apple' => array(
                                        'id' => 5,
                                        'apple_id' => 5,
                                        'color' => 'Green',
                                        'name' => 'Blue Green',
                                        'created' => '2006-12-25 05:24:06',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:29:16',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => 5,
                                        'apple_id' => 5,
                                        'color' => 'Green',
                                        'name' => 'Blue Green',
                                        'created' => '2006-12-25 05:24:06',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:29:16',
                                        'mytime' => '22:57:17',
                                        'Parent' => array(
                                                'id' => 5,
                                                'apple_id' => 5,
                                                'color' => 'Green',
                                                'name' => 'Blue Green',
                                                'created' => '2006-12-25 05:24:06',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:29:16',
                                                'mytime' => '22:57:17'
                                        ),
                                        'Sample' => array(
                                                'id' => 4,
                                                'apple_id' => 5,
                                                'name' => 'sample4'
                                        ),
                                        'Child' => array(
                                                array(
                                                        'id' => 5,
                                                        'apple_id' => 5,
                                                        'color' => 'Green',
                                                        'name' => 'Blue Green',
                                                        'created' => '2006-12-25 05:24:06',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:29:16',
                                                        'mytime' => '22:57:17'
                                ))),
                                'Sample' => array(
                                        'id' => 4,
                                        'apple_id' => 5,
                                        'name' => 'sample4'
                        )),
                        array(
                                'Apple' => array(
                                        'id' => 6,
                                        'apple_id' => 4,
                                        'color' => 'My new appleOrange',
                                        'name' => 'My new apple',
                                        'created' => '2006-12-25 05:29:39',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:29:39',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => 4,
                                        'apple_id' => 2,
                                        'color' => 'Blue Green',
                                        'name' => 'Test Name',
                                        'created' => '2006-12-25 05:23:36',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:23:36',
                                        'mytime' => '22:57:17',
                                        'Parent' => array(
                                                'id' => 2,
                                                'apple_id' => 1,
                                                'color' => 'Bright Red 1',
                                                'name' => 'Bright Red Apple',
                                                'created' => '2006-11-22 10:43:13',
                                                'date' => '2014-01-01',
                                                'modified' => '2006-11-30 18:38:10',
                                                'mytime' => '22:57:17'
                                        ),
                                        'Sample' => array(
                                                'id' => 3,
                                                'apple_id' => 4,
                                                'name' => 'sample3'
                                        ),
                                        'Child' => array(
                                                array(
                                                        'id' => 6,
                                                        'apple_id' => 4,
                                                        'color' => 'My new appleOrange',
                                                        'name' => 'My new apple',
                                                        'created' => '2006-12-25 05:29:39',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:29:39',
                                                        'mytime' => '22:57:17'
                                ))),
                                'Sample' => array(
                                        'id' => '',
                                        'apple_id' => '',
                                        'name' => ''
                        )),
                        array(
                                'Apple' => array(
                                        'id' => 7,
                                        'apple_id' => 6,
                                        'color' => 'Some wierd color',
                                        'name' => 'Some odd color',
                                        'created' => '2006-12-25 05:34:21',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:34:21',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => 6,
                                        'apple_id' => 4,
                                        'color' => 'My new appleOrange',
                                        'name' => 'My new apple',
                                        'created' => '2006-12-25 05:29:39',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:29:39',
                                        'mytime' => '22:57:17',
                                        'Parent' => array(
                                                'id' => 4,
                                                'apple_id' => 2,
                                                'color' => 'Blue Green',
                                                'name' => 'Test Name',
                                                'created' => '2006-12-25 05:23:36',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:23:36',
                                                'mytime' => '22:57:17'
                                        ),
                                        'Sample' => array(),
                                        'Child' => array(
                                                array(
                                                        'id' => 7,
                                                        'apple_id' => 6,
                                                        'color' => 'Some wierd color',
                                                        'name' => 'Some odd color',
                                                        'created' => '2006-12-25 05:34:21',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:34:21',
                                                        'mytime' => '22:57:17'
                                ))),
                                'Sample' => array(
                                        'id' => '',
                                        'apple_id' => '',
                                        'name' => ''
                )));
                $this->assertEquals($expected, $result);

                $result = $TestModel->Parent->unbindModel(array('belongsTo' => array('Parent')));
                $this->assertTrue($result);

                $result = $TestModel->unbindModel(array('hasMany' => array('Child')));
                $this->assertTrue($result);

                $result = $TestModel->find('all');
                $expected = array(
                        array(
                                'Apple' => array(
                                        'id' => 1,
                                        'apple_id' => 2,
                                        'color' => 'Red 1',
                                        'name' => 'Red Apple 1',
                                        'created' => '2006-11-22 10:38:58',
                                        'date' => '1951-01-04',
                                        'modified' => '2006-12-01 13:31:26',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => 2,
                                        'apple_id' => 1,
                                        'color' => 'Bright Red 1',
                                        'name' => 'Bright Red Apple',
                                        'created' => '2006-11-22 10:43:13',
                                        'date' => '2014-01-01',
                                        'modified' => '2006-11-30 18:38:10',
                                        'mytime' => '22:57:17',
                                        'Sample' => array(
                                                'id' => 2,
                                                'apple_id' => 2,
                                                'name' => 'sample2'
                                        ),
                                        'Child' => array(
                                                array(
                                                        'id' => 1,
                                                        'apple_id' => 2,
                                                        'color' => 'Red 1',
                                                        'name' => 'Red Apple 1',
                                                        'created' => '2006-11-22 10:38:58',
                                                        'date' => '1951-01-04',
                                                        'modified' => '2006-12-01 13:31:26',
                                                        'mytime' => '22:57:17'
                                                ),
                                                array(
                                                        'id' => 3,
                                                        'apple_id' => 2,
                                                        'color' => 'blue green',
                                                        'name' => 'green blue',
                                                        'created' => '2006-12-25 05:13:36',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:23:24',
                                                        'mytime' => '22:57:17'
                                                ),
                                                array(
                                                        'id' => 4,
                                                        'apple_id' => 2,
                                                        'color' => 'Blue Green',
                                                        'name' => 'Test Name',
                                                        'created' => '2006-12-25 05:23:36',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:23:36',
                                                        'mytime' => '22:57:17'
                                ))),
                                'Sample' => array(
                                        'id' => '',
                                        'apple_id' => '',
                                        'name' => ''
                        )),
                        array(
                                'Apple' => array(
                                        'id' => 2,
                                        'apple_id' => 1,
                                        'color' => 'Bright Red 1',
                                        'name' => 'Bright Red Apple',
                                        'created' => '2006-11-22 10:43:13',
                                        'date' => '2014-01-01',
                                        'modified' => '2006-11-30 18:38:10',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => 1,
                                        'apple_id' => 2,
                                        'color' => 'Red 1',
                                        'name' => 'Red Apple 1',
                                        'created' => '2006-11-22 10:38:58',
                                        'date' => '1951-01-04',
                                        'modified' => '2006-12-01 13:31:26',
                                        'mytime' => '22:57:17',
                                        'Sample' => array(),
                                                'Child' => array(
                                                        array(
                                                                'id' => 2,
                                                                'apple_id' => 1,
                                                                'color' => 'Bright Red 1',
                                                                'name' => 'Bright Red Apple',
                                                                'created' => '2006-11-22 10:43:13',
                                                                'date' => '2014-01-01',
                                                                'modified' => '2006-11-30 18:38:10',
                                                                'mytime' => '22:57:17'
                                ))),
                                'Sample' => array(
                                        'id' => 2,
                                        'apple_id' => 2,
                                        'name' => 'sample2',
                                        'Apple' => array(
                                                'id' => 2,
                                                'apple_id' => 1,
                                                'color' => 'Bright Red 1',
                                                'name' => 'Bright Red Apple',
                                                'created' => '2006-11-22 10:43:13',
                                                'date' => '2014-01-01',
                                                'modified' => '2006-11-30 18:38:10',
                                                'mytime' => '22:57:17'
                        ))),
                        array(
                                'Apple' => array(
                                        'id' => 3,
                                        'apple_id' => 2,
                                        'color' => 'blue green',
                                        'name' => 'green blue',
                                        'created' => '2006-12-25 05:13:36',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:23:24',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => 2,
                                        'apple_id' => 1,
                                        'color' => 'Bright Red 1',
                                        'name' => 'Bright Red Apple',
                                        'created' => '2006-11-22 10:43:13',
                                        'date' => '2014-01-01',
                                        'modified' => '2006-11-30 18:38:10',
                                        'mytime' => '22:57:17',
                                        'Sample' => array(
                                                'id' => 2,
                                                'apple_id' => 2,
                                                'name' => 'sample2'
                                        ),
                                        'Child' => array(
                                                array(
                                                        'id' => 1,
                                                        'apple_id' => 2,
                                                        'color' => 'Red 1',
                                                        'name' => 'Red Apple 1',
                                                        'created' => '2006-11-22 10:38:58',
                                                        'date' => '1951-01-04',
                                                        'modified' => '2006-12-01 13:31:26',
                                                        'mytime' => '22:57:17'
                                                ),
                                                array(
                                                        'id' => 3,
                                                        'apple_id' => 2,
                                                        'color' => 'blue green',
                                                        'name' => 'green blue',
                                                        'created' => '2006-12-25 05:13:36',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:23:24',
                                                        'mytime' => '22:57:17'
                                                ),
                                                array(
                                                        'id' => 4,
                                                        'apple_id' => 2,
                                                        'color' => 'Blue Green',
                                                        'name' => 'Test Name',
                                                        'created' => '2006-12-25 05:23:36',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:23:36',
                                                        'mytime' => '22:57:17'
                                ))),
                                'Sample' => array(
                                        'id' => 1,
                                        'apple_id' => 3,
                                        'name' => 'sample1',
                                        'Apple' => array(
                                                'id' => 3,
                                                'apple_id' => 2,
                                                'color' => 'blue green',
                                                'name' => 'green blue',
                                                'created' => '2006-12-25 05:13:36',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:23:24',
                                                'mytime' => '22:57:17'
                        ))),
                        array(
                                'Apple' => array(
                                        'id' => 4,
                                        'apple_id' => 2,
                                        'color' => 'Blue Green',
                                        'name' => 'Test Name',
                                        'created' => '2006-12-25 05:23:36',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:23:36',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => 2,
                                        'apple_id' => 1,
                                        'color' => 'Bright Red 1',
                                        'name' => 'Bright Red Apple',
                                        'created' => '2006-11-22 10:43:13',
                                        'date' => '2014-01-01',
                                        'modified' => '2006-11-30 18:38:10',
                                        'mytime' => '22:57:17',
                                        'Sample' => array(
                                                'id' => 2,
                                                'apple_id' => 2,
                                                'name' => 'sample2'
                                        ),
                                        'Child' => array(
                                                array(
                                                        'id' => 1,
                                                        'apple_id' => 2,
                                                        'color' => 'Red 1',
                                                        'name' => 'Red Apple 1',
                                                        'created' => '2006-11-22 10:38:58',
                                                        'date' => '1951-01-04',
                                                        'modified' => '2006-12-01 13:31:26',
                                                        'mytime' => '22:57:17'
                                                ),
                                                array(
                                                        'id' => 3,
                                                        'apple_id' => 2,
                                                        'color' => 'blue green',
                                                        'name' => 'green blue',
                                                        'created' => '2006-12-25 05:13:36',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:23:24',
                                                        'mytime' => '22:57:17'
                                                ),
                                                array(
                                                        'id' => 4,
                                                        'apple_id' => 2,
                                                        'color' => 'Blue Green',
                                                        'name' => 'Test Name',
                                                        'created' => '2006-12-25 05:23:36',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:23:36',
                                                        'mytime' => '22:57:17'
                                ))),
                                'Sample' => array(
                                        'id' => 3,
                                        'apple_id' => 4,
                                        'name' => 'sample3',
                                        'Apple' => array(
                                                'id' => 4,
                                                'apple_id' => 2,
                                                'color' => 'Blue Green',
                                                'name' => 'Test Name',
                                                'created' => '2006-12-25 05:23:36',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:23:36',
                                                'mytime' => '22:57:17'
                        ))),
                        array(
                                'Apple' => array(
                                        'id' => 5,
                                        'apple_id' => 5,
                                        'color' => 'Green',
                                        'name' => 'Blue Green',
                                        'created' => '2006-12-25 05:24:06',
                                        'date' => '2006-12-25',
                                        'modified' =>
                                        '2006-12-25 05:29:16',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => 5,
                                        'apple_id' => 5,
                                        'color' => 'Green',
                                        'name' => 'Blue Green',
                                        'created' => '2006-12-25 05:24:06',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:29:16',
                                        'mytime' => '22:57:17',
                                        'Sample' => array(
                                                'id' => 4,
                                                'apple_id' => 5,
                                                'name' => 'sample4'
                                        ),
                                        'Child' => array(
                                                array(
                                                        'id' => 5,
                                                        'apple_id' => 5,
                                                        'color' => 'Green',
                                                        'name' => 'Blue Green',
                                                        'created' => '2006-12-25 05:24:06',
                                                        'date' => '2006-12-25',
                                                        'modified' => '2006-12-25 05:29:16',
                                                        'mytime' => '22:57:17'
                                ))),
                                'Sample' => array(
                                        'id' => 4,
                                        'apple_id' => 5,
                                        'name' => 'sample4',
                                        'Apple' => array(
                                                'id' => 5,
                                                'apple_id' => 5,
                                                'color' => 'Green',
                                                'name' => 'Blue Green',
                                                'created' => '2006-12-25 05:24:06',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:29:16',
                                                'mytime' => '22:57:17'
                        ))),
                        array(
                                'Apple' => array(
                                        'id' => 6,
                                        'apple_id' => 4,
                                        'color' => 'My new appleOrange',
                                        'name' => 'My new apple',
                                        'created' => '2006-12-25 05:29:39',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:29:39',
                                        'mytime' => '22:57:17'),
                                        'Parent' => array(
                                                'id' => 4,
                                                'apple_id' => 2,
                                                'color' => 'Blue Green',
                                                'name' => 'Test Name',
                                                'created' => '2006-12-25 05:23:36',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:23:36',
                                                'mytime' => '22:57:17',
                                                'Sample' => array(
                                                        'id' => 3,
                                                        'apple_id' => 4,
                                                        'name' => 'sample3'
                                                ),
                                                'Child' => array(
                                                        array(
                                                                'id' => 6,
                                                                'apple_id' => 4,
                                                                'color' => 'My new appleOrange',
                                                                'name' => 'My new apple',
                                                                'created' => '2006-12-25 05:29:39',
                                                                'date' => '2006-12-25',
                                                                'modified' => '2006-12-25 05:29:39',
                                                                'mytime' => '22:57:17'
                                        ))),
                                        'Sample' => array(
                                                'id' => '',
                                                'apple_id' => '',
                                                'name' => ''
                        )),
                        array(
                                'Apple' => array(
                                        'id' => 7,
                                        'apple_id' => 6,
                                        'color' => 'Some wierd color',
                                        'name' => 'Some odd color',
                                        'created' => '2006-12-25 05:34:21',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:34:21',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => 6,
                                        'apple_id' => 4,
                                        'color' => 'My new appleOrange',
                                        'name' => 'My new apple',
                                        'created' => '2006-12-25 05:29:39',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:29:39',
                                        'mytime' => '22:57:17',
                                        'Sample' => array(),
                                        'Child' => array(
                                                array(
                                                        'id' => 7,
                                                        'apple_id' => 6,
                                                        'color' => 'Some wierd color',
                                                        'name' => 'Some odd color',
                                                        'created' => '2006-12-25 05:34:21',
                                                        'date' => '2006-12-25', 'modified' =>
                                                        '2006-12-25 05:34:21',
                                                        'mytime' => '22:57:17'
                                ))),
                                'Sample' => array(
                                        'id' => '',
                                        'apple_id' => '',
                                        'name' => ''
                )));
                $this->assertEquals($expected, $result);
        }

/**
 * testSelfAssociationAfterFind method
 *
 * @return void
 */
        public function testSelfAssociationAfterFind() {
                $this->loadFixtures('Apple', 'Sample');
                $afterFindModel = new NodeAfterFind();
                $afterFindModel->recursive = 3;
                $afterFindData = $afterFindModel->find('all');

                $duplicateModel = new NodeAfterFind();
                $duplicateModel->recursive = 3;

                $noAfterFindModel = new NodeNoAfterFind();
                $noAfterFindModel->recursive = 3;
                $noAfterFindData = $noAfterFindModel->find('all');

                $this->assertFalse($afterFindModel == $noAfterFindModel);
                $this->assertEquals($afterFindData, $noAfterFindData);
        }

/**
 * Test that afterFind can completely unset data.
 *
 * @return void
 */
        public function testAfterFindUnset() {
                $this->loadFixtures('Article', 'Comment', 'User');
                $model = new CustomArticle();
                $model->bindModel(array(
                        'hasMany' => array(
                                'ModifiedComment' => array(
                                        'className' => 'ModifiedComment',
                                        'foreignKey' => 'article_id',
                                )
                        )
                ));
                $model->ModifiedComment->remove = true;
                $result = $model->find('all');
                $this->assertTrue(
                        empty($result[0]['ModifiedComment']),
                        'Zeroith row should be removed by afterFind'
                );
        }

/**
 * testFindThreadedNoParent method
 *
 * @return void
 */
        public function testFindThreadedNoParent() {
                $this->loadFixtures('Apple', 'Sample');
                $Apple = new Apple();
                $result = $Apple->find('threaded');
                $result = Hash::extract($result, '{n}.children');
                $expected = array(array(), array(), array(), array(), array(), array(), array());
                $this->assertEquals($expected, $result);
        }

/**
 * testFindThreaded method
 *
 * @return void
 */
        public function testFindThreaded() {
                $this->loadFixtures('Person');
                $Model = new Person();
                $Model->recursive = -1;
                $result = $Model->find('threaded');
                $result = Hash::extract($result, '{n}.children');
                $expected = array(array(), array(), array(), array(), array(), array(), array());
                $this->assertEquals($expected, $result);

                $result = $Model->find('threaded', array('parent' => 'mother_id'));
                $expected = array(
                        array(
                                'Person' => array(
                                        'id' => '4',
                                        'name' => 'mother - grand mother',
                                        'mother_id' => '0',
                                        'father_id' => '0'
                                ),
                                'children' => array(
                                        array(
                                                'Person' => array(
                                                        'id' => '2',
                                                        'name' => 'mother',
                                                        'mother_id' => '4',
                                                        'father_id' => '5'
                                                ),
                                                'children' => array(
                                                        array(
                                                                'Person' => array(
                                                                        'id' => '1',
                                                                        'name' => 'person',
                                                                        'mother_id' => '2',
                                                                        'father_id' => '3'
                                                                ),
                                                                'children' => array()
                                                        )
                                                )
                                        )
                                )
                        ),
                        array(
                                'Person' => array(
                                        'id' => '5',
                                        'name' => 'mother - grand father',
                                        'mother_id' => '0',
                                        'father_id' => '0'
                                ),
                                'children' => array()
                        ),
                        array(
                                'Person' => array(
                                        'id' => '6',
                                        'name' => 'father - grand mother',
                                        'mother_id' => '0',
                                        'father_id' => '0'
                                ),
                                'children' => array(
                                        array(
                                                'Person' => array(
                                                        'id' => '3',
                                                        'name' => 'father',
                                                        'mother_id' => '6',
                                                        'father_id' => '7'
                                                ),
                                                'children' => array()
                                        )
                                )
                        ),
                        array(
                                'Person' => array(
                                        'id' => '7',
                                        'name' => 'father - grand father',
                                        'mother_id' => '0',
                                        'father_id' => '0'
                                ),
                                'children' => array()
                        )
                );
                $this->assertEquals($expected, $result);
        }

/**
 * testFindAllThreaded method
 *
 * @return void
 */
        public function testFindAllThreaded() {
                $this->loadFixtures('Category');
                $TestModel = new Category();

                $result = $TestModel->find('threaded');
                $expected = array(
                        array(
                                'Category' => array(
                                        'id' => '1',
                                        'parent_id' => '0',
                                        'name' => 'Category 1',
                                        'created' => '2007-03-18 15:30:23',
                                        'updated' => '2007-03-18 15:32:31'
                                ),
                                'children' => array(
                                        array(
                                                'Category' => array(
                                                        'id' => '2',
                                                        'parent_id' => '1',
                                                        'name' => 'Category 1.1',
                                                        'created' => '2007-03-18 15:30:23',
                                                        'updated' => '2007-03-18 15:32:31'
                                                ),
                                                'children' => array(
                                                        array('Category' => array(
                                                                'id' => '7',
                                                                'parent_id' => '2',
                                                                'name' => 'Category 1.1.1',
                                                                'created' => '2007-03-18 15:30:23',
                                                                'updated' => '2007-03-18 15:32:31'),
                                                                'children' => array()),
                                                        array('Category' => array(
                                                                'id' => '8',
                                                                'parent_id' => '2',
                                                                'name' => 'Category 1.1.2',
                                                                'created' => '2007-03-18 15:30:23',
                                                                'updated' => '2007-03-18 15:32:31'),
                                                                'children' => array()))
                                        ),
                                        array(
                                                'Category' => array(
                                                        'id' => '3',
                                                        'parent_id' => '1',
                                                        'name' => 'Category 1.2',
                                                        'created' => '2007-03-18 15:30:23',
                                                        'updated' => '2007-03-18 15:32:31'
                                                ),
                                                'children' => array()
                                        )
                                )
                        ),
                        array(
                                'Category' => array(
                                        'id' => '4',
                                        'parent_id' => '0',
                                        'name' => 'Category 2',
                                        'created' => '2007-03-18 15:30:23',
                                        'updated' => '2007-03-18 15:32:31'
                                ),
                                'children' => array()
                        ),
                        array(
                                'Category' => array(
                                        'id' => '5',
                                        'parent_id' => '0',
                                        'name' => 'Category 3',
                                        'created' => '2007-03-18 15:30:23',
                                        'updated' => '2007-03-18 15:32:31'
                                ),
                                'children' => array(
                                        array(
                                                'Category' => array(
                                                        'id' => '6',
                                                        'parent_id' => '5',
                                                        'name' => 'Category 3.1',
                                                        'created' => '2007-03-18 15:30:23',
                                                        'updated' => '2007-03-18 15:32:31'
                                                ),
                                                'children' => array()
                                        )
                                )
                        )
                );
                $this->assertEquals($expected, $result);

                $result = $TestModel->find('threaded', array(
                        'conditions' => array('Category.name LIKE' => 'Category 1%')
                ));

                $expected = array(
                        array(
                                'Category' => array(
                                        'id' => '1',
                                        'parent_id' => '0',
                                        'name' => 'Category 1',
                                        'created' => '2007-03-18 15:30:23',
                                        'updated' => '2007-03-18 15:32:31'
                                ),
                                'children' => array(
                                        array(
                                                'Category' => array(
                                                        'id' => '2',
                                                        'parent_id' => '1',
                                                        'name' => 'Category 1.1',
                                                        'created' => '2007-03-18 15:30:23',
                                                        'updated' => '2007-03-18 15:32:31'
                                                ),
                                                'children' => array(
                                                        array('Category' => array(
                                                                'id' => '7',
                                                                'parent_id' => '2',
                                                                'name' => 'Category 1.1.1',
                                                                'created' => '2007-03-18 15:30:23',
                                                                'updated' => '2007-03-18 15:32:31'),
                                                                'children' => array()),
                                                        array('Category' => array(
                                                                'id' => '8',
                                                                'parent_id' => '2',
                                                                'name' => 'Category 1.1.2',
                                                                'created' => '2007-03-18 15:30:23',
                                                                'updated' => '2007-03-18 15:32:31'),
                                                                'children' => array()))
                                        ),
                                        array(
                                                'Category' => array(
                                                        'id' => '3',
                                                        'parent_id' => '1',
                                                        'name' => 'Category 1.2',
                                                        'created' => '2007-03-18 15:30:23',
                                                        'updated' => '2007-03-18 15:32:31'
                                                ),
                                                'children' => array()
                                        )
                                )
                        )
                );
                $this->assertEquals($expected, $result);

                $result = $TestModel->find('threaded', array(
                        'fields' => 'id, parent_id, name'
                ));

                $expected = array(
                        array(
                                'Category' => array(
                                        'id' => '1',
                                        'parent_id' => '0',
                                        'name' => 'Category 1'
                                ),
                                'children' => array(
                                        array(
                                                'Category' => array(
                                                        'id' => '2',
                                                        'parent_id' => '1',
                                                        'name' => 'Category 1.1'
                                                ),
                                                'children' => array(
                                                        array('Category' => array(
                                                                'id' => '7',
                                                                'parent_id' => '2',
                                                                'name' => 'Category 1.1.1'),
                                                                'children' => array()),
                                                        array('Category' => array(
                                                                'id' => '8',
                                                                'parent_id' => '2',
                                                                'name' => 'Category 1.1.2'),
                                                                'children' => array()))
                                        ),
                                        array(
                                                'Category' => array(
                                                        'id' => '3',
                                                        'parent_id' => '1',
                                                        'name' => 'Category 1.2'
                                                ),
                                                'children' => array()
                                        )
                                )
                        ),
                        array(
                                'Category' => array(
                                        'id' => '4',
                                        'parent_id' => '0',
                                        'name' => 'Category 2'
                                ),
                                'children' => array()
                        ),
                        array(
                                'Category' => array(
                                        'id' => '5',
                                        'parent_id' => '0',
                                        'name' => 'Category 3'
                                ),
                                'children' => array(
                                        array(
                                                'Category' => array(
                                                        'id' => '6',
                                                        'parent_id' => '5',
                                                        'name' => 'Category 3.1'
                                                ),
                                                'children' => array()
                                        )
                                )
                        )
                );
                $this->assertEquals($expected, $result);

                $result = $TestModel->find('threaded', array('order' => 'id DESC'));

                $expected = array(
                        array(
                                'Category' => array(
                                        'id' => 5,
                                        'parent_id' => 0,
                                        'name' => 'Category 3',
                                        'created' => '2007-03-18 15:30:23',
                                        'updated' => '2007-03-18 15:32:31'
                                ),
                                'children' => array(
                                        array(
                                                'Category' => array(
                                                        'id' => 6,
                                                        'parent_id' => 5,
                                                        'name' => 'Category 3.1',
                                                        'created' => '2007-03-18 15:30:23',
                                                        'updated' => '2007-03-18 15:32:31'
                                                ),
                                                'children' => array()
                                        )
                                )
                        ),
                        array(
                                'Category' => array(
                                        'id' => 4,
                                        'parent_id' => 0,
                                        'name' => 'Category 2',
                                        'created' => '2007-03-18 15:30:23',
                                        'updated' => '2007-03-18 15:32:31'
                                ),
                                'children' => array()
                        ),
                        array(
                                'Category' => array(
                                        'id' => 1,
                                        'parent_id' => 0,
                                        'name' => 'Category 1',
                                        'created' => '2007-03-18 15:30:23',
                                        'updated' => '2007-03-18 15:32:31'
                                ),
                                'children' => array(
                                        array(
                                                'Category' => array(
                                                        'id' => 3,
                                                        'parent_id' => 1,
                                                        'name' => 'Category 1.2',
                                                        'created' => '2007-03-18 15:30:23',
                                                        'updated' => '2007-03-18 15:32:31'
                                                ),
                                                'children' => array()
                                        ),
                                        array(
                                                'Category' => array(
                                                        'id' => 2,
                                                        'parent_id' => 1,
                                                        'name' => 'Category 1.1',
                                                        'created' => '2007-03-18 15:30:23',
                                                        'updated' => '2007-03-18 15:32:31'
                                                ),
                                                'children' => array(
                                                        array('Category' => array(
                                                                'id' => '8',
                                                                'parent_id' => '2',
                                                                'name' => 'Category 1.1.2',
                                                                'created' => '2007-03-18 15:30:23',
                                                                'updated' => '2007-03-18 15:32:31'),
                                                                'children' => array()),
                                                        array('Category' => array(
                                                                'id' => '7',
                                                                'parent_id' => '2',
                                                                'name' => 'Category 1.1.1',
                                                                'created' => '2007-03-18 15:30:23',
                                                                'updated' => '2007-03-18 15:32:31'),
                                                                'children' => array()))
                                        )
                                )
                        )
                );
                $this->assertEquals($expected, $result);

                $result = $TestModel->find('threaded', array(
                        'conditions' => array('Category.name LIKE' => 'Category 3%')
                ));
                $expected = array(
                        array(
                                'Category' => array(
                                        'id' => '5',
                                        'parent_id' => '0',
                                        'name' => 'Category 3',
                                        'created' => '2007-03-18 15:30:23',
                                        'updated' => '2007-03-18 15:32:31'
                                ),
                                'children' => array(
                                        array(
                                                'Category' => array(
                                                        'id' => '6',
                                                        'parent_id' => '5',
                                                        'name' => 'Category 3.1',
                                                        'created' => '2007-03-18 15:30:23',
                                                        'updated' => '2007-03-18 15:32:31'
                                                ),
                                                'children' => array()
                                        )
                                )
                        )
                );
                $this->assertEquals($expected, $result);

                $result = $TestModel->find('threaded', array(
                        'conditions' => array('Category.name LIKE' => 'Category 1.1%')
                ));
                $expected = array(
                                array('Category' =>
                                        array(
                                                'id' => '2',
                                                'parent_id' => '1',
                                                'name' => 'Category 1.1',
                                                'created' => '2007-03-18 15:30:23',
                                                'updated' => '2007-03-18 15:32:31'),
                                                'children' => array(
                                                        array('Category' => array(
                                                                'id' => '7',
                                                                'parent_id' => '2',
                                                                'name' => 'Category 1.1.1',
                                                                'created' => '2007-03-18 15:30:23',
                                                                'updated' => '2007-03-18 15:32:31'),
                                                                'children' => array()),
                                                        array('Category' => array(
                                                                'id' => '8',
                                                                'parent_id' => '2',
                                                                'name' => 'Category 1.1.2',
                                                                'created' => '2007-03-18 15:30:23',
                                                                'updated' => '2007-03-18 15:32:31'),
                                                                'children' => array()))));
                $this->assertEquals($expected, $result);

                $result = $TestModel->find('threaded', array(
                        'fields' => 'id, parent_id, name',
                        'conditions' => array('Category.id !=' => 2)
                ));
                $expected = array(
                        array(
                                'Category' => array(
                                        'id' => '1',
                                        'parent_id' => '0',
                                        'name' => 'Category 1'
                                ),
                                'children' => array(
                                        array(
                                                'Category' => array(
                                                        'id' => '3',
                                                        'parent_id' => '1',
                                                        'name' => 'Category 1.2'
                                                ),
                                                'children' => array()
                                        )
                                )
                        ),
                        array(
                                'Category' => array(
                                        'id' => '4',
                                        'parent_id' => '0',
                                        'name' => 'Category 2'
                                ),
                                'children' => array()
                        ),
                        array(
                                'Category' => array(
                                        'id' => '5',
                                        'parent_id' => '0',
                                        'name' => 'Category 3'
                                ),
                                'children' => array(
                                        array(
                                                'Category' => array(
                                                        'id' => '6',
                                                        'parent_id' => '5',
                                                        'name' => 'Category 3.1'
                                                ),
                                                'children' => array()
                                        )
                                )
                        )
                );
                $this->assertEquals($expected, $result);

                $result = $TestModel->find('all', array(
                        'fields' => 'id, name, parent_id',
                        'conditions' => array('Category.id !=' => 1)
                ));
                $expected = array(
                        array('Category' => array(
                                'id' => '2',
                                'name' => 'Category 1.1',
                                'parent_id' => '1'
                        )),
                        array('Category' => array(
                                'id' => '3',
                                'name' => 'Category 1.2',
                                'parent_id' => '1'
                        )),
                        array('Category' => array(
                                'id' => '4',
                                'name' => 'Category 2',
                                'parent_id' => '0'
                        )),
                        array('Category' => array(
                                'id' => '5',
                                'name' => 'Category 3',
                                'parent_id' => '0'
                        )),
                        array('Category' => array(
                                'id' => '6',
                                'name' => 'Category 3.1',
                                'parent_id' => '5'
                        )),
                        array('Category' => array(
                                'id' => '7',
                                'name' => 'Category 1.1.1',
                                'parent_id' => '2'
                        )),
                        array('Category' => array(
                                'id' => '8',
                                'name' => 'Category 1.1.2',
                                'parent_id' => '2'
                )));
                $this->assertEquals($expected, $result);

                $result = $TestModel->find('threaded', array(
                        'fields' => 'id, parent_id, name',
                        'conditions' => array('Category.id !=' => 1)
                ));
                $expected = array(
                        array(
                                'Category' => array(
                                        'id' => '2',
                                        'parent_id' => '1',
                                        'name' => 'Category 1.1'
                                ),
                                'children' => array(
                                        array('Category' => array(
                                                'id' => '7',
                                                'parent_id' => '2',
                                                'name' => 'Category 1.1.1'),
                                                'children' => array()),
                                        array('Category' => array(
                                                'id' => '8',
                                                'parent_id' => '2',
                                                'name' => 'Category 1.1.2'),
                                                'children' => array()))
                        ),
                        array(
                                'Category' => array(
                                        'id' => '3',
                                        'parent_id' => '1',
                                        'name' => 'Category 1.2'
                                ),
                                'children' => array()
                        )
                );
                $this->assertEquals($expected, $result);
        }

/**
 * test find('neighbors')
 *
 * @return void
 */
        public function testFindNeighbors() {
                $this->loadFixtures('User', 'Article', 'Comment', 'Tag', 'ArticlesTag', 'Attachment');
                $TestModel = new Article();

                $TestModel->id = 1;
                $result = $TestModel->find('neighbors', array('fields' => array('id')));

                $this->assertNull($result['prev']);
                $this->assertEquals(array('id' => 2), $result['next']['Article']);
                $this->assertEquals(2, count($result['next']['Comment']));
                $this->assertEquals(2, count($result['next']['Tag']));

                $TestModel->id = 2;
                $TestModel->recursive = 0;
                $result = $TestModel->find('neighbors', array(
                        'fields' => array('id')
                ));

                $expected = array(
                        'prev' => array(
                                'Article' => array(
                                        'id' => 1
                        )),
                        'next' => array(
                                'Article' => array(
                                        'id' => 3
                )));
                $this->assertEquals($expected, $result);

                $TestModel->id = 3;
                $TestModel->recursive = 1;
                $result = $TestModel->find('neighbors', array('fields' => array('id')));

                $this->assertNull($result['next']);
                $this->assertEquals(array('id' => 2), $result['prev']['Article']);
                $this->assertEquals(2, count($result['prev']['Comment']));
                $this->assertEquals(2, count($result['prev']['Tag']));

                $TestModel->id = 1;
                $result = $TestModel->find('neighbors', array('recursive' => -1));
                $expected = array(
                        'prev' => null,
                        'next' => array(
                                'Article' => array(
                                        'id' => 2,
                                        'user_id' => 3,
                                        'title' => 'Second Article',
                                        'body' => 'Second Article Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:41:23',
                                        'updated' => '2007-03-18 10:43:31'
                                )
                        )
                );
                $this->assertEquals($expected, $result);

                $TestModel->id = 2;
                $result = $TestModel->find('neighbors', array('recursive' => -1));
                $expected = array(
                        'prev' => array(
                                'Article' => array(
                                        'id' => 1,
                                        'user_id' => 1,
                                        'title' => 'First Article',
                                        'body' => 'First Article Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:39:23',
                                        'updated' => '2007-03-18 10:41:31'
                                )
                        ),
                        'next' => array(
                                'Article' => array(
                                        'id' => 3,
                                        'user_id' => 1,
                                        'title' => 'Third Article',
                                        'body' => 'Third Article Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:43:23',
                                        'updated' => '2007-03-18 10:45:31'
                                )
                        )
                );
                $this->assertEquals($expected, $result);

                $TestModel->id = 3;
                $result = $TestModel->find('neighbors', array('recursive' => -1));
                $expected = array(
                        'prev' => array(
                                'Article' => array(
                                        'id' => 2,
                                        'user_id' => 3,
                                        'title' => 'Second Article',
                                        'body' => 'Second Article Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:41:23',
                                        'updated' => '2007-03-18 10:43:31'
                                )
                        ),
                        'next' => null
                );
                $this->assertEquals($expected, $result);

                $TestModel->recursive = 0;
                $TestModel->id = 1;
                $one = $TestModel->read();
                $TestModel->id = 2;
                $two = $TestModel->read();
                $TestModel->id = 3;
                $three = $TestModel->read();

                $TestModel->id = 1;
                $result = $TestModel->find('neighbors');
                $expected = array('prev' => null, 'next' => $two);
                $this->assertEquals($expected, $result);

                $TestModel->id = 2;
                $result = $TestModel->find('neighbors');
                $expected = array('prev' => $one, 'next' => $three);
                $this->assertEquals($expected, $result);

                $TestModel->id = 3;
                $result = $TestModel->find('neighbors');
                $expected = array('prev' => $two, 'next' => null);
                $this->assertEquals($expected, $result);

                $TestModel->recursive = 2;
                $TestModel->id = 1;
                $one = $TestModel->read();
                $TestModel->id = 2;
                $two = $TestModel->read();
                $TestModel->id = 3;
                $three = $TestModel->read();

                $TestModel->id = 1;
                $result = $TestModel->find('neighbors', array('recursive' => 2));
                $expected = array('prev' => null, 'next' => $two);
                $this->assertEquals($expected, $result);

                $TestModel->id = 2;
                $result = $TestModel->find('neighbors', array('recursive' => 2));
                $expected = array('prev' => $one, 'next' => $three);
                $this->assertEquals($expected, $result);

                $TestModel->id = 3;
                $result = $TestModel->find('neighbors', array('recursive' => 2));
                $expected = array('prev' => $two, 'next' => null);
                $this->assertEquals($expected, $result);
        }

/**
 * Test find(neighbors) with missing fields so no neighbors are found.
 *
 * @return void
 */
        public function testFindNeighborsNoPrev() {
                $this->loadFixtures('User', 'Article', 'Comment', 'Tag', 'ArticlesTag', 'Attachment');
                $Article = new Article();

                $result = $Article->find('neighbors', array(
                        'field' => 'Article.title',
                        'value' => 'Second Article',
                        'fields' => array('id'),
                        'conditions' => array(
                                'Article.title LIKE' => '%Article%'
                        ),
                        'recursive' => 0,
                ));
                $expected = array(
                        'prev' => null,
                        'next' => null
                );
                $this->assertEquals($expected, $result);
        }

/**
 * testFindCombinedRelations method
 *
 * @return void
 */
        public function testFindCombinedRelations() {
                $this->skipIf($this->db instanceof Sqlserver, 'The test of testRecursiveUnbind test is not compatible with SQL Server, because it check for time columns.');

                $this->loadFixtures('Apple', 'Sample');
                $TestModel = new Apple();

                $result = $TestModel->find('all');

                $expected = array(
                        array(
                                'Apple' => array(
                                        'id' => '1',
                                        'apple_id' => '2',
                                        'color' => 'Red 1',
                                        'name' => 'Red Apple 1',
                                        'created' => '2006-11-22 10:38:58',
                                        'date' => '1951-01-04',
                                        'modified' => '2006-12-01 13:31:26',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => '2',
                                        'apple_id' => '1',
                                        'color' => 'Bright Red 1',
                                        'name' => 'Bright Red Apple',
                                        'created' => '2006-11-22 10:43:13',
                                        'date' => '2014-01-01',
                                        'modified' => '2006-11-30 18:38:10',
                                        'mytime' => '22:57:17'
                                ),
                                'Sample' => array(
                                        'id' => null,
                                        'apple_id' => null,
                                        'name' => null
                                ),
                                'Child' => array(
                                        array(
                                                'id' => '2',
                                                'apple_id' => '1',
                                                'color' => 'Bright Red 1',
                                                'name' => 'Bright Red Apple',
                                                'created' => '2006-11-22 10:43:13',
                                                'date' => '2014-01-01',
                                                'modified' => '2006-11-30 18:38:10',
                                                'mytime' => '22:57:17'
                        ))),
                        array(
                                'Apple' => array(
                                        'id' => '2',
                                        'apple_id' => '1',
                                        'color' => 'Bright Red 1',
                                        'name' => 'Bright Red Apple',
                                        'created' => '2006-11-22 10:43:13',
                                        'date' => '2014-01-01',
                                        'modified' => '2006-11-30 18:38:10',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => '1',
                                        'apple_id' => '2',
                                        'color' => 'Red 1',
                                        'name' => 'Red Apple 1',
                                        'created' => '2006-11-22 10:38:58',
                                        'date' => '1951-01-04',
                                        'modified' => '2006-12-01 13:31:26',
                                        'mytime' => '22:57:17'
                                ),
                                'Sample' => array(
                                        'id' => '2',
                                        'apple_id' => '2',
                                        'name' => 'sample2'
                                ),
                                'Child' => array(
                                        array(
                                                'id' => '1',
                                                'apple_id' => '2',
                                                'color' => 'Red 1',
                                                'name' => 'Red Apple 1',
                                                'created' => '2006-11-22 10:38:58',
                                                'date' => '1951-01-04',
                                                'modified' => '2006-12-01 13:31:26',
                                                'mytime' => '22:57:17'
                                        ),
                                        array(
                                                'id' => '3',
                                                'apple_id' => '2',
                                                'color' => 'blue green',
                                                'name' => 'green blue',
                                                'created' => '2006-12-25 05:13:36',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:23:24',
                                                'mytime' => '22:57:17'
                                        ),
                                        array(
                                                'id' => '4',
                                                'apple_id' => '2',
                                                'color' => 'Blue Green',
                                                'name' => 'Test Name',
                                                'created' => '2006-12-25 05:23:36',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:23:36',
                                                'mytime' => '22:57:17'
                        ))),
                        array(
                                'Apple' => array(
                                        'id' => '3',
                                        'apple_id' => '2',
                                        'color' => 'blue green',
                                        'name' => 'green blue',
                                        'created' => '2006-12-25 05:13:36',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:23:24',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => '2',
                                        'apple_id' => '1',
                                        'color' => 'Bright Red 1',
                                        'name' => 'Bright Red Apple',
                                        'created' => '2006-11-22 10:43:13',
                                        'date' => '2014-01-01',
                                        'modified' => '2006-11-30 18:38:10',
                                        'mytime' => '22:57:17'
                                ),
                                'Sample' => array(
                                        'id' => '1',
                                        'apple_id' => '3',
                                        'name' => 'sample1'
                                ),
                                'Child' => array()
                        ),
                        array(
                                'Apple' => array(
                                        'id' => '4',
                                        'apple_id' => '2',
                                        'color' => 'Blue Green',
                                        'name' => 'Test Name',
                                        'created' => '2006-12-25 05:23:36',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:23:36',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => '2',
                                        'apple_id' => '1',
                                        'color' => 'Bright Red 1',
                                        'name' => 'Bright Red Apple',
                                        'created' => '2006-11-22 10:43:13',
                                        'date' => '2014-01-01',
                                        'modified' => '2006-11-30 18:38:10',
                                        'mytime' => '22:57:17'
                                ),
                                'Sample' => array(
                                        'id' => '3',
                                        'apple_id' => '4',
                                        'name' => 'sample3'
                                ),
                                'Child' => array(
                                        array(
                                                'id' => '6',
                                                'apple_id' => '4',
                                                'color' => 'My new appleOrange',
                                                'name' => 'My new apple',
                                                'created' => '2006-12-25 05:29:39',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:29:39',
                                                'mytime' => '22:57:17'
                        ))),
                        array(
                                'Apple' => array(
                                        'id' => '5',
                                        'apple_id' => '5',
                                        'color' => 'Green',
                                        'name' => 'Blue Green',
                                        'created' => '2006-12-25 05:24:06',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:29:16',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => '5',
                                        'apple_id' => '5',
                                        'color' => 'Green',
                                        'name' => 'Blue Green',
                                        'created' => '2006-12-25 05:24:06',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:29:16',
                                        'mytime' => '22:57:17'
                                ),
                                'Sample' => array(
                                        'id' => '4',
                                        'apple_id' => '5',
                                        'name' => 'sample4'
                                ),
                                'Child' => array(
                                        array(
                                                'id' => '5',
                                                'apple_id' => '5',
                                                'color' => 'Green',
                                                'name' => 'Blue Green',
                                                'created' => '2006-12-25 05:24:06',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:29:16',
                                                'mytime' => '22:57:17'
                        ))),
                        array(
                                'Apple' => array(
                                        'id' => '6',
                                        'apple_id' => '4',
                                        'color' => 'My new appleOrange',
                                        'name' => 'My new apple',
                                        'created' => '2006-12-25 05:29:39',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:29:39',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => '4',
                                        'apple_id' => '2',
                                        'color' => 'Blue Green',
                                        'name' => 'Test Name',
                                        'created' => '2006-12-25 05:23:36',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:23:36',
                                        'mytime' => '22:57:17'
                                ),
                                'Sample' => array(
                                        'id' => null,
                                        'apple_id' => null,
                                        'name' => null
                                ),
                                'Child' => array(
                                        array(
                                                'id' => '7',
                                                'apple_id' => '6',
                                                'color' => 'Some wierd color',
                                                'name' => 'Some odd color',
                                                'created' => '2006-12-25 05:34:21',
                                                'date' => '2006-12-25',
                                                'modified' => '2006-12-25 05:34:21',
                                                'mytime' => '22:57:17'
                        ))),
                        array(
                                'Apple' => array(
                                        'id' => '7',
                                        'apple_id' => '6',
                                        'color' => 'Some wierd color',
                                        'name' => 'Some odd color',
                                        'created' => '2006-12-25 05:34:21',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:34:21',
                                        'mytime' => '22:57:17'
                                ),
                                'Parent' => array(
                                        'id' => '6',
                                        'apple_id' => '4',
                                        'color' => 'My new appleOrange',
                                        'name' => 'My new apple',
                                        'created' => '2006-12-25 05:29:39',
                                        'date' => '2006-12-25',
                                        'modified' => '2006-12-25 05:29:39',
                                        'mytime' => '22:57:17'
                                ),
                                'Sample' => array(
                                        'id' => null,
                                        'apple_id' => null,
                                        'name' => null
                                ),
                                'Child' => array()
                ));
                $this->assertEquals($expected, $result);
        }

/**
 * testSaveEmpty method
 *
 * @return void
 */
        public function testSaveEmpty() {
                $this->loadFixtures('Thread');
                $TestModel = new Thread();
                $data = array();
                $expected = $TestModel->save($data);
                $this->assertFalse($expected);
        }

/**
 * testFindAllWithConditionInChildQuery
 *
 * @return void
 */
        public function testFindAllWithConditionInChildQuery() {
                $this->loadFixtures('Basket', 'FilmFile');

                $TestModel = new Basket();
                $recursive = 3;
                $result = $TestModel->find('all', compact('recursive'));

                $expected = array(
                        array(
                                'Basket' => array(
                                        'id' => 1,
                                        'type' => 'nonfile',
                                        'name' => 'basket1',
                                        'object_id' => 1,
                                        'user_id' => 1,
                                ),
                                'FilmFile' => array(
                                        'id' => '',
                                        'name' => '',
                                )
                        ),
                        array(
                                'Basket' => array(
                                        'id' => 2,
                                        'type' => 'file',
                                        'name' => 'basket2',
                                        'object_id' => 2,
                                        'user_id' => 1,
                                ),
                                'FilmFile' => array(
                                        'id' => 2,
                                        'name' => 'two',
                                )
                        ),
                );
                $this->assertEquals($expected, $result);
        }

/**
 * testFindAllWithConditionsHavingMixedDataTypes method
 *
 * @return void
 */
        public function testFindAllWithConditionsHavingMixedDataTypes() {
                $this->loadFixtures('Article', 'User', 'Tag', 'ArticlesTag');
                $TestModel = new Article();
                $expected = array(
                        array(
                                'Article' => array(
                                        'id' => 1,
                                        'user_id' => 1,
                                        'title' => 'First Article',
                                        'body' => 'First Article Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:39:23',
                                        'updated' => '2007-03-18 10:41:31'
                                )
                        ),
                        array(
                                'Article' => array(
                                        'id' => 2,
                                        'user_id' => 3,
                                        'title' => 'Second Article',
                                        'body' => 'Second Article Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:41:23',
                                        'updated' => '2007-03-18 10:43:31'
                                )
                        )
                );
                $conditions = array('id' => array('1', 2));
                $recursive = -1;
                $order = 'Article.id ASC';
                $result = $TestModel->find('all', compact('conditions', 'recursive', 'order'));
                $this->assertEquals($expected, $result);

                $this->skipIf($this->db instanceof Postgres, 'The rest of testFindAllWithConditionsHavingMixedDataTypes test is not compatible with Postgres.');

                $conditions = array('id' => array('1', 2, '3.0'));
                $order = 'Article.id ASC';
                $result = $TestModel->find('all', compact('recursive', 'conditions', 'order'));
                $expected = array(
                        array(
                                'Article' => array(
                                        'id' => 1,
                                        'user_id' => 1,
                                        'title' => 'First Article',
                                        'body' => 'First Article Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:39:23',
                                        'updated' => '2007-03-18 10:41:31'
                                )
                        ),
                        array(
                                'Article' => array(
                                        'id' => 2,
                                        'user_id' => 3,
                                        'title' => 'Second Article',
                                        'body' => 'Second Article Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:41:23',
                                        'updated' => '2007-03-18 10:43:31'
                                )
                        ),
                        array(
                                'Article' => array(
                                        'id' => 3,
                                        'user_id' => 1,
                                        'title' => 'Third Article',
                                        'body' => 'Third Article Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:43:23',
                                        'updated' => '2007-03-18 10:45:31'
                                )
                        )
                );
                $this->assertEquals($expected, $result);
        }

/**
 * testBindUnbind method
 *
 * @return void
 */
        public function testBindUnbind() {
                $this->loadFixtures(
                        'User',
                        'Comment',
                        'FeatureSet',
                        'DeviceType',
                        'DeviceTypeCategory',
                        'ExteriorTypeCategory',
                        'Device',
                        'Document',
                        'DocumentDirectory'
                );
                $TestModel = new User();

                $result = $TestModel->hasMany;
                $expected = array();
                $this->assertEquals($expected, $result);

                $result = $TestModel->bindModel(array('hasMany' => array('Comment')));
                $this->assertTrue($result);

                $result = $TestModel->find('all', array(
                        'fields' => 'User.id, User.user',
                        'order' => array('User.id' => 'ASC'),
                ));
                $expected = array(
                        array(
                                'User' => array(
                                        'id' => '1',
                                        'user' => 'mariano'
                                ),
                                'Comment' => array(
                                        array(
                                                'id' => '3',
                                                'article_id' => '1',
                                                'user_id' => '1',
                                                'comment' => 'Third Comment for First Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:49:23',
                                                'updated' => '2007-03-18 10:51:31'
                                        ),
                                        array(
                                                'id' => '4',
                                                'article_id' => '1',
                                                'user_id' => '1',
                                                'comment' => 'Fourth Comment for First Article',
                                                'published' => 'N',
                                                'created' => '2007-03-18 10:51:23',
                                                'updated' => '2007-03-18 10:53:31'
                                        ),
                                        array(
                                                'id' => '5',
                                                'article_id' => '2',
                                                'user_id' => '1',
                                                'comment' => 'First Comment for Second Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:53:23',
                                                'updated' => '2007-03-18 10:55:31'
                        ))),
                        array(
                                'User' => array(
                                        'id' => '2',
                                        'user' => 'nate'
                                ),
                                'Comment' => array(
                                        array(
                                                'id' => '1',
                                                'article_id' => '1',
                                                'user_id' => '2',
                                                'comment' => 'First Comment for First Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:45:23',
                                                'updated' => '2007-03-18 10:47:31'
                                        ),
                                        array(
                                                'id' => '6',
                                                'article_id' => '2',
                                                'user_id' => '2',
                                                'comment' => 'Second Comment for Second Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:55:23',
                                                'updated' => '2007-03-18 10:57:31'
                        ))),
                        array(
                                'User' => array(
                                        'id' => '3',
                                        'user' => 'larry'
                                ),
                                'Comment' => array()
                        ),
                        array(
                                'User' => array(
                                        'id' => '4',
                                        'user' => 'garrett'
                                ),
                                'Comment' => array(
                                        array(
                                                'id' => '2',
                                                'article_id' => '1',
                                                'user_id' => '4',
                                                'comment' => 'Second Comment for First Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:47:23',
                                                'updated' => '2007-03-18 10:49:31'
                ))));

                $this->assertEquals($expected, $result);

                $TestModel->resetAssociations();
                $result = $TestModel->hasMany;
                $this->assertSame(array(), $result);

                $result = $TestModel->bindModel(array('hasMany' => array('Comment')), false);
                $this->assertTrue($result);

                $result = $TestModel->find('all', array(
                        'fields' => 'User.id, User.user',
                        'order' => array('User.id' => 'ASC'),
                ));

                $expected = array(
                        array(
                                'User' => array(
                                        'id' => '1',
                                        'user' => 'mariano'
                                ),
                                'Comment' => array(
                                        array(
                                                'id' => '3',
                                                'article_id' => '1',
                                                'user_id' => '1',
                                                'comment' => 'Third Comment for First Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:49:23',
                                                'updated' => '2007-03-18 10:51:31'
                                        ),
                                        array(
                                                'id' => '4',
                                                'article_id' => '1',
                                                'user_id' => '1',
                                                'comment' => 'Fourth Comment for First Article',
                                                'published' => 'N',
                                                'created' => '2007-03-18 10:51:23',
                                                'updated' => '2007-03-18 10:53:31'
                                        ),
                                        array(
                                                'id' => '5',
                                                'article_id' => '2',
                                                'user_id' => '1',
                                                'comment' => 'First Comment for Second Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:53:23',
                                                'updated' => '2007-03-18 10:55:31'
                        ))),
                        array(
                                'User' => array(
                                        'id' => '2',
                                        'user' => 'nate'
                                ),
                                'Comment' => array(
                                        array(
                                                'id' => '1',
                                                'article_id' => '1',
                                                'user_id' => '2',
                                                'comment' => 'First Comment for First Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:45:23',
                                                'updated' => '2007-03-18 10:47:31'
                                        ),
                                        array(
                                                'id' => '6',
                                                'article_id' => '2',
                                                'user_id' => '2',
                                                'comment' => 'Second Comment for Second Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:55:23',
                                                'updated' => '2007-03-18 10:57:31'
                        ))),
                        array(
                                'User' => array(
                                        'id' => '3',
                                        'user' => 'larry'
                                ),
                                'Comment' => array()
                        ),
                        array(
                                'User' => array(
                                        'id' => '4',
                                        'user' => 'garrett'
                                ),
                                'Comment' => array(
                                        array(
                                                'id' => '2',
                                                'article_id' => '1',
                                                'user_id' => '4',
                                                'comment' => 'Second Comment for First Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:47:23',
                                                'updated' => '2007-03-18 10:49:31'
                ))));

                $this->assertEquals($expected, $result);

                $result = $TestModel->hasMany;
                $expected = array(
                        'Comment' => array(
                                'className' => 'Comment',
                                'foreignKey' => 'user_id',
                                'conditions' => null,
                                'fields' => null,
                                'order' => null,
                                'limit' => null,
                                'offset' => null,
                                'dependent' => null,
                                'exclusive' => null,
                                'finderQuery' => null,
                                'counterQuery' => null
                ));
                $this->assertEquals($expected, $result);

                $result = $TestModel->unbindModel(array('hasMany' => array('Comment')));
                $this->assertTrue($result);

                $result = $TestModel->hasMany;
                $expected = array();
                $this->assertEquals($expected, $result);

                $result = $TestModel->find('all', array(
                        'fields' => 'User.id, User.user',
                        'order' => array('User.id' => 'ASC'),
                ));
                $expected = array(
                        array('User' => array('id' => '1', 'user' => 'mariano')),
                        array('User' => array('id' => '2', 'user' => 'nate')),
                        array('User' => array('id' => '3', 'user' => 'larry')),
                        array('User' => array('id' => '4', 'user' => 'garrett')));
                $this->assertEquals($expected, $result);

                $result = $TestModel->find('all', array(
                        'fields' => 'User.id, User.user',
                        'order' => array('User.id' => 'ASC'),
                ));
                $expected = array(
                        array(
                                'User' => array(
                                        'id' => '1',
                                        'user' => 'mariano'
                                ),
                                'Comment' => array(
                                        array(
                                                'id' => '3',
                                                'article_id' => '1',
                                                'user_id' => '1',
                                                'comment' => 'Third Comment for First Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:49:23',
                                                'updated' => '2007-03-18 10:51:31'
                                        ),
                                        array(
                                                'id' => '4',
                                                'article_id' => '1',
                                                'user_id' => '1',
                                                'comment' => 'Fourth Comment for First Article',
                                                'published' => 'N',
                                                'created' => '2007-03-18 10:51:23',
                                                'updated' => '2007-03-18 10:53:31'
                                        ),
                                        array(
                                                'id' => '5',
                                                'article_id' => '2',
                                                'user_id' => '1',
                                                'comment' => 'First Comment for Second Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:53:23',
                                                'updated' => '2007-03-18 10:55:31'
                        ))),
                        array(
                                'User' => array(
                                        'id' => '2',
                                        'user' => 'nate'
                                ),
                                'Comment' => array(
                                        array(
                                                'id' => '1',
                                                'article_id' => '1',
                                                'user_id' => '2',
                                                'comment' => 'First Comment for First Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:45:23',
                                                'updated' => '2007-03-18 10:47:31'
                                        ),
                                        array(
                                                'id' => '6',
                                                'article_id' => '2',
                                                'user_id' => '2',
                                                'comment' => 'Second Comment for Second Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:55:23',
                                                'updated' => '2007-03-18 10:57:31'
                        ))),
                        array(
                                'User' => array(
                                        'id' => '3',
                                        'user' => 'larry'
                                ),
                                'Comment' => array()
                        ),
                        array(
                                'User' => array(
                                        'id' => '4',
                                        'user' => 'garrett'
                                ),
                                'Comment' => array(
                                        array(
                                                'id' => '2',
                                                'article_id' => '1',
                                                'user_id' => '4',
                                                'comment' =>
                                                'Second Comment for First Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:47:23',
                                                'updated' => '2007-03-18 10:49:31'
                ))));
                $this->assertEquals($expected, $result);

                $result = $TestModel->unbindModel(array('hasMany' => array('Comment')), false);
                $this->assertTrue($result);

                $result = $TestModel->find('all', array(
                        'fields' => 'User.id, User.user',
                        'order' => array('User.id' => 'ASC'),
                ));
                $expected = array(
                        array('User' => array('id' => '1', 'user' => 'mariano')),
                        array('User' => array('id' => '2', 'user' => 'nate')),
                        array('User' => array('id' => '3', 'user' => 'larry')),
                        array('User' => array('id' => '4', 'user' => 'garrett')));
                $this->assertEquals($expected, $result);

                $result = $TestModel->hasMany;
                $expected = array();
                $this->assertEquals($expected, $result);

                $result = $TestModel->bindModel(array('hasMany' => array(
                        'Comment' => array('className' => 'Comment', 'conditions' => 'Comment.published = \'Y\'')
                )));
                $this->assertTrue($result);

                $result = $TestModel->find('all', array(
                        'fields' => 'User.id, User.user',
                        'order' => array('User.id' => 'ASC'),
                ));
                $expected = array(
                        array(
                                'User' => array(
                                        'id' => '1',
                                        'user' => 'mariano'
                                ),
                                'Comment' => array(
                                        array(
                                                'id' => '3',
                                                'article_id' => '1',
                                                'user_id' => '1',
                                                'comment' => 'Third Comment for First Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:49:23',
                                                'updated' => '2007-03-18 10:51:31'
                                        ),
                                        array(
                                                'id' => '5',
                                                'article_id' => '2',
                                                'user_id' => '1',
                                                'comment' => 'First Comment for Second Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:53:23',
                                                'updated' => '2007-03-18 10:55:31'
                        ))),
                        array(
                                'User' => array(
                                        'id' => '2',
                                        'user' => 'nate'
                                ),
                                'Comment' => array(
                                        array(
                                                'id' => '1',
                                                'article_id' => '1',
                                                'user_id' => '2',
                                                'comment' => 'First Comment for First Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:45:23',
                                                'updated' => '2007-03-18 10:47:31'
                                        ),
                                        array(
                                                'id' => '6',
                                                'article_id' => '2',
                                                'user_id' => '2',
                                                'comment' => 'Second Comment for Second Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:55:23',
                                                'updated' => '2007-03-18 10:57:31'
                        ))),
                        array(
                                'User' => array(
                                        'id' => '3',
                                        'user' => 'larry'
                                ),
                                'Comment' => array()
                        ),
                        array(
                                'User' => array(
                                        'id' => '4',
                                        'user' => 'garrett'
                                ),
                                'Comment' => array(
                                        array(
                                                'id' => '2',
                                                'article_id' => '1',
                                                'user_id' => '4',
                                                'comment' => 'Second Comment for First Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:47:23',
                                                'updated' => '2007-03-18 10:49:31'
                ))));

                $this->assertEquals($expected, $result);

                $TestModel2 = new DeviceType();

                $expected = array(
                        'className' => 'FeatureSet',
                        'foreignKey' => 'feature_set_id',
                        'conditions' => '',
                        'fields' => '',
                        'order' => '',
                        'counterCache' => ''
                );
                $this->assertEquals($expected, $TestModel2->belongsTo['FeatureSet']);

                $TestModel2->bindModel(array(
                        'belongsTo' => array(
                                'FeatureSet' => array(
                                        'className' => 'FeatureSet',
                                        'conditions' => array('active' => true)
                                )
                        )
                ));
                $expected['conditions'] = array('active' => true);
                $this->assertEquals($expected, $TestModel2->belongsTo['FeatureSet']);

                $TestModel2->bindModel(array(
                        'belongsTo' => array(
                                'FeatureSet' => array(
                                        'className' => 'FeatureSet',
                                        'foreignKey' => false,
                                        'conditions' => array('Feature.name' => 'DeviceType.name')
                                )
                        )
                ));
                $expected['conditions'] = array('Feature.name' => 'DeviceType.name');
                $expected['foreignKey'] = false;
                $this->assertEquals($expected, $TestModel2->belongsTo['FeatureSet']);

                $TestModel2->bindModel(array(
                        'hasMany' => array(
                                'NewFeatureSet' => array(
                                        'className' => 'FeatureSet',
                                        'conditions' => array('active' => true)
                                )
                        )
                ));

                $expected = array(
                        'className' => 'FeatureSet',
                        'conditions' => array('active' => true),
                        'foreignKey' => 'device_type_id',
                        'fields' => '',
                        'order' => '',
                        'limit' => '',
                        'offset' => '',
                        'dependent' => '',
                        'exclusive' => '',
                        'finderQuery' => '',
                        'counterQuery' => ''
                );
                $this->assertEquals($expected, $TestModel2->hasMany['NewFeatureSet']);
                $this->assertTrue(is_object($TestModel2->NewFeatureSet));
        }

/**
 * testBindMultipleTimes method
 *
 * @return void
 */
        public function testBindMultipleTimes() {
                $this->loadFixtures('User', 'Comment', 'Article', 'Tag', 'ArticlesTag');
                $TestModel = new User();

                $result = $TestModel->hasMany;
                $expected = array();
                $this->assertEquals($expected, $result);

                $result = $TestModel->bindModel(array(
                        'hasMany' => array(
                                'Items' => array('className' => 'Comment')
                )));
                $this->assertTrue($result);

                $result = $TestModel->find('all', array(
                        'fields' => 'User.id, User.user'
                ));

                $expected = array(
                        array(
                                'User' => array(
                                        'id' => '1',
                                        'user' => 'mariano'
                                ),
                                'Items' => array(
                                        array(
                                                'id' => '3',
                                                'article_id' => '1',
                                                'user_id' => '1',
                                                'comment' => 'Third Comment for First Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:49:23',
                                                'updated' => '2007-03-18 10:51:31'
                                        ),
                                        array(
                                                'id' => '4',
                                                'article_id' => '1',
                                                'user_id' => '1',
                                                'comment' => 'Fourth Comment for First Article',
                                                'published' => 'N',
                                                'created' => '2007-03-18 10:51:23',
                                                'updated' => '2007-03-18 10:53:31'
                                        ),
                                        array(
                                                'id' => '5',
                                                'article_id' => '2',
                                                'user_id' => '1',
                                                'comment' => 'First Comment for Second Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:53:23',
                                                'updated' => '2007-03-18 10:55:31'
                        ))),
                        array(
                                'User' => array(
                                        'id' => '2',
                                        'user' => 'nate'
                                ),
                                'Items' => array(
                                        array(
                                                'id' => '1',
                                                'article_id' => '1',
                                                'user_id' => '2',
                                                'comment' => 'First Comment for First Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:45:23',
                                                'updated' => '2007-03-18 10:47:31'
                                        ),
                                        array(
                                                'id' => '6',
                                                'article_id' => '2',
                                                'user_id' => '2',
                                                'comment' => 'Second Comment for Second Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:55:23',
                                                'updated' => '2007-03-18 10:57:31'
                        ))),
                        array(
                                'User' => array(
                                        'id' => '3',
                                        'user' => 'larry'
                                ),
                                'Items' => array()
                        ),
                        array(
                                'User' => array(
                                        'id' => '4',
                                        'user' => 'garrett'
                                ),
                                        'Items' => array(
                                                array(
                                                        'id' => '2',
                                                        'article_id' => '1',
                                                        'user_id' => '4',
                                                        'comment' => 'Second Comment for First Article',
                                                        'published' => 'Y',
                                                        'created' => '2007-03-18 10:47:23',
                                                        'updated' => '2007-03-18 10:49:31'
                ))));
                $this->assertEquals($expected, $result);

                $result = $TestModel->bindModel(array(
                        'hasMany' => array(
                                'Items' => array('className' => 'Article')
                )));
                $this->assertTrue($result);

                $result = $TestModel->find('all', array(
                        'fields' => 'User.id, User.user'
                ));
                $expected = array(
                        array(
                                'User' => array(
                                        'id' => '1',
                                        'user' => 'mariano'
                                ),
                                'Items' => array(
                                        array(
                                                'id' => 1,
                                                'user_id' => 1,
                                                'title' => 'First Article',
                                                'body' => 'First Article Body',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:39:23',
                                                'updated' => '2007-03-18 10:41:31'
                                        ),
                                        array(
                                                'id' => 3,
                                                'user_id' => 1,
                                                'title' => 'Third Article',
                                                'body' => 'Third Article Body',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:43:23',
                                                'updated' => '2007-03-18 10:45:31'
                        ))),
                        array(
                                'User' => array(
                                        'id' => '2',
                                        'user' => 'nate'
                                ),
                                'Items' => array()
                        ),
                        array(
                                'User' => array(
                                        'id' => '3',
                                        'user' => 'larry'
                                ),
                                'Items' => array(
                                        array(
                                                'id' => 2,
                                                'user_id' => 3,
                                                'title' => 'Second Article',
                                                'body' => 'Second Article Body',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:41:23',
                                                'updated' => '2007-03-18 10:43:31'
                        ))),
                        array(
                                'User' => array(
                                        'id' => '4',
                                        'user' => 'garrett'
                                ),
                                'Items' => array()
                ));

                $this->assertEquals($expected, $result);
        }

/**
 * test that multiple reset = true calls to bindModel() result in the original associations.
 *
 * @return void
 */
        public function testBindModelMultipleTimesResetCorrectly() {
                $this->loadFixtures('User', 'Comment', 'Article');
                $TestModel = new User();

                $TestModel->bindModel(array('hasMany' => array('Comment')));
                $TestModel->bindModel(array('hasMany' => array('Comment')));
                $TestModel->resetAssociations();

                $this->assertFalse(isset($TestModel->hasMany['Comment']), 'Association left behind');
        }

/**
 * testBindMultipleTimes method with different reset settings
 *
 * @return void
 */
        public function testBindMultipleTimesWithDifferentResetSettings() {
                $this->loadFixtures('User', 'Comment', 'Article');
                $TestModel = new User();

                $result = $TestModel->hasMany;
                $expected = array();
                $this->assertEquals($expected, $result);

                $result = $TestModel->bindModel(array(
                        'hasMany' => array('Comment')
                ));
                $this->assertTrue($result);
                $result = $TestModel->bindModel(
                        array('hasMany' => array('Article')),
                        false
                );
                $this->assertTrue($result);

                $result = array_keys($TestModel->hasMany);
                $expected = array('Comment', 'Article');
                $this->assertEquals($expected, $result);

                $TestModel->resetAssociations();

                $result = array_keys($TestModel->hasMany);
                $expected = array('Article');
                $this->assertEquals($expected, $result);
        }

/**
 * test that bindModel behaves with Custom primary Key associations
 *
 * @return void
 */
        public function testBindWithCustomPrimaryKey() {
                $this->loadFixtures('Story', 'StoriesTag', 'Tag');
                $Model = ClassRegistry::init('StoriesTag');
                $Model->bindModel(array(
                        'belongsTo' => array(
                                'Tag' => array(
                                        'className' => 'Tag',
                                        'foreignKey' => 'story'
                ))));

                $result = $Model->find('all');
                $this->assertFalse(empty($result));
        }

/**
 * test that calling unbindModel() with reset == true multiple times
 * leaves associations in the correct state.
 *
 * @return void
 */
        public function testUnbindMultipleTimesResetCorrectly() {
                $this->loadFixtures('User', 'Comment', 'Article');
                $TestModel = new Article10();

                $TestModel->unbindModel(array('hasMany' => array('Comment')));
                $TestModel->unbindModel(array('hasMany' => array('Comment')));
                $TestModel->resetAssociations();

                $this->assertTrue(isset($TestModel->hasMany['Comment']), 'Association permanently removed');
        }

/**
 * testBindMultipleTimes method with different reset settings
 *
 * @return void
 */
        public function testUnBindMultipleTimesWithDifferentResetSettings() {
                $this->loadFixtures('User', 'Comment', 'Article');
                $TestModel = new Comment();

                $result = array_keys($TestModel->belongsTo);
                $expected = array('Article', 'User');
                $this->assertEquals($expected, $result);

                $result = $TestModel->unbindModel(array(
                        'belongsTo' => array('User')
                ));
                $this->assertTrue($result);
                $result = $TestModel->unbindModel(
                        array('belongsTo' => array('Article')),
                        false
                );
                $this->assertTrue($result);

                $result = array_keys($TestModel->belongsTo);
                $expected = array();
                $this->assertEquals($expected, $result);

                $TestModel->resetAssociations();

                $result = array_keys($TestModel->belongsTo);
                $expected = array('User');
                $this->assertEquals($expected, $result);
        }

/**
 * testAssociationAfterFind method
 *
 * @return void
 */
        public function testAssociationAfterFind() {
                $this->loadFixtures('Post', 'Author', 'Comment');
                $TestModel = new Post();
                $result = $TestModel->find('all', array(
                        'order' => array('Post.id' => 'ASC')
                ));
                $expected = array(
                        array(
                                'Post' => array(
                                        'id' => '1',
                                        'author_id' => '1',
                                        'title' => 'First Post',
                                        'body' => 'First Post Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:39:23',
                                        'updated' => '2007-03-18 10:41:31'
                                ),
                                'Author' => array(
                                        'id' => '1',
                                        'user' => 'mariano',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:16:23',
                                        'updated' => '2007-03-17 01:18:31',
                                        'test' => 'working'
                        )),
                        array(
                                'Post' => array(
                                        'id' => '2',
                                        'author_id' => '3',
                                        'title' => 'Second Post',
                                        'body' => 'Second Post Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:41:23',
                                        'updated' => '2007-03-18 10:43:31'
                                ),
                                'Author' => array(
                                        'id' => '3',
                                        'user' => 'larry',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:20:23',
                                        'updated' => '2007-03-17 01:22:31',
                                        'test' => 'working'
                        )),
                        array(
                                'Post' => array(
                                        'id' => '3',
                                        'author_id' => '1',
                                        'title' => 'Third Post',
                                        'body' => 'Third Post Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:43:23',
                                        'updated' => '2007-03-18 10:45:31'
                                ),
                                'Author' => array(
                                        'id' => '1',
                                        'user' => 'mariano',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:16:23',
                                        'updated' => '2007-03-17 01:18:31',
                                        'test' => 'working'
                )));
                $this->assertEquals($expected, $result);
                unset($TestModel);

                $Author = new Author();
                $Author->Post->bindModel(array(
                        'hasMany' => array(
                                'Comment' => array(
                                        'className' => 'ModifiedComment',
                                        'foreignKey' => 'article_id',
                                )
                )));
                $result = $Author->find('all', array(
                        'conditions' => array('Author.id' => 1),
                        'order' => array('Author.id' => 'ASC'),
                        'recursive' => 2
                ));
                $expected = array(
                        'id' => 1,
                        'article_id' => 1,
                        'user_id' => 2,
                        'comment' => 'First Comment for First Article',
                        'published' => 'Y',
                        'created' => '2007-03-18 10:45:23',
                        'updated' => '2007-03-18 10:47:31',
                        'callback' => 'Fire'
                );
                $this->assertEquals($expected, $result[0]['Post'][0]['Comment'][0]);
        }

/**
 * testDeeperAssociationAfterFind method
 *
 * @return void
 */
        public function testDeeperAssociationAfterFind() {
                $this->loadFixtures('Post', 'Author', 'Comment', 'Attachment', 'Article');

                $Post = new Post();
                $Post->bindModel(array(
                        'hasMany' => array(
                                'Comment' => array(
                                        'className' => 'ModifiedComment',
                                        'foreignKey' => 'article_id',
                                )
                )));
                $Post->Comment->bindModel(array(
                        'hasOne' => array(
                                'Attachment' => array(
                                        'className' => 'ModifiedAttachment',
                                )
                )));

                $result = $Post->find('first', array(
                        'conditions' => array('Post.id' => 2),
                        'recursive' => 2
                ));
                $this->assertTrue(isset($result['Comment'][0]['callback']));
                $this->assertEquals('Fire', $result['Comment'][0]['callback']);
                $this->assertTrue(isset($result['Comment'][0]['Attachment']['callback']));
                $this->assertEquals('Fired', $result['Comment'][0]['Attachment']['callback']);
        }

/**
 * Tests that callbacks can be properly disabled
 *
 * @return void
 */
        public function testCallbackDisabling() {
                $this->loadFixtures('Author');
                $TestModel = new ModifiedAuthor();

                $result = Hash::extract($TestModel->find('all'), '{n}.Author.user');
                $expected = array('mariano (CakePHP)', 'nate (CakePHP)', 'larry (CakePHP)', 'garrett (CakePHP)');
                $this->assertEquals($expected, $result);

                $result = Hash::extract($TestModel->find('all', array('callbacks' => 'after')), '{n}.Author.user');
                $expected = array('mariano (CakePHP)', 'nate (CakePHP)', 'larry (CakePHP)', 'garrett (CakePHP)');
                $this->assertEquals($expected, $result);

                $result = Hash::extract($TestModel->find('all', array('callbacks' => 'before')), '{n}.Author.user');
                $expected = array('mariano', 'nate', 'larry', 'garrett');
                $this->assertEquals($expected, $result);

                $result = Hash::extract($TestModel->find('all', array('callbacks' => false)), '{n}.Author.user');
                $expected = array('mariano', 'nate', 'larry', 'garrett');
                $this->assertEquals($expected, $result);
        }

/**
 * testAssociationAfterFindCallbacksDisabled method
 *
 * @return void
 */
        public function testAssociationAfterFindCalbacksDisabled() {
                $this->loadFixtures('Post', 'Author', 'Comment');
                $TestModel = new Post();
                $result = $TestModel->find('all', array(
                        'callbacks' => false,
                        'order' => array('Post.id' => 'ASC'),
                ));
                $expected = array(
                        array(
                                'Post' => array(
                                        'id' => '1',
                                        'author_id' => '1',
                                        'title' => 'First Post',
                                        'body' => 'First Post Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:39:23',
                                        'updated' => '2007-03-18 10:41:31'
                                ),
                                'Author' => array(
                                        'id' => '1',
                                        'user' => 'mariano',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:16:23',
                                        'updated' => '2007-03-17 01:18:31'
                        )),
                        array(
                                'Post' => array(
                                        'id' => '2',
                                        'author_id' => '3',
                                        'title' => 'Second Post',
                                        'body' => 'Second Post Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:41:23',
                                        'updated' => '2007-03-18 10:43:31'
                                ),
                                'Author' => array(
                                        'id' => '3',
                                        'user' => 'larry',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:20:23',
                                        'updated' => '2007-03-17 01:22:31'
                        )),
                        array(
                                'Post' => array(
                                        'id' => '3',
                                        'author_id' => '1',
                                        'title' => 'Third Post',
                                        'body' => 'Third Post Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:43:23',
                                        'updated' => '2007-03-18 10:45:31'
                                ),
                                'Author' => array(
                                        'id' => '1',
                                        'user' => 'mariano',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:16:23',
                                        'updated' => '2007-03-17 01:18:31'
                )));
                $this->assertEquals($expected, $result);
                unset($TestModel);

                $Author = new Author();
                $Author->Post->bindModel(array(
                        'hasMany' => array(
                                'Comment' => array(
                                        'className' => 'ModifiedComment',
                                        'foreignKey' => 'article_id',
                                )
                )));
                $result = $Author->find('all', array(
                        'conditions' => array('Author.id' => 1),
                        'recursive' => 2,
                        'order' => array('Author.id' => 'ASC'),
                        'callbacks' => false
                ));
                $expected = array(
                        'id' => 1,
                        'article_id' => 1,
                        'user_id' => 2,
                        'comment' => 'First Comment for First Article',
                        'published' => 'Y',
                        'created' => '2007-03-18 10:45:23',
                        'updated' => '2007-03-18 10:47:31'
                );
                $this->assertEquals($expected, $result[0]['Post'][0]['Comment'][0]);
        }

/**
 * Tests that the database configuration assigned to the model can be changed using
 * (before|after)Find callbacks
 *
 * @return void
 */
        public function testCallbackSourceChange() {
                $this->loadFixtures('Post');
                $TestModel = new Post();
                $this->assertEquals(3, count($TestModel->find('all')));
        }

/**
 * testCallbackSourceChangeUnknownDatasource method
 *
 * @expectedException MissingDatasourceConfigException
 * @return void
 */
        public function testCallbackSourceChangeUnknownDatasource() {
                $this->loadFixtures('Post', 'Author');
                $TestModel = new Post();
                $this->assertFalse($TestModel->find('all', array('connection' => 'foo')));
        }

/**
 * testMultipleBelongsToWithSameClass method
 *
 * @return void
 */
        public function testMultipleBelongsToWithSameClass() {
                $this->loadFixtures(
                        'DeviceType',
                        'DeviceTypeCategory',
                        'FeatureSet',
                        'ExteriorTypeCategory',
                        'Document',
                        'Device',
                        'DocumentDirectory'
                );

                $DeviceType = new DeviceType();

                $DeviceType->recursive = 2;
                $result = $DeviceType->read(null, 1);

                $expected = array(
                        'DeviceType' => array(
                                'id' => 1,
                                'device_type_category_id' => 1,
                                'feature_set_id' => 1,
                                'exterior_type_category_id' => 1,
                                'image_id' => 1,
                                'extra1_id' => 1,
                                'extra2_id' => 1,
                                'name' => 'DeviceType 1',
                                'order' => 0
                        ),
                        'Image' => array(
                                'id' => 1,
                                'document_directory_id' => 1,
                                'name' => 'Document 1',
                                'DocumentDirectory' => array(
                                        'id' => 1,
                                        'name' => 'DocumentDirectory 1'
                        )),
                        'Extra1' => array(
                                'id' => 1,
                                'document_directory_id' => 1,
                                'name' => 'Document 1',
                                'DocumentDirectory' => array(
                                        'id' => 1,
                                        'name' => 'DocumentDirectory 1'
                        )),
                        'Extra2' => array(
                                'id' => 1,
                                'document_directory_id' => 1,
                                'name' => 'Document 1',
                                'DocumentDirectory' => array(
                                        'id' => 1,
                                        'name' => 'DocumentDirectory 1'
                        )),
                        'DeviceTypeCategory' => array(
                                'id' => 1,
                                'name' => 'DeviceTypeCategory 1'
                        ),
                        'FeatureSet' => array(
                                'id' => 1,
                                'name' => 'FeatureSet 1'
                        ),
                        'ExteriorTypeCategory' => array(
                                'id' => 1,
                                'image_id' => 1,
                                'name' => 'ExteriorTypeCategory 1',
                                'Image' => array(
                                        'id' => 1,
                                        'device_type_id' => 1,
                                        'name' => 'Device 1',
                                        'typ' => 1
                        )),
                        'Device' => array(
                                array(
                                        'id' => 1,
                                        'device_type_id' => 1,
                                        'name' => 'Device 1',
                                        'typ' => 1
                                ),
                                array(
                                        'id' => 2,
                                        'device_type_id' => 1,
                                        'name' => 'Device 2',
                                        'typ' => 1
                                ),
                                array(
                                        'id' => 3,
                                        'device_type_id' => 1,
                                        'name' => 'Device 3',
                                        'typ' => 2
                )));

                $this->assertEquals($expected, $result);
        }

/**
 * testHabtmRecursiveBelongsTo method
 *
 * @return void
 */
        public function testHabtmRecursiveBelongsTo() {
                $this->loadFixtures('Portfolio', 'Item', 'ItemsPortfolio', 'Syfile', 'Image');
                $Portfolio = new Portfolio();

                $result = $Portfolio->find('first', array('conditions' => array('id' => 2), 'recursive' => 3));
                $expected = array(
                        'Portfolio' => array(
                                'id' => 2,
                                'seller_id' => 1,
                                'name' => 'Portfolio 2'
                        ),
                        'Item' => array(
                                array(
                                        'id' => 2,
                                        'syfile_id' => 2,
                                        'published' => false,
                                        'name' => 'Item 2',
                                        'ItemsPortfolio' => array(
                                                'id' => 2,
                                                'item_id' => 2,
                                                'portfolio_id' => 2
                                        ),
                                        'Syfile' => array(
                                                'id' => 2,
                                                'image_id' => 2,
                                                'name' => 'Syfile 2',
                                                'item_count' => null,
                                                'Image' => array(
                                                        'id' => 2,
                                                        'name' => 'Image 2'
                                                )
                                )),
                                array(
                                        'id' => 6,
                                        'syfile_id' => 6,
                                        'published' => false,
                                        'name' => 'Item 6',
                                        'ItemsPortfolio' => array(
                                                'id' => 6,
                                                'item_id' => 6,
                                                'portfolio_id' => 2
                                        ),
                                        'Syfile' => array(
                                                'id' => 6,
                                                'image_id' => null,
                                                'name' => 'Syfile 6',
                                                'item_count' => null,
                                                'Image' => array()
                ))));

                $this->assertEquals($expected, $result);
        }

/**
 * testNonNumericHabtmJoinKey method
 *
 * @return void
 */
        public function testNonNumericHabtmJoinKey() {
                $this->loadFixtures('Post', 'Tag', 'PostsTag', 'Author');
                $Post = new Post();
                $Post->bindModel(array(
                        'hasAndBelongsToMany' => array('Tag')
                ));
                $Post->Tag->primaryKey = 'tag';

                $result = $Post->find('all', array(
                        'order' => 'Post.id ASC',
                ));
                $expected = array(
                        array(
                                'Post' => array(
                                        'id' => '1',
                                        'author_id' => '1',
                                        'title' => 'First Post',
                                        'body' => 'First Post Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:39:23',
                                        'updated' => '2007-03-18 10:41:31'
                                ),
                                'Author' => array(
                                        'id' => 1,
                                        'user' => 'mariano',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:16:23',
                                        'updated' => '2007-03-17 01:18:31',
                                        'test' => 'working'
                                ),
                                'Tag' => array(
                                        array(
                                                'id' => '1',
                                                'tag' => 'tag1',
                                                'created' => '2007-03-18 12:22:23',
                                                'updated' => '2007-03-18 12:24:31'
                                        ),
                                        array(
                                                'id' => '2',
                                                'tag' => 'tag2',
                                                'created' => '2007-03-18 12:24:23',
                                                'updated' => '2007-03-18 12:26:31'
                        ))),
                        array(
                                'Post' => array(
                                        'id' => '2',
                                        'author_id' => '3',
                                        'title' => 'Second Post',
                                        'body' => 'Second Post Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:41:23',
                                        'updated' => '2007-03-18 10:43:31'
                                ),
                                'Author' => array(
                                        'id' => 3,
                                        'user' => 'larry',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:20:23',
                                        'updated' => '2007-03-17 01:22:31',
                                        'test' => 'working'
                                ),
                                'Tag' => array(
                                        array(
                                                'id' => '1',
                                                'tag' => 'tag1',
                                                'created' => '2007-03-18 12:22:23',
                                                'updated' => '2007-03-18 12:24:31'
                                                ),
                                        array(
                                                'id' => '3',
                                                'tag' => 'tag3',
                                                'created' => '2007-03-18 12:26:23',
                                                'updated' => '2007-03-18 12:28:31'
                        ))),
                        array(
                                'Post' => array(
                                        'id' => '3',
                                        'author_id' => '1',
                                        'title' => 'Third Post',
                                        'body' => 'Third Post Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:43:23',
                                        'updated' => '2007-03-18 10:45:31'
                                ),
                                'Author' => array(
                                        'id' => 1,
                                        'user' => 'mariano',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:16:23',
                                        'updated' => '2007-03-17 01:18:31',
                                        'test' => 'working'
                                ),
                                'Tag' => array()
                ));
                $this->assertEquals($expected, $result);
        }

/**
 * testHabtmFinderQuery method
 *
 * @return void
 */
        public function testHabtmFinderQuery() {
                $this->loadFixtures('Article', 'Tag', 'ArticlesTag');
                $Article = new Article();

                $sql = $this->db->buildStatement(
                        array(
                                'fields' => $this->db->fields($Article->Tag, null, array(
                                        'Tag.id', 'Tag.tag', 'ArticlesTag.article_id', 'ArticlesTag.tag_id'
                                )),
                                'table' => $this->db->fullTableName('tags'),
                                'alias' => 'Tag',
                                'limit' => null,
                                'offset' => null,
                                'group' => null,
                                'joins' => array(array(
                                        'alias' => 'ArticlesTag',
                                        'table' => 'articles_tags',
                                        'conditions' => array(
                                                array("ArticlesTag.article_id" => '{$__cakeID__$}'),
                                                array("ArticlesTag.tag_id" => $this->db->identifier('Tag.id'))
                                        )
                                )),
                                'conditions' => array(),
                                'order' => null
                        ),
                        $Article
                );

                $Article->hasAndBelongsToMany['Tag']['finderQuery'] = $sql;
                $result = $Article->find('first');
                $expected = array(
                        array(
                                'id' => '1',
                                'tag' => 'tag1'
                        ),
                        array(
                                'id' => '2',
                                'tag' => 'tag2'
                ));

                $this->assertEquals($expected, $result['Tag']);
        }

/**
 * testHabtmLimitOptimization method
 *
 * @return void
 */
        public function testHabtmLimitOptimization() {
                $this->loadFixtures('Article', 'User', 'Comment', 'Tag', 'ArticlesTag');
                $TestModel = new Article();

                $TestModel->hasAndBelongsToMany['Tag']['limit'] = 2;
                $result = $TestModel->read(null, 2);
                $expected = array(
                        'Article' => array(
                                'id' => '2',
                                'user_id' => '3',
                                'title' => 'Second Article',
                                'body' => 'Second Article Body',
                                'published' => 'Y',
                                'created' => '2007-03-18 10:41:23',
                                'updated' => '2007-03-18 10:43:31'
                        ),
                        'User' => array(
                                'id' => '3',
                                'user' => 'larry',
                                'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                'created' => '2007-03-17 01:20:23',
                                'updated' => '2007-03-17 01:22:31'
                        ),
                        'Comment' => array(
                                array(
                                        'id' => '5',
                                        'article_id' => '2',
                                        'user_id' => '1',
                                        'comment' => 'First Comment for Second Article',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:53:23',
                                        'updated' => '2007-03-18 10:55:31'
                                ),
                                array(
                                        'id' => '6',
                                        'article_id' => '2',
                                        'user_id' => '2',
                                        'comment' => 'Second Comment for Second Article',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:55:23',
                                        'updated' => '2007-03-18 10:57:31'
                        )),
                        'Tag' => array(
                                array(
                                        'id' => '1',
                                        'tag' => 'tag1',
                                        'created' => '2007-03-18 12:22:23',
                                        'updated' => '2007-03-18 12:24:31'
                                ),
                                array(
                                        'id' => '3',
                                        'tag' => 'tag3',
                                        'created' => '2007-03-18 12:26:23',
                                        'updated' => '2007-03-18 12:28:31'
                )));

                $this->assertEquals($expected, $result);

                $TestModel->hasAndBelongsToMany['Tag']['limit'] = 1;
                $result = $TestModel->read(null, 2);
                unset($expected['Tag'][1]);

                $this->assertEquals($expected, $result);
        }

/**
 * testHasManyLimitOptimization method
 *
 * @return void
 */
        public function testHasManyLimitOptimization() {
                $this->loadFixtures('Project', 'Thread', 'Message', 'Bid');
                $Project = new Project();
                $Project->recursive = 3;

                $result = $Project->find('all', array(
                        'order' => 'Project.id ASC',
                ));
                $expected = array(
                        array(
                                'Project' => array(
                                        'id' => 1,
                                        'name' => 'Project 1'
                                ),
                                'Thread' => array(
                                        array(
                                                'id' => 1,
                                                'project_id' => 1,
                                                'name' => 'Project 1, Thread 1',
                                                'Project' => array(
                                                        'id' => 1,
                                                        'name' => 'Project 1',
                                                        'Thread' => array(
                                                                array(
                                                                        'id' => 1,
                                                                        'project_id' => 1,
                                                                        'name' => 'Project 1, Thread 1'
                                                                ),
                                                                array(
                                                                        'id' => 2,
                                                                        'project_id' => 1,
                                                                        'name' => 'Project 1, Thread 2'
                                                ))),
                                                'Message' => array(
                                                        array(
                                                                'id' => 1,
                                                                'thread_id' => 1,
                                                                'name' => 'Thread 1, Message 1',
                                                                'Bid' => array(
                                                                        'id' => 1,
                                                                        'message_id' => 1,
                                                                        'name' => 'Bid 1.1'
                                        )))),
                                        array(
                                                'id' => 2,
                                                'project_id' => 1,
                                                'name' => 'Project 1, Thread 2',
                                                'Project' => array(
                                                        'id' => 1,
                                                        'name' => 'Project 1',
                                                        'Thread' => array(
                                                                array(
                                                                        'id' => 1,
                                                                        'project_id' => 1,
                                                                        'name' => 'Project 1, Thread 1'
                                                                ),
                                                                array(
                                                                        'id' => 2,
                                                                        'project_id' => 1,
                                                                        'name' => 'Project 1, Thread 2'
                                                ))),
                                                'Message' => array(
                                                        array(
                                                                'id' => 2,
                                                                'thread_id' => 2,
                                                                'name' => 'Thread 2, Message 1',
                                                                'Bid' => array(
                                                                        'id' => 4,
                                                                        'message_id' => 2,
                                                                        'name' => 'Bid 2.1'
                        )))))),
                        array(
                                'Project' => array(
                                        'id' => 2,
                                        'name' => 'Project 2'
                                ),
                                'Thread' => array(
                                        array(
                                                'id' => 3,
                                                'project_id' => 2,
                                                'name' => 'Project 2, Thread 1',
                                                'Project' => array(
                                                        'id' => 2,
                                                        'name' => 'Project 2',
                                                        'Thread' => array(
                                                                array(
                                                                        'id' => 3,
                                                                        'project_id' => 2,
                                                                        'name' => 'Project 2, Thread 1'
                                                ))),
                                                'Message' => array(
                                                        array(
                                                                'id' => 3,
                                                                'thread_id' => 3,
                                                                'name' => 'Thread 3, Message 1',
                                                                'Bid' => array(
                                                                        'id' => 3,
                                                                        'message_id' => 3,
                                                                        'name' => 'Bid 3.1'
                        )))))),
                        array(
                                'Project' => array(
                                        'id' => 3,
                                        'name' => 'Project 3'
                                ),
                                'Thread' => array()
                ));

                $this->assertEquals($expected, $result);
        }

/**
 * testFindAllRecursiveSelfJoin method
 *
 * @return void
 */
        public function testFindAllRecursiveSelfJoin() {
                $this->loadFixtures('Home', 'AnotherArticle', 'Advertisement');
                $TestModel = new Home();
                $TestModel->recursive = 2;

                $result = $TestModel->find('all', array(
                        'order' => 'Home.id ASC',
                ));
                $expected = array(
                        array(
                                'Home' => array(
                                        'id' => '1',
                                        'another_article_id' => '1',
                                        'advertisement_id' => '1',
                                        'title' => 'First Home',
                                        'created' => '2007-03-18 10:39:23',
                                        'updated' => '2007-03-18 10:41:31'
                                ),
                                'AnotherArticle' => array(
                                        'id' => '1',
                                        'title' => 'First Article',
                                        'created' => '2007-03-18 10:39:23',
                                        'updated' => '2007-03-18 10:41:31',
                                        'Home' => array(
                                                array(
                                                        'id' => '1',
                                                        'another_article_id' => '1',
                                                        'advertisement_id' => '1',
                                                        'title' => 'First Home',
                                                        'created' => '2007-03-18 10:39:23',
                                                        'updated' => '2007-03-18 10:41:31'
                                ))),
                                'Advertisement' => array(
                                        'id' => '1',
                                        'title' => 'First Ad',
                                        'created' => '2007-03-18 10:39:23',
                                        'updated' => '2007-03-18 10:41:31',
                                        'Home' => array(
                                                array(
                                                        'id' => '1',
                                                        'another_article_id' => '1',
                                                        'advertisement_id' => '1',
                                                        'title' => 'First Home',
                                                        'created' => '2007-03-18 10:39:23',
                                                        'updated' => '2007-03-18 10:41:31'
                                                ),
                                                array(
                                                        'id' => '2',
                                                        'another_article_id' => '3',
                                                        'advertisement_id' => '1',
                                                        'title' => 'Second Home',
                                                        'created' => '2007-03-18 10:41:23',
                                                        'updated' => '2007-03-18 10:43:31'
                        )))),
                        array(
                                'Home' => array(
                                        'id' => '2',
                                        'another_article_id' => '3',
                                        'advertisement_id' => '1',
                                        'title' => 'Second Home',
                                        'created' => '2007-03-18 10:41:23',
                                        'updated' => '2007-03-18 10:43:31'
                                ),
                                'AnotherArticle' => array(
                                        'id' => '3',
                                        'title' => 'Third Article',
                                        'created' => '2007-03-18 10:43:23',
                                        'updated' => '2007-03-18 10:45:31',
                                        'Home' => array(
                                                array(
                                                        'id' => '2',
                                                        'another_article_id' => '3',
                                                        'advertisement_id' => '1',
                                                        'title' => 'Second Home',
                                                        'created' => '2007-03-18 10:41:23',
                                                        'updated' => '2007-03-18 10:43:31'
                                ))),
                                'Advertisement' => array(
                                        'id' => '1',
                                        'title' => 'First Ad',
                                        'created' => '2007-03-18 10:39:23',
                                        'updated' => '2007-03-18 10:41:31',
                                        'Home' => array(
                                                array(
                                                        'id' => '1',
                                                        'another_article_id' => '1',
                                                        'advertisement_id' => '1',
                                                        'title' => 'First Home',
                                                        'created' => '2007-03-18 10:39:23',
                                                        'updated' => '2007-03-18 10:41:31'
                                                ),
                                                array(
                                                        'id' => '2',
                                                        'another_article_id' => '3',
                                                        'advertisement_id' => '1',
                                                        'title' => 'Second Home',
                                                        'created' => '2007-03-18 10:41:23',
                                                        'updated' => '2007-03-18 10:43:31'
                )))));

                $this->assertEquals($expected, $result);
        }

/**
 * testFindAllRecursiveWithHabtm method
 *
 * @return void
 */
        public function testFindAllRecursiveWithHabtm() {
                $this->loadFixtures(
                        'MyCategoriesMyUsers',
                        'MyCategoriesMyProducts',
                        'MyCategory',
                        'MyUser',
                        'MyProduct'
                );

                $MyUser = new MyUser();
                $MyUser->recursive = 2;

                $result = $MyUser->find('all', array(
                        'order' => 'MyUser.id ASC'
                ));
                $expected = array(
                        array(
                                'MyUser' => array('id' => '1', 'firstname' => 'userA'),
                                'MyCategory' => array(
                                        array(
                                                'id' => '1',
                                                'name' => 'A',
                                                'MyProduct' => array(
                                                        array(
                                                                'id' => '1',
                                                                'name' => 'book'
                                        ))),
                                        array(
                                                'id' => '3',
                                                'name' => 'C',
                                                'MyProduct' => array(
                                                        array(
                                                                'id' => '2',
                                                                'name' => 'computer'
                        ))))),
                        array(
                                'MyUser' => array(
                                        'id' => '2',
                                        'firstname' => 'userB'
                                ),
                                'MyCategory' => array(
                                        array(
                                                'id' => '1',
                                                'name' => 'A',
                                                'MyProduct' => array(
                                                        array(
                                                                'id' => '1',
                                                                'name' => 'book'
                                        ))),
                                        array(
                                                'id' => '2',
                                                'name' => 'B',
                                                'MyProduct' => array(
                                                        array(
                                                                'id' => '1',
                                                                'name' => 'book'
                                                        ),
                                                        array(
                                                                'id' => '2',
                                                                'name' => 'computer'
                ))))));

                $this->assertEquals($expected, $result);
        }

/**
 * testReadFakeThread method
 *
 * @return void
 */
        public function testReadFakeThread() {
                $this->loadFixtures('CategoryThread');
                $TestModel = new CategoryThread();

                $fullDebug = $this->db->fullDebug;
                $this->db->fullDebug = true;
                $TestModel->recursive = 6;
                $TestModel->id = 7;
                $result = $TestModel->read();
                $expected = array(
                        'CategoryThread' => array(
                                'id' => 7,
                                'parent_id' => 6,
                                'name' => 'Category 2.1',
                                'created' => '2007-03-18 15:30:23',
                                'updated' => '2007-03-18 15:32:31'
                        ),
                        'ParentCategory' => array(
                                'id' => 6,
                                'parent_id' => 5,
                                'name' => 'Category 2',
                                'created' => '2007-03-18 15:30:23',
                                'updated' => '2007-03-18 15:32:31',
                                'ParentCategory' => array(
                                        'id' => 5,
                                        'parent_id' => 4,
                                        'name' => 'Category 1.1.1.1',
                                        'created' => '2007-03-18 15:30:23',
                                        'updated' => '2007-03-18 15:32:31',
                                        'ParentCategory' => array(
                                                'id' => 4,
                                                'parent_id' => 3,
                                                'name' => 'Category 1.1.2',
                                                'created' => '2007-03-18 15:30:23',
                                                'updated' => '2007-03-18 15:32:31',
                                                'ParentCategory' => array(
                                                        'id' => 3,
                                                        'parent_id' => 2,
                                                        'name' => 'Category 1.1.1',
                                                        'created' => '2007-03-18 15:30:23',
                                                        'updated' => '2007-03-18 15:32:31',
                                                        'ParentCategory' => array(
                                                                'id' => 2,
                                                                'parent_id' => 1,
                                                                'name' => 'Category 1.1',
                                                                'created' => '2007-03-18 15:30:23',
                                                                'updated' => '2007-03-18 15:32:31',
                                                                'ParentCategory' => array(
                                                                        'id' => 1,
                                                                        'parent_id' => 0,
                                                                        'name' => 'Category 1',
                                                                        'created' => '2007-03-18 15:30:23',
                                                                        'updated' => '2007-03-18 15:32:31'
                )))))));

                $this->db->fullDebug = $fullDebug;
                $this->assertEquals($expected, $result);
        }

/**
 * testFindFakeThread method
 *
 * @return void
 */
        public function testFindFakeThread() {
                $this->loadFixtures('CategoryThread');
                $TestModel = new CategoryThread();

                $fullDebug = $this->db->fullDebug;
                $this->db->fullDebug = true;
                $TestModel->recursive = 6;
                $result = $TestModel->find('first', array('conditions' => array('CategoryThread.id' => 7)));

                $expected = array(
                        'CategoryThread' => array(
                                'id' => 7,
                                'parent_id' => 6,
                                'name' => 'Category 2.1',
                                'created' => '2007-03-18 15:30:23',
                                'updated' => '2007-03-18 15:32:31'
                        ),
                        'ParentCategory' => array(
                                'id' => 6,
                                'parent_id' => 5,
                                'name' => 'Category 2',
                                'created' => '2007-03-18 15:30:23',
                                'updated' => '2007-03-18 15:32:31',
                                'ParentCategory' => array(
                                        'id' => 5,
                                        'parent_id' => 4,
                                        'name' => 'Category 1.1.1.1',
                                        'created' => '2007-03-18 15:30:23',
                                        'updated' => '2007-03-18 15:32:31',
                                        'ParentCategory' => array(
                                                'id' => 4,
                                                'parent_id' => 3,
                                                'name' => 'Category 1.1.2',
                                                'created' => '2007-03-18 15:30:23',
                                                'updated' => '2007-03-18 15:32:31',
                                                'ParentCategory' => array(
                                                        'id' => 3,
                                                        'parent_id' => 2,
                                                        'name' => 'Category 1.1.1',
                                                        'created' => '2007-03-18 15:30:23',
                                                        'updated' => '2007-03-18 15:32:31',
                                                        'ParentCategory' => array(
                                                                'id' => 2,
                                                                'parent_id' => 1,
                                                                'name' => 'Category 1.1',
                                                                'created' => '2007-03-18 15:30:23',
                                                                'updated' => '2007-03-18 15:32:31',
                                                                'ParentCategory' => array(
                                                                        'id' => 1,
                                                                        'parent_id' => 0,
                                                                        'name' => 'Category 1',
                                                                        'created' => '2007-03-18 15:30:23',
                                                                        'updated' => '2007-03-18 15:32:31'
                )))))));

                $this->db->fullDebug = $fullDebug;
                $this->assertEquals($expected, $result);
        }

/**
 * testFindAllFakeThread method
 *
 * @return void
 */
        public function testFindAllFakeThread() {
                $this->loadFixtures('CategoryThread');
                $TestModel = new CategoryThread();

                $fullDebug = $this->db->fullDebug;
                $this->db->fullDebug = true;
                $TestModel->recursive = 6;
                $result = $TestModel->find('all');
                $expected = array(
                        array(
                                'CategoryThread' => array(
                                'id' => 1,
                                'parent_id' => 0,
                                'name' => 'Category 1',
                                'created' => '2007-03-18 15:30:23',
                                'updated' => '2007-03-18 15:32:31'
                                ),
                                'ParentCategory' => array(
                                        'id' => null,
                                        'parent_id' => null,
                                        'name' => null,
                                        'created' => null,
                                        'updated' => null,
                                        'ParentCategory' => array()
                        )),
                        array(
                                'CategoryThread' => array(
                                        'id' => 2,
                                        'parent_id' => 1,
                                        'name' => 'Category 1.1',
                                        'created' => '2007-03-18 15:30:23',
                                        'updated' => '2007-03-18 15:32:31'
                                ),
                                'ParentCategory' => array(
                                        'id' => 1,
                                        'parent_id' => 0,
                                        'name' => 'Category 1',
                                        'created' => '2007-03-18 15:30:23',
                                        'updated' => '2007-03-18 15:32:31',
                                        'ParentCategory' => array()
                                )),
                        array(
                                'CategoryThread' => array(
                                        'id' => 3,
                                        'parent_id' => 2,
                                        'name' => 'Category 1.1.1',
                                        'created' => '2007-03-18 15:30:23',
                                        'updated' => '2007-03-18 15:32:31'
                                ),
                                'ParentCategory' => array(
                                        'id' => 2,
                                        'parent_id' => 1,
                                        'name' => 'Category 1.1',
                                        'created' => '2007-03-18 15:30:23',
                                        'updated' => '2007-03-18 15:32:31',
                                        'ParentCategory' => array(
                                                'id' => 1,
                                                'parent_id' => 0,
                                                'name' => 'Category 1',
                                                'created' => '2007-03-18 15:30:23',
                                                'updated' => '2007-03-18 15:32:31',
                                                'ParentCategory' => array()
                        ))),
                        array(
                                'CategoryThread' => array(
                                        'id' => 4,
                                        'parent_id' => 3,
                                        'name' => 'Category 1.1.2',
                                        'created' => '2007-03-18 15:30:23',
                                        'updated' => '2007-03-18 15:32:31'
                                ),
                                'ParentCategory' => array(
                                        'id' => 3,
                                        'parent_id' => 2,
                                        'name' => 'Category 1.1.1',
                                        'created' => '2007-03-18 15:30:23',
                                        'updated' => '2007-03-18 15:32:31',
                                        'ParentCategory' => array(
                                                'id' => 2,
                                                'parent_id' => 1,
                                                'name' => 'Category 1.1',
                                                'created' => '2007-03-18 15:30:23',
                                                'updated' => '2007-03-18 15:32:31',
                                                'ParentCategory' => array(
                                                        'id' => 1,
                                                        'parent_id' => 0,
                                                        'name' => 'Category 1',
                                                        'created' => '2007-03-18 15:30:23',
                                                        'updated' => '2007-03-18 15:32:31',
                                                        'ParentCategory' => array()
                        )))),
                        array(
                                'CategoryThread' => array(
                                        'id' => 5,
                                        'parent_id' => 4,
                                        'name' => 'Category 1.1.1.1',
                                        'created' => '2007-03-18 15:30:23',
                                        'updated' => '2007-03-18 15:32:31'
                                ),
                                'ParentCategory' => array(
                                        'id' => 4,
                                        'parent_id' => 3,
                                        'name' => 'Category 1.1.2',
                                        'created' => '2007-03-18 15:30:23',
                                        'updated' => '2007-03-18 15:32:31',
                                        'ParentCategory' => array(
                                                'id' => 3,
                                                'parent_id' => 2,
                                                'name' => 'Category 1.1.1',
                                                'created' => '2007-03-18 15:30:23',
                                                'updated' => '2007-03-18 15:32:31',
                                                'ParentCategory' => array(
                                                        'id' => 2,
                                                        'parent_id' => 1,
                                                        'name' => 'Category 1.1',
                                                        'created' => '2007-03-18 15:30:23',
                                                        'updated' => '2007-03-18 15:32:31',
                                                        'ParentCategory' => array(
                                                                'id' => 1,
                                                                'parent_id' => 0,
                                                                'name' => 'Category 1',
                                                                'created' => '2007-03-18 15:30:23',
                                                                'updated' => '2007-03-18 15:32:31',
                                                                'ParentCategory' => array()
                        ))))),
                        array(
                                'CategoryThread' => array(
                                        'id' => 6,
                                        'parent_id' => 5,
                                        'name' => 'Category 2',
                                        'created' => '2007-03-18 15:30:23',
                                        'updated' => '2007-03-18 15:32:31'
                                ),
                                'ParentCategory' => array(
                                        'id' => 5,
                                        'parent_id' => 4,
                                        'name' => 'Category 1.1.1.1',
                                        'created' => '2007-03-18 15:30:23',
                                        'updated' => '2007-03-18 15:32:31',
                                        'ParentCategory' => array(
                                                'id' => 4,
                                                'parent_id' => 3,
                                                'name' => 'Category 1.1.2',
                                                'created' => '2007-03-18 15:30:23',
                                                'updated' => '2007-03-18 15:32:31',
                                                'ParentCategory' => array(
                                                        'id' => 3,
                                                        'parent_id' => 2,
                                                        'name' => 'Category 1.1.1',
                                                        'created' => '2007-03-18 15:30:23',
                                                        'updated' => '2007-03-18 15:32:31',
                                                        'ParentCategory' => array(
                                                                'id' => 2,
                                                                'parent_id' => 1,
                                                                'name' => 'Category 1.1',
                                                                'created' => '2007-03-18 15:30:23',
                                                                'updated' => '2007-03-18 15:32:31',
                                                                'ParentCategory' => array(
                                                                        'id' => 1,
                                                                        'parent_id' => 0,
                                                                        'name' => 'Category 1',
                                                                        'created' => '2007-03-18 15:30:23',
                                                                        'updated' => '2007-03-18 15:32:31',
                                                                        'ParentCategory' => array()
                        )))))),
                        array(
                                'CategoryThread' => array(
                                        'id' => 7,
                                        'parent_id' => 6,
                                        'name' => 'Category 2.1',
                                        'created' => '2007-03-18 15:30:23',
                                        'updated' => '2007-03-18 15:32:31'
                                ),
                                'ParentCategory' => array(
                                        'id' => 6,
                                        'parent_id' => 5,
                                        'name' => 'Category 2',
                                        'created' => '2007-03-18 15:30:23',
                                        'updated' => '2007-03-18 15:32:31',
                                        'ParentCategory' => array(
                                                'id' => 5,
                                                'parent_id' => 4,
                                                'name' => 'Category 1.1.1.1',
                                                'created' => '2007-03-18 15:30:23',
                                                'updated' => '2007-03-18 15:32:31',
                                                'ParentCategory' => array(
                                                        'id' => 4,
                                                        'parent_id' => 3,
                                                        'name' => 'Category 1.1.2',
                                                        'created' => '2007-03-18 15:30:23',
                                                        'updated' => '2007-03-18 15:32:31',
                                                        'ParentCategory' => array(
                                                                'id' => 3,
                                                                'parent_id' => 2,
                                                                'name' => 'Category 1.1.1',
                                                                'created' => '2007-03-18 15:30:23',
                                                                'updated' => '2007-03-18 15:32:31',
                                                        'ParentCategory' => array(
                                                                'id' => 2,
                                                                'parent_id' => 1,
                                                                'name' => 'Category 1.1',
                                                                'created' => '2007-03-18 15:30:23',
                                                                'updated' => '2007-03-18 15:32:31',
                                                                'ParentCategory' => array(
                                                                        'id' => 1,
                                                                        'parent_id' => 0,
                                                                        'name' => 'Category 1',
                                                                        'created' => '2007-03-18 15:30:23',
                                                                        'updated' => '2007-03-18 15:32:31'
                ))))))));

                $this->db->fullDebug = $fullDebug;
                $this->assertEquals($expected, $result);
        }

/**
 * testConditionalNumerics method
 *
 * @return void
 */
        public function testConditionalNumerics() {
                $this->loadFixtures('NumericArticle');
                $NumericArticle = new NumericArticle();
                $data = array('conditions' => array('title' => '12345abcde'));
                $result = $NumericArticle->find('first', $data);
                $this->assertTrue(!empty($result));

                $data = array('conditions' => array('title' => '12345'));
                $result = $NumericArticle->find('first', $data);
                $this->assertTrue(empty($result));
        }

/**
 * test buildQuery()
 *
 * @return void
 */
        public function testBuildQuery() {
                $this->loadFixtures('User');
                $TestModel = new User();
                $TestModel->cacheQueries = false;
                $TestModel->order = null;

                $expected = array(
                        'conditions' => array(
                                'user' => 'larry'
                        ),
                        'fields' => null,
                        'joins' => array(),
                        'limit' => null,
                        'offset' => null,
                        'order' => array(
                                0 => null
                        ),
                        'page' => 1,
                        'group' => null,
                        'callbacks' => true,
                        'returnQuery' => true
                );
                $result = $TestModel->buildQuery('all', array('returnQuery' => true, 'conditions' => array('user' => 'larry')));
                $this->assertEquals($expected, $result);
        }

/**
 * test find('all') method
 *
 * @return void
 */
        public function testFindAll() {
                $this->loadFixtures('User');
                $TestModel = new User();
                $TestModel->cacheQueries = false;

                $result = $TestModel->find('all');
                $expected = array(
                        array(
                                'User' => array(
                                        'id' => '1',
                                        'user' => 'mariano',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:16:23',
                                        'updated' => '2007-03-17 01:18:31'
                        )),
                        array(
                                'User' => array(
                                        'id' => '2',
                                        'user' => 'nate',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:18:23',
                                        'updated' => '2007-03-17 01:20:31'
                        )),
                        array(
                                'User' => array(
                                        'id' => '3',
                                        'user' => 'larry',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:20:23',
                                        'updated' => '2007-03-17 01:22:31'
                        )),
                        array(
                                'User' => array(
                                        'id' => '4',
                                        'user' => 'garrett',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:22:23',
                                        'updated' => '2007-03-17 01:24:31'
                )));
                $this->assertEquals($expected, $result);

                $result = $TestModel->find('all', array('conditions' => 'User.id > 2'));
                $expected = array(
                        array(
                                'User' => array(
                                        'id' => '3',
                                        'user' => 'larry',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:20:23',
                                        'updated' => '2007-03-17 01:22:31'
                        )),
                        array(
                                'User' => array(
                                        'id' => '4',
                                        'user' => 'garrett',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:22:23',
                                        'updated' => '2007-03-17 01:24:31'
                )));
                $this->assertEquals($expected, $result);

                $result = $TestModel->find('all', array(
                        'conditions' => array('User.id !=' => '0', 'User.user LIKE' => '%arr%')
                ));
                $expected = array(
                        array(
                                'User' => array(
                                        'id' => '3',
                                        'user' => 'larry',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:20:23',
                                        'updated' => '2007-03-17 01:22:31'
                        )),
                        array(
                                'User' => array(
                                        'id' => '4',
                                        'user' => 'garrett',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:22:23',
                                        'updated' => '2007-03-17 01:24:31'
                )));
                $this->assertEquals($expected, $result);

                $result = $TestModel->find('all', array('conditions' => array('User.id' => '0')));
                $expected = array();
                $this->assertEquals($expected, $result);

                $result = $TestModel->find('all', array(
                        'conditions' => array('or' => array('User.id' => '0', 'User.user LIKE' => '%a%')
                )));

                $expected = array(
                        array(
                                'User' => array(
                                        'id' => '1',
                                        'user' => 'mariano',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:16:23',
                                        'updated' => '2007-03-17 01:18:31'
                        )),
                        array(
                                'User' => array(
                                        'id' => '2',
                                        'user' => 'nate',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:18:23',
                                        'updated' => '2007-03-17 01:20:31'
                        )),
                        array(
                                'User' => array(
                                        'id' => '3',
                                        'user' => 'larry',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:20:23',
                                        'updated' => '2007-03-17 01:22:31'
                        )),
                        array(
                                'User' => array(
                                        'id' => '4',
                                        'user' => 'garrett',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:22:23',
                                        'updated' => '2007-03-17 01:24:31'
                )));
                $this->assertEquals($expected, $result);

                $result = $TestModel->find('all', array('fields' => 'User.id, User.user'));
                $expected = array(
                                array('User' => array('id' => '1', 'user' => 'mariano')),
                                array('User' => array('id' => '2', 'user' => 'nate')),
                                array('User' => array('id' => '3', 'user' => 'larry')),
                                array('User' => array('id' => '4', 'user' => 'garrett')));
                $this->assertEquals($expected, $result);

                $result = $TestModel->find('all', array('fields' => 'User.user', 'order' => 'User.user ASC'));
                $expected = array(
                                array('User' => array('user' => 'garrett')),
                                array('User' => array('user' => 'larry')),
                                array('User' => array('user' => 'mariano')),
                                array('User' => array('user' => 'nate')));
                $this->assertEquals($expected, $result);

                $result = $TestModel->find('all', array('fields' => 'User.user', 'order' => 'User.user DESC'));
                $expected = array(
                                array('User' => array('user' => 'nate')),
                                array('User' => array('user' => 'mariano')),
                                array('User' => array('user' => 'larry')),
                                array('User' => array('user' => 'garrett')));
                $this->assertEquals($expected, $result);

                $result = $TestModel->find('all', array('limit' => 3, 'page' => 1));

                $expected = array(
                        array(
                                'User' => array(
                                        'id' => '1',
                                        'user' => 'mariano',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:16:23',
                                        'updated' => '2007-03-17 01:18:31'
                        )),
                        array(
                                'User' => array(
                                        'id' => '2',
                                        'user' => 'nate',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:18:23',
                                        'updated' => '2007-03-17 01:20:31'
                        )),
                        array(
                                'User' => array(
                                        'id' => '3',
                                        'user' => 'larry',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:20:23',
                                        'updated' => '2007-03-17 01:22:31'
                )));
                $this->assertEquals($expected, $result);

                $ids = array(4 => 1, 5 => 3);
                $result = $TestModel->find('all', array(
                        'conditions' => array('User.id' => $ids),
                        'order' => 'User.id'
                ));
                $expected = array(
                        array(
                                'User' => array(
                                        'id' => '1',
                                        'user' => 'mariano',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:16:23',
                                        'updated' => '2007-03-17 01:18:31'
                        )),
                        array(
                                'User' => array(
                                        'id' => '3',
                                        'user' => 'larry',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:20:23',
                                        'updated' => '2007-03-17 01:22:31'
                )));
                $this->assertEquals($expected, $result);

                // These tests are expected to fail on SQL Server since the LIMIT/OFFSET
                // hack can't handle small record counts.
                if (!($this->db instanceof Sqlserver)) {
                        $result = $TestModel->find('all', array('limit' => 3, 'page' => 2));
                        $expected = array(
                                array(
                                        'User' => array(
                                                'id' => '4',
                                                'user' => 'garrett',
                                                'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                                'created' => '2007-03-17 01:22:23',
                                                'updated' => '2007-03-17 01:24:31'
                        )));
                        $this->assertEquals($expected, $result);

                        $result = $TestModel->find('all', array('limit' => 3, 'page' => 3));
                        $expected = array();
                        $this->assertEquals($expected, $result);
                }
        }

/**
 * test find('list') method
 *
 * @return void
 */
        public function testGenerateFindList() {
                $this->loadFixtures('Article', 'Apple', 'Post', 'Author', 'User', 'Comment');

                $TestModel = new Article();
                $TestModel->displayField = 'title';

                $result = $TestModel->find('list', array(
                        'order' => 'Article.title ASC'
                ));

                $expected = array(
                        1 => 'First Article',
                        2 => 'Second Article',
                        3 => 'Third Article'
                );
                $this->assertEquals($expected, $result);

                $db = ConnectionManager::getDataSource('test');
                if ($db instanceof Mysql) {
                        $result = $TestModel->find('list', array(
                                'order' => array('FIELD(Article.id, 3, 2) ASC', 'Article.title ASC')
                        ));
                        $expected = array(
                                1 => 'First Article',
                                3 => 'Third Article',
                                2 => 'Second Article'
                        );
                        $this->assertEquals($expected, $result);
                }

                $result = Hash::combine(
                        $TestModel->find('all', array(
                                'order' => 'Article.title ASC',
                                'fields' => array('id', 'title')
                        )),
                        '{n}.Article.id', '{n}.Article.title'
                );
                $expected = array(
                        1 => 'First Article',
                        2 => 'Second Article',
                        3 => 'Third Article'
                );
                $this->assertEquals($expected, $result);

                $result = Hash::combine(
                        $TestModel->find('all', array(
                                'order' => 'Article.title ASC'
                        )),
                        '{n}.Article.id', '{n}.Article'
                );
                $expected = array(
                        1 => array(
                                'id' => 1,
                                'user_id' => 1,
                                'title' => 'First Article',
                                'body' => 'First Article Body',
                                'published' => 'Y',
                                'created' => '2007-03-18 10:39:23',
                                'updated' => '2007-03-18 10:41:31'
                        ),
                        2 => array(
                                'id' => 2,
                                'user_id' => 3,
                                'title' => 'Second Article',
                                'body' => 'Second Article Body',
                                'published' => 'Y',
                                'created' => '2007-03-18 10:41:23',
                                'updated' => '2007-03-18 10:43:31'
                        ),
                        3 => array(
                                'id' => 3,
                                'user_id' => 1,
                                'title' => 'Third Article',
                                'body' => 'Third Article Body',
                                'published' => 'Y',
                                'created' => '2007-03-18 10:43:23',
                                'updated' => '2007-03-18 10:45:31'
                ));

                $this->assertEquals($expected, $result);

                $result = Hash::combine(
                        $TestModel->find('all', array(
                                'order' => 'Article.title ASC'
                        )),
                        '{n}.Article.id', '{n}.Article', '{n}.Article.user_id'
                );
                $expected = array(
                        1 => array(
                                1 => array(
                                        'id' => 1,
                                        'user_id' => 1,
                                        'title' => 'First Article',
                                        'body' => 'First Article Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:39:23',
                                        'updated' => '2007-03-18 10:41:31'
                                ),
                                3 => array(
                                        'id' => 3,
                                        'user_id' => 1,
                                        'title' => 'Third Article',
                                        'body' => 'Third Article Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:43:23',
                                        'updated' => '2007-03-18 10:45:31'
                                )),
                        3 => array(
                                2 => array(
                                        'id' => 2,
                                        'user_id' => 3,
                                        'title' => 'Second Article',
                                        'body' => 'Second Article Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:41:23',
                                        'updated' => '2007-03-18 10:43:31'
                )));

                $this->assertEquals($expected, $result);

                $result = Hash::combine(
                        $TestModel->find('all', array(
                                'order' => 'Article.title ASC',
                                'fields' => array('id', 'title', 'user_id')
                        )),
                        '{n}.Article.id', '{n}.Article.title', '{n}.Article.user_id'
                );

                $expected = array(
                        1 => array(
                                1 => 'First Article',
                                3 => 'Third Article'
                        ),
                        3 => array(
                                2 => 'Second Article'
                ));
                $this->assertEquals($expected, $result);

                $TestModel = new Apple();
                $expected = array(
                        1 => 'Red Apple 1',
                        2 => 'Bright Red Apple',
                        3 => 'green blue',
                        4 => 'Test Name',
                        5 => 'Blue Green',
                        6 => 'My new apple',
                        7 => 'Some odd color'
                );

                $this->assertEquals($expected, $TestModel->find('list'));
                $this->assertEquals($expected, $TestModel->Parent->find('list'));

                $TestModel = new Post();
                $result = $TestModel->find('list', array(
                        'fields' => 'Post.title'
                ));
                $expected = array(
                        1 => 'First Post',
                        2 => 'Second Post',
                        3 => 'Third Post'
                );
                $this->assertEquals($expected, $result);

                $result = $TestModel->find('list', array(
                        'fields' => 'title'
                ));
                $expected = array(
                        1 => 'First Post',
                        2 => 'Second Post',
                        3 => 'Third Post'
                );
                $this->assertEquals($expected, $result);

                $result = $TestModel->find('list', array(
                        'fields' => array('title', 'id')
                ));
                $expected = array(
                        'First Post' => '1',
                        'Second Post' => '2',
                        'Third Post' => '3'
                );
                $this->assertEquals($expected, $result);

                $result = $TestModel->find('list', array(
                        'fields' => array('title', 'id', 'created')
                ));
                $expected = array(
                        '2007-03-18 10:39:23' => array(
                                'First Post' => '1'
                        ),
                        '2007-03-18 10:41:23' => array(
                                'Second Post' => '2'
                        ),
                        '2007-03-18 10:43:23' => array(
                                'Third Post' => '3'
                        ),
                );
                $this->assertEquals($expected, $result);

                $result = $TestModel->find('list', array(
                        'fields' => array('Post.body')
                ));
                $expected = array(
                        1 => 'First Post Body',
                        2 => 'Second Post Body',
                        3 => 'Third Post Body'
                );
                $this->assertEquals($expected, $result);

                $result = $TestModel->find('list', array(
                        'fields' => array('Post.title', 'Post.body')
                ));
                $expected = array(
                        'First Post' => 'First Post Body',
                        'Second Post' => 'Second Post Body',
                        'Third Post' => 'Third Post Body'
                );
                $this->assertEquals($expected, $result);

                $result = $TestModel->find('list', array(
                        'fields' => array('Post.id', 'Post.title', 'Author.user'),
                        'recursive' => 1
                ));
                $expected = array(
                        'mariano' => array(
                                1 => 'First Post',
                                3 => 'Third Post'
                        ),
                        'larry' => array(
                                2 => 'Second Post'
                ));
                $this->assertEquals($expected, $result);

                $TestModel = new User();
                $result = $TestModel->find('list', array(
                        'fields' => array('User.user', 'User.password')
                ));
                $expected = array(
                        'mariano' => '5f4dcc3b5aa765d61d8327deb882cf99',
                        'nate' => '5f4dcc3b5aa765d61d8327deb882cf99',
                        'larry' => '5f4dcc3b5aa765d61d8327deb882cf99',
                        'garrett' => '5f4dcc3b5aa765d61d8327deb882cf99'
                );
                $this->assertEquals($expected, $result);

                $TestModel = new ModifiedAuthor();
                $result = $TestModel->find('list', array(
                        'fields' => array('Author.id', 'Author.user')
                ));
                $expected = array(
                        1 => 'mariano (CakePHP)',
                        2 => 'nate (CakePHP)',
                        3 => 'larry (CakePHP)',
                        4 => 'garrett (CakePHP)'
                );
                $this->assertEquals($expected, $result);

                $TestModel = new Article();
                $TestModel->displayField = 'title';
                $result = $TestModel->find('list', array(
                        'conditions' => array('User.user' => 'mariano'),
                        'recursive' => 0
                ));
                $expected = array(
                        1 => 'First Article',
                        3 => 'Third Article'
                );
                $this->assertEquals($expected, $result);
        }

/**
 * testFindField method
 *
 * @return void
 */
        public function testFindField() {
                $this->loadFixtures('User');
                $TestModel = new User();

                $TestModel->id = 1;
                $result = $TestModel->field('user');
                $this->assertEquals('mariano', $result);

                $result = $TestModel->field('User.user');
                $this->assertEquals('mariano', $result);

                $TestModel->id = false;
                $result = $TestModel->field('user', array(
                        'user' => 'mariano'
                ));
                $this->assertEquals('mariano', $result);

                $TestModel->order = null;

                $result = $TestModel->field('COUNT(*) AS count', true);
                $this->assertEquals(4, $result);

                $result = $TestModel->field('COUNT(*)', true);
                $this->assertEquals(4, $result);
        }

/**
 * testFindUnique method
 *
 * @return void
 */
        public function testFindUnique() {
                $this->loadFixtures('User');
                $TestModel = new User();

                $this->assertFalse($TestModel->isUnique(array(
                        'user' => 'nate'
                )));
                $TestModel->id = 2;
                $this->assertTrue($TestModel->isUnique(array(
                        'user' => 'nate'
                )));
                $this->assertFalse($TestModel->isUnique(array(
                        'user' => 'nate',
                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99'
                )));
        }

/**
 * test find('count') method
 *
 * @return void
 */
        public function testFindCount() {
                $this->loadFixtures('User', 'Article', 'Comment', 'Tag', 'ArticlesTag');

                $TestModel = new User();
                $this->db->getLog(false, true);
                $result = $TestModel->find('count');
                $this->assertEquals(4, $result);

                $this->db->getLog(false, true);
                $fullDebug = $this->db->fullDebug;
                $this->db->fullDebug = true;
                $TestModel->order = 'User.id';
                $result = $TestModel->find('count');
                $this->db->fullDebug = $fullDebug;
                $this->assertEquals(4, $result);

                $log = $this->db->getLog();
                $this->assertTrue(isset($log['log'][0]['query']));
                $this->assertNotRegExp('/ORDER\s+BY/', $log['log'][0]['query']);

                $Article = new Article();
                $Article->order = null;
                $Article->recursive = -1;

                $expected = count($Article->find('all', array(
                        'fields' => array('Article.user_id'),
                        'group' => 'Article.user_id')
                ));
                $result = $Article->find('count', array('group' => array('Article.user_id')));
                $this->assertEquals($expected, $result);

                $expected = count($Article->find('all', array(
                        'fields' => array('Article.user_id'),
                        'conditions' => array('Article.user_id' => 1),
                        'group' => 'Article.user_id')
                ));
                $result = $Article->find('count', array(
                        'conditions' => array('Article.user_id' => 1),
                        'group' => array('Article.user_id'),
                ));
                $this->assertEquals($expected, $result);
        }

/**
 * Test that find('first') does not use the id set to the object.
 *
 * @return void
 */
        public function testFindFirstNoIdUsed() {
                $this->loadFixtures('Project');

                $Project = new Project();
                $Project->id = 3;
                $result = $Project->find('first');

                $this->assertEquals('Project 1', $result['Project']['name'], 'Wrong record retrieved');
        }

/**
 * test find with COUNT(DISTINCT field)
 *
 * @return void
 */
        public function testFindCountDistinct() {
                $this->skipIf($this->db instanceof Sqlite, 'SELECT COUNT(DISTINCT field) is not compatible with SQLite.');
                $this->skipIf($this->db instanceof Sqlserver, 'This test is not compatible with SQL Server.');

                $this->loadFixtures('Project', 'Thread');
                $TestModel = new Project();
                $TestModel->create(array('name' => 'project')) && $TestModel->save();
                $TestModel->create(array('name' => 'project')) && $TestModel->save();
                $TestModel->create(array('name' => 'project')) && $TestModel->save();

                $result = $TestModel->find('count', array('fields' => 'DISTINCT name'));
                $this->assertEquals(4, $result);
        }

/**
 * Test find(count) with Db::expression
 *
 * @return void
 */
        public function testFindCountWithDbExpressions() {
                $this->skipIf($this->db instanceof Postgres, 'testFindCountWithDbExpressions is not compatible with Postgres.');

                $this->loadFixtures('Project', 'Thread');
                $db = ConnectionManager::getDataSource('test');
                $TestModel = new Project();

                $result = $TestModel->find('count', array('conditions' => array(
                        $db->expression('Project.name = \'Project 3\'')
                )));
                $this->assertEquals(1, $result);

                $result = $TestModel->find('count', array('conditions' => array(
                        'Project.name' => $db->expression('\'Project 3\'')
                )));
                $this->assertEquals(1, $result);
        }

/**
 * testFindMagic method
 *
 * @return void
 */
        public function testFindMagic() {
                $this->loadFixtures('User');
                $TestModel = new User();

                $result = $TestModel->findByUser('mariano');
                $expected = array(
                        'User' => array(
                                'id' => '1',
                                'user' => 'mariano',
                                'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                'created' => '2007-03-17 01:16:23',
                                'updated' => '2007-03-17 01:18:31'
                ));
                $this->assertEquals($expected, $result);

                $result = $TestModel->findByPassword('5f4dcc3b5aa765d61d8327deb882cf99');
                $expected = array('User' => array(
                        'id' => '1',
                        'user' => 'mariano',
                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                        'created' => '2007-03-17 01:16:23',
                        'updated' => '2007-03-17 01:18:31'
                ));
                $this->assertEquals($expected, $result);
        }

/**
 * testRead method
 *
 * @return void
 */
        public function testRead() {
                $this->loadFixtures('User', 'Article');
                $TestModel = new User();

                $result = $TestModel->read();
                $this->assertFalse($result);

                $TestModel->id = 2;
                $result = $TestModel->read();
                $expected = array(
                        'User' => array(
                                'id' => '2',
                                'user' => 'nate',
                                'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                'created' => '2007-03-17 01:18:23',
                                'updated' => '2007-03-17 01:20:31'
                ));
                $this->assertEquals($expected, $result);

                $result = $TestModel->read(null, 2);
                $expected = array(
                        'User' => array(
                                'id' => '2',
                                'user' => 'nate',
                                'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                'created' => '2007-03-17 01:18:23',
                                'updated' => '2007-03-17 01:20:31'
                ));
                $this->assertEquals($expected, $result);

                $TestModel->id = 2;
                $result = $TestModel->read(array('id', 'user'));
                $expected = array('User' => array('id' => '2', 'user' => 'nate'));
                $this->assertEquals($expected, $result);

                $result = $TestModel->read('id, user', 2);
                $expected = array(
                        'User' => array(
                                'id' => '2',
                                'user' => 'nate'
                ));
                $this->assertEquals($expected, $result);

                $result = $TestModel->bindModel(array('hasMany' => array('Article')));
                $this->assertTrue($result);

                $TestModel->id = 1;
                $result = $TestModel->read('id, user');
                $expected = array(
                        'User' => array(
                                'id' => '1',
                                'user' => 'mariano'
                        ),
                        'Article' => array(
                                array(
                                        'id' => '1',
                                        'user_id' => '1',
                                        'title' => 'First Article',
                                        'body' => 'First Article Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:39:23',
                                        'updated' => '2007-03-18 10:41:31'
                                ),
                                array(
                                        'id' => '3',
                                        'user_id' => '1',
                                        'title' => 'Third Article',
                                        'body' => 'Third Article Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:43:23',
                                        'updated' => '2007-03-18 10:45:31'
                )));
                $this->assertEquals($expected, $result);
        }

/**
 * testRecursiveRead method
 *
 * @return void
 */
        public function testRecursiveRead() {
                $this->loadFixtures(
                        'User',
                        'Article',
                        'Comment',
                        'Tag',
                        'ArticlesTag',
                        'Featured',
                        'ArticleFeatured'
                );
                $TestModel = new User();

                $result = $TestModel->bindModel(array('hasMany' => array('Article')), false);
                $this->assertTrue($result);

                $TestModel->recursive = 0;
                $result = $TestModel->read('id, user', 1);
                $expected = array(
                        'User' => array('id' => '1', 'user' => 'mariano'),
                );
                $this->assertEquals($expected, $result);

                $TestModel->recursive = 1;
                $result = $TestModel->read('id, user', 1);
                $expected = array(
                        'User' => array(
                                'id' => '1',
                                'user' => 'mariano'
                        ),
                        'Article' => array(
                                array(
                                        'id' => '1',
                                        'user_id' => '1',
                                        'title' => 'First Article',
                                        'body' => 'First Article Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:39:23',
                                        'updated' => '2007-03-18 10:41:31'
                                ),
                                array(
                                        'id' => '3',
                                        'user_id' => '1',
                                        'title' => 'Third Article',
                                        'body' => 'Third Article Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:43:23',
                                        'updated' => '2007-03-18 10:45:31'
                )));
                $this->assertEquals($expected, $result);

                $TestModel->recursive = 2;
                $result = $TestModel->read('id, user', 3);
                $expected = array(
                        'User' => array(
                                'id' => '3',
                                'user' => 'larry'
                        ),
                        'Article' => array(
                                array(
                                        'id' => '2',
                                        'user_id' => '3',
                                        'title' => 'Second Article',
                                        'body' => 'Second Article Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:41:23',
                                        'updated' => '2007-03-18 10:43:31',
                                        'User' => array(
                                                'id' => '3',
                                                'user' => 'larry',
                                                'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                                'created' => '2007-03-17 01:20:23',
                                                'updated' => '2007-03-17 01:22:31'
                                        ),
                                        'Comment' => array(
                                                array(
                                                        'id' => '5',
                                                        'article_id' => '2',
                                                        'user_id' => '1',
                                                        'comment' => 'First Comment for Second Article',
                                                        'published' => 'Y',
                                                        'created' => '2007-03-18 10:53:23',
                                                        'updated' => '2007-03-18 10:55:31'
                                                ),
                                                array(
                                                        'id' => '6',
                                                        'article_id' => '2',
                                                        'user_id' => '2',
                                                        'comment' => 'Second Comment for Second Article',
                                                        'published' => 'Y',
                                                        'created' => '2007-03-18 10:55:23',
                                                        'updated' => '2007-03-18 10:57:31'
                                        )),
                                        'Tag' => array(
                                                array(
                                                        'id' => '1',
                                                        'tag' => 'tag1',
                                                        'created' => '2007-03-18 12:22:23',
                                                        'updated' => '2007-03-18 12:24:31'
                                                ),
                                                array(
                                                        'id' => '3',
                                                        'tag' => 'tag3',
                                                        'created' => '2007-03-18 12:26:23',
                                                        'updated' => '2007-03-18 12:28:31'
                )))));
                $this->assertEquals($expected, $result);
        }

        public function testRecursiveFindAll() {
                $this->loadFixtures(
                        'User',
                        'Article',
                        'Comment',
                        'Tag',
                        'ArticlesTag',
                        'Attachment',
                        'ArticleFeatured',
                        'ArticleFeaturedsTags',
                        'Featured',
                        'Category'
                );
                $TestModel = new Article();

                $result = $TestModel->find('all', array('conditions' => array('Article.user_id' => 1)));
                $expected = array(
                        array(
                                'Article' => array(
                                        'id' => '1',
                                        'user_id' => '1',
                                        'title' => 'First Article',
                                        'body' => 'First Article Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:39:23',
                                        'updated' => '2007-03-18 10:41:31'
                                ),
                                'User' => array(
                                        'id' => '1',
                                        'user' => 'mariano',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:16:23',
                                        'updated' => '2007-03-17 01:18:31'
                                ),
                                'Comment' => array(
                                        array(
                                                'id' => '1',
                                                'article_id' => '1',
                                                'user_id' => '2',
                                                'comment' => 'First Comment for First Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:45:23',
                                                'updated' => '2007-03-18 10:47:31'
                                        ),
                                        array(
                                                'id' => '2',
                                                'article_id' => '1',
                                                'user_id' => '4',
                                                'comment' => 'Second Comment for First Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:47:23',
                                                'updated' => '2007-03-18 10:49:31'
                                        ),
                                        array(
                                                'id' => '3',
                                                'article_id' => '1',
                                                'user_id' => '1',
                                                'comment' => 'Third Comment for First Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:49:23',
                                                'updated' => '2007-03-18 10:51:31'
                                        ),
                                        array(
                                                'id' => '4',
                                                'article_id' => '1',
                                                'user_id' => '1',
                                                'comment' => 'Fourth Comment for First Article',
                                                'published' => 'N',
                                                'created' => '2007-03-18 10:51:23',
                                                'updated' => '2007-03-18 10:53:31'
                                        )
                                ),
                                'Tag' => array(
                                        array(
                                                'id' => '1',
                                                'tag' => 'tag1',
                                                'created' => '2007-03-18 12:22:23',
                                                'updated' => '2007-03-18 12:24:31'
                                        ),
                                        array(
                                                'id' => '2',
                                                'tag' => 'tag2',
                                                'created' => '2007-03-18 12:24:23',
                                                'updated' => '2007-03-18 12:26:31'
                        ))),
                        array(
                                'Article' => array(
                                        'id' => '3',
                                        'user_id' => '1',
                                        'title' => 'Third Article',
                                        'body' => 'Third Article Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:43:23',
                                        'updated' => '2007-03-18 10:45:31'
                                ),
                                'User' => array(
                                        'id' => '1',
                                        'user' => 'mariano',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:16:23',
                                        'updated' => '2007-03-17 01:18:31'
                                ),
                                'Comment' => array(),
                                'Tag' => array()
                        )
                );
                $this->assertEquals($expected, $result);

                $result = $TestModel->find('all', array(
                        'conditions' => array('Article.user_id' => 3),
                        'limit' => 1,
                        'recursive' => 2
                ));

                $expected = array(
                        array(
                                'Article' => array(
                                        'id' => '2',
                                        'user_id' => '3',
                                        'title' => 'Second Article',
                                        'body' => 'Second Article Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:41:23',
                                        'updated' => '2007-03-18 10:43:31'
                                ),
                                'User' => array(
                                        'id' => '3',
                                        'user' => 'larry',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:20:23',
                                        'updated' => '2007-03-17 01:22:31'
                                ),
                                'Comment' => array(
                                        array(
                                                'id' => '5',
                                                'article_id' => '2',
                                                'user_id' => '1',
                                                'comment' => 'First Comment for Second Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:53:23',
                                                'updated' => '2007-03-18 10:55:31',
                                                'Article' => array(
                                                        'id' => '2',
                                                        'user_id' => '3',
                                                        'title' => 'Second Article',
                                                        'body' => 'Second Article Body',
                                                        'published' => 'Y',
                                                        'created' => '2007-03-18 10:41:23',
                                                        'updated' => '2007-03-18 10:43:31'
                                                ),
                                                'User' => array(
                                                        'id' => '1',
                                                        'user' => 'mariano',
                                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                                        'created' => '2007-03-17 01:16:23',
                                                        'updated' => '2007-03-17 01:18:31'
                                                ),
                                                'Attachment' => array(
                                                        'id' => '1',
                                                        'comment_id' => 5,
                                                        'attachment' => 'attachment.zip',
                                                        'created' => '2007-03-18 10:51:23',
                                                        'updated' => '2007-03-18 10:53:31'
                                                )
                                        ),
                                        array(
                                                'id' => '6',
                                                'article_id' => '2',
                                                'user_id' => '2',
                                                'comment' => 'Second Comment for Second Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:55:23',
                                                'updated' => '2007-03-18 10:57:31',
                                                'Article' => array(
                                                        'id' => '2',
                                                        'user_id' => '3',
                                                        'title' => 'Second Article',
                                                        'body' => 'Second Article Body',
                                                        'published' => 'Y',
                                                        'created' => '2007-03-18 10:41:23',
                                                        'updated' => '2007-03-18 10:43:31'
                                                ),
                                                'User' => array(
                                                        'id' => '2',
                                                        'user' => 'nate',
                                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                                        'created' => '2007-03-17 01:18:23',
                                                        'updated' => '2007-03-17 01:20:31'
                                                ),
                                                'Attachment' => array()
                                        )
                                ),
                                'Tag' => array(
                                        array(
                                                'id' => '1',
                                                'tag' => 'tag1',
                                                'created' => '2007-03-18 12:22:23',
                                                'updated' => '2007-03-18 12:24:31'
                                        ),
                                        array(
                                                'id' => '3',
                                                'tag' => 'tag3',
                                                'created' => '2007-03-18 12:26:23',
                                                'updated' => '2007-03-18 12:28:31'
                ))));

                $this->assertEquals($expected, $result);

                $Featured = new Featured();

                $Featured->recursive = 2;
                $Featured->bindModel(array(
                        'belongsTo' => array(
                                'ArticleFeatured' => array(
                                        'conditions' => "ArticleFeatured.published = 'Y'",
                                        'fields' => 'id, title, user_id, published'
                                )
                        )
                ));

                $Featured->ArticleFeatured->unbindModel(array(
                        'hasMany' => array('Attachment', 'Comment'),
                        'hasAndBelongsToMany' => array('Tag'))
                );

                $orderBy = 'ArticleFeatured.id ASC';
                $result = $Featured->find('all', array(
                        'order' => $orderBy, 'limit' => 3
                ));

                $expected = array(
                        array(
                                'Featured' => array(
                                        'id' => '1',
                                        'article_featured_id' => '1',
                                        'category_id' => '1',
                                        'published_date' => '2007-03-31 10:39:23',
                                        'end_date' => '2007-05-15 10:39:23',
                                        'created' => '2007-03-18 10:39:23',
                                        'updated' => '2007-03-18 10:41:31'
                                ),
                                'ArticleFeatured' => array(
                                        'id' => '1',
                                        'title' => 'First Article',
                                        'user_id' => '1',
                                        'published' => 'Y',
                                        'User' => array(
                                                'id' => '1',
                                                'user' => 'mariano',
                                                'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                                'created' => '2007-03-17 01:16:23',
                                                'updated' => '2007-03-17 01:18:31'
                                        ),
                                        'Category' => array(),
                                        'Featured' => array(
                                                'id' => '1',
                                                'article_featured_id' => '1',
                                                'category_id' => '1',
                                                'published_date' => '2007-03-31 10:39:23',
                                                'end_date' => '2007-05-15 10:39:23',
                                                'created' => '2007-03-18 10:39:23',
                                                'updated' => '2007-03-18 10:41:31'
                                )),
                                'Category' => array(
                                        'id' => '1',
                                        'parent_id' => '0',
                                        'name' => 'Category 1',
                                        'created' => '2007-03-18 15:30:23',
                                        'updated' => '2007-03-18 15:32:31'
                                )),
                        array(
                                'Featured' => array(
                                        'id' => '2',
                                        'article_featured_id' => '2',
                                        'category_id' => '1',
                                        'published_date' => '2007-03-31 10:39:23',
                                        'end_date' => '2007-05-15 10:39:23',
                                        'created' => '2007-03-18 10:39:23',
                                        'updated' => '2007-03-18 10:41:31'
                                ),
                                'ArticleFeatured' => array(
                                        'id' => '2',
                                        'title' => 'Second Article',
                                        'user_id' => '3',
                                        'published' => 'Y',
                                        'User' => array(
                                                'id' => '3',
                                                'user' => 'larry',
                                                'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                                'created' => '2007-03-17 01:20:23',
                                                'updated' => '2007-03-17 01:22:31'
                                        ),
                                        'Category' => array(),
                                        'Featured' => array(
                                                'id' => '2',
                                                'article_featured_id' => '2',
                                                'category_id' => '1',
                                                'published_date' => '2007-03-31 10:39:23',
                                                'end_date' => '2007-05-15 10:39:23',
                                                'created' => '2007-03-18 10:39:23',
                                                'updated' => '2007-03-18 10:41:31'
                                )),
                                'Category' => array(
                                        'id' => '1',
                                        'parent_id' => '0',
                                        'name' => 'Category 1',
                                        'created' => '2007-03-18 15:30:23',
                                        'updated' => '2007-03-18 15:32:31'
                )));
                $this->assertEquals($expected, $result);
        }

/**
 * testRecursiveFindAllWithLimit method
 *
 * @return void
 */
        public function testRecursiveFindAllWithLimit() {
                $this->loadFixtures('Article', 'User', 'Tag', 'ArticlesTag', 'Comment', 'Attachment');
                $TestModel = new Article();

                $TestModel->hasMany['Comment']['limit'] = 2;

                $result = $TestModel->find('all', array(
                        'conditions' => array('Article.user_id' => 1)
                ));
                $expected = array(
                        array(
                                'Article' => array(
                                        'id' => '1',
                                        'user_id' => '1',
                                        'title' => 'First Article',
                                        'body' => 'First Article Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:39:23',
                                        'updated' => '2007-03-18 10:41:31'
                                ),
                                'User' => array(
                                        'id' => '1',
                                        'user' => 'mariano',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:16:23',
                                        'updated' => '2007-03-17 01:18:31'
                                ),
                                'Comment' => array(
                                        array(
                                                'id' => '1',
                                                'article_id' => '1',
                                                'user_id' => '2',
                                                'comment' => 'First Comment for First Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:45:23',
                                                'updated' => '2007-03-18 10:47:31'
                                        ),
                                        array(
                                                'id' => '2',
                                                'article_id' => '1',
                                                'user_id' => '4',
                                                'comment' => 'Second Comment for First Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:47:23',
                                                'updated' => '2007-03-18 10:49:31'
                                        ),
                                ),
                                'Tag' => array(
                                        array(
                                                'id' => '1',
                                                'tag' => 'tag1',
                                                'created' => '2007-03-18 12:22:23',
                                                'updated' => '2007-03-18 12:24:31'
                                        ),
                                        array(
                                                'id' => '2',
                                                'tag' => 'tag2',
                                                'created' => '2007-03-18 12:24:23',
                                                'updated' => '2007-03-18 12:26:31'
                        ))),
                        array(
                                'Article' => array(
                                        'id' => '3',
                                        'user_id' => '1',
                                        'title' => 'Third Article',
                                        'body' => 'Third Article Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:43:23',
                                        'updated' => '2007-03-18 10:45:31'
                                ),
                                'User' => array(
                                        'id' => '1',
                                        'user' => 'mariano',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:16:23',
                                        'updated' => '2007-03-17 01:18:31'
                                ),
                                'Comment' => array(),
                                'Tag' => array()
                        )
                );
                $this->assertEquals($expected, $result);

                $TestModel->hasMany['Comment']['limit'] = 1;

                $result = $TestModel->find('all', array(
                        'conditions' => array('Article.user_id' => 3),
                        'limit' => 1,
                        'recursive' => 2
                ));
                $expected = array(
                        array(
                                'Article' => array(
                                        'id' => '2',
                                        'user_id' => '3',
                                        'title' => 'Second Article',
                                        'body' => 'Second Article Body',
                                        'published' => 'Y',
                                        'created' => '2007-03-18 10:41:23',
                                        'updated' => '2007-03-18 10:43:31'
                                ),
                                'User' => array(
                                        'id' => '3',
                                        'user' => 'larry',
                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                        'created' => '2007-03-17 01:20:23',
                                        'updated' => '2007-03-17 01:22:31'
                                ),
                                'Comment' => array(
                                        array(
                                                'id' => '5',
                                                'article_id' => '2',
                                                'user_id' => '1',
                                                'comment' => 'First Comment for Second Article',
                                                'published' => 'Y',
                                                'created' => '2007-03-18 10:53:23',
                                                'updated' => '2007-03-18 10:55:31',
                                                'Article' => array(
                                                        'id' => '2',
                                                        'user_id' => '3',
                                                        'title' => 'Second Article',
                                                        'body' => 'Second Article Body',
                                                        'published' => 'Y',
                                                        'created' => '2007-03-18 10:41:23',
                                                        'updated' => '2007-03-18 10:43:31'
                                                ),
                                                'User' => array(
                                                        'id' => '1',
                                                        'user' => 'mariano',
                                                        'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
                                                        'created' => '2007-03-17 01:16:23',
                                                        'updated' => '2007-03-17 01:18:31'
                                                ),
                                                'Attachment' => array(
                                                        'id' => '1',
                                                        'comment_id' => 5,
                                                        'attachment' => 'attachment.zip',
                                                        'created' => '2007-03-18 10:51:23',
                                                        'updated' => '2007-03-18 10:53:31'
                                                )
                                        )
                                ),
                                'Tag' => array(
                                        array(
                                                'id' => '1',
                                                'tag' => 'tag1',
                                                'created' => '2007-03-18 12:22:23',
                                                'updated' => '2007-03-18 12:24:31'
                                        ),
                                        array(
                                                'id' => '3',
                                                'tag' => 'tag3',
                                                'created' => '2007-03-18 12:26:23',
                                                'updated' => '2007-03-18 12:28:31'
                                        )
                                )
                        )
                );
                $this->assertEquals($expected, $result);
        }

/**
 * Testing availability of $this->findQueryType in Model callbacks
 *
 * @return void
 */
        public function testFindQueryTypeInCallbacks() {
                $this->loadFixtures('Comment');
                $Comment = new AgainModifiedComment();
                $comments = $Comment->find('all');
                $this->assertEquals('all', $comments[0]['Comment']['querytype']);
                $comments = $Comment->find('first');
                $this->assertEquals('first', $comments['Comment']['querytype']);
        }

/**
 * testVirtualFields()
 *
 * Test correct fetching of virtual fields
 * currently is not possible to do Relation.virtualField
 *
 * @return void
 */
        public function testVirtualFields() {
                $this->loadFixtures('Post', 'Author');
                $Post = ClassRegistry::init('Post');
                $Post->virtualFields = array('two' => "1 + 1");
                $result = $Post->find('first');
                $this->assertEquals(2, $result['Post']['two']);

                // SQL Server does not support operators in expressions
                if (!($this->db instanceof Sqlserver)) {
                        $Post->Author->virtualFields = array('false' => '1 = 2');
                        $result = $Post->find('first');
                        $this->assertEquals(2, $result['Post']['two']);
                        $this->assertFalse((bool)$result['Author']['false']);
                }

                $result = $Post->find('first', array('fields' => array('author_id')));
                $this->assertFalse(isset($result['Post']['two']));
                $this->assertFalse(isset($result['Author']['false']));

                $result = $Post->find('first', array('fields' => array('author_id', 'two')));
                $this->assertEquals(2, $result['Post']['two']);
                $this->assertFalse(isset($result['Author']['false']));

                $result = $Post->find('first', array('fields' => array('two')));
                $this->assertEquals(2, $result['Post']['two']);

                $Post->id = 1;
                $result = $Post->field('two');
                $this->assertEquals(2, $result);

                $result = $Post->find('first', array(
                        'conditions' => array('two' => 2),
                        'limit' => 1
                ));
                $this->assertEquals(2, $result['Post']['two']);

                $result = $Post->find('first', array(
                        'conditions' => array('two <' => 3),
                        'limit' => 1
                ));
                $this->assertEquals(2, $result['Post']['two']);

                $result = $Post->find('first', array(
                        'conditions' => array('NOT' => array('two >' => 3)),
                        'limit' => 1
                ));
                $this->assertEquals(2, $result['Post']['two']);

                $dbo = $Post->getDataSource();
                $Post->virtualFields = array('other_field' => 'Post.id + 1');
                $result = $Post->find('first', array(
                        'conditions' => array('other_field' => 3),
                        'limit' => 1
                ));
                $this->assertEquals(2, $result['Post']['id']);

                $Post->order = null;

                $Post->virtualFields = array('other_field' => 'Post.id + 1');
                $result = $Post->find('all', array(
                        'fields' => array($dbo->calculate($Post, 'max', array('other_field')))
                ));
                $this->assertEquals(4, $result[0][0]['other_field']);

                ClassRegistry::flush();
                $Writing = ClassRegistry::init(array('class' => 'Post', 'alias' => 'Writing'));
                $Writing->virtualFields = array('two' => "1 + 1");
                $result = $Writing->find('first');
                $this->assertEquals(2, $result['Writing']['two']);

                $Post->create();
                $Post->virtualFields = array('other_field' => 'COUNT(Post.id) + 1');
                $result = $Post->field('other_field');
                $this->assertEquals(4, $result);
        }

/**
 * testVirtualFieldsOrder()
 *
 * Test correct order on virtual fields
 *
 * @return void
 */
        public function testVirtualFieldsOrder() {
                $this->loadFixtures('Post', 'Author');
                $Post = ClassRegistry::init('Post');
                $Post->virtualFields = array('other_field' => '10 - Post.id');
                $result = $Post->find('list', array('order' => array('Post.other_field' => 'ASC')));
                $expected = array(
                        '3' => 'Third Post',
                        '2' => 'Second Post',
                        '1' => 'First Post'
                );
                $this->assertEquals($expected, $result);

                $result = $Post->find('list', array('order' => array('Post.other_field' => 'DESC')));
                $expected = array(
                        '1' => 'First Post',
                        '2' => 'Second Post',
                        '3' => 'Third Post'
                );
                $this->assertEquals($expected, $result);

                $Post->Author->virtualFields = array('joined' => 'Post.id * Author.id');
                $result = $Post->find('all', array(
                        'order' => array('Post.id' => 'ASC')
                ));
                $result = Hash::extract($result, '{n}.Author.joined');
                $expected = array(1, 6, 3);
                $this->assertEquals($expected, $result);

                $result = $Post->find('all', array('order' => array('Author.joined' => 'ASC')));
                $result = Hash::extract($result, '{n}.Author.joined');
                $expected = array(1, 3, 6);
                $this->assertEquals($expected, $result);

                $result = $Post->find('all', array('order' => array('Author.joined' => 'DESC')));
                $result = Hash::extract($result, '{n}.Author.joined');
                $expected = array(6, 3, 1);
                $this->assertEquals($expected, $result);
        }

/**
 * testVirtualFieldsMysql()
 *
 * Test correct fetching of virtual fields
 * currently is not possible to do Relation.virtualField
 *
 */
        public function testVirtualFieldsMysql() {
                $this->skipIf(!($this->db instanceof Mysql), 'The rest of virtualFields test only compatible with Mysql.');

                $this->loadFixtures('Post', 'Author');
                $Post = ClassRegistry::init('Post');

                $Post->create();
                $Post->virtualFields = array(
                        'low_title' => 'lower(Post.title)',
                        'unique_test_field' => 'COUNT(Post.id)'
                );

                $expectation = array(
                        'Post' => array(
                                'low_title' => 'first post',
                                'unique_test_field' => 1
                        )
                );

                $result = $Post->find('first', array(
                        'fields' => array_keys($Post->virtualFields),
                        'group' => array('low_title')
                ));

                $this->assertEquals($expectation, $result);

                $Author = ClassRegistry::init('Author');
                $Author->virtualFields = array(
                        'full_name' => 'CONCAT(Author.user, " ", Author.id)'
                );

                $result = $Author->find('first', array(
                        'conditions' => array('Author.user' => 'mariano'),
                        'fields' => array('Author.password', 'Author.full_name'),
                        'recursive' => -1
                ));
                $this->assertTrue(isset($result['Author']['full_name']));

                $result = $Author->find('first', array(
                        'conditions' => array('Author.user' => 'mariano'),
                        'fields' => array('Author.full_name', 'Author.password'),
                        'recursive' => -1
                ));
                $this->assertTrue(isset($result['Author']['full_name']));
        }

/**
 * test that virtual fields work when they don't contain functions.
 *
 * @return void
 */
        public function testVirtualFieldAsAString() {
                $this->loadFixtures('Post', 'Author');
                $Post = new Post();
                $Post->virtualFields = array(
                        'writer' => 'Author.user'
                );
                $result = $Post->find('first');
                $this->assertTrue(isset($result['Post']['writer']), 'virtual field not fetched %s');
        }

/**
 * test that isVirtualField will accept both aliased and non aliased fieldnames
 *
 * @return void
 */
        public function testIsVirtualField() {
                $this->loadFixtures('Post');
                $Post = ClassRegistry::init('Post');
                $Post->virtualFields = array('other_field' => 'COUNT(Post.id) + 1');

                $this->assertTrue($Post->isVirtualField('other_field'));
                $this->assertTrue($Post->isVirtualField('Post.other_field'));
                $this->assertFalse($Post->isVirtualField('Comment.other_field'), 'Other models should not match.');
                $this->assertFalse($Post->isVirtualField('id'));
                $this->assertFalse($Post->isVirtualField('Post.id'));
                $this->assertFalse($Post->isVirtualField(array()));
        }

/**
 * test that getting virtual fields works with and without model alias attached
 *
 * @return void
 */
        public function testGetVirtualField() {
                $this->loadFixtures('Post');
                $Post = ClassRegistry::init('Post');
                $Post->virtualFields = array('other_field' => 'COUNT(Post.id) + 1');

                $this->assertEquals($Post->getVirtualField('other_field'), $Post->virtualFields['other_field']);
                $this->assertEquals($Post->getVirtualField('Post.other_field'), $Post->virtualFields['other_field']);
        }

/**
 * test that checks for error when NOT condition passed in key and a 1 element array value
 *
 * @return void
 */
        public function testNotInArrayWithOneValue() {
                $this->loadFixtures('Article');
                $Article = new Article();
                $Article->recursive = -1;

                $result = $Article->find(
                        'all',
                        array(
                                'conditions' => array(
                                        'Article.id NOT' => array(1)
                                )
                        )
                );
                $this->assertTrue(is_array($result) && !empty($result));
        }

/**
 * test to assert that != in key together with a single element array will work
 *
 * @return void
 */
        public function testNotEqualsInArrayWithOneValue() {
                $this->loadFixtures('Article');
                $Article = new Article();
                $Article->recursive = -1;

                $result = $Article->find(
                        'all',
                        array(
                                'conditions' => array(
                                        'Article.id !=' => array(1)
                                )
                        )
                );
                $this->assertTrue(is_array($result) && !empty($result));
        }

/**
 * test custom find method
 *
 * @return void
 */
        public function testfindCustom() {
                $this->loadFixtures('Article');
                $Article = new CustomArticle();
                $data = array('user_id' => 3, 'title' => 'Fourth Article', 'body' => 'Article Body, unpublished', 'published' => 'N');
                $Article->create($data);
                $Article->save(null, false);
                $this->assertEquals(4, $Article->id);

                $result = $Article->find('published');
                $this->assertEquals(3, count($result));

                $result = $Article->find('unPublished');
                $this->assertEquals(1, count($result));
        }

}