Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Merge branch '1.2' into 1.3

  • Loading branch information...
commit 986af28de0992e15553229924eda0ecd1f32099b 2 parents 9a909c5 + b2c3000
gwoo authored
View
4 cake/console/libs/api.php
@@ -66,7 +66,7 @@ function main() {
return $this->help();
}
- $type = low($this->args[0]);
+ $type = strtolower($this->args[0]);
if (isset($this->paths[$type])) {
$path = $this->paths[$type];
@@ -202,7 +202,7 @@ function __parseClass($path) {
if (strpos($method, '__') === false && $method[0] != '_') {
$parsed[$method] = array(
- 'comment' => r(array('/*', '*/', '*'), '', trim($result[1][$key])),
+ 'comment' => str_replace(array('/*', '*/', '*'), '', trim($result[1][$key])),
'method' => $method,
'parameters' => trim($result[3][$key])
);
View
18 cake/console/libs/shell.php
@@ -149,10 +149,10 @@ function __construct(&$dispatch) {
ClassRegistry::map($this->name, $this->alias);
if (!PHP5 && isset($this->args[0])) {
- if (strpos($this->name, low(Inflector::camelize($this->args[0]))) !== false) {
+ if (strpos($this->name, strtolower(Inflector::camelize($this->args[0]))) !== false) {
$dispatch->shiftArgs();
}
- if (low($this->command) == low(Inflector::variable($this->args[0])) && method_exists($this, $this->command)) {
+ if (strtolower($this->command) == strtolower(Inflector::variable($this->args[0])) && method_exists($this, $this->command)) {
$dispatch->shiftArgs();
}
}
@@ -329,7 +329,7 @@ function in($prompt, $options = null, $default = null) {
}
}
if (is_array($options)) {
- while ($in == '' || ($in && (!in_array(low($in), $options) && !in_array(up($in), $options)) && !in_array($in, $options))) {
+ while ($in == '' || ($in && (!in_array(strtolower($in), $options) && !in_array(strtoupper($in), $options)) && !in_array($in, $options))) {
$in = $this->Dispatch->getInput($prompt, $options, $default);
}
}
@@ -427,10 +427,10 @@ function createFile ($path, $contents) {
$this->out("\n" . sprintf(__("Creating file %s", true), $path));
if (is_file($path) && $this->interactive === true) {
$key = $this->in(__("File exists, overwrite?", true). " {$path}", array('y', 'n', 'q'), 'n');
- if (low($key) == 'q') {
+ if (strtolower($key) == 'q') {
$this->out(__("Quitting.", true) ."\n");
exit;
- } elseif (low($key) != 'y') {
+ } elseif (strtolower($key) != 'y') {
$this->out(__("Skip", true) ." {$path}\n");
return false;
}
@@ -472,7 +472,7 @@ function _checkUnitTest() {
return true;
}
$unitTest = $this->in('SimpleTest is not installed. Do you want to bake unit test files anyway?', array('y','n'), 'y');
- $result = low($unitTest) == 'y' || low($unitTest) == 'yes';
+ $result = strtolower($unitTest) == 'y' || strtolower($unitTest) == 'yes';
if ($result) {
$this->out("\nYou can download SimpleTest from http://simpletest.org", true);
@@ -488,8 +488,8 @@ function _checkUnitTest() {
*/
function shortPath($file) {
$shortPath = str_replace(ROOT, null, $file);
- $shortPath = str_replace('..'.DS, '', $shortPath);
- return r(DS.DS, DS, $shortPath);
+ $shortPath = str_replace('..' . DS, '', $shortPath);
+ return str_replace(DS . DS, DS, $shortPath);
}
/**
* Creates the proper controller path for the specified controller class name
@@ -499,7 +499,7 @@ function shortPath($file) {
* @access protected
*/
function _controllerPath($name) {
- return low(Inflector::underscore($name));
+ return strtolower(Inflector::underscore($name));
}
/**
* Creates the proper controller plural name for the specified controller class name
View
6 cake/libs/model/datasources/dbo/dbo_oracle.php
@@ -952,11 +952,11 @@ function queryAssociation(&$model, &$linkModel, $type, $association, $assocData,
if ($query = $this->generateAssociationQuery($model, $linkModel, $type, $association, $assocData, $queryData, $external, $resultSet)) {
if (!isset($resultSet) || !is_array($resultSet)) {
if (Configure::read() > 0) {
- e('<div style = "font: Verdana bold 12px; color: #FF0000">' . sprintf(__('SQL Error in model %s:', true), $model->alias) . ' ');
+ echo '<div style = "font: Verdana bold 12px; color: #FF0000">' . sprintf(__('SQL Error in model %s:', true), $model->alias) . ' ';
if (isset($this->error) && $this->error != null) {
- e($this->error);
+ echo $this->error;
}
- e('</div>');
+ echo '</div>';
}
return null;
}
View
6 cake/libs/model/datasources/dbo_source.php
@@ -742,11 +742,11 @@ function queryAssociation(&$model, &$linkModel, $type, $association, $assocData,
if ($query = $this->generateAssociationQuery($model, $linkModel, $type, $association, $assocData, $queryData, $external, $resultSet)) {
if (!isset($resultSet) || !is_array($resultSet)) {
if (Configure::read() > 0) {
- e('<div style = "font: Verdana bold 12px; color: #FF0000">' . sprintf(__('SQL Error in model %s:', true), $model->alias) . ' ');
+ echo '<div style = "font: Verdana bold 12px; color: #FF0000">' . sprintf(__('SQL Error in model %s:', true), $model->alias) . ' ';
if (isset($this->error) && $this->error != null) {
- e($this->error);
+ echo $this->error;
}
- e('</div>');
+ echo '</div>';
}
return null;
}
View
6 cake/libs/model/model.php
@@ -369,7 +369,7 @@ function __construct($id = false, $table = null, $ds = null) {
} elseif ($table) {
$this->useTable = $table;
}
-
+
if ($ds !== null) {
$this->useDbConfig = $ds;
}
@@ -824,7 +824,7 @@ function deconstruct($field, $data) {
$type = $this->getColumnType($field);
if (in_array($type, array('datetime', 'timestamp', 'date', 'time'))) {
- $useNewDate = (isset($data['year']) || isset($data['month']) ||
+ $useNewDate = (isset($data['year']) || isset($data['month']) ||
isset($data['day']) || isset($data['hour']) || isset($data['minute']));
$dateFields = array('Y' => 'year', 'm' => 'month', 'd' => 'day', 'H' => 'hour', 'i' => 'min', 's' => 'sec');
@@ -1340,7 +1340,7 @@ function __saveMulti($joined, $id) {
unset($values);
} elseif (isset($row[$this->hasAndBelongsToMany[$assoc]['associationForeignKey']])) {
$newData[] = $row;
- } elseif (isset($row[$join][$this->hasAndBelongsToMany[$assoc]['associationForeignKey']])) {
+ } elseif (isset($row[$join]) && isset($row[$join][$this->hasAndBelongsToMany[$assoc]['associationForeignKey']])) {
$newData[] = $row[$join];
}
}
View
7 cake/libs/view/helpers/ajax.php
@@ -958,7 +958,7 @@ function afterRender() {
$keys = array_keys($this->__ajaxBuffer);
if (count($divs) == 1 && in_array($divs[0], $keys)) {
- e($this->__ajaxBuffer[$divs[0]]);
+ echo $this->__ajaxBuffer[$divs[0]];
} else {
foreach ($this->__ajaxBuffer as $key => $val) {
if (in_array($key, $divs)) {
@@ -969,14 +969,13 @@ function afterRender() {
$out .= 'for (n in __ajaxUpdater__) { if (typeof __ajaxUpdater__[n] == "string"';
$out .= ' && $(n)) Element.update($(n), unescape(decodeURIComponent(';
$out .= '__ajaxUpdater__[n]))); }';
- e($this->Javascript->codeBlock($out, false));
+ echo $this->Javascript->codeBlock($out, false);
}
$scripts = $this->Javascript->getCache();
if (!empty($scripts)) {
- e($this->Javascript->codeBlock($scripts, false));
+ echo $this->Javascript->codeBlock($scripts, false);
}
-
$this->_stop();
}
}
View
2  cake/libs/view/helpers/time.php
@@ -481,7 +481,7 @@ function relativeTime($dateTime, $options = array()) {
* @return bool
*/
function wasWithinLast($timeInterval, $dateString, $userOffset = null) {
- $tmp = r(' ', '', $timeInterval);
+ $tmp = str_replace(' ', '', $timeInterval);
if (is_numeric($tmp)) {
$timeInterval = $tmp . ' ' . __('days', true);
}
View
2  cake/libs/view/layouts/xml/default.ctp
@@ -1,2 +1,2 @@
-<?php e($xml->header()); ?>
+<?php echo $xml->header(); ?>
<?php echo $content_for_layout; ?>
View
8 cake/tests/cases/console/libs/api.test.php
@@ -1,9 +1,7 @@
<?php
/* SVN FILE: $Id$ */
/**
- * TestTaskTest file
- *
- * Test Case for test generation shell task
+ * ApiShellTest file
*
* PHP versions 4 and 5
*
@@ -51,12 +49,12 @@
);
/**
- * TestTaskTest class
+ * ApiShellTest class
*
* @package cake
* @subpackage cake.tests.cases.console.libs.tasks
*/
-class TestTaskTest extends CakeTestCase {
+class ApiShellTest extends CakeTestCase {
/**
* setUp method
*
View
22 cake/tests/cases/libs/cake_test_case.test.php
@@ -228,6 +228,7 @@ function testLoadFixtures() {
$this->Case->before('start');
$this->expectError();
$this->Case->loadFixtures('Wrong!');
+ $this->Case->end();
}
/**
* testGetTests Method
@@ -268,6 +269,10 @@ function testTestAction() {
$result = $this->Case->testAction('/tests_apps/set_action', array('return' => 'vars'));
$this->assertEqual($result, array('var' => 'string'));
+ $db =& ConnectionManager::getDataSource('test_suite');
+ $fixture =& new PostFixture();
+ $fixture->create($db);
+
$result = $this->Case->testAction('/tests_apps_posts/add', array('return' => 'vars'));
$this->assertTrue(array_key_exists('posts', $result));
$this->assertEqual(count($result['posts']), 1);
@@ -309,7 +314,7 @@ function testTestAction() {
)
));
$this->assertEqual(array_keys($result['data']), array('name', 'pork'));
-
+ $fixture->drop($db);
$db =& ConnectionManager::getDataSource('test_suite');
$_backPrefix = $db->config['prefix'];
@@ -319,11 +324,11 @@ function testTestAction() {
$config['prefix'] = 'cake_testcase_test_';
ConnectionManager::create('cake_test_case', $config);
- $db =& ConnectionManager::getDataSource('cake_test_case');
+ $db2 =& ConnectionManager::getDataSource('cake_test_case');
- $fixture =& new PostFixture($db);
- $fixture->create($db);
- $fixture->insert($db);
+ $fixture =& new PostFixture($db2);
+ $fixture->create($db2);
+ $fixture->insert($db2);
$result = $this->Case->testAction('/tests_apps_posts/fixtured', array(
'return' => 'vars',
@@ -332,15 +337,12 @@ function testTestAction() {
));
$this->assertTrue(isset($result['posts']));
$this->assertEqual(count($result['posts']), 3);
- $tables = $db->listSources(true);
+ $tables = $db2->listSources();
$this->assertFalse(in_array('cake_testaction_test_suite_posts', $tables));
- $fixture->drop($db);
+ $fixture->drop($db2);
$db =& ConnectionManager::getDataSource('test_suite');
- $db->config['prefix'] = $_backPrefix;
- $fixture->drop($db);
-
//test that drop tables behaves as exepected with testAction
$db =& ConnectionManager::getDataSource('test_suite');
View
571 cake/tests/cases/libs/model/model_delete.test.php
@@ -0,0 +1,571 @@
+<?php
+/* SVN FILE: $Id: model.test.php 8225 2009-07-08 03:25:30Z mark_story $ */
+/**
+ * ModelDeleteTest file
+ *
+ * Long description for file
+ *
+ * PHP versions 4 and 5
+ *
+ * CakePHP(tm) Tests <https://trac.cakephp.org/wiki/Developement/TestSuite>
+ * Copyright 2005-2008, Cake Software Foundation, Inc. (http://www.cakefoundation.org)
+ *
+ * Licensed under The Open Group Test Suite License
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @filesource
+ * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. (http://www.cakefoundation.org)
+ * @link https://trac.cakephp.org/wiki/Developement/TestSuite CakePHP(tm) Tests
+ * @package cake
+ * @subpackage cake.tests.cases.libs.model
+ * @since CakePHP(tm) v 1.2.0.4206
+ * @version $Revision: 8225 $
+ * @modifiedby $LastChangedBy: mark_story $
+ * @lastmodified $Date: 2009-07-07 23:25:30 -0400 (Tue, 07 Jul 2009) $
+ * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
+ */
+require_once dirname(__FILE__) . DS . 'model.test.php';
+require_once dirname(__FILE__) . DS . 'model_delete.test.php';
+/**
+ * ModelDeleteTest
+ *
+ * @package cake
+ * @subpackage cake.tests.cases.libs.model.operations
+ */
+class ModelDeleteTest extends BaseModelTest {
+/**
+ * testDeleteHabtmReferenceWithConditions method
+ *
+ * @access public
+ * @return void
+ */
+ function testDeleteHabtmReferenceWithConditions() {
+ $this->loadFixtures('Portfolio', 'Item', 'ItemsPortfolio');
+
+ $Portfolio =& new Portfolio();
+ $Portfolio->hasAndBelongsToMany['Item']['conditions'] = array('ItemsPortfolio.item_id >' => 1);
+
+ $result = $Portfolio->find('first', array(
+ 'conditions' => array('Portfolio.id' => 1)
+ ));
+ $expected = array(
+ array(
+ 'id' => 3,
+ 'syfile_id' => 3,
+ 'published' => 0,
+ 'name' => 'Item 3',
+ 'ItemsPortfolio' => array(
+ 'id' => 3,
+ 'item_id' => 3,
+ 'portfolio_id' => 1
+ )),
+ array(
+ 'id' => 4,
+ 'syfile_id' => 4,
+ 'published' => 0,
+ 'name' => 'Item 4',
+ 'ItemsPortfolio' => array(
+ 'id' => 4,
+ 'item_id' => 4,
+ 'portfolio_id' => 1
+ )),
+ array(
+ 'id' => 5,
+ 'syfile_id' => 5,
+ 'published' => 0,
+ 'name' => 'Item 5',
+ 'ItemsPortfolio' => array(
+ 'id' => 5,
+ 'item_id' => 5,
+ 'portfolio_id' => 1
+ )));
+ $this->assertEqual($result['Item'], $expected);
+
+ $result = $Portfolio->ItemsPortfolio->find('all', array(
+ 'conditions' => array('ItemsPortfolio.portfolio_id' => 1)
+ ));
+ $expected = array(
+ array(
+ 'ItemsPortfolio' => array(
+ 'id' => 1,
+ 'item_id' => 1,
+ 'portfolio_id' => 1
+ )),
+ array(
+ 'ItemsPortfolio' => array(
+ 'id' => 3,
+ 'item_id' => 3,
+ 'portfolio_id' => 1
+ )),
+ array(
+ 'ItemsPortfolio' => array(
+ 'id' => 4,
+ 'item_id' => 4,
+ 'portfolio_id' => 1
+ )),
+ array(
+ 'ItemsPortfolio' => array(
+ 'id' => 5,
+ 'item_id' => 5,
+ 'portfolio_id' => 1
+ )));
+ $this->assertEqual($result, $expected);
+
+ $Portfolio->delete(1);
+
+ $result = $Portfolio->find('first', array(
+ 'conditions' => array('Portfolio.id' => 1)
+ ));
+ $this->assertFalse($result);
+
+ $result = $Portfolio->ItemsPortfolio->find('all', array(
+ 'conditions' => array('ItemsPortfolio.portfolio_id' => 1)
+ ));
+ $this->assertFalse($result);
+ }
+/**
+ * testDeleteArticleBLinks method
+ *
+ * @access public
+ * @return void
+ */
+ function testDeleteArticleBLinks() {
+ $this->loadFixtures('Article', 'ArticlesTag', 'Tag');
+ $TestModel =& new ArticleB();
+
+ $result = $TestModel->ArticlesTag->find('all');
+ $expected = array(
+ array('ArticlesTag' => array('article_id' => '1', 'tag_id' => '1')),
+ array('ArticlesTag' => array('article_id' => '1', 'tag_id' => '2')),
+ array('ArticlesTag' => array('article_id' => '2', 'tag_id' => '1')),
+ array('ArticlesTag' => array('article_id' => '2', 'tag_id' => '3'))
+ );
+ $this->assertEqual($result, $expected);
+
+ $TestModel->delete(1);
+ $result = $TestModel->ArticlesTag->find('all');
+
+ $expected = array(
+ array('ArticlesTag' => array('article_id' => '2', 'tag_id' => '1')),
+ array('ArticlesTag' => array('article_id' => '2', 'tag_id' => '3'))
+ );
+ $this->assertEqual($result, $expected);
+ }
+/**
+ * testDeleteDependentWithConditions method
+ *
+ * @access public
+ * @return void
+ */
+ function testDeleteDependentWithConditions() {
+ $this->loadFixtures('Cd','Book','OverallFavorite');
+
+ $Cd =& new Cd();
+ $OverallFavorite =& new OverallFavorite();
+
+ $Cd->del(1);
+
+ $result = $OverallFavorite->find('all', array(
+ 'fields' => array('model_type', 'model_id', 'priority')
+ ));
+ $expected = array(
+ array(
+ 'OverallFavorite' => array(
+ 'model_type' => 'Book',
+ 'model_id' => 1,
+ 'priority' => 2
+ )));
+
+ $this->assertTrue(is_array($result));
+ $this->assertEqual($result, $expected);
+ }
+/**
+ * testDel method
+ *
+ * @access public
+ * @return void
+ */
+ function testDel() {
+ $this->loadFixtures('Article');
+ $TestModel =& new Article();
+
+ $result = $TestModel->del(2);
+ $this->assertTrue($result);
+
+ $result = $TestModel->read(null, 2);
+ $this->assertFalse($result);
+
+ $TestModel->recursive = -1;
+ $result = $TestModel->find('all', array(
+ 'fields' => array('id', 'title')
+ ));
+ $expected = array(
+ array('Article' => array(
+ 'id' => 1,
+ 'title' => 'First Article'
+ )),
+ array('Article' => array(
+ 'id' => 3,
+ 'title' => 'Third Article'
+ )));
+ $this->assertEqual($result, $expected);
+
+ $result = $TestModel->del(3);
+ $this->assertTrue($result);
+
+ $result = $TestModel->read(null, 3);
+ $this->assertFalse($result);
+
+ $TestModel->recursive = -1;
+ $result = $TestModel->find('all', array(
+ 'fields' => array('id', 'title')
+ ));
+ $expected = array(
+ array('Article' => array(
+ 'id' => 1,
+ 'title' => 'First Article'
+ )));
+
+ $this->assertEqual($result, $expected);
+
+
+ // make sure deleting a non-existent record doesn't break save()
+ // ticket #6293
+ $this->loadFixtures('Uuid');
+ $Uuid =& new Uuid();
+ $data = array(
+ 'B607DAB9-88A2-46CF-B57C-842CA9E3B3B3',
+ '52C8865C-10EE-4302-AE6C-6E7D8E12E2C8',
+ '8208C7FE-E89C-47C5-B378-DED6C271F9B8');
+ foreach ($data as $id) {
+ $Uuid->save(array('id' => $id));
+ }
+ $Uuid->del('52C8865C-10EE-4302-AE6C-6E7D8E12E2C8');
+ $Uuid->del('52C8865C-10EE-4302-AE6C-6E7D8E12E2C8');
+ foreach ($data as $id) {
+ $Uuid->save(array('id' => $id));
+ }
+ $result = $Uuid->find('all', array(
+ 'conditions' => array('id' => $data),
+ 'fields' => array('id'),
+ 'order' => 'id'));
+ $expected = array(
+ array('Uuid' => array(
+ 'id' => '52C8865C-10EE-4302-AE6C-6E7D8E12E2C8')),
+ array('Uuid' => array(
+ 'id' => '8208C7FE-E89C-47C5-B378-DED6C271F9B8')),
+ array('Uuid' => array(
+ 'id' => 'B607DAB9-88A2-46CF-B57C-842CA9E3B3B3')));
+ $this->assertEqual($result, $expected);
+ }
+/**
+ * testDeleteAll method
+ *
+ * @access public
+ * @return void
+ */
+ function testDeleteAll() {
+ $this->loadFixtures('Article');
+ $TestModel =& new Article();
+
+ $data = array('Article' => array(
+ 'user_id' => 2,
+ 'id' => 4,
+ 'title' => 'Fourth Article',
+ 'published' => 'N'
+ ));
+ $result = $TestModel->set($data) && $TestModel->save();
+ $this->assertTrue($result);
+
+ $data = array('Article' => array(
+ 'user_id' => 2,
+ 'id' => 5,
+ 'title' => 'Fifth Article',
+ 'published' => 'Y'
+ ));
+ $result = $TestModel->set($data) && $TestModel->save();
+ $this->assertTrue($result);
+
+ $data = array('Article' => array(
+ 'user_id' => 1,
+ 'id' => 6,
+ 'title' => 'Sixth Article',
+ 'published' => 'N'
+ ));
+ $result = $TestModel->set($data) && $TestModel->save();
+ $this->assertTrue($result);
+
+ $TestModel->recursive = -1;
+ $result = $TestModel->find('all', array(
+ 'fields' => array('id', 'user_id', 'title', 'published')
+ ));
+
+ $expected = array(
+ array('Article' => array(
+ 'id' => 1,
+ 'user_id' => 1,
+ 'title' => 'First Article',
+ 'published' => 'Y'
+ )),
+ array('Article' => array(
+ 'id' => 2,
+ 'user_id' => 3,
+ 'title' => 'Second Article',
+ 'published' => 'Y'
+ )),
+ array('Article' => array(
+ 'id' => 3,
+ 'user_id' => 1,
+ 'title' => 'Third Article',
+ 'published' => 'Y')),
+ array('Article' => array(
+ 'id' => 4,
+ 'user_id' => 2,
+ 'title' => 'Fourth Article',
+ 'published' => 'N'
+ )),
+ array('Article' => array(
+ 'id' => 5,
+ 'user_id' => 2,
+ 'title' => 'Fifth Article',
+ 'published' => 'Y'
+ )),
+ array('Article' => array(
+ 'id' => 6,
+ 'user_id' => 1,
+ 'title' => 'Sixth Article',
+ 'published' => 'N'
+ )));
+
+ $this->assertEqual($result, $expected);
+
+ $result = $TestModel->deleteAll(array('Article.published' => 'N'));
+ $this->assertTrue($result);
+
+ $TestModel->recursive = -1;
+ $result = $TestModel->find('all', array(
+ 'fields' => array('id', 'user_id', 'title', 'published')
+ ));
+ $expected = array(
+ array('Article' => array(
+ 'id' => 1,
+ 'user_id' => 1,
+ 'title' => 'First Article',
+ 'published' => 'Y'
+ )),
+ array('Article' => array(
+ 'id' => 2,
+ 'user_id' => 3,
+ 'title' => 'Second Article',
+ 'published' => 'Y'
+ )),
+ array('Article' => array(
+ 'id' => 3,
+ 'user_id' => 1,
+ 'title' => 'Third Article',
+ 'published' => 'Y'
+ )),
+ array('Article' => array(
+ 'id' => 5,
+ 'user_id' => 2,
+ 'title' => 'Fifth Article',
+ 'published' => 'Y'
+ )));
+ $this->assertEqual($result, $expected);
+
+ $data = array('Article.user_id' => array(2, 3));
+ $result = $TestModel->deleteAll($data, true, true);
+ $this->assertTrue($result);
+
+ $TestModel->recursive = -1;
+ $result = $TestModel->find('all', array(
+ 'fields' => array('id', 'user_id', 'title', 'published')
+ ));
+ $expected = array(
+ array('Article' => array(
+ 'id' => 1,
+ 'user_id' => 1,
+ 'title' => 'First Article',
+ 'published' => 'Y'
+ )),
+ array('Article' => array(
+ 'id' => 3,
+ 'user_id' => 1,
+ 'title' => 'Third Article',
+ 'published' => 'Y'
+ )));
+ $this->assertEqual($result, $expected);
+
+ $result = $TestModel->deleteAll(array('Article.user_id' => 999));
+ $this->assertTrue($result, 'deleteAll returned false when all no records matched conditions. %s');
+ }
+/**
+ * testRecursiveDel method
+ *
+ * @access public
+ * @return void
+ */
+ function testRecursiveDel() {
+ $this->loadFixtures('Article', 'Comment', 'Attachment');
+ $TestModel =& new Article();
+
+ $result = $TestModel->del(2);
+ $this->assertTrue($result);
+
+ $TestModel->recursive = 2;
+ $result = $TestModel->read(null, 2);
+ $this->assertFalse($result);
+
+ $result = $TestModel->Comment->read(null, 5);
+ $this->assertFalse($result);
+
+ $result = $TestModel->Comment->read(null, 6);
+ $this->assertFalse($result);
+
+ $result = $TestModel->Comment->Attachment->read(null, 1);
+ $this->assertFalse($result);
+
+ $result = $TestModel->find('count');
+ $this->assertEqual($result, 2);
+
+ $result = $TestModel->Comment->find('count');
+ $this->assertEqual($result, 4);
+
+ $result = $TestModel->Comment->Attachment->find('count');
+ $this->assertEqual($result, 0);
+ }
+/**
+ * testDependentExclusiveDelete method
+ *
+ * @access public
+ * @return void
+ */
+ function testDependentExclusiveDelete() {
+ $this->loadFixtures('Article', 'Comment');
+ $TestModel =& new Article10();
+
+ $result = $TestModel->find('all');
+ $this->assertEqual(count($result[0]['Comment']), 4);
+ $this->assertEqual(count($result[1]['Comment']), 2);
+ $this->assertEqual($TestModel->Comment->find('count'), 6);
+
+ $TestModel->delete(1);
+ $this->assertEqual($TestModel->Comment->find('count'), 2);
+ }
+/**
+ * testDeleteLinks method
+ *
+ * @access public
+ * @return void
+ */
+ function testDeleteLinks() {
+ $this->loadFixtures('Article', 'ArticlesTag', 'Tag');
+ $TestModel =& new Article();
+
+ $result = $TestModel->ArticlesTag->find('all');
+ $expected = array(
+ array('ArticlesTag' => array(
+ 'article_id' => '1',
+ 'tag_id' => '1'
+ )),
+ array('ArticlesTag' => array(
+ 'article_id' => '1',
+ 'tag_id' => '2'
+ )),
+ array('ArticlesTag' => array(
+ 'article_id' => '2',
+ 'tag_id' => '1'
+ )),
+ array('ArticlesTag' => array(
+ 'article_id' => '2',
+ 'tag_id' => '3'
+ )));
+ $this->assertEqual($result, $expected);
+
+ $TestModel->delete(1);
+ $result = $TestModel->ArticlesTag->find('all');
+
+ $expected = array(
+ array('ArticlesTag' => array(
+ 'article_id' => '2',
+ 'tag_id' => '1'
+ )),
+ array('ArticlesTag' => array(
+ 'article_id' => '2',
+ 'tag_id' => '3'
+ )));
+ $this->assertEqual($result, $expected);
+
+ $result = $TestModel->deleteAll(array('Article.user_id' => 999));
+ $this->assertTrue($result, 'deleteAll returned false when all no records matched conditions. %s');
+ }
+/**
+ * testHabtmDeleteLinksWhenNoPrimaryKeyInJoinTable method
+ *
+ * @access public
+ * @return void
+ */
+ function testHabtmDeleteLinksWhenNoPrimaryKeyInJoinTable() {
+
+ $this->loadFixtures('Apple', 'Device', 'ThePaperMonkies');
+ $ThePaper =& new ThePaper();
+ $ThePaper->id = 1;
+ $ThePaper->save(array('Monkey' => array(2, 3)));
+
+ $result = $ThePaper->findById(1);
+ $expected = array(
+ 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->assertEqual($result['Monkey'], $expected);
+
+ $ThePaper =& new ThePaper();
+ $ThePaper->id = 2;
+ $ThePaper->save(array('Monkey' => array(2, 3)));
+
+ $result = $ThePaper->findById(2);
+ $expected = array(
+ 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->assertEqual($result['Monkey'], $expected);
+
+ $ThePaper->delete(1);
+ $result = $ThePaper->findById(2);
+ $expected = array(
+ 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->assertEqual($result['Monkey'], $expected);
+ }
+
+}
+
+?>
View
1,837 cake/tests/cases/libs/model/model_integration.test.php
@@ -0,0 +1,1837 @@
+<?php
+/* SVN FILE: $Id: model.test.php 8225 2009-07-08 03:25:30Z mark_story $ */
+/**
+ * ModelDeleteTest file
+ *
+ * Long description for file
+ *
+ * PHP versions 4 and 5
+ *
+ * CakePHP(tm) Tests <https://trac.cakephp.org/wiki/Developement/TestSuite>
+ * Copyright 2005-2008, Cake Software Foundation, Inc. (http://www.cakefoundation.org)
+ *
+ * Licensed under The Open Group Test Suite License
+ * Redistributions of files must retain the above copyright notice.
+ *
+ * @filesource
+ * @copyright Copyright 2005-2008, Cake Software Foundation, Inc. (http://www.cakefoundation.org)
+ * @link https://trac.cakephp.org/wiki/Developement/TestSuite CakePHP(tm) Tests
+ * @package cake
+ * @subpackage cake.tests.cases.libs.model
+ * @since CakePHP(tm) v 1.2.0.4206
+ * @version $Revision: 8225 $
+ * @modifiedby $LastChangedBy: mark_story $
+ * @lastmodified $Date: 2009-07-07 23:25:30 -0400 (Tue, 07 Jul 2009) $
+ * @license http://www.opensource.org/licenses/opengroup.php The Open Group Test Suite License
+ */
+require_once dirname(__FILE__) . DS . 'model.test.php';
+require_once dirname(__FILE__) . DS . 'model_integration.test.php';
+
+/**
+ * ModelIntegrationTest
+ *
+ * @package cake
+ * @subpackage cake.tests.cases.libs.model.operations
+ */
+class ModelIntegrationTest extends BaseModelTest {
+/**
+ * testPkInHAbtmLinkModelArticleB
+ *
+ * @access public
+ * @return void
+ */
+ function testPkInHabtmLinkModelArticleB() {
+ $this->loadFixtures('Article', 'Tag');
+ $TestModel2 =& new ArticleB();
+ $this->assertEqual($TestModel2->ArticlesTag->primaryKey, 'article_id');
+ }
+/**
+ * Tests that $cacheSources can only be disabled in the db using model settings, not enabled
+ *
+ * @access public
+ * @return void
+ */
+ function testCacheSourcesDisabling() {
+ $this->db->cacheSources = true;
+ $TestModel = new JoinA();
+ $TestModel->cacheSources = false;
+ $TestModel->setSource('join_as');
+ $this->assertFalse($this->db->cacheSources);
+
+ $this->db->cacheSources = false;
+ $TestModel = new JoinA();
+ $TestModel->cacheSources = true;
+ $TestModel->setSource('join_as');
+ $this->assertFalse($this->db->cacheSources);
+ }
+/**
+ * testPkInHabtmLinkModel method
+ *
+ * @access public
+ * @return void
+ */
+ function testPkInHabtmLinkModel() {
+ //Test Nonconformant Models
+ $this->loadFixtures('Content', 'ContentAccount', 'Account');
+ $TestModel =& new Content();
+ $this->assertEqual($TestModel->ContentAccount->primaryKey, 'iContentAccountsId');
+
+ //test conformant models with no PK in the join table
+ $this->loadFixtures('Article', 'Tag');
+ $TestModel2 =& new Article();
+ $this->assertEqual($TestModel2->ArticlesTag->primaryKey, 'article_id');
+
+ //test conformant models with PK in join table
+ $this->loadFixtures('Item', 'Portfolio', 'ItemsPortfolio');
+ $TestModel3 =& new Portfolio();
+ $this->assertEqual($TestModel3->ItemsPortfolio->primaryKey, 'id');
+
+ //test conformant models with PK in join table - join table contains extra field
+ $this->loadFixtures('JoinA', 'JoinB', 'JoinAB');
+ $TestModel4 =& new JoinA();
+ $this->assertEqual($TestModel4->JoinAsJoinB->primaryKey, 'id');
+
+ }
+/**
+ * testDynamicBehaviorAttachment method
+ *
+ * @access public
+ * @return void
+ */
+ function testDynamicBehaviorAttachment() {
+ $this->loadFixtures('Apple');
+ $TestModel =& new Apple();
+ $this->assertEqual($TestModel->Behaviors->attached(), array());
+
+ $TestModel->Behaviors->attach('Tree', array('left' => 'left_field', 'right' => 'right_field'));
+ $this->assertTrue(is_object($TestModel->Behaviors->Tree));
+ $this->assertEqual($TestModel->Behaviors->attached(), array('Tree'));
+
+ $expected = array(
+ 'parent' => 'parent_id',
+ 'left' => 'left_field',
+ 'right' => 'right_field',
+ 'scope' => '1 = 1',
+ 'type' => 'nested',
+ '__parentChange' => false,
+ 'recursive' => -1
+ );
+
+ $this->assertEqual($TestModel->Behaviors->Tree->settings['Apple'], $expected);
+
+ $expected['enabled'] = false;
+ $TestModel->Behaviors->attach('Tree', array('enabled' => false));
+ $this->assertEqual($TestModel->Behaviors->Tree->settings['Apple'], $expected);
+ $this->assertEqual($TestModel->Behaviors->attached(), array('Tree'));
+
+ $TestModel->Behaviors->detach('Tree');
+ $this->assertEqual($TestModel->Behaviors->attached(), array());
+ $this->assertFalse(isset($TestModel->Behaviors->Tree));
+ }
+/**
+ * Tests cross database joins. Requires $test and $test2 to both be set in DATABASE_CONFIG
+ * NOTE: When testing on MySQL, you must set 'persistent' => false on *both* database connections,
+ * or one connection will step on the other.
+ */
+ function testCrossDatabaseJoins() {
+ $config = new DATABASE_CONFIG();
+
+ $skip = $this->skipIf(
+ !isset($config->test) || !isset($config->test2),
+ '%s Primary and secondary test databases not configured, skipping cross-database '
+ .'join tests.'
+ .' To run these tests, you must define $test and $test2 in your database configuration.'
+ );
+
+ if ($skip) {
+ return;
+ }
+
+ $this->loadFixtures('Article', 'Tag', 'ArticlesTag', 'User', 'Comment');
+ $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'
+ ),
+ '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' => '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'
+ ))),
+ 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->assertEqual($TestModel->find('all'), $expected);
+
+ $db2 =& ConnectionManager::getDataSource('test2');
+
+ foreach (array('User', 'Comment') as $class) {
+ $this->_fixtures[$this->_fixtureClassMap[$class]]->create($db2);
+ $this->_fixtures[$this->_fixtureClassMap[$class]]->insert($db2);
+ $this->db->truncate(Inflector::pluralize(Inflector::underscore($class)));
+ }
+
+ $this->assertEqual($TestModel->User->find('all'), array());
+ $this->assertEqual($TestModel->Comment->find('all'), array());
+ $this->assertEqual($TestModel->find('count'), 3);
+
+ $TestModel->User->setDataSource('test2');
+ $TestModel->Comment->setDataSource('test2');
+
+ foreach ($expected as $key => $value) {
+ unset($value['Comment'], $value['Tag']);
+ $expected[$key] = $value;
+ }
+
+ $TestModel->recursive = 0;
+ $result = $TestModel->find('all');
+ $this->assertEqual($result, $expected);
+
+ foreach ($expected as $key => $value) {
+ unset($value['Comment'], $value['Tag']);
+ $expected[$key] = $value;
+ }
+
+ $TestModel->recursive = 0;
+ $result = $TestModel->find('all');
+ $this->assertEqual($result, $expected);
+
+ $result = Set::extract($TestModel->User->find('all'), '{n}.User.id');
+ $this->assertEqual($result, array('1', '2', '3', '4'));
+ $this->assertEqual($TestModel->find('all'), $expected);
+
+ $TestModel->Comment->unbindModel(array('hasOne' => array('Attachment')));
+ $expected = array(
+ array(
+ 'Comment' => 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'
+ ),
+ 'User' => array(
+ 'id' => '2',
+ 'user' => 'nate',
+ 'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
+ 'created' => '2007-03-17 01:18:23',
+ 'updated' => '2007-03-17 01:20:31'
+ ),
+ '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(
+ 'Comment' => 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'
+ ),
+ 'User' => array(
+ 'id' => '4',
+ 'user' => 'garrett',
+ 'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
+ 'created' => '2007-03-17 01:22:23',
+ 'updated' => '2007-03-17 01:24:31'
+ ),
+ '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(
+ 'Comment' => 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'
+ ),
+ 'User' => array(
+ 'id' => '1',
+ 'user' => 'mariano',
+ 'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
+ 'created' => '2007-03-17 01:16:23',
+ 'updated' => '2007-03-17 01:18:31'
+ ),
+ '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(
+ 'Comment' => 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'
+ ),
+ 'User' => array(
+ 'id' => '1',
+ 'user' => 'mariano',
+ 'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
+ 'created' => '2007-03-17 01:16:23',
+ 'updated' => '2007-03-17 01:18:31'
+ ),
+ '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(
+ 'Comment' => 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'
+ ),
+ 'User' => array(
+ 'id' => '1',
+ 'user' => 'mariano',
+ 'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
+ 'created' => '2007-03-17 01:16:23',
+ 'updated' => '2007-03-17 01:18: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'
+ )),
+ array(
+ 'Comment' => 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'
+ ),
+ 'User' => array(
+ 'id' => '2',
+ 'user' => 'nate',
+ 'password' => '5f4dcc3b5aa765d61d8327deb882cf99',
+ 'created' => '2007-03-17 01:18:23',
+ 'updated' => '2007-03-17 01:20: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'
+ )));
+ $this->assertEqual($TestModel->Comment->find('all'), $expected);
+
+ foreach (array('User', 'Comment') as $class) {
+ $this->_fixtures[$this->_fixtureClassMap[$class]]->drop($db2);
+ }
+ }
+/**
+ * testDisplayField method
+ *
+ * @access public
+ * @return void
+ */
+ function testDisplayField() {
+ $this->loadFixtures('Post', 'Comment', 'Person');
+ $Post = new Post();
+ $Comment = new Comment();
+ $Person = new Person();
+
+ $this->assertEqual($Post->displayField, 'title');
+ $this->assertEqual($Person->displayField, 'name');
+ $this->assertEqual($Comment->displayField, 'id');
+ }
+/**
+ * testSchema method
+ *
+ * @access public
+ * @return void
+ */
+ function testSchema() {
+ $Post = new Post();
+
+ $result = $Post->schema();
+ $columns = array('id', 'author_id', 'title', 'body', 'published', 'created', 'updated');
+ $this->assertEqual(array_keys($result), $columns);
+
+ $types = array('integer', 'integer', 'string', 'text', 'string', 'datetime', 'datetime');
+ $this->assertEqual(Set::extract(array_values($result), '{n}.type'), $types);
+
+ $result = $Post->schema('body');
+ $this->assertEqual($result['type'], 'text');
+ $this->assertNull($Post->schema('foo'));
+
+ $this->assertEqual($Post->getColumnTypes(), array_combine($columns, $types));
+ }
+/**
+ * test deconstruct() with time fields.
+ *
+ * @return void
+ **/
+ function testDeconstructFieldsTime() {
+ $this->loadFixtures('Apple');
+ $TestModel =& new Apple();
+
+ $data = array();
+ $data['Apple']['mytime']['hour'] = '';
+ $data['Apple']['mytime']['min'] = '';
+ $data['Apple']['mytime']['sec'] = '';
+
+ $TestModel->data = null;
+ $TestModel->set($data);
+ $expected = array('Apple'=> array('mytime'=> ''));
+ $this->assertEqual($TestModel->data, $expected);
+
+ $data = array();
+ $data['Apple']['mytime']['hour'] = '';
+ $data['Apple']['mytime']['min'] = '';
+ $data['Apple']['mytime']['meridan'] = '';
+
+ $TestModel->data = null;
+ $TestModel->set($data);
+ $expected = array('Apple'=> array('mytime'=> ''));
+ $this->assertEqual($TestModel->data, $expected, 'Empty values are not returning properly. %s');
+
+ $data = array();
+ $data['Apple']['mytime']['hour'] = '12';
+ $data['Apple']['mytime']['min'] = '0';
+ $data['Apple']['mytime']['meridian'] = 'am';
+
+ $TestModel->data = null;
+ $TestModel->set($data);
+ $expected = array('Apple'=> array('mytime'=> '00:00:00'));
+ $this->assertEqual($TestModel->data, $expected, 'Midnight is not returning proper values. %s');
+
+ $data = array();
+ $data['Apple']['mytime']['hour'] = '00';
+ $data['Apple']['mytime']['min'] = '00';
+
+ $TestModel->data = null;
+ $TestModel->set($data);
+ $expected = array('Apple'=> array('mytime'=> '00:00:00'));
+ $this->assertEqual($TestModel->data, $expected, 'Midnight is not returning proper values. %s');
+
+ $data = array();
+ $data['Apple']['mytime']['hour'] = '03';
+ $data['Apple']['mytime']['min'] = '04';
+ $data['Apple']['mytime']['sec'] = '04';
+
+ $TestModel->data = null;
+ $TestModel->set($data);
+ $expected = array('Apple'=> array('mytime'=> '03:04:04'));
+ $this->assertEqual($TestModel->data, $expected);
+
+ $data = array();
+ $data['Apple']['mytime']['hour'] = '3';
+ $data['Apple']['mytime']['min'] = '4';
+ $data['Apple']['mytime']['sec'] = '4';
+
+ $TestModel->data = null;
+ $TestModel->set($data);
+ $expected = array('Apple' => array('mytime'=> '03:04:04'));
+ $this->assertEqual($TestModel->data, $expected);
+
+ $data = array();
+ $data['Apple']['mytime']['hour'] = '03';
+ $data['Apple']['mytime']['min'] = '4';
+ $data['Apple']['mytime']['sec'] = '4';
+
+ $TestModel->data = null;
+ $TestModel->set($data);
+ $expected = array('Apple'=> array('mytime'=> '03:04:04'));
+ $this->assertEqual($TestModel->data, $expected);
+
+ $db = ConnectionManager::getDataSource('test_suite');
+ $data = array();
+ $data['Apple']['mytime'] = $db->expression('NOW()');
+ $TestModel->data = null;
+ $TestModel->set($data);
+ $this->assertEqual($TestModel->data, $data);
+ }
+/**
+ * testDeconstructFields with datetime, timestamp, and date fields
+ *
+ * @access public
+ * @return void
+ */
+ function testDeconstructFieldsDateTime() {
+ $this->loadFixtures('Apple');
+ $TestModel =& new Apple();
+
+ //test null/empty values first
+ $data['Apple']['created']['year'] = '';
+ $data['Apple']['created']['month'] = '';
+ $data['Apple']['created']['day'] = '';
+ $data['Apple']['created']['hour'] = '';
+ $data['Apple']['created']['min'] = '';
+ $data['Apple']['created']['sec'] = '';
+
+ $TestModel->data = null;
+ $TestModel->set($data);
+ $expected = array('Apple'=> array('created'=> ''));
+ $this->assertEqual($TestModel->data, $expected);
+
+ $data = array();
+ $data['Apple']['date']['year'] = '';
+ $data['Apple']['date']['month'] = '';
+ $data['Apple']['date']['day'] = '';
+
+ $TestModel->data = null;
+ $TestModel->set($data);
+ $expected = array('Apple'=> array('date'=> ''));
+ $this->assertEqual($TestModel->data, $expected);
+
+ $data = array();
+ $data['Apple']['created']['year'] = '2007';
+ $data['Apple']['created']['month'] = '08';
+ $data['Apple']['created']['day'] = '20';
+ $data['Apple']['created']['hour'] = '';
+ $data['Apple']['created']['min'] = '';
+ $data['Apple']['created']['sec'] = '';
+
+ $TestModel->data = null;
+ $TestModel->set($data);
+ $expected = array('Apple'=> array('created'=> '2007-08-20 00:00:00'));
+ $this->assertEqual($TestModel->data, $expected);
+
+ $data = array();
+ $data['Apple']['created']['year'] = '2007';
+ $data['Apple']['created']['month'] = '08';
+ $data['Apple']['created']['day'] = '20';
+ $data['Apple']['created']['hour'] = '10';
+ $data['Apple']['created']['min'] = '12';
+ $data['Apple']['created']['sec'] = '';
+
+ $TestModel->data = null;
+ $TestModel->set($data);
+ $expected = array('Apple'=> array('created'=> '2007-08-20 10:12:00'));
+ $this->assertEqual($TestModel->data, $expected);
+
+ $data = array();
+ $data['Apple']['created']['year'] = '2007';
+ $data['Apple']['created']['month'] = '';
+ $data['Apple']['created']['day'] = '12';
+ $data['Apple']['created']['hour'] = '20';
+ $data['Apple']['created']['min'] = '';
+ $data['Apple']['created']['sec'] = '';
+
+ $TestModel->data = null;
+ $TestModel->set($data);
+ $expected = array('Apple'=> array('created'=> ''));
+ $this->assertEqual($TestModel->data, $expected);
+
+ $data = array();
+ $data['Apple']['created']['hour'] = '20';
+ $data['Apple']['created']['min'] = '33';
+
+ $TestModel->data = null;
+ $TestModel->set($data);
+ $expected = array('Apple'=> array('created'=> ''));
+ $this->assertEqual($TestModel->data, $expected);
+
+ $data = array();
+ $data['Apple']['created']['hour'] = '20';
+ $data['Apple']['created']['min'] = '33';
+ $data['Apple']['created']['sec'] = '33';
+
+ $TestModel->data = null;
+ $TestModel->set($data);
+ $expected = array('Apple'=> array('created'=> ''));
+ $this->assertEqual($TestModel->data, $expected);
+
+ $data = array();
+ $data['Apple']['created']['hour'] = '13';
+ $data['Apple']['created']['min'] = '00';
+ $data['Apple']['date']['year'] = '2006';
+ $data['Apple']['date']['month'] = '12';
+ $data['Apple']['date']['day'] = '25';
+
+ $TestModel->data = null;
+ $TestModel->set($data);
+ $expected = array(
+ 'Apple'=> array(
+ 'created'=> '',
+ 'date'=> '2006-12-25'
+ ));
+ $this->assertEqual($TestModel->data, $expected);
+
+ $data = array();
+ $data['Apple']['created']['year'] = '2007';
+ $data['Apple']['created']['month'] = '08';
+ $data['Apple']['created']['day'] = '20';
+ $data['Apple']['created']['hour'] = '10';
+ $data['Apple']['created']['min'] = '12';
+ $data['Apple']['created']['sec'] = '09';
+ $data['Apple']['date']['year'] = '2006';
+ $data['Apple']['date']['month'] = '12';
+ $data['Apple']['date']['day'] = '25';
+
+ $TestModel->data = null;
+ $TestModel->set($data);
+ $expected = array(
+ 'Apple'=> array(
+ 'created'=> '2007-08-20 10:12:09',
+ 'date'=> '2006-12-25'
+ ));
+ $this->assertEqual($TestModel->data, $expected);
+
+ $data = array();
+ $data['Apple']['created']['year'] = '--';
+ $data['Apple']['created']['month'] = '--';
+ $data['Apple']['created']['day'] = '--';
+ $data['Apple']['created']['hour'] = '--';
+ $data['Apple']['created']['min'] = '--';
+ $data['Apple']['created']['sec'] = '--';
+ $data['Apple']['date']['year'] = '--';
+ $data['Apple']['date']['month'] = '--';
+ $data['Apple']['date']['day'] = '--';
+
+ $TestModel->data = null;
+ $TestModel->set($data);
+ $expected = array('Apple'=> array('created'=> '', 'date'=> ''));
+ $this->assertEqual($TestModel->data, $expected);
+
+ $data = array();
+ $data['Apple']['created']['year'] = '2007';
+ $data['Apple']['created']['month'] = '--';
+ $data['Apple']['created']['day'] = '20';
+ $data['Apple']['created']['hour'] = '10';
+ $data['Apple']['created']['min'] = '12';
+ $data['Apple']['created']['sec'] = '09';
+ $data['Apple']['date']['year'] = '2006';
+ $data['Apple']['date']['month'] = '12';
+ $data['Apple']['date']['day'] = '25';
+
+ $TestModel->data = null;
+ $TestModel->set($data);
+ $expected = array('Apple'=> array('created'=> '', 'date'=> '2006-12-25'));
+ $this->assertEqual($TestModel->data, $expected);
+
+ $data = array();
+ $data['Apple']['date']['year'] = '2006';
+ $data['Apple']['date']['month'] = '12';
+ $data['Apple']['date']['day'] = '25';
+
+ $TestModel->data = null;
+ $TestModel->set($data);
+ $expected = array('Apple'=> array('date'=> '2006-12-25'));
+ $this->assertEqual($TestModel->data, $expected);
+
+ $db = ConnectionManager::getDataSource('test_suite');
+ $data = array();
+ $data['Apple']['modified'] = $db->expression('NOW()');
+ $TestModel->data = null;
+ $TestModel->set($data);
+ $this->assertEqual($TestModel->data, $data);
+ }
+/**
+ * testTablePrefixSwitching method
+ *
+ * @access public
+ * @return void
+ */
+ function testTablePrefixSwitching() {
+ ConnectionManager::create('database1',
+ array_merge($this->db->config, array('prefix' => 'aaa_')
+ ));
+ ConnectionManager::create('database2',
+ array_merge($this->db->config, array('prefix' => 'bbb_')
+ ));
+
+ $db1 = ConnectionManager::getDataSource('database1');
+ $db2 = ConnectionManager::getDataSource('database2');
+
+ $TestModel = new Apple();
+ $TestModel->setDataSource('database1');
+ $this->assertEqual($this->db->fullTableName($TestModel, false), 'aaa_apples');
+ $this->assertEqual($db1->fullTableName($TestModel, false), 'aaa_apples');
+ $this->assertEqual($db2->fullTableName($TestModel, false), 'aaa_apples');
+
+ $TestModel->setDataSource('database2');
+ $this->assertEqual($this->db->fullTableName($TestModel, false), 'bbb_apples');
+ $this->assertEqual($db1->fullTableName($TestModel, false), 'bbb_apples');
+ $this->assertEqual($db2->fullTableName($TestModel, false), 'bbb_apples');
+
+ $TestModel = new Apple();
+ $TestModel->tablePrefix = 'custom_';
+ $this->assertEqual($this->db->fullTableName($TestModel, false), 'custom_apples');
+ $TestModel->setDataSource('database1');
+ $this->assertEqual($this->db->fullTableName($TestModel, false), 'custom_apples');
+ $this->assertEqual($db1->fullTableName($TestModel, false), 'custom_apples');
+
+ $TestModel = new Apple();
+ $TestModel->setDataSource('database1');
+ $this->assertEqual($this->db->fullTableName($TestModel, false), 'aaa_apples');
+ $TestModel->tablePrefix = '';
+ $TestModel->setDataSource('database2');
+ $this->assertEqual($db2->fullTableName($TestModel, false), 'apples');
+ $this->assertEqual($db1->fullTableName($TestModel, false), 'apples');
+
+ $TestModel->tablePrefix = null;
+ $TestModel->setDataSource('database1');
+ $this->assertEqual($db2->fullTableName($TestModel, false), 'aaa_apples');
+ $this->assertEqual($db1->fullTableName($TestModel, false), 'aaa_apples');
+
+ $TestModel->tablePrefix = false;
+ $TestModel->setDataSource('database2');
+ $this->assertEqual($db2->fullTableName($TestModel, false), 'apples');
+ $this->assertEqual($db1->fullTableName($TestModel, false), 'apples');
+ }
+/**
+ * Tests validation parameter order in custom validation methods
+ *
+ * @access public
+ * @return void
+ */
+ function testInvalidAssociation() {
+ $TestModel =& new ValidationTest1();
+ $this->assertNull($TestModel->getAssociated('Foo'));
+ }
+/**
+ * testLoadModelSecondIteration method
+ *
+ * @access public
+ * @return void
+ */
+ function testLoadModelSecondIteration() {
+ $model = new ModelA();
+ $this->assertIsA($model,'ModelA');
+
+ $this->assertIsA($model->ModelB, 'ModelB');
+ $this->assertIsA($model->ModelB->ModelD, 'ModelD');
+
+ $this->assertIsA($model->ModelC, 'ModelC');
+ $this->assertIsA($model->ModelC->ModelD, 'ModelD');
+ }
+/**
+ * ensure that __exists is reset on create
+ *
+ * @return void
+ **/
+ function testResetOfExistsOnCreate() {
+ $this->loadFixtures('Article');
+ $Article =& new Article();
+ $Article->id = 1;
+ $Article->saveField('title', 'Reset me');
+ $Article->delete();
+ $Article->id = 1;
+ $this->assertFalse($Article->exists());
+
+ $Article->create();
+ $this->assertFalse($Article->exists());
+ $Article->id = 2;
+ $Article->saveField('title', 'Staying alive');
+ $result = $Article->read(null, 2);
+ $this->assertEqual($result['Article']['title'], 'Staying alive');
+ }
+/**
+ * testPluginAssociations method
+ *
+ * @access public
+ * @return void
+ */
+ function testPluginAssociations() {
+ $this->loadFixtures('TestPluginArticle', 'User', 'TestPluginComment');
+ $TestModel =& new TestPluginArticle();
+
+ $result = $TestModel->find('all');
+ $expected = array(
+ array(
+ 'TestPluginArticle' => array(
+ 'id' => 1,
+ 'user_id' => 1,
+ 'title' => 'First Plugin Article',
+ 'body' => 'First Plugin Article Body',
+ 'published' => 'Y',
+ 'created' => '2008-09-24 10:39:23',
+ 'updated' => '2008-09-24 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'
+ ),
+ 'TestPluginComment' => array(
+ array(
+ 'id' => 1,
+ 'article_id' => 1,
+ 'user_id' => 2,
+ 'comment' => 'First Comment for First Plugin Article',
+ 'published' => 'Y',
+ 'created' => '2008-09-24 10:45:23',
+ 'updated' => '2008-09-24 10:47:31'
+ ),
+ array(
+ 'id' => 2,
+ 'article_id' => 1,
+ 'user_id' => 4,
+ 'comment' => 'Second Comment for First Plugin Article',
+ 'published' => 'Y',
+ 'created' => '2008-09-24 10:47:23',
+ 'updated' => '2008-09-24 10:49:31'
+ ),
+ array(
+ 'id' => 3,
+ 'article_id' => 1,
+ 'user_id' => 1,
+ 'comment' => 'Third Comment for First Plugin Article',
+ 'published' => 'Y',
+ 'created' => '2008-09-24 10:49:23',
+ 'updated' => '2008-09-24 10:51:31'
+ ),
+ array(
+ 'id' => 4,
+ 'article_id' => 1,
+ 'user_id' => 1,
+ 'comment' => 'Fourth Comment for First Plugin Article',
+ 'published' => 'N',
+ 'created' => '2008-09-24 10:51:23',
+ 'updated' => '2008-09-24 10:53:31'
+ ))),
+ array(
+ 'TestPluginArticle' => array(
+ 'id' => 2,
+ 'user_id' => 3,
+ 'title' => 'Second Plugin Article',
+ 'body' => 'Second Plugin Article Body',
+ 'published' => 'Y',
+ 'created' => '2008-09-24 10:41:23',
+ 'updated' => '2008-09-24 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'
+ ),
+ 'TestPluginComment' => array(
+ array(
+ 'id' => 5,
+ 'article_id' => 2,
+ 'user_id' => 1,
+ 'comment' => 'First Comment for Second Plugin Article',