2008-05-30 11:40:08 +00:00
< ? php
/**
2009-03-18 17:55:58 +00:00
* DboSourceTest file
2008-05-30 11:40:08 +00:00
*
2010-10-03 12:31:21 -04:00
* PHP 5
2008-05-30 11:40:08 +00:00
*
2010-05-18 22:15:13 -03:00
* CakePHP ( tm ) Tests < http :// book . cakephp . org / view / 1196 / Testing >
2010-01-26 14:18:20 -05:00
* Copyright 2005 - 2010 , Cake Software Foundation , Inc . ( http :// cakefoundation . org )
2008-05-30 11:40:08 +00:00
*
2008-06-27 05:14:52 +00:00
* Licensed under The Open Group Test Suite License
* Redistributions of files must retain the above copyright notice .
2008-05-30 11:40:08 +00:00
*
2010-01-26 14:18:20 -05:00
* @ copyright Copyright 2005 - 2010 , Cake Software Foundation , Inc . ( http :// cakefoundation . org )
2010-05-18 22:15:13 -03:00
* @ link http :// book . cakephp . org / view / 1196 / Testing CakePHP ( tm ) Tests
2009-03-18 17:55:58 +00:00
* @ package cake
2008-10-30 17:30:26 +00:00
* @ subpackage cake . tests . cases . libs . model . datasources
* @ since CakePHP ( tm ) v 1.2 . 0.4206
2010-10-03 12:27:27 -04:00
* @ license MIT License ( http :// www . opensource . org / licenses / mit - license . php )
2008-05-30 11:40:08 +00:00
*/
if ( ! defined ( 'CAKEPHP_UNIT_TEST_EXECUTION' )) {
define ( 'CAKEPHP_UNIT_TEST_EXECUTION' , 1 );
}
2009-07-29 10:51:08 +02:00
App :: import ( 'Model' , array ( 'Model' , 'DataSource' , 'DboSource' , 'DboMysql' , 'App' ));
2008-05-30 11:40:08 +00:00
require_once dirname ( dirname ( __FILE__ )) . DS . 'models.php' ;
2009-07-24 21:18:37 +02:00
2008-05-30 11:40:08 +00:00
/**
2009-03-18 17:55:58 +00:00
* DboSourceTest class
2008-05-30 11:40:08 +00:00
*
2009-03-18 17:55:58 +00:00
* @ package cake
2008-10-30 17:30:26 +00:00
* @ subpackage cake . tests . cases . libs . model . datasources
2008-05-30 11:40:08 +00:00
*/
class DboSourceTest extends CakeTestCase {
2009-07-24 21:18:37 +02:00
2008-06-02 19:22:55 +00:00
/**
* debug property
2008-06-05 14:48:54 +00:00
*
2008-06-02 19:22:55 +00:00
* @ var mixed null
* @ access public
*/
2010-04-04 17:14:00 +10:00
public $debug = null ;
2009-07-24 21:18:37 +02:00
2008-06-02 19:22:55 +00:00
/**
* autoFixtures property
2008-06-05 14:48:54 +00:00
*
2008-06-02 19:22:55 +00:00
* @ var bool false
* @ access public
*/
2010-04-04 17:14:00 +10:00
public $autoFixtures = false ;
2009-07-24 21:18:37 +02:00
2008-06-02 19:22:55 +00:00
/**
* fixtures property
2008-06-05 14:48:54 +00:00
*
2008-06-02 19:22:55 +00:00
* @ var array
* @ access public
*/
2010-04-04 17:14:00 +10:00
public $fixtures = array (
2008-05-30 11:40:08 +00:00
'core.apple' , 'core.article' , 'core.articles_tag' , 'core.attachment' , 'core.comment' ,
2010-09-07 00:32:44 -04:00
'core.sample' , 'core.tag' , 'core.user' , 'core.post' , 'core.author' , 'core.data_test'
2008-05-30 11:40:08 +00:00
);
2009-07-24 21:18:37 +02:00
2008-06-02 19:22:55 +00:00
/**
2010-09-25 21:36:49 -04:00
* setUp method
2008-06-05 14:48:54 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2010-09-25 21:36:49 -04:00
function setUp () {
parent :: setUp ();
2008-05-30 11:40:08 +00:00
$this -> __config = $this -> db -> config ;
if ( ! class_exists ( 'DboTest' )) {
2010-09-19 22:28:30 -04:30
$db = ConnectionManager :: getDataSource ( 'test' );
2008-05-30 11:40:08 +00:00
$class = get_class ( $db );
eval ( " class DboTest extends $class {
var \ $simulated = array ();
2009-07-24 21:18:37 +02:00
2008-06-02 19:22:55 +00:00
/**
* execute method
2008-06-05 14:48:54 +00:00
*
* @ param \ $sql
2008-06-02 19:22:55 +00:00
* @ access protected
* @ return void
*/
2008-05-30 11:40:08 +00:00
function _execute ( \ $sql ) {
\ $this -> simulated [] = \ $sql ;
return null ;
}
2009-07-24 21:18:37 +02:00
2008-06-02 19:22:55 +00:00
/**
* getLastQuery method
2008-06-05 14:48:54 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function getLastQuery () {
return \ $this -> simulated [ count ( \ $this -> simulated ) - 1 ];
}
} " );
}
2010-06-09 20:47:25 -04:30
$this -> testDb = new DboTest ( $this -> __config );
2008-08-07 15:36:26 +00:00
$this -> testDb -> cacheSources = false ;
2009-08-01 23:47:28 -07:00
$this -> testDb -> startQuote = '`' ;
$this -> testDb -> endQuote = '`' ;
2010-09-25 21:36:49 -04:00
2010-06-09 20:47:25 -04:30
$this -> Model = new TestModel ();
2008-05-30 11:40:08 +00:00
}
2009-07-24 21:18:37 +02:00
2008-06-02 19:22:55 +00:00
/**
* endTest method
2008-06-05 14:48:54 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2010-09-25 21:36:49 -04:00
function tearDown () {
parent :: tearDown ();
2008-05-30 11:40:08 +00:00
unset ( $this -> Model );
}
2009-07-24 21:18:37 +02:00
2010-01-22 10:30:22 -05:00
/**
* test that booleans and null make logical condition strings .
*
* @ return void
*/
function testBooleanNullConditionsParsing () {
$result = $this -> testDb -> conditions ( true );
$this -> assertEqual ( $result , ' WHERE 1 = 1' , 'true conditions failed %s' );
$result = $this -> testDb -> conditions ( false );
$this -> assertEqual ( $result , ' WHERE 0 = 1' , 'false conditions failed %s' );
$result = $this -> testDb -> conditions ( null );
$this -> assertEqual ( $result , ' WHERE 1 = 1' , 'null conditions failed %s' );
$result = $this -> testDb -> conditions ( array ());
$this -> assertEqual ( $result , ' WHERE 1 = 1' , 'array() conditions failed %s' );
$result = $this -> testDb -> conditions ( '' );
$this -> assertEqual ( $result , ' WHERE 1 = 1' , '"" conditions failed %s' );
$result = $this -> testDb -> conditions ( ' ' , '" " conditions failed %s' );
$this -> assertEqual ( $result , ' WHERE 1 = 1' );
}
2010-05-19 05:54:51 -03:00
/**
* test that order () will accept objects made from DboSource :: expression
*
* @ return void
*/
function testOrderWithExpression () {
$expression = $this -> testDb -> expression ( " CASE Sample.id WHEN 1 THEN 'Id One' ELSE 'Other Id' END AS case_col " );
$result = $this -> testDb -> order ( $expression );
$expected = " ORDER BY CASE Sample.id WHEN 1 THEN 'Id One' ELSE 'Other Id' END AS case_col " ;
$this -> assertEqual ( $result , $expected );
}
2008-06-05 15:20:45 +00:00
/**
* testMergeAssociations method
2008-06-14 19:45:26 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-06-20 20:17:23 +00:00
function testMergeAssociations () {
2009-03-09 18:36:32 +00:00
$data = array ( 'Article2' => 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'
));
$merge = array ( 'Topic' => array ( array (
'id' => '1' , 'topic' => 'Topic' , 'created' => '2007-03-17 01:16:23' ,
'updated' => '2007-03-17 01:18:31'
)));
2008-06-20 20:17:23 +00:00
$expected = array (
'Article2' => array (
2009-03-09 18:36:32 +00:00
'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'
2008-06-20 20:17:23 +00:00
),
'Topic' => array (
2009-03-09 18:36:32 +00:00
'id' => '1' , 'topic' => 'Topic' , 'created' => '2007-03-17 01:16:23' ,
'updated' => '2007-03-17 01:18:31'
2008-06-20 20:17:23 +00:00
)
);
$this -> testDb -> __mergeAssociation ( $data , $merge , 'Topic' , 'hasOne' );
$this -> assertEqual ( $data , $expected );
2009-03-09 18:36:32 +00:00
$data = array ( 'Article2' => 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'
));
$merge = array ( 'User2' => array ( array (
'id' => '1' , 'user' => 'mariano' , 'password' => '5f4dcc3b5aa765d61d8327deb882cf99' ,
'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31'
)));
2008-06-20 20:17:23 +00:00
$expected = array (
'Article2' => array (
2009-03-09 18:36:32 +00:00
'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'
2008-06-20 20:17:23 +00:00
),
'User2' => array (
'id' => '1' , 'user' => 'mariano' , 'password' => '5f4dcc3b5aa765d61d8327deb882cf99' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31'
)
);
$this -> testDb -> __mergeAssociation ( $data , $merge , 'User2' , 'belongsTo' );
$this -> assertEqual ( $data , $expected );
$data = array (
'Article2' => 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'
)
);
$merge = array ( array ( 'Comment' => false ));
$expected = array (
'Article2' => 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'
),
'Comment' => array ()
);
$this -> testDb -> __mergeAssociation ( $data , $merge , 'Comment' , 'hasMany' );
$this -> assertEqual ( $data , $expected );
$data = 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'
)
);
$merge = array (
array (
'Comment' => array (
'id' => '1' , 'comment' => 'Comment 1' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31'
)
),
array (
'Comment' => array (
'id' => '2' , 'comment' => 'Comment 2' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31'
)
)
);
$expected = 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'
),
'Comment' => array (
array (
'id' => '1' , 'comment' => 'Comment 1' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31'
),
array (
'id' => '2' , 'comment' => 'Comment 2' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31'
)
)
);
$this -> testDb -> __mergeAssociation ( $data , $merge , 'Comment' , 'hasMany' );
$this -> assertEqual ( $data , $expected );
$data = 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'
)
);
$merge = array (
array (
'Comment' => array (
'id' => '1' , 'comment' => 'Comment 1' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31'
),
'User2' => array (
'id' => '1' , 'user' => 'mariano' , 'password' => '5f4dcc3b5aa765d61d8327deb882cf99' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31'
)
),
array (
'Comment' => array (
'id' => '2' , 'comment' => 'Comment 2' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31'
),
'User2' => array (
'id' => '1' , 'user' => 'mariano' , 'password' => '5f4dcc3b5aa765d61d8327deb882cf99' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31'
)
)
);
$expected = 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'
),
'Comment' => array (
array (
'id' => '1' , 'comment' => 'Comment 1' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31' ,
'User2' => array (
'id' => '1' , 'user' => 'mariano' , 'password' => '5f4dcc3b5aa765d61d8327deb882cf99' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31'
)
),
array (
'id' => '2' , 'comment' => 'Comment 2' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31' ,
'User2' => array (
'id' => '1' , 'user' => 'mariano' , 'password' => '5f4dcc3b5aa765d61d8327deb882cf99' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31'
)
)
)
);
$this -> testDb -> __mergeAssociation ( $data , $merge , 'Comment' , 'hasMany' );
$this -> assertEqual ( $data , $expected );
$data = 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'
)
);
$merge = array (
array (
'Comment' => array (
'id' => '1' , 'comment' => 'Comment 1' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31'
),
'User2' => array (
'id' => '1' , 'user' => 'mariano' , 'password' => '5f4dcc3b5aa765d61d8327deb882cf99' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31'
),
'Tag' => array (
array ( 'id' => 1 , 'tag' => 'Tag 1' ),
array ( 'id' => 2 , 'tag' => 'Tag 2' )
)
),
array (
'Comment' => array (
'id' => '2' , 'comment' => 'Comment 2' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31'
),
'User2' => array (
'id' => '1' , 'user' => 'mariano' , 'password' => '5f4dcc3b5aa765d61d8327deb882cf99' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31'
),
'Tag' => array ()
)
);
$expected = 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'
),
'Comment' => array (
array (
'id' => '1' , 'comment' => 'Comment 1' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31' ,
'User2' => array (
'id' => '1' , 'user' => 'mariano' , 'password' => '5f4dcc3b5aa765d61d8327deb882cf99' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31'
),
'Tag' => array (
array ( 'id' => 1 , 'tag' => 'Tag 1' ),
array ( 'id' => 2 , 'tag' => 'Tag 2' )
)
),
array (
'id' => '2' , 'comment' => 'Comment 2' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31' ,
'User2' => array (
'id' => '1' , 'user' => 'mariano' , 'password' => '5f4dcc3b5aa765d61d8327deb882cf99' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31'
),
'Tag' => array ()
)
)
);
$this -> testDb -> __mergeAssociation ( $data , $merge , 'Comment' , 'hasMany' );
$this -> assertEqual ( $data , $expected );
$data = 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'
)
);
$merge = array (
array (
'Tag' => array (
'id' => '1' , 'tag' => 'Tag 1' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31'
)
),
array (
'Tag' => array (
'id' => '2' , 'tag' => 'Tag 2' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31'
)
),
array (
'Tag' => array (
'id' => '3' , 'tag' => 'Tag 3' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31'
)
)
);
$expected = 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'
),
'Tag' => array (
array (
'id' => '1' , 'tag' => 'Tag 1' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31'
),
array (
'id' => '2' , 'tag' => 'Tag 2' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31'
),
array (
'id' => '3' , 'tag' => 'Tag 3' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31'
)
)
);
$this -> testDb -> __mergeAssociation ( $data , $merge , 'Tag' , 'hasAndBelongsToMany' );
$this -> assertEqual ( $data , $expected );
$data = 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'
)
);
$merge = array (
array (
'Tag' => array (
'id' => '1' , 'tag' => 'Tag 1' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31'
)
),
array (
'Tag' => array (
'id' => '2' , 'tag' => 'Tag 2' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31'
)
),
array (
'Tag' => array (
'id' => '3' , 'tag' => 'Tag 3' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31'
)
)
);
$expected = 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'
),
'Tag' => array ( 'id' => '1' , 'tag' => 'Tag 1' , 'created' => '2007-03-17 01:16:23' , 'updated' => '2007-03-17 01:18:31' )
);
$this -> testDb -> __mergeAssociation ( $data , $merge , 'Tag' , 'hasOne' );
$this -> assertEqual ( $data , $expected );
}
2009-07-24 21:18:37 +02:00
2008-06-05 15:20:45 +00:00
/**
* testRenderStatement method
2008-06-14 19:45:26 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-06-20 20:17:23 +00:00
function testRenderStatement () {
2008-05-31 12:36:38 +00:00
$result = $this -> testDb -> renderStatement ( 'select' , array (
'fields' => 'id' , 'table' => 'table' , 'conditions' => 'WHERE 1=1' ,
'alias' => '' , 'joins' => '' , 'order' => '' , 'limit' => '' , 'group' => ''
));
2008-06-20 20:17:23 +00:00
$this -> assertPattern ( '/^\s*SELECT\s+id\s+FROM\s+table\s+WHERE\s+1=1\s*$/' , $result );
2008-05-30 11:40:08 +00:00
2008-06-20 20:17:23 +00:00
$result = $this -> testDb -> renderStatement ( 'update' , array ( 'fields' => 'value=2' , 'table' => 'table' , 'conditions' => 'WHERE 1=1' , 'alias' => '' ));
$this -> assertPattern ( '/^\s*UPDATE\s+table\s+SET\s+value=2\s+WHERE\s+1=1\s*$/' , $result );
2008-05-30 11:40:08 +00:00
2008-06-20 20:17:23 +00:00
$result = $this -> testDb -> renderStatement ( 'update' , array ( 'fields' => 'value=2' , 'table' => 'table' , 'conditions' => 'WHERE 1=1' , 'alias' => 'alias' , 'joins' => '' ));
$this -> assertPattern ( '/^\s*UPDATE\s+table\s+AS\s+alias\s+SET\s+value=2\s+WHERE\s+1=1\s*$/' , $result );
2008-05-30 11:40:08 +00:00
2008-06-20 20:17:23 +00:00
$result = $this -> testDb -> renderStatement ( 'delete' , array ( 'fields' => 'value=2' , 'table' => 'table' , 'conditions' => 'WHERE 1=1' , 'alias' => '' ));
$this -> assertPattern ( '/^\s*DELETE\s+FROM\s+table\s+WHERE\s+1=1\s*$/' , $result );
2008-05-30 11:40:08 +00:00
2008-06-20 20:17:23 +00:00
$result = $this -> testDb -> renderStatement ( 'delete' , array ( 'fields' => 'value=2' , 'table' => 'table' , 'conditions' => 'WHERE 1=1' , 'alias' => 'alias' , 'joins' => '' ));
$this -> assertPattern ( '/^\s*DELETE\s+alias\s+FROM\s+table\s+AS\s+alias\s+WHERE\s+1=1\s*$/' , $result );
}
2009-07-24 21:18:37 +02:00
2008-06-05 15:20:45 +00:00
/**
* testStatements method
2008-06-14 19:45:26 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-06-20 20:17:23 +00:00
function testStatements () {
2010-06-25 23:40:29 -04:00
$this -> loadFixtures ( 'Article' , 'User' , 'Comment' , 'Tag' , 'Attachment' , 'ArticlesTag' );
2010-06-09 20:47:25 -04:30
$Article = new Article ();
2008-05-30 11:40:08 +00:00
2008-06-20 20:17:23 +00:00
$result = $this -> testDb -> update ( $Article , array ( 'field1' ), array ( 'value1' ));
$this -> assertFalse ( $result );
$result = $this -> testDb -> getLastQuery ();
$this -> assertPattern ( '/^\s*UPDATE\s+' . $this -> testDb -> fullTableName ( 'articles' ) . '\s+SET\s+`field1`\s*=\s*\'value1\'\s+WHERE\s+1 = 1\s*$/' , $result );
2008-05-30 11:40:08 +00:00
2008-06-20 20:17:23 +00:00
$result = $this -> testDb -> update ( $Article , array ( 'field1' ), array ( '2' ), '2=2' );
$this -> assertFalse ( $result );
$result = $this -> testDb -> getLastQuery ();
$this -> assertPattern ( '/^\s*UPDATE\s+' . $this -> testDb -> fullTableName ( 'articles' ) . ' AS `Article`\s+LEFT JOIN\s+' . $this -> testDb -> fullTableName ( 'users' ) . ' AS `User` ON \(`Article`.`user_id` = `User`.`id`\)\s+SET\s+`Article`\.`field1`\s*=\s*2\s+WHERE\s+2\s*=\s*2\s*$/' , $result );
2008-05-30 11:40:08 +00:00
2008-06-20 20:17:23 +00:00
$result = $this -> testDb -> delete ( $Article );
$this -> assertTrue ( $result );
$result = $this -> testDb -> getLastQuery ();
$this -> assertPattern ( '/^\s*DELETE\s+FROM\s+' . $this -> testDb -> fullTableName ( 'articles' ) . '\s+WHERE\s+1 = 1\s*$/' , $result );
2008-05-30 11:40:08 +00:00
2008-06-20 20:17:23 +00:00
$result = $this -> testDb -> delete ( $Article , true );
$this -> assertTrue ( $result );
$result = $this -> testDb -> getLastQuery ();
$this -> assertPattern ( '/^\s*DELETE\s+`Article`\s+FROM\s+' . $this -> testDb -> fullTableName ( 'articles' ) . '\s+AS `Article`\s+LEFT JOIN\s+' . $this -> testDb -> fullTableName ( 'users' ) . ' AS `User` ON \(`Article`.`user_id` = `User`.`id`\)\s+WHERE\s+1\s*=\s*1\s*$/' , $result );
2008-05-30 11:40:08 +00:00
2008-06-20 20:17:23 +00:00
$result = $this -> testDb -> delete ( $Article , '2=2' );
$this -> assertTrue ( $result );
$result = $this -> testDb -> getLastQuery ();
$this -> assertPattern ( '/^\s*DELETE\s+`Article`\s+FROM\s+' . $this -> testDb -> fullTableName ( 'articles' ) . '\s+AS `Article`\s+LEFT JOIN\s+' . $this -> testDb -> fullTableName ( 'users' ) . ' AS `User` ON \(`Article`.`user_id` = `User`.`id`\)\s+WHERE\s+2\s*=\s*2\s*$/' , $result );
2008-05-30 11:40:08 +00:00
2008-06-20 20:17:23 +00:00
$result = $this -> testDb -> hasAny ( $Article , '1=2' );
$this -> assertFalse ( $result );
2008-05-30 11:40:08 +00:00
2008-06-20 20:17:23 +00:00
$result = $this -> testDb -> insertMulti ( 'articles' , array ( 'field' ), array ( '(1)' , '(2)' ));
2010-06-09 20:47:25 -04:30
$this -> assertNull ( $result );
2008-06-20 20:17:23 +00:00
$result = $this -> testDb -> getLastQuery ();
$this -> assertPattern ( '/^\s*INSERT INTO\s+' . $this -> testDb -> fullTableName ( 'articles' ) . '\s+\(`field`\)\s+VALUES\s+\(1\),\s*\(2\)\s*$/' , $result );
}
2009-07-24 21:18:37 +02:00
2008-06-05 15:20:45 +00:00
/**
* testSchema method
2008-06-14 19:45:26 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-06-20 20:17:23 +00:00
function testSchema () {
2010-06-09 20:47:25 -04:30
$Schema = new CakeSchema ();
2008-06-20 20:17:23 +00:00
$Schema -> tables = array ( 'table' => array (), 'anotherTable' => array ());
2008-05-30 11:40:08 +00:00
2008-06-20 20:17:23 +00:00
$this -> expectError ();
$result = $this -> testDb -> dropSchema ( null );
$this -> assertTrue ( $result === null );
2008-05-30 11:40:08 +00:00
2008-06-20 20:17:23 +00:00
$result = $this -> testDb -> dropSchema ( $Schema , 'non_existing' );
$this -> assertTrue ( empty ( $result ));
2008-05-30 11:40:08 +00:00
2008-06-20 20:17:23 +00:00
$result = $this -> testDb -> dropSchema ( $Schema , 'table' );
$this -> assertPattern ( '/^\s*DROP TABLE IF EXISTS\s+' . $this -> testDb -> fullTableName ( 'table' ) . ';\s*$/s' , $result );
}
2009-07-24 21:18:37 +02:00
2008-06-05 15:20:45 +00:00
/**
* testMagicMethodQuerying method
2008-06-14 19:45:26 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testMagicMethodQuerying () {
$result = $this -> testDb -> query ( 'findByFieldName' , array ( 'value' ), $this -> Model );
2008-08-07 16:38:15 +00:00
$expected = array ( 'first' , array (
'conditions' => array ( 'TestModel.field_name' => 'value' ),
'fields' => null , 'order' => null , 'recursive' => null
));
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $result , $expected );
2009-03-18 17:55:58 +00:00
2009-02-25 03:22:31 +00:00
$result = $this -> testDb -> query ( 'findByFindBy' , array ( 'value' ), $this -> Model );
$expected = array ( 'first' , array (
'conditions' => array ( 'TestModel.find_by' => 'value' ),
'fields' => null , 'order' => null , 'recursive' => null
));
$this -> assertEqual ( $result , $expected );
2008-05-30 11:40:08 +00:00
$result = $this -> testDb -> query ( 'findAllByFieldName' , array ( 'value' ), $this -> Model );
2008-08-07 16:38:15 +00:00
$expected = array ( 'all' , array (
'conditions' => array ( 'TestModel.field_name' => 'value' ),
'fields' => null , 'order' => null , 'limit' => null ,
'page' => null , 'recursive' => null
));
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $result , $expected );
$result = $this -> testDb -> query ( 'findAllById' , array ( 'a' ), $this -> Model );
2008-08-07 16:38:15 +00:00
$expected = array ( 'all' , array (
'conditions' => array ( 'TestModel.id' => 'a' ),
'fields' => null , 'order' => null , 'limit' => null ,
'page' => null , 'recursive' => null
));
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $result , $expected );
$result = $this -> testDb -> query ( 'findByFieldName' , array ( array ( 'value1' , 'value2' , 'value3' )), $this -> Model );
2008-08-07 16:38:15 +00:00
$expected = array ( 'first' , array (
'conditions' => array ( 'TestModel.field_name' => array ( 'value1' , 'value2' , 'value3' )),
'fields' => null , 'order' => null , 'recursive' => null
));
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $result , $expected );
$result = $this -> testDb -> query ( 'findByFieldName' , array ( null ), $this -> Model );
2008-08-07 16:38:15 +00:00
$expected = array ( 'first' , array (
'conditions' => array ( 'TestModel.field_name' => null ),
'fields' => null , 'order' => null , 'recursive' => null
));
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $result , $expected );
$result = $this -> testDb -> query ( 'findByFieldName' , array ( '= a' ), $this -> Model );
2008-08-07 16:38:15 +00:00
$expected = array ( 'first' , array (
'conditions' => array ( 'TestModel.field_name' => '= a' ),
'fields' => null , 'order' => null , 'recursive' => null
));
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $result , $expected );
$result = $this -> testDb -> query ( 'findByFieldName' , array (), $this -> Model );
$expected = false ;
$this -> assertEqual ( $result , $expected );
$result = $this -> testDb -> query ( 'directCall' , array (), $this -> Model );
$this -> assertFalse ( $result );
$result = $this -> testDb -> query ( 'directCall' , true , $this -> Model );
$this -> assertFalse ( $result );
$result = $this -> testDb -> query ( 'directCall' , false , $this -> Model );
$this -> assertFalse ( $result );
}
2009-07-24 21:18:37 +02:00
2008-06-05 15:20:45 +00:00
/**
* testOrderParsing method
2008-06-14 19:45:26 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testOrderParsing () {
$result = $this -> testDb -> order ( " ADDTIME(Event.time_begin, '-06:00:00') ASC " );
$expected = " ORDER BY ADDTIME(`Event`.`time_begin`, '-06:00:00') ASC " ;
$this -> assertEqual ( $result , $expected );
$result = $this -> testDb -> order ( " title, id " );
$this -> assertPattern ( '/^\s*ORDER BY\s+`title`\s+ASC,\s+`id`\s+ASC\s*$/' , $result );
$result = $this -> testDb -> order ( " title desc, id desc " );
$this -> assertPattern ( '/^\s*ORDER BY\s+`title`\s+desc,\s+`id`\s+desc\s*$/' , $result );
$result = $this -> testDb -> order ( array ( " title desc, id desc " ));
$this -> assertPattern ( '/^\s*ORDER BY\s+`title`\s+desc,\s+`id`\s+desc\s*$/' , $result );
$result = $this -> testDb -> order ( array ( " title " , " id " ));
$this -> assertPattern ( '/^\s*ORDER BY\s+`title`\s+ASC,\s+`id`\s+ASC\s*$/' , $result );
$result = $this -> testDb -> order ( array ( array ( 'title' ), array ( 'id' )));
$this -> assertPattern ( '/^\s*ORDER BY\s+`title`\s+ASC,\s+`id`\s+ASC\s*$/' , $result );
$result = $this -> testDb -> order ( array ( " Post.title " => 'asc' , " Post.id " => 'desc' ));
$this -> assertPattern ( '/^\s*ORDER BY\s+`Post`.`title`\s+asc,\s+`Post`.`id`\s+desc\s*$/' , $result );
$result = $this -> testDb -> order ( array ( array ( " Post.title " => 'asc' , " Post.id " => 'desc' )));
$this -> assertPattern ( '/^\s*ORDER BY\s+`Post`.`title`\s+asc,\s+`Post`.`id`\s+desc\s*$/' , $result );
$result = $this -> testDb -> order ( array ( " title " ));
$this -> assertPattern ( '/^\s*ORDER BY\s+`title`\s+ASC\s*$/' , $result );
$result = $this -> testDb -> order ( array ( array ( " title " )));
$this -> assertPattern ( '/^\s*ORDER BY\s+`title`\s+ASC\s*$/' , $result );
$result = $this -> testDb -> order ( " Dealer.id = 7 desc, Dealer.id = 3 desc, Dealer.title asc " );
2009-12-06 01:28:21 -04:30
$expected = " ORDER BY `Dealer`.`id` = 7 desc, `Dealer`.`id` = 3 desc, `Dealer`.`title` asc " ;
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $result , $expected );
2008-12-18 20:49:25 +00:00
$result = $this -> testDb -> order ( array ( " Page.name " => " ='test' DESC " ));
2008-05-30 11:40:08 +00:00
$this -> assertPattern ( " /^ \ s*ORDER BY \ s+`Page` \ .`name` \ s*='test' \ s+DESC \ s* $ / " , $result );
$result = $this -> testDb -> order ( " Page.name = 'view' DESC " );
$this -> assertPattern ( " /^ \ s*ORDER BY \ s+`Page` \ .`name` \ s*= \ s*'view' \ s+DESC \ s* $ / " , $result );
$result = $this -> testDb -> order ( " (Post.views) " );
$this -> assertPattern ( " /^ \ s*ORDER BY \ s+ \ (`Post` \ .`views` \ ) \ s+ASC \ s* $ / " , $result );
$result = $this -> testDb -> order ( " (Post.views)*Post.views " );
$this -> assertPattern ( " /^ \ s*ORDER BY \ s+ \ (`Post` \ .`views` \ ) \ *`Post` \ .`views` \ s+ASC \ s* $ / " , $result );
$result = $this -> testDb -> order ( " (Post.views) * Post.views " );
$this -> assertPattern ( " /^ \ s*ORDER BY \ s+ \ (`Post` \ .`views` \ ) \ * `Post` \ .`views` \ s+ASC \ s* $ / " , $result );
$result = $this -> testDb -> order ( " (Model.field1 + Model.field2) * Model.field3 " );
$this -> assertPattern ( " /^ \ s*ORDER BY \ s+ \ (`Model` \ .`field1` \ + `Model` \ .`field2` \ ) \ * `Model` \ .`field3` \ s+ASC \ s* $ / " , $result );
$result = $this -> testDb -> order ( " Model.name+0 ASC " );
$this -> assertPattern ( " /^ \ s*ORDER BY \ s+`Model` \ .`name` \ +0 \ s+ASC \ s* $ / " , $result );
2008-06-04 19:27:55 +00:00
$result = $this -> testDb -> order ( " Anuncio.destaque & 2 DESC " );
$expected = ' ORDER BY `Anuncio`.`destaque` & 2 DESC' ;
$this -> assertEqual ( $result , $expected );
2008-08-29 20:40:15 +00:00
$result = $this -> testDb -> order ( " 3963.191 * id " );
$expected = ' ORDER BY 3963.191 * id ASC' ;
$this -> assertEqual ( $result , $expected );
2008-12-18 20:49:25 +00:00
$result = $this -> testDb -> order ( array ( 'Property.sale_price IS NULL' ));
$expected = ' ORDER BY `Property`.`sale_price` IS NULL ASC' ;
$this -> assertEqual ( $result , $expected );
2008-05-30 11:40:08 +00:00
}
2009-07-24 21:18:37 +02:00
2008-08-18 18:34:01 +00:00
/**
* testComplexSortExpression method
*
* @ return void
*/
2010-04-05 13:19:38 +10:00
public function testComplexSortExpression () {
2008-08-18 18:34:01 +00:00
$result = $this -> testDb -> order ( array ( '(Model.field > 100) DESC' , 'Model.field ASC' ));
$this -> assertPattern ( " /^ \ s*ORDER BY \ s+ \ (`Model` \ .`field` \ s+> \ s+100 \ ) \ s+DESC, \ s+`Model` \ .`field` \ s+ASC \ s* $ / " , $result );
2008-08-22 04:06:29 +00:00
}
2009-07-24 21:18:37 +02:00
2008-06-05 15:20:45 +00:00
/**
* testCalculations method
2008-06-14 19:45:26 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testCalculations () {
$result = $this -> testDb -> calculate ( $this -> Model , 'count' );
$this -> assertEqual ( $result , 'COUNT(*) AS `count`' );
2008-10-16 00:38:38 +00:00
2008-05-30 11:40:08 +00:00
$result = $this -> testDb -> calculate ( $this -> Model , 'count' , array ( 'id' ));
$this -> assertEqual ( $result , 'COUNT(`id`) AS `count`' );
2008-10-01 15:27:29 +00:00
$result = $this -> testDb -> calculate (
$this -> Model ,
'count' ,
array ( $this -> testDb -> expression ( 'DISTINCT id' ))
);
$this -> assertEqual ( $result , 'COUNT(DISTINCT id) AS `count`' );
2008-05-30 11:40:08 +00:00
$result = $this -> testDb -> calculate ( $this -> Model , 'count' , array ( 'id' , 'id_count' ));
$this -> assertEqual ( $result , 'COUNT(`id`) AS `id_count`' );
$result = $this -> testDb -> calculate ( $this -> Model , 'count' , array ( 'Model.id' , 'id_count' ));
$this -> assertEqual ( $result , 'COUNT(`Model`.`id`) AS `id_count`' );
$result = $this -> testDb -> calculate ( $this -> Model , 'max' , array ( 'id' ));
$this -> assertEqual ( $result , 'MAX(`id`) AS `id`' );
$result = $this -> testDb -> calculate ( $this -> Model , 'max' , array ( 'Model.id' , 'id' ));
$this -> assertEqual ( $result , 'MAX(`Model`.`id`) AS `id`' );
$result = $this -> testDb -> calculate ( $this -> Model , 'max' , array ( '`Model`.`id`' , 'id' ));
$this -> assertEqual ( $result , 'MAX(`Model`.`id`) AS `id`' );
$result = $this -> testDb -> calculate ( $this -> Model , 'min' , array ( '`Model`.`id`' , 'id' ));
$this -> assertEqual ( $result , 'MIN(`Model`.`id`) AS `id`' );
$result = $this -> testDb -> calculate ( $this -> Model , 'min' , 'left' );
$this -> assertEqual ( $result , 'MIN(`left`) AS `left`' );
}
2009-07-24 21:18:37 +02:00
2008-06-05 15:20:45 +00:00
/**
* testLength method
2008-06-14 19:45:26 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testLength () {
$result = $this -> testDb -> length ( 'varchar(255)' );
$expected = 255 ;
$this -> assertIdentical ( $result , $expected );
$result = $this -> testDb -> length ( 'int(11)' );
$expected = 11 ;
$this -> assertIdentical ( $result , $expected );
$result = $this -> testDb -> length ( 'float(5,3)' );
$expected = '5,3' ;
$this -> assertIdentical ( $result , $expected );
$result = $this -> testDb -> length ( 'decimal(5,2)' );
$expected = '5,2' ;
$this -> assertIdentical ( $result , $expected );
$result = $this -> testDb -> length ( " enum('test','me','now') " );
$expected = 4 ;
$this -> assertIdentical ( $result , $expected );
$result = $this -> testDb -> length ( " set('a','b','cd') " );
$expected = 2 ;
$this -> assertIdentical ( $result , $expected );
$this -> expectError ();
$result = $this -> testDb -> length ( false );
$this -> assertTrue ( $result === null );
2008-06-05 14:48:54 +00:00
2008-05-30 11:40:08 +00:00
$result = $this -> testDb -> length ( 'datetime' );
$expected = null ;
$this -> assertIdentical ( $result , $expected );
2008-06-05 14:48:54 +00:00
2008-05-30 11:40:08 +00:00
$result = $this -> testDb -> length ( 'text' );
$expected = null ;
$this -> assertIdentical ( $result , $expected );
}
2009-07-24 21:18:37 +02:00
2008-06-05 15:20:45 +00:00
/**
* testBuildIndex method
2008-06-14 19:45:26 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testBuildIndex () {
$data = array (
'PRIMARY' => array ( 'column' => 'id' )
);
$result = $this -> testDb -> buildIndex ( $data );
$expected = array ( 'PRIMARY KEY (`id`)' );
$this -> assertIdentical ( $result , $expected );
$data = array (
'MyIndex' => array ( 'column' => 'id' , 'unique' => true )
);
$result = $this -> testDb -> buildIndex ( $data );
2009-08-02 23:21:24 +00:00
$expected = array ( 'UNIQUE KEY `MyIndex` (`id`)' );
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $result , $expected );
$data = array (
'MyIndex' => array ( 'column' => array ( 'id' , 'name' ), 'unique' => true )
);
$result = $this -> testDb -> buildIndex ( $data );
2009-08-02 23:21:24 +00:00
$expected = array ( 'UNIQUE KEY `MyIndex` (`id`, `name`)' );
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $result , $expected );
}
2009-07-24 21:18:37 +02:00
2008-06-05 15:20:45 +00:00
/**
* testBuildColumn method
2008-06-14 19:45:26 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testBuildColumn () {
$this -> expectError ();
$data = array (
'name' => 'testName' ,
'type' => 'varchar(255)' ,
'default' ,
'null' => true ,
'key'
);
$this -> testDb -> buildColumn ( $data );
$data = array (
'name' => 'testName' ,
2009-10-29 09:26:23 -04:00
'type' => 'string' ,
'length' => 255 ,
2008-05-30 11:40:08 +00:00
'default' ,
'null' => true ,
'key'
);
$result = $this -> testDb -> buildColumn ( $data );
2009-10-29 09:26:23 -04:00
$expected = '`testName` varchar(255) DEFAULT NULL' ;
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $result , $expected );
2008-08-18 18:34:01 +00:00
2008-08-14 00:33:44 +00:00
$data = array (
'name' => 'int_field' ,
'type' => 'integer' ,
'default' => '' ,
'null' => false ,
);
2010-01-19 23:55:50 -05:00
$restore = $this -> testDb -> columns ;
2008-08-14 00:33:44 +00:00
$this -> testDb -> columns = array ( 'integer' => array ( 'name' => 'int' , 'limit' => '11' , 'formatter' => 'intval' ), );
$result = $this -> testDb -> buildColumn ( $data );
$expected = '`int_field` int(11) NOT NULL' ;
2009-10-29 02:03:21 -04:00
$this -> assertEqual ( $result , $expected );
$this -> testDb -> fieldParameters [ 'param' ] = array (
'value' => 'COLLATE' ,
'quote' => false ,
2009-12-17 14:42:46 -04:30
'join' => ' ' ,
'column' => 'Collate' ,
2009-10-29 02:03:21 -04:00
'position' => 'beforeDefault' ,
'options' => array ( 'GOOD' , 'OK' )
);
$data = array (
'name' => 'int_field' ,
'type' => 'integer' ,
'default' => '' ,
'null' => false ,
'param' => 'BAD'
);
$result = $this -> testDb -> buildColumn ( $data );
$expected = '`int_field` int(11) NOT NULL' ;
$this -> assertEqual ( $result , $expected );
$data = array (
'name' => 'int_field' ,
'type' => 'integer' ,
'default' => '' ,
'null' => false ,
'param' => 'GOOD'
);
$result = $this -> testDb -> buildColumn ( $data );
$expected = '`int_field` int(11) COLLATE GOOD NOT NULL' ;
$this -> assertEqual ( $result , $expected );
2010-01-19 23:55:50 -05:00
$this -> testDb -> columns = $restore ;
$data = array (
'name' => 'created' ,
'type' => 'timestamp' ,
'default' => 'current_timestamp' ,
'null' => false ,
);
$result = $this -> db -> buildColumn ( $data );
$expected = '`created` timestamp DEFAULT CURRENT_TIMESTAMP NOT NULL' ;
$this -> assertEqual ( $result , $expected );
$data = array (
'name' => 'created' ,
'type' => 'timestamp' ,
'default' => 'CURRENT_TIMESTAMP' ,
'null' => true ,
);
$result = $this -> db -> buildColumn ( $data );
$expected = '`created` timestamp DEFAULT CURRENT_TIMESTAMP' ;
$this -> assertEqual ( $result , $expected );
$data = array (
'name' => 'modified' ,
'type' => 'timestamp' ,
'null' => true ,
);
$result = $this -> db -> buildColumn ( $data );
$expected = '`modified` timestamp NULL' ;
$this -> assertEqual ( $result , $expected );
$data = array (
'name' => 'modified' ,
'type' => 'timestamp' ,
'default' => null ,
'null' => true ,
);
$result = $this -> db -> buildColumn ( $data );
$expected = '`modified` timestamp NULL' ;
$this -> assertEqual ( $result , $expected );
2008-05-30 11:40:08 +00:00
}
2009-07-24 21:18:37 +02:00
2009-02-15 21:05:42 +00:00
/**
* test hasAny ()
*
* @ return void
2009-11-14 23:19:25 +11:00
*/
2009-02-15 21:05:42 +00:00
function testHasAny () {
$this -> testDb -> hasAny ( $this -> Model , array ());
$expected = 'SELECT COUNT(`TestModel`.`id`) AS count FROM `test_models` AS `TestModel` WHERE 1 = 1' ;
2009-10-29 09:26:23 -04:00
$this -> assertEqual ( end ( $this -> testDb -> simulated ), $expected );
2009-02-15 21:05:42 +00:00
$this -> testDb -> hasAny ( $this -> Model , array ( 'TestModel.name' => 'harry' ));
$expected = " SELECT COUNT(`TestModel`.`id`) AS count FROM `test_models` AS `TestModel` WHERE `TestModel`.`name` = 'harry' " ;
2009-10-29 09:26:23 -04:00
$this -> assertEqual ( end ( $this -> testDb -> simulated ), $expected );
2009-02-15 21:05:42 +00:00
}
2009-07-24 21:18:37 +02:00
2008-06-05 15:20:45 +00:00
/**
* testIntrospectType method
2008-06-14 19:45:26 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testIntrospectType () {
$this -> assertEqual ( $this -> testDb -> introspectType ( 0 ), 'integer' );
$this -> assertEqual ( $this -> testDb -> introspectType ( 2 ), 'integer' );
$this -> assertEqual ( $this -> testDb -> introspectType ( '2' ), 'string' );
$this -> assertEqual ( $this -> testDb -> introspectType ( '2.2' ), 'string' );
$this -> assertEqual ( $this -> testDb -> introspectType ( 2.2 ), 'float' );
$this -> assertEqual ( $this -> testDb -> introspectType ( 'stringme' ), 'string' );
$this -> assertEqual ( $this -> testDb -> introspectType ( '0stringme' ), 'string' );
$data = array ( 2.2 );
$this -> assertEqual ( $this -> testDb -> introspectType ( $data ), 'float' );
$data = array ( '2.2' );
$this -> assertEqual ( $this -> testDb -> introspectType ( $data ), 'float' );
$data = array ( 2 );
$this -> assertEqual ( $this -> testDb -> introspectType ( $data ), 'integer' );
$data = array ( '2' );
$this -> assertEqual ( $this -> testDb -> introspectType ( $data ), 'integer' );
$data = array ( 'string' );
$this -> assertEqual ( $this -> testDb -> introspectType ( $data ), 'string' );
$data = array ( 2.2 , '2.2' );
$this -> assertEqual ( $this -> testDb -> introspectType ( $data ), 'float' );
$data = array ( 2 , '2' );
$this -> assertEqual ( $this -> testDb -> introspectType ( $data ), 'integer' );
$data = array ( 'string one' , 'string two' );
$this -> assertEqual ( $this -> testDb -> introspectType ( $data ), 'string' );
$data = array ( '2.2' , 3 );
$this -> assertEqual ( $this -> testDb -> introspectType ( $data ), 'integer' );
$data = array ( '2.2' , '0stringme' );
$this -> assertEqual ( $this -> testDb -> introspectType ( $data ), 'string' );
$data = array ( 2.2 , 3 );
$this -> assertEqual ( $this -> testDb -> introspectType ( $data ), 'integer' );
$data = array ( 2.2 , '0stringme' );
$this -> assertEqual ( $this -> testDb -> introspectType ( $data ), 'string' );
$data = array ( 2 , 'stringme' );
$this -> assertEqual ( $this -> testDb -> introspectType ( $data ), 'string' );
$data = array ( 2 , '2.2' , 'stringgme' );
$this -> assertEqual ( $this -> testDb -> introspectType ( $data ), 'string' );
$data = array ( 2 , '2.2' );
$this -> assertEqual ( $this -> testDb -> introspectType ( $data ), 'integer' );
$data = array ( 2 , 2.2 );
$this -> assertEqual ( $this -> testDb -> introspectType ( $data ), 'integer' );
2008-06-05 14:48:54 +00:00
2008-06-03 04:43:44 +00:00
// NULL
$result = $this -> testDb -> value ( null , 'boolean' );
$this -> assertEqual ( $result , 'NULL' );
2008-06-05 14:48:54 +00:00
2008-06-03 04:43:44 +00:00
// EMPTY STRING
$result = $this -> testDb -> value ( '' , 'boolean' );
2010-06-09 20:47:25 -04:30
$this -> assertEqual ( $result , 0 );
2008-07-27 02:49:02 +00:00
2008-06-05 14:48:54 +00:00
2008-06-03 04:43:44 +00:00
// BOOLEAN
$result = $this -> testDb -> value ( 'true' , 'boolean' );
$this -> assertEqual ( $result , 1 );
2008-06-05 14:48:54 +00:00
2008-06-03 04:43:44 +00:00
$result = $this -> testDb -> value ( 'false' , 'boolean' );
$this -> assertEqual ( $result , 1 );
2008-06-05 14:48:54 +00:00
2008-06-03 04:43:44 +00:00
$result = $this -> testDb -> value ( true , 'boolean' );
$this -> assertEqual ( $result , 1 );
2008-06-05 14:48:54 +00:00
2008-06-03 04:43:44 +00:00
$result = $this -> testDb -> value ( false , 'boolean' );
$this -> assertEqual ( $result , 0 );
2008-06-05 14:48:54 +00:00
2008-06-03 04:43:44 +00:00
$result = $this -> testDb -> value ( 1 , 'boolean' );
$this -> assertEqual ( $result , 1 );
2008-06-05 14:48:54 +00:00
2008-06-03 04:43:44 +00:00
$result = $this -> testDb -> value ( 0 , 'boolean' );
$this -> assertEqual ( $result , 0 );
2008-06-05 14:48:54 +00:00
2008-06-03 04:43:44 +00:00
$result = $this -> testDb -> value ( 'abc' , 'boolean' );
$this -> assertEqual ( $result , 1 );
2008-06-05 14:48:54 +00:00
2008-06-03 04:43:44 +00:00
$result = $this -> testDb -> value ( 1.234 , 'boolean' );
$this -> assertEqual ( $result , 1 );
2008-06-05 14:48:54 +00:00
2008-06-03 04:43:44 +00:00
$result = $this -> testDb -> value ( '1.234e05' , 'boolean' );
$this -> assertEqual ( $result , 1 );
2008-06-05 14:48:54 +00:00
2008-06-03 04:43:44 +00:00
// NUMBERS
$result = $this -> testDb -> value ( 123 , 'integer' );
$this -> assertEqual ( $result , 123 );
2008-06-05 14:48:54 +00:00
2008-06-03 04:43:44 +00:00
$result = $this -> testDb -> value ( '123' , 'integer' );
$this -> assertEqual ( $result , '123' );
2008-06-05 14:48:54 +00:00
2008-06-03 04:43:44 +00:00
$result = $this -> testDb -> value ( '0123' , 'integer' );
$this -> assertEqual ( $result , " '0123' " );
2008-06-05 14:48:54 +00:00
2008-06-03 04:43:44 +00:00
$result = $this -> testDb -> value ( '0x123ABC' , 'integer' );
$this -> assertEqual ( $result , " '0x123ABC' " );
2008-06-05 14:48:54 +00:00
2008-06-03 04:43:44 +00:00
$result = $this -> testDb -> value ( '0x123' , 'integer' );
$this -> assertEqual ( $result , " '0x123' " );
2008-06-05 14:48:54 +00:00
2008-06-03 04:43:44 +00:00
$result = $this -> testDb -> value ( 1.234 , 'float' );
$this -> assertEqual ( $result , 1.234 );
2008-06-05 14:48:54 +00:00
2008-06-03 04:43:44 +00:00
$result = $this -> testDb -> value ( '1.234' , 'float' );
$this -> assertEqual ( $result , '1.234' );
2008-06-05 14:48:54 +00:00
2008-06-03 04:43:44 +00:00
$result = $this -> testDb -> value ( ' 1.234 ' , 'float' );
$this -> assertEqual ( $result , " ' 1.234 ' " );
2008-06-05 14:48:54 +00:00
2008-06-03 04:43:44 +00:00
$result = $this -> testDb -> value ( '1.234e05' , 'float' );
$this -> assertEqual ( $result , " '1.234e05' " );
2008-06-05 14:48:54 +00:00
2008-06-03 04:43:44 +00:00
$result = $this -> testDb -> value ( '1.234e+5' , 'float' );
$this -> assertEqual ( $result , " '1.234e+5' " );
2008-06-05 14:48:54 +00:00
2008-06-03 04:43:44 +00:00
$result = $this -> testDb -> value ( '1,234' , 'float' );
$this -> assertEqual ( $result , " '1,234' " );
2008-06-05 14:48:54 +00:00
2008-06-03 04:43:44 +00:00
$result = $this -> testDb -> value ( 'FFF' , 'integer' );
$this -> assertEqual ( $result , " 'FFF' " );
2008-06-05 14:48:54 +00:00
2008-06-03 04:43:44 +00:00
$result = $this -> testDb -> value ( 'abc' , 'integer' );
$this -> assertEqual ( $result , " 'abc' " );
2008-06-05 14:48:54 +00:00
2008-06-03 04:43:44 +00:00
// STRINGS
$result = $this -> testDb -> value ( '123' , 'string' );
$this -> assertEqual ( $result , " '123' " );
2008-06-05 14:48:54 +00:00
2008-06-03 04:43:44 +00:00
$result = $this -> testDb -> value ( 123 , 'string' );
$this -> assertEqual ( $result , " '123' " );
2008-06-05 14:48:54 +00:00
2008-06-03 04:43:44 +00:00
$result = $this -> testDb -> value ( 1.234 , 'string' );
$this -> assertEqual ( $result , " '1.234' " );
2008-06-05 14:48:54 +00:00
2008-06-03 04:43:44 +00:00
$result = $this -> testDb -> value ( 'abc' , 'string' );
$this -> assertEqual ( $result , " 'abc' " );
2008-06-05 14:48:54 +00:00
2008-06-03 04:43:44 +00:00
$result = $this -> testDb -> value ( ' abc ' , 'string' );
$this -> assertEqual ( $result , " ' abc ' " );
2008-06-05 14:48:54 +00:00
2008-06-03 04:43:44 +00:00
$result = $this -> testDb -> value ( 'a bc' , 'string' );
$this -> assertEqual ( $result , " 'a bc' " );
2008-05-30 11:40:08 +00:00
}
2009-07-24 21:18:37 +02:00
2008-06-05 15:20:45 +00:00
/**
* testValue method
2008-06-14 19:45:26 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testValue () {
$result = $this -> testDb -> value ( '{$__cakeForeignKey__$}' );
$this -> assertEqual ( $result , '{$__cakeForeignKey__$}' );
$result = $this -> testDb -> value ( array ( 'first' , 2 , 'third' ));
$expected = array ( '\'first\'' , 2 , '\'third\'' );
2008-08-02 14:26:50 +00:00
$this -> assertEqual ( $result , $expected );
2008-05-30 11:40:08 +00:00
}
2009-07-24 21:18:37 +02:00
2008-06-05 15:20:45 +00:00
/**
* testReconnect method
2008-06-14 19:45:26 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testReconnect () {
2008-08-07 16:38:15 +00:00
$this -> testDb -> reconnect ( array ( 'prefix' => 'foo' ));
2008-05-30 11:40:08 +00:00
$this -> assertTrue ( $this -> testDb -> connected );
2008-08-07 16:38:15 +00:00
$this -> assertEqual ( $this -> testDb -> config [ 'prefix' ], 'foo' );
2008-05-30 11:40:08 +00:00
}
2009-07-24 21:18:37 +02:00
2008-06-05 15:20:45 +00:00
/**
* testRealQueries method
2008-06-14 19:45:26 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testRealQueries () {
2010-06-09 20:47:25 -04:30
$this -> loadFixtures ( 'Apple' , 'Article' , 'User' , 'Comment' , 'Tag' , 'Sample' );
2008-05-30 11:40:08 +00:00
2010-06-09 20:47:25 -04:30
$Apple = ClassRegistry :: init ( 'Apple' );
$Article = ClassRegistry :: init ( 'Article' );
2008-05-30 11:40:08 +00:00
2008-08-07 18:53:05 +00:00
$result = $this -> db -> rawQuery ( 'SELECT color, name FROM ' . $this -> db -> fullTableName ( 'apples' ));
2008-05-30 11:40:08 +00:00
$this -> assertTrue ( ! empty ( $result ));
2008-08-07 18:53:05 +00:00
$result = $this -> db -> fetchRow ( $result );
$expected = array ( $this -> db -> fullTableName ( 'apples' , false ) => array (
2008-05-30 11:40:08 +00:00
'color' => 'Red 1' ,
'name' => 'Red Apple 1'
));
$this -> assertEqual ( $result , $expected );
2008-08-07 18:53:05 +00:00
$result = $this -> db -> fetchAll ( 'SELECT name FROM ' . $this -> testDb -> fullTableName ( 'apples' ) . ' ORDER BY id' );
2008-05-30 11:40:08 +00:00
$expected = array (
2008-08-07 18:53:05 +00:00
array ( $this -> db -> fullTableName ( 'apples' , false ) => array ( 'name' => 'Red Apple 1' )),
array ( $this -> db -> fullTableName ( 'apples' , false ) => array ( 'name' => 'Bright Red Apple' )),
array ( $this -> db -> fullTableName ( 'apples' , false ) => array ( 'name' => 'green blue' )),
array ( $this -> db -> fullTableName ( 'apples' , false ) => array ( 'name' => 'Test Name' )),
array ( $this -> db -> fullTableName ( 'apples' , false ) => array ( 'name' => 'Blue Green' )),
array ( $this -> db -> fullTableName ( 'apples' , false ) => array ( 'name' => 'My new apple' )),
array ( $this -> db -> fullTableName ( 'apples' , false ) => array ( 'name' => 'Some odd color' ))
2008-05-30 11:40:08 +00:00
);
$this -> assertEqual ( $result , $expected );
2008-08-07 18:53:05 +00:00
$result = $this -> db -> field ( $this -> testDb -> fullTableName ( 'apples' , false ), 'SELECT color, name FROM ' . $this -> testDb -> fullTableName ( 'apples' ) . ' ORDER BY id' );
2008-05-30 11:40:08 +00:00
$expected = array (
'color' => 'Red 1' ,
'name' => 'Red Apple 1'
);
$this -> assertEqual ( $result , $expected );
$Apple -> unbindModel ( array (), false );
2008-08-07 18:53:05 +00:00
$result = $this -> db -> read ( $Apple , array (
2008-05-30 11:40:08 +00:00
'fields' => array ( $Apple -> escapeField ( 'name' )),
'conditions' => null ,
'recursive' => - 1
));
$expected = array (
array ( 'Apple' => array ( 'name' => 'Red Apple 1' )),
array ( 'Apple' => array ( 'name' => 'Bright Red Apple' )),
array ( 'Apple' => array ( 'name' => 'green blue' )),
array ( 'Apple' => array ( 'name' => 'Test Name' )),
array ( 'Apple' => array ( 'name' => 'Blue Green' )),
array ( 'Apple' => array ( 'name' => 'My new apple' )),
array ( 'Apple' => array ( 'name' => 'Some odd color' ))
);
$this -> assertEqual ( $result , $expected );
2008-08-07 18:53:05 +00:00
$result = $this -> db -> read ( $Article , array (
2008-05-30 11:40:08 +00:00
'fields' => array ( 'id' , 'user_id' , 'title' ),
'conditions' => null ,
'recursive' => 1
));
2008-08-07 18:53:05 +00:00
2008-05-30 11:40:08 +00:00
$this -> assertTrue ( Set :: matches ( '/Article[id=1]' , $result ));
$this -> assertTrue ( Set :: matches ( '/Comment[id=1]' , $result ));
$this -> assertTrue ( Set :: matches ( '/Comment[id=2]' , $result ));
$this -> assertFalse ( Set :: matches ( '/Comment[id=10]' , $result ));
}
2009-07-24 21:18:37 +02:00
2008-06-05 15:20:45 +00:00
/**
* testName method
2008-06-14 19:45:26 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testName () {
$result = $this -> testDb -> name ( 'name' );
$expected = '`name`' ;
$this -> assertEqual ( $result , $expected );
$result = $this -> testDb -> name ( array ( 'name' , 'Model.*' ));
$expected = array ( '`name`' , '`Model`.*' );
$this -> assertEqual ( $result , $expected );
$result = $this -> testDb -> name ( 'MTD()' );
2008-08-22 04:06:29 +00:00
$expected = 'MTD()' ;
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $result , $expected );
$result = $this -> testDb -> name ( '(sm)' );
2008-08-22 04:06:29 +00:00
$expected = '(sm)' ;
$this -> assertEqual ( $result , $expected );
2010-01-17 02:14:19 -02:00
$result = $this -> testDb -> name ( 'name AS x' );
$expected = '`name` AS `x`' ;
$this -> assertEqual ( $result , $expected );
$result = $this -> testDb -> name ( 'Model.name AS x' );
$expected = '`Model`.`name` AS `x`' ;
$this -> assertEqual ( $result , $expected );
2008-08-22 04:06:29 +00:00
$result = $this -> testDb -> name ( 'Function(Something.foo)' );
$expected = 'Function(`Something`.`foo`)' ;
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $result , $expected );
2010-01-17 02:14:19 -02:00
$result = $this -> testDb -> name ( 'Function(SubFunction(Something.foo))' );
$expected = 'Function(SubFunction(`Something`.`foo`))' ;
$this -> assertEqual ( $result , $expected );
$result = $this -> testDb -> name ( 'Function(Something.foo) AS x' );
$expected = 'Function(`Something`.`foo`) AS `x`' ;
$this -> assertEqual ( $result , $expected );
2010-02-19 13:41:52 -02:00
$result = $this -> testDb -> name ( 'name-with-minus' );
$expected = '`name-with-minus`' ;
$this -> assertEqual ( $result , $expected );
2010-02-20 11:42:17 -05:00
$result = $this -> testDb -> name ( array ( 'my-name' , 'Foo-Model.*' ));
$expected = array ( '`my-name`' , '`Foo-Model`.*' );
$this -> assertEqual ( $result , $expected );
2008-05-30 11:40:08 +00:00
}
2009-07-24 21:18:37 +02:00
2010-03-13 22:55:18 -05:00
/**
* test that cacheMethod works as exepected
*
* @ return void
*/
function testCacheMethod () {
$this -> testDb -> cacheMethods = true ;
$result = $this -> testDb -> cacheMethod ( 'name' , 'some-key' , 'stuff' );
$this -> assertEqual ( $result , 'stuff' );
$result = $this -> testDb -> cacheMethod ( 'name' , 'some-key' );
$this -> assertEqual ( $result , 'stuff' );
$result = $this -> testDb -> cacheMethod ( 'conditions' , 'some-key' );
$this -> assertNull ( $result );
$result = $this -> testDb -> cacheMethod ( 'name' , 'other-key' );
$this -> assertNull ( $result );
$this -> testDb -> cacheMethods = false ;
$result = $this -> testDb -> cacheMethod ( 'name' , 'some-key' , 'stuff' );
$this -> assertEqual ( $result , 'stuff' );
$result = $this -> testDb -> cacheMethod ( 'name' , 'some-key' );
$this -> assertNull ( $result );
}
2008-06-05 15:20:45 +00:00
/**
* testLog method
2008-06-14 19:45:26 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testLog () {
$this -> testDb -> logQuery ( 'Query 1' );
$this -> testDb -> logQuery ( 'Query 2' );
2009-12-19 19:54:49 -05:00
$log = $this -> testDb -> getLog ( false , false );
$result = Set :: extract ( $log [ 'log' ], '/query' );
2008-05-30 11:40:08 +00:00
$expected = array ( 'Query 1' , 'Query 2' );
$this -> assertEqual ( $result , $expected );
$oldError = $this -> testDb -> error ;
$this -> testDb -> error = true ;
$result = $this -> testDb -> logQuery ( 'Error 1' );
$this -> assertFalse ( $result );
$this -> testDb -> error = $oldError ;
2009-12-19 19:54:49 -05:00
$log = $this -> testDb -> getLog ( false , false );
$result = Set :: combine ( $log [ 'log' ], '/query' , '/error' );
2008-05-30 11:40:08 +00:00
$expected = array ( 'Query 1' => false , 'Query 2' => false , 'Error 1' => true );
$this -> assertEqual ( $result , $expected );
2009-12-19 19:54:49 -05:00
Configure :: write ( 'debug' , 2 );
2008-05-30 11:40:08 +00:00
ob_start ();
$this -> testDb -> showLog ();
2008-06-14 19:45:26 +00:00
$contents = ob_get_clean ();
2008-05-30 11:40:08 +00:00
$this -> assertPattern ( '/Query 1/s' , $contents );
$this -> assertPattern ( '/Query 2/s' , $contents );
$this -> assertPattern ( '/Error 1/s' , $contents );
ob_start ();
$this -> testDb -> showLog ( true );
2008-06-14 19:45:26 +00:00
$contents = ob_get_clean ();
2008-05-30 11:40:08 +00:00
$this -> assertPattern ( '/Query 1/s' , $contents );
$this -> assertPattern ( '/Query 2/s' , $contents );
$this -> assertPattern ( '/Error 1/s' , $contents );
$oldError = $this -> testDb -> error ;
$oldDebug = Configure :: read ( 'debug' );
Configure :: write ( 'debug' , 2 );
$this -> testDb -> error = $oldError ;
Configure :: write ( 'debug' , $oldDebug );
}
2009-07-24 21:18:37 +02:00
2010-09-25 01:13:01 -04:00
function testShowQueryError () {
$this -> testDb -> error = true ;
try {
$this -> testDb -> showQuery ( 'Error 2' );
$this -> fail ( 'No exception' );
} catch ( Exception $e ) {
$this -> assertPattern ( '/SQL Error/' , $e -> getMessage ());
$this -> assertTrue ( true , 'Exception thrown' );
}
}
2009-09-01 23:23:47 -04:00
/**
* test getting the query log as an array .
*
* @ return void
2009-11-14 23:19:25 +11:00
*/
2009-09-01 23:23:47 -04:00
function testGetLog () {
$this -> testDb -> logQuery ( 'Query 1' );
$this -> testDb -> logQuery ( 'Query 2' );
$oldError = $this -> testDb -> error ;
$this -> testDb -> error = true ;
$result = $this -> testDb -> logQuery ( 'Error 1' );
$this -> assertFalse ( $result );
$this -> testDb -> error = $oldError ;
$log = $this -> testDb -> getLog ();
$expected = array ( 'query' => 'Query 1' , 'error' => '' , 'affected' => '' , 'numRows' => '' , 'took' => '' );
2009-12-03 23:29:28 -05:00
$this -> assertEqual ( $log [ 'log' ][ 0 ], $expected );
2009-09-01 23:23:47 -04:00
$expected = array ( 'query' => 'Query 2' , 'error' => '' , 'affected' => '' , 'numRows' => '' , 'took' => '' );
2009-12-03 23:29:28 -05:00
$this -> assertEqual ( $log [ 'log' ][ 1 ], $expected );
2009-09-01 23:23:47 -04:00
$expected = array ( 'query' => 'Error 1' , 'error' => true , 'affected' => '' , 'numRows' => '' , 'took' => '' );
2009-12-03 23:29:28 -05:00
$this -> assertEqual ( $log [ 'log' ][ 2 ], $expected );
2009-09-01 23:23:47 -04:00
}
2009-09-30 00:37:06 -04:00
/**
* test that execute runs queries .
*
* @ return void
2009-11-14 23:19:25 +11:00
*/
2009-09-30 00:37:06 -04:00
function testExecute () {
$query = 'SELECT * FROM ' . $this -> testDb -> fullTableName ( 'articles' ) . ' WHERE 1 = 1' ;
$this -> db -> took = null ;
$this -> db -> affected = null ;
$result = $this -> db -> execute ( $query , array ( 'stats' => false ));
$this -> assertNotNull ( $result , 'No query performed! %s' );
$this -> assertNull ( $this -> db -> took , 'Stats were set %s' );
$this -> assertNull ( $this -> db -> affected , 'Stats were set %s' );
$result = $this -> db -> execute ( $query );
$this -> assertNotNull ( $result , 'No query performed! %s' );
$this -> assertNotNull ( $this -> db -> took , 'Stats were not set %s' );
$this -> assertNotNull ( $this -> db -> affected , 'Stats were not set %s' );
}
2009-10-29 20:31:29 -04:00
/**
* test that query () returns boolean values from operations like CREATE TABLE
*
* @ return void
2009-11-14 23:19:25 +11:00
*/
2009-10-29 20:31:29 -04:00
function testFetchAllBooleanReturns () {
$name = $this -> db -> fullTableName ( 'test_query' );
$query = " CREATE TABLE { $name } (name varchar(10)); " ;
$result = $this -> db -> query ( $query );
2010-10-16 20:28:07 -04:30
$this -> assertTrue ( $result , 'Query did not return a boolean' );
2009-10-29 20:31:29 -04:00
$query = " DROP TABLE { $name } ; " ;
2010-10-16 20:28:07 -04:30
$result = $this -> db -> query ( $query );
$this -> assertTrue ( $result , 'Query did not return a boolean' );
2009-10-29 20:31:29 -04:00
}
2009-01-14 04:12:46 +00:00
/**
* test ShowQuery generation of regular and error messages
*
* @ return void
2009-11-14 23:19:25 +11:00
*/
2009-01-14 04:12:46 +00:00
function testShowQuery () {
$this -> testDb -> error = false ;
ob_start ();
$this -> testDb -> showQuery ( 'Some Query' );
$contents = ob_get_clean ();
$this -> assertPattern ( '/Some Query/s' , $contents );
$this -> assertPattern ( '/Aff:/s' , $contents );
$this -> assertPattern ( '/Num:/s' , $contents );
$this -> assertPattern ( '/Took:/s' , $contents );
}
2009-12-17 14:42:46 -04:30
2009-12-17 14:50:36 -04:30
/**
* test fields generating usable virtual fields to use in query
*
* @ return void
*/
2009-12-17 14:42:46 -04:30
function testVirtualFields () {
$this -> loadFixtures ( 'Article' );
2010-06-09 20:47:25 -04:30
$Article = ClassRegistry :: init ( 'Article' );
2009-12-17 14:42:46 -04:30
$Article -> virtualFields = array (
'this_moment' => 'NOW()' ,
'two' => '1 + 1' ,
'comment_count' => 'SELECT COUNT(*) FROM ' . $this -> db -> fullTableName ( 'comments' ) .
2009-12-18 19:16:10 -05:00
' WHERE Article.id = ' . $this -> db -> fullTableName ( 'comments' ) . '.article_id'
2009-12-17 14:42:46 -04:30
);
$result = $this -> db -> fields ( $Article );
$expected = array (
'`Article`.`id`' ,
'`Article`.`user_id`' ,
'`Article`.`title`' ,
'`Article`.`body`' ,
'`Article`.`published`' ,
'`Article`.`created`' ,
'`Article`.`updated`' ,
'(NOW()) AS `Article__this_moment`' ,
'(1 + 1) AS `Article__two`' ,
'(SELECT COUNT(*) FROM comments WHERE `Article`.`id` = `comments`.`article_id`) AS `Article__comment_count`'
);
2010-01-18 21:57:03 -05:00
$this -> assertEqual ( $expected , $result );
2009-12-17 14:42:46 -04:30
2010-01-18 21:57:03 -05:00
$result = $this -> db -> fields ( $Article , null , array ( 'this_moment' , 'title' ));
2009-12-17 14:42:46 -04:30
$expected = array (
'`Article`.`title`' ,
'(NOW()) AS `Article__this_moment`' ,
);
2010-01-18 21:57:03 -05:00
$this -> assertEqual ( $expected , $result );
$result = $this -> db -> fields ( $Article , null , array ( 'Article.title' , 'Article.this_moment' ));
$expected = array (
'`Article`.`title`' ,
'(NOW()) AS `Article__this_moment`' ,
2010-01-21 10:35:20 -05:00
);
$this -> assertEqual ( $expected , $result );
$result = $this -> db -> fields ( $Article , null , array ( 'Article.this_moment' , 'Article.title' ));
$expected = array (
'`Article`.`title`' ,
'(NOW()) AS `Article__this_moment`' ,
2010-01-18 21:57:03 -05:00
);
$this -> assertEqual ( $expected , $result );
2010-04-04 13:24:39 -04:30
$result = $this -> db -> fields ( $Article , null , array ( 'Article.*' ));
$expected = array (
'`Article`.*' ,
'(NOW()) AS `Article__this_moment`' ,
'(1 + 1) AS `Article__two`' ,
'(SELECT COUNT(*) FROM comments WHERE `Article`.`id` = `comments`.`article_id`) AS `Article__comment_count`'
);
$this -> assertEqual ( $expected , $result );
$result = $this -> db -> fields ( $Article , null , array ( '*' ));
$expected = array (
'*' ,
'(NOW()) AS `Article__this_moment`' ,
'(1 + 1) AS `Article__two`' ,
'(SELECT COUNT(*) FROM comments WHERE `Article`.`id` = `comments`.`article_id`) AS `Article__comment_count`'
);
$this -> assertEqual ( $expected , $result );
2009-12-17 14:42:46 -04:30
}
2009-12-17 14:50:36 -04:30
/**
* test conditions to generate query conditions for virtual fields
*
* @ return void
*/
2009-12-17 14:42:46 -04:30
function testVirtualFieldsInConditions () {
2010-10-17 10:18:46 -04:30
$Article = ClassRegistry :: init ( 'Article' );
2009-12-17 14:42:46 -04:30
$Article -> virtualFields = array (
'this_moment' => 'NOW()' ,
'two' => '1 + 1' ,
'comment_count' => 'SELECT COUNT(*) FROM ' . $this -> db -> fullTableName ( 'comments' ) .
2009-12-18 19:16:10 -05:00
' WHERE Article.id = ' . $this -> db -> fullTableName ( 'comments' ) . '.article_id'
2009-12-17 14:42:46 -04:30
);
$conditions = array ( 'two' => 2 );
2010-05-30 12:51:48 -04:00
$result = $this -> db -> conditions ( $conditions , true , false , $Article );
2009-12-17 14:42:46 -04:30
$expected = '(1 + 1) = 2' ;
2009-12-18 19:16:10 -05:00
$this -> assertEqual ( $expected , $result );
2009-12-17 14:42:46 -04:30
$conditions = array ( 'this_moment BETWEEN ? AND ?' => array ( 1 , 2 ));
$expected = 'NOW() BETWEEN 1 AND 2' ;
2009-12-18 19:16:10 -05:00
$result = $this -> db -> conditions ( $conditions , true , false , $Article );
$this -> assertEqual ( $expected , $result );
2009-12-17 14:42:46 -04:30
$conditions = array ( 'comment_count >' => 5 );
$expected = '(SELECT COUNT(*) FROM comments WHERE `Article`.`id` = `comments`.`article_id`) > 5' ;
2009-12-18 19:16:10 -05:00
$result = $this -> db -> conditions ( $conditions , true , false , $Article );
$this -> assertEqual ( $expected , $result );
2009-12-17 14:42:46 -04:30
$conditions = array ( 'NOT' => array ( 'two' => 2 ));
2009-12-18 19:16:10 -05:00
$result = $this -> db -> conditions ( $conditions , true , false , $Article );
2009-12-17 14:42:46 -04:30
$expected = 'NOT ((1 + 1) = 2)' ;
2009-12-18 19:16:10 -05:00
$this -> assertEqual ( $expected , $result );
2009-12-17 14:42:46 -04:30
}
2010-09-07 00:09:06 -04:00
/**
* test that virtualFields with complex functions and aliases work .
*
* @ return void
*/
function testConditionsWithComplexVirtualFields () {
2010-10-17 10:18:46 -04:30
$Article = ClassRegistry :: init ( 'Article' );
2010-09-07 00:09:06 -04:00
$Article -> virtualFields = array (
'distance' => ' ACOS ( SIN ( 20 * PI () / 180 )
* SIN ( Article . latitude * PI () / 180 )
+ COS ( 20 * PI () / 180 )
* COS ( Article . latitude * PI () / 180 )
* COS (( 50 - Article . longitude ) * PI () / 180 )
) * 180 / PI () * 60 * 1.1515 * 1.609344 '
);
$conditions = array ( 'distance >=' => 20 );
$result = $this -> db -> conditions ( $conditions , true , true , $Article );
$this -> assertPattern ( '/\) >= 20/' , $result );
$this -> assertPattern ( '/[`\'"]Article[`\'"].[`\'"]latitude[`\'"]/' , $result );
$this -> assertPattern ( '/[`\'"]Article[`\'"].[`\'"]longitude[`\'"]/' , $result );
}
2009-12-17 14:50:36 -04:30
/**
* test order to generate query order clause for virtual fields
*
* @ return void
*/
2009-12-17 14:42:46 -04:30
function testVirtualFieldsInOrder () {
2010-10-17 10:18:46 -04:30
$Article = ClassRegistry :: init ( 'Article' );
2009-12-17 14:42:46 -04:30
$Article -> virtualFields = array (
'this_moment' => 'NOW()' ,
'two' => '1 + 1' ,
);
2009-12-18 19:16:10 -05:00
$order = array ( 'two' , 'this_moment' );
$result = $this -> db -> order ( $order , 'ASC' , $Article );
2009-12-17 14:42:46 -04:30
$expected = ' ORDER BY (1 + 1) ASC, (NOW()) ASC' ;
2009-12-18 19:16:10 -05:00
$this -> assertEqual ( $expected , $result );
2010-05-30 20:30:58 -04:00
$order = array ( 'Article.two' , 'Article.this_moment' );
$result = $this -> db -> order ( $order , 'ASC' , $Article );
$expected = ' ORDER BY (1 + 1) ASC, (NOW()) ASC' ;
$this -> assertEqual ( $expected , $result );
2009-12-17 14:42:46 -04:30
}
2009-12-17 14:50:36 -04:30
/**
* test calculate to generate claculate statements on virtual fields
*
* @ return void
*/
2009-12-17 14:42:46 -04:30
function testVirtualFieldsInCalculate () {
2010-10-17 10:18:46 -04:30
$Article = ClassRegistry :: init ( 'Article' );
2009-12-17 14:42:46 -04:30
$Article -> virtualFields = array (
'this_moment' => 'NOW()' ,
'two' => '1 + 1' ,
'comment_count' => 'SELECT COUNT(*) FROM ' . $this -> db -> fullTableName ( 'comments' ) .
' WHERE Article.id = ' . $this -> db -> fullTableName ( 'comments' ) . '.article_id'
);
2009-12-18 19:16:10 -05:00
$result = $this -> db -> calculate ( $Article , 'count' , array ( 'this_moment' ));
2009-12-17 14:42:46 -04:30
$expected = 'COUNT(NOW()) AS `count`' ;
2009-12-18 19:16:10 -05:00
$this -> assertEqual ( $expected , $result );
2009-12-17 14:42:46 -04:30
2009-12-18 19:16:10 -05:00
$result = $this -> db -> calculate ( $Article , 'max' , array ( 'comment_count' ));
2009-12-17 14:42:46 -04:30
$expected = 'MAX(SELECT COUNT(*) FROM comments WHERE `Article`.`id` = `comments`.`article_id`) AS `comment_count`' ;
2009-12-18 19:16:10 -05:00
$this -> assertEqual ( $expected , $result );
2009-12-17 14:42:46 -04:30
}
2009-12-17 14:50:36 -04:30
/**
* test a full example of using virtual fields
*
* @ return void
*/
2009-12-17 14:42:46 -04:30
function testVirtualFieldsFetch () {
2009-12-18 19:18:23 -05:00
$this -> loadFixtures ( 'Article' , 'Comment' );
2009-12-17 14:42:46 -04:30
2010-06-09 20:47:25 -04:30
$Article = ClassRegistry :: init ( 'Article' );
2009-12-17 14:42:46 -04:30
$Article -> virtualFields = array (
'comment_count' => 'SELECT COUNT(*) FROM ' . $this -> db -> fullTableName ( 'comments' ) .
2009-12-18 19:18:23 -05:00
' WHERE Article.id = ' . $this -> db -> fullTableName ( 'comments' ) . '.article_id'
2009-12-17 14:42:46 -04:30
);
$conditions = array ( 'comment_count >' => 2 );
2009-12-18 19:18:23 -05:00
$query = 'SELECT ' . join ( ',' , $this -> db -> fields ( $Article , null , array ( 'id' , 'comment_count' ))) .
' FROM ' . $this -> db -> fullTableName ( $Article ) . ' Article ' . $this -> db -> conditions ( $conditions , true , true , $Article );
2009-12-17 14:42:46 -04:30
$result = $this -> db -> fetchAll ( $query );
$expected = array ( array (
'Article' => array ( 'id' => 1 , 'comment_count' => 4 )
));
2009-12-18 19:18:23 -05:00
$this -> assertEqual ( $expected , $result );
2009-12-17 14:42:46 -04:30
}
2010-01-11 12:08:46 -04:30
2010-09-07 00:32:44 -04:00
/**
* test reading complex virtualFields with subqueries .
*
* @ return void
*/
function testVirtualFieldsComplexRead () {
$this -> loadFixtures ( 'DataTest' , 'Article' , 'Comment' );
2010-10-17 10:18:46 -04:30
$Article = ClassRegistry :: init ( 'Article' );
2010-09-07 00:32:44 -04:00
$commentTable = $this -> db -> fullTableName ( 'comments' );
2010-10-17 10:18:46 -04:30
$Article = ClassRegistry :: init ( 'Article' );
2010-09-07 00:32:44 -04:00
$Article -> virtualFields = array (
'comment_count' => 'SELECT COUNT(*) FROM ' . $commentTable .
' AS Comment WHERE Article.id = Comment.article_id'
);
$result = $Article -> find ( 'all' );
$this -> assertTrue ( count ( $result ) > 0 );
$this -> assertTrue ( $result [ 0 ][ 'Article' ][ 'comment_count' ] > 0 );
2010-10-17 10:18:46 -04:30
$DataTest = ClassRegistry :: init ( 'DataTest' );
2010-09-07 00:32:44 -04:00
$DataTest -> virtualFields = array (
'complicated' => ' ACOS ( SIN ( 20 * PI () / 180 )
* SIN ( DataTest . float * PI () / 180 )
+ COS ( 20 * PI () / 180 )
* COS ( DataTest . count * PI () / 180 )
* COS (( 50 - DataTest . float ) * PI () / 180 )
) * 180 / PI () * 60 * 1.1515 * 1.609344 '
);
$result = $DataTest -> find ( 'all' );
$this -> assertTrue ( count ( $result ) > 0 );
$this -> assertTrue ( $result [ 0 ][ 'DataTest' ][ 'complicated' ] > 0 );
}
2010-01-11 12:08:46 -04:30
2010-09-07 00:09:06 -04:00
/**
* test that virtualFields with complex functions and aliases work .
*
* @ return void
*/
function testFieldsWithComplexVirtualFields () {
2010-10-17 10:18:46 -04:30
$Article = new Article ();
2010-09-07 00:09:06 -04:00
$Article -> virtualFields = array (
'distance' => ' ACOS ( SIN ( 20 * PI () / 180 )
* SIN ( Article . latitude * PI () / 180 )
+ COS ( 20 * PI () / 180 )
* COS ( Article . latitude * PI () / 180 )
* COS (( 50 - Article . longitude ) * PI () / 180 )
) * 180 / PI () * 60 * 1.1515 * 1.609344 '
);
$fields = array ( 'id' , 'distance' );
$result = $this -> db -> fields ( $Article , null , $fields );
$qs = $this -> db -> startQuote ;
$qe = $this -> db -> endQuote ;
$this -> assertEqual ( $result [ 0 ], " { $qs } Article { $qe } . { $qs } id { $qe } " );
$this -> assertPattern ( '/Article__distance/' , $result [ 1 ]);
$this -> assertPattern ( '/[`\'"]Article[`\'"].[`\'"]latitude[`\'"]/' , $result [ 1 ]);
$this -> assertPattern ( '/[`\'"]Article[`\'"].[`\'"]longitude[`\'"]/' , $result [ 1 ]);
}
2010-09-18 00:04:36 -04:00
/**
* test reading virtual fields containing newlines when recursive > 0
*
* @ return void
*/
function testReadVirtualFieldsWithNewLines () {
2010-10-17 10:18:46 -04:30
$Article = new Article ();
2010-09-18 00:04:36 -04:00
$Article -> recursive = 1 ;
$Article -> virtualFields = array (
'test' => '
User . id + User . id
'
);
$result = $this -> db -> fields ( $Article , null , array ());
$result = $this -> db -> fields ( $Article , $Article -> alias , $result );
$this -> assertPattern ( '/[`\"]User[`\"]\.[`\"]id[`\"] \+ [`\"]User[`\"]\.[`\"]id[`\"]/' , $result [ 7 ]);
}
2010-01-11 12:08:46 -04:30
/**
2010-01-11 15:34:16 -04:30
* test group to generate GROUP BY statements on virtual fields
2010-01-11 12:08:46 -04:30
*
* @ return void
*/
function testVirtualFieldsInGroup () {
2010-10-17 10:18:46 -04:30
$Article = ClassRegistry :: init ( 'Article' );
2010-01-11 12:08:46 -04:30
$Article -> virtualFields = array (
'this_year' => 'YEAR(Article.created)'
);
2010-06-09 20:47:25 -04:30
$result = $this -> db -> group ( 'this_year' , $Article );
2010-01-11 12:08:46 -04:30
$expected = " GROUP BY (YEAR(`Article`.`created`)) " ;
$this -> assertEqual ( $expected , $result );
}
2010-06-08 23:29:40 -04:00
/**
* test the permutations of fullTableName ()
*
* @ return void
*/
function testFullTablePermutations () {
2010-10-17 10:18:46 -04:30
$Article = ClassRegistry :: init ( 'Article' );
2010-06-08 23:29:40 -04:00
$result = $this -> testDb -> fullTableName ( $Article , false );
$this -> assertEqual ( $result , 'articles' );
$Article -> tablePrefix = 'tbl_' ;
$result = $this -> testDb -> fullTableName ( $Article , false );
$this -> assertEqual ( $result , 'tbl_articles' );
2010-09-21 20:34:27 -04:00
$Article -> useTable = $Article -> table = 'with spaces' ;
$Article -> tablePrefix = '' ;
$result = $this -> testDb -> fullTableName ( $Article );
$this -> assertEqual ( $result , '`with spaces`' );
2010-06-08 23:29:40 -04:00
}
2010-07-11 13:06:33 -04:00
/**
* test that read () only calls queryAssociation on db objects when the method is defined .
*
* @ return void
*/
function testReadOnlyCallingQueryAssociationWhenDefined () {
ConnectionManager :: create ( 'test_no_queryAssociation' , array (
'datasource' => 'data'
));
2010-10-16 20:28:07 -04:30
$Article = ClassRegistry :: init ( 'Article' );
2010-07-11 13:06:33 -04:00
$Article -> Comment -> useDbConfig = 'test_no_queryAssociation' ;
$result = $Article -> find ( 'all' );
$this -> assertTrue ( is_array ( $result ));
}
2010-10-20 22:28:31 -04:00
/**
* test that fields () is using methodCache ()
*
* @ return void
*/
function testFieldsUsingMethodCache () {
$this -> testDb -> cacheMethods = false ;
$this -> assertTrue ( empty ( $this -> testDb -> methodCache [ 'fields' ]), 'Cache not empty' );
$Article =& ClassRegistry :: init ( 'Article' );
$this -> testDb -> fields ( $Article , null , array ( 'title' , 'body' , 'published' ));
$this -> assertTrue ( empty ( $this -> testDb -> methodCache [ 'fields' ]), 'Cache not empty' );
}
2008-08-07 15:36:26 +00:00
}