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 16:31:21 +00:00
* PHP 5
2008-05-30 11:40:08 +00:00
*
2010-05-19 01:15:13 +00:00
* CakePHP ( tm ) Tests < http :// book . cakephp . org / view / 1196 / Testing >
2011-05-29 21:31:39 +00:00
* Copyright 2005 - 2011 , 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
*
2011-05-29 21:31:39 +00:00
* @ copyright Copyright 2005 - 2011 , Cake Software Foundation , Inc . ( http :// cakefoundation . org )
2010-05-19 01:15:13 +00:00
* @ link http :// book . cakephp . org / view / 1196 / Testing CakePHP ( tm ) Tests
2011-07-26 06:16:14 +00:00
* @ package Cake . Test . Case . Model . Datasource
2008-10-30 17:30:26 +00:00
* @ since CakePHP ( tm ) v 1.2 . 0.4206
2010-10-03 16:27:27 +00:00
* @ license MIT License ( http :// www . opensource . org / licenses / mit - license . php )
2008-05-30 11:40:08 +00:00
*/
2010-11-21 20:13:33 +00:00
2010-12-09 05:55:24 +00:00
App :: uses ( 'Model' , 'Model' );
App :: uses ( 'AppModel' , 'Model' );
2010-12-22 04:41:40 +00:00
App :: uses ( 'DataSource' , 'Model/Datasource' );
2010-12-09 05:55:24 +00:00
App :: uses ( 'DboSource' , 'Model/Datasource' );
2008-05-30 11:40:08 +00:00
require_once dirname ( dirname ( __FILE__ )) . DS . 'models.php' ;
2009-07-24 19:18:37 +00:00
2010-12-22 04:41:40 +00:00
class MockDataSource extends DataSource {
2011-09-03 22:37:26 +00:00
}
class DboTestSource extends DboSource {
public function connect ( $config = array ()) {
$this -> connected = true ;
}
2011-05-16 22:49:00 +00:00
2011-09-03 22:37:26 +00:00
public function mergeAssociation ( & $data , & $merge , $association , $type , $selfJoin = false ) {
return parent :: _mergeAssociation ( & $data , & $merge , $association , $type , $selfJoin );
}
public function setConfig ( $config ) {
$this -> config = $config ;
}
2011-10-01 01:56:39 +00:00
public function setConnection ( $conn ) {
$this -> _connection = $conn ;
}
2010-12-22 04:41:40 +00: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
*
2011-07-26 06:16:14 +00:00
* @ package Cake . Test . Case . Model . Datasource
2008-05-30 11:40:08 +00:00
*/
class DboSourceTest extends CakeTestCase {
2009-07-24 19:18:37 +00: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
*/
2010-04-04 07:14:00 +00:00
public $debug = null ;
2009-07-24 19:18:37 +00: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
*/
2010-04-04 07:14:00 +00:00
public $autoFixtures = false ;
2009-07-24 19:18:37 +00: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
*/
2010-04-04 07:14:00 +00: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 04:32:44 +00: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 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
2010-09-26 01:36:49 +00:00
* setUp method
2008-06-05 14:48:54 +00:00
*
2008-06-02 19:22:55 +00:00
* @ return void
*/
2011-05-30 20:02:32 +00:00
public function setUp () {
2010-09-26 01:36:49 +00:00
parent :: setUp ();
2008-05-30 11:40:08 +00:00
$this -> __config = $this -> db -> config ;
2011-09-03 22:37:26 +00:00
$this -> testDb = new DboTestSource ();
2008-08-07 15:36:26 +00:00
$this -> testDb -> cacheSources = false ;
2009-08-02 06:47:28 +00:00
$this -> testDb -> startQuote = '`' ;
$this -> testDb -> endQuote = '`' ;
2010-09-26 01:36:49 +00:00
2010-06-10 01:17:25 +00:00
$this -> Model = new TestModel ();
2008-05-30 11:40:08 +00:00
}
2009-07-24 19:18:37 +00: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
* @ return void
*/
2011-05-30 20:02:32 +00:00
public function tearDown () {
2010-09-26 01:36:49 +00:00
parent :: tearDown ();
2008-05-30 11:40:08 +00:00
unset ( $this -> Model );
}
2009-07-24 19:18:37 +00:00
2010-01-22 15:30:22 +00:00
/**
* test that booleans and null make logical condition strings .
*
* @ return void
*/
2011-05-30 20:02:32 +00:00
public function testBooleanNullConditionsParsing () {
2010-01-22 15:30:22 +00:00
$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 08:54:51 +00:00
/**
* test that order () will accept objects made from DboSource :: expression
*
* @ return void
*/
2011-05-30 20:02:32 +00:00
public function testOrderWithExpression () {
2010-05-19 08:54:51 +00:00
$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 " ;
2011-05-16 22:49:00 +00:00
$this -> assertEqual ( $expected , $result );
2010-05-19 08:54:51 +00:00
}
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
* @ return void
*/
2011-05-30 20:02:32 +00:00
public 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
)
);
2011-08-22 01:18:11 +00:00
$this -> testDb -> mergeAssociation ( $data , $merge , 'Topic' , 'hasOne' );
2008-06-20 20:17:23 +00:00
$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'
)
);
2011-08-22 01:18:11 +00:00
$this -> testDb -> mergeAssociation ( $data , $merge , 'User2' , 'belongsTo' );
2008-06-20 20:17:23 +00:00
$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 ()
);
2011-08-22 01:18:11 +00:00
$this -> testDb -> mergeAssociation ( $data , $merge , 'Comment' , 'hasMany' );
2008-06-20 20:17:23 +00:00
$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'
)
)
);
2011-08-22 01:18:11 +00:00
$this -> testDb -> mergeAssociation ( $data , $merge , 'Comment' , 'hasMany' );
2008-06-20 20:17:23 +00:00
$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'
)
)
)
);
2011-08-22 01:18:11 +00:00
$this -> testDb -> mergeAssociation ( $data , $merge , 'Comment' , 'hasMany' );
2008-06-20 20:17:23 +00:00
$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 ()
)
)
);
2011-08-22 01:18:11 +00:00
$this -> testDb -> mergeAssociation ( $data , $merge , 'Comment' , 'hasMany' );
2008-06-20 20:17:23 +00:00
$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'
)
)
);
2011-08-22 01:18:11 +00:00
$this -> testDb -> mergeAssociation ( $data , $merge , 'Tag' , 'hasAndBelongsToMany' );
2008-06-20 20:17:23 +00:00
$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' )
);
2011-08-22 01:18:11 +00:00
$this -> testDb -> mergeAssociation ( $data , $merge , 'Tag' , 'hasOne' );
2008-06-20 20:17:23 +00:00
$this -> assertEqual ( $data , $expected );
}
2009-07-24 19:18:37 +00: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
* @ return void
*/
2011-05-30 20:02:32 +00:00
public function testMagicMethodQuerying () {
2011-09-03 22:37:26 +00:00
$result = $this -> db -> 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
));
2011-05-16 22:49:00 +00:00
$this -> assertEqual ( $expected , $result );
2009-03-18 17:55:58 +00:00
2011-09-03 22:37:26 +00:00
$result = $this -> db -> query ( 'findByFindBy' , array ( 'value' ), $this -> Model );
2009-02-25 03:22:31 +00:00
$expected = array ( 'first' , array (
'conditions' => array ( 'TestModel.find_by' => 'value' ),
'fields' => null , 'order' => null , 'recursive' => null
));
2011-05-16 22:49:00 +00:00
$this -> assertEqual ( $expected , $result );
2008-05-30 11:40:08 +00:00
2011-09-03 22:37:26 +00:00
$result = $this -> db -> 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
));
2011-05-16 22:49:00 +00:00
$this -> assertEqual ( $expected , $result );
2008-05-30 11:40:08 +00:00
2011-09-03 22:37:26 +00:00
$result = $this -> db -> 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
));
2011-05-16 22:49:00 +00:00
$this -> assertEqual ( $expected , $result );
2008-05-30 11:40:08 +00:00
2011-09-03 22:37:26 +00:00
$result = $this -> db -> 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
));
2011-05-16 22:49:00 +00:00
$this -> assertEqual ( $expected , $result );
2008-05-30 11:40:08 +00:00
2011-09-03 22:37:26 +00:00
$result = $this -> db -> 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
));
2011-05-16 22:49:00 +00:00
$this -> assertEqual ( $expected , $result );
2008-05-30 11:40:08 +00:00
2011-09-03 22:37:26 +00:00
$result = $this -> db -> 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
));
2011-05-16 22:49:00 +00:00
$this -> assertEqual ( $expected , $result );
2008-05-30 11:40:08 +00:00
2011-09-03 22:37:26 +00:00
$result = $this -> db -> query ( 'findByFieldName' , array (), $this -> Model );
2008-05-30 11:40:08 +00:00
$expected = false ;
2011-05-16 22:49:00 +00:00
$this -> assertEqual ( $expected , $result );
2011-09-03 22:37:26 +00:00
}
2008-05-30 11:40:08 +00:00
2011-09-03 22:37:26 +00:00
/**
*
* @ expectedException PDOException
* @ return void
*/
public function testDirectCallThrowsException () {
$result = $this -> db -> query ( 'directCall' , array (), $this -> Model );
2008-05-30 11:40:08 +00:00
}
2009-07-24 19:18:37 +00: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
* @ return void
*/
2011-05-30 20:02:32 +00:00
public function testValue () {
2011-09-03 22:37:26 +00:00
$result = $this -> db -> value ( '{$__cakeForeignKey__$}' );
2008-05-30 11:40:08 +00:00
$this -> assertEqual ( $result , '{$__cakeForeignKey__$}' );
2011-09-03 22:37:26 +00:00
$result = $this -> db -> value ( array ( 'first' , 2 , 'third' ));
2008-05-30 11:40:08 +00:00
$expected = array ( '\'first\'' , 2 , '\'third\'' );
2011-05-16 22:49:00 +00:00
$this -> assertEqual ( $expected , $result );
2008-05-30 11:40:08 +00:00
}
2009-07-24 19:18:37 +00: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
* @ return void
*/
2011-05-30 20:02:32 +00:00
public 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 19:18:37 +00: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
* @ return void
*/
2011-05-30 20:02:32 +00:00
public function testName () {
2008-05-30 11:40:08 +00:00
$result = $this -> testDb -> name ( 'name' );
$expected = '`name`' ;
2011-05-16 22:49:00 +00:00
$this -> assertEqual ( $expected , $result );
2008-05-30 11:40:08 +00:00
$result = $this -> testDb -> name ( array ( 'name' , 'Model.*' ));
$expected = array ( '`name`' , '`Model`.*' );
2011-05-16 22:49:00 +00:00
$this -> assertEqual ( $expected , $result );
2008-05-30 11:40:08 +00:00
$result = $this -> testDb -> name ( 'MTD()' );
2008-08-22 04:06:29 +00:00
$expected = 'MTD()' ;
2011-05-16 22:49:00 +00:00
$this -> assertEqual ( $expected , $result );
2008-05-30 11:40:08 +00:00
$result = $this -> testDb -> name ( '(sm)' );
2008-08-22 04:06:29 +00:00
$expected = '(sm)' ;
2011-05-16 22:49:00 +00:00
$this -> assertEqual ( $expected , $result );
2008-08-22 04:06:29 +00:00
2010-01-17 04:14:19 +00:00
$result = $this -> testDb -> name ( 'name AS x' );
$expected = '`name` AS `x`' ;
2011-05-16 22:49:00 +00:00
$this -> assertEqual ( $expected , $result );
2010-01-17 04:14:19 +00:00
$result = $this -> testDb -> name ( 'Model.name AS x' );
$expected = '`Model`.`name` AS `x`' ;
2011-05-16 22:49:00 +00:00
$this -> assertEqual ( $expected , $result );
2010-01-17 04:14:19 +00:00
2008-08-22 04:06:29 +00:00
$result = $this -> testDb -> name ( 'Function(Something.foo)' );
$expected = 'Function(`Something`.`foo`)' ;
2011-05-16 22:49:00 +00:00
$this -> assertEqual ( $expected , $result );
2010-01-17 04:14:19 +00:00
$result = $this -> testDb -> name ( 'Function(SubFunction(Something.foo))' );
$expected = 'Function(SubFunction(`Something`.`foo`))' ;
2011-05-16 22:49:00 +00:00
$this -> assertEqual ( $expected , $result );
2010-01-17 04:14:19 +00:00
$result = $this -> testDb -> name ( 'Function(Something.foo) AS x' );
$expected = 'Function(`Something`.`foo`) AS `x`' ;
2011-05-16 22:49:00 +00:00
$this -> assertEqual ( $expected , $result );
2010-02-19 15:41:52 +00:00
$result = $this -> testDb -> name ( 'name-with-minus' );
$expected = '`name-with-minus`' ;
2011-05-16 22:49:00 +00:00
$this -> assertEqual ( $expected , $result );
2010-02-20 16:42:17 +00:00
$result = $this -> testDb -> name ( array ( 'my-name' , 'Foo-Model.*' ));
$expected = array ( '`my-name`' , '`Foo-Model`.*' );
2011-05-16 22:49:00 +00:00
$this -> assertEqual ( $expected , $result );
2011-01-27 01:58:16 +00:00
2010-11-25 11:52:23 +00:00
$result = $this -> testDb -> name ( array ( 'Team.P%' , 'Team.G/G' ));
$expected = array ( '`Team`.`P%`' , '`Team`.`G/G`' );
2011-05-16 22:49:00 +00:00
$this -> assertEqual ( $expected , $result );
2011-01-27 01:58:16 +00:00
$result = $this -> testDb -> name ( 'Model.name as y' );
$expected = '`Model`.`name` AS `y`' ;
2011-05-16 22:49:00 +00:00
$this -> assertEqual ( $expected , $result );
2008-05-30 11:40:08 +00:00
}
2009-07-24 19:18:37 +00:00
2010-03-14 03:55:18 +00:00
/**
* test that cacheMethod works as exepected
*
* @ return void
*/
2011-05-30 20:02:32 +00:00
public function testCacheMethod () {
2010-03-14 03:55:18 +00:00
$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
*
2011-09-03 21:07:45 +00:00
* @ outputBuffering enabled
2008-06-05 15:20:45 +00:00
* @ return void
*/
2011-05-30 20:02:32 +00:00
public function testLog () {
2008-05-30 11:40:08 +00:00
$this -> testDb -> logQuery ( 'Query 1' );
$this -> testDb -> logQuery ( 'Query 2' );
2009-12-20 00:54:49 +00: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' );
2011-05-16 22:49:00 +00:00
$this -> assertEqual ( $expected , $result );
2011-09-03 16:47:00 +00:00
$oldDebug = Configure :: read ( 'debug' );
2009-12-20 00:54:49 +00: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 );
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 );
Configure :: write ( 'debug' , $oldDebug );
}
2009-07-24 19:18:37 +00:00
2009-09-02 03:23:47 +00:00
/**
* test getting the query log as an array .
*
* @ return void
2009-11-14 12:19:25 +00:00
*/
2011-05-30 20:02:32 +00:00
public function testGetLog () {
2009-09-02 03:23:47 +00:00
$this -> testDb -> logQuery ( 'Query 1' );
$this -> testDb -> logQuery ( 'Query 2' );
$log = $this -> testDb -> getLog ();
2011-09-03 16:47:00 +00:00
$expected = array ( 'query' => 'Query 1' , 'affected' => '' , 'numRows' => '' , 'took' => '' );
2009-12-04 04:29:28 +00:00
$this -> assertEqual ( $log [ 'log' ][ 0 ], $expected );
2011-09-03 16:47:00 +00:00
$expected = array ( 'query' => 'Query 2' , 'affected' => '' , 'numRows' => '' , 'took' => '' );
2009-12-04 04:29:28 +00:00
$this -> assertEqual ( $log [ 'log' ][ 1 ], $expected );
2011-09-03 16:47:00 +00:00
$expected = array ( 'query' => 'Error 1' , 'affected' => '' , 'numRows' => '' , 'took' => '' );
2009-09-02 03:23:47 +00:00
}
2009-10-30 00:31:29 +00:00
/**
* test that query () returns boolean values from operations like CREATE TABLE
*
* @ return void
2009-11-14 12:19:25 +00:00
*/
2011-05-30 20:02:32 +00:00
public function testFetchAllBooleanReturns () {
2009-10-30 00:31:29 +00:00
$name = $this -> db -> fullTableName ( 'test_query' );
$query = " CREATE TABLE { $name } (name varchar(10)); " ;
$result = $this -> db -> query ( $query );
2010-10-17 00:58:07 +00:00
$this -> assertTrue ( $result , 'Query did not return a boolean' );
2009-10-30 00:31:29 +00:00
$query = " DROP TABLE { $name } ; " ;
2010-10-17 00:58:07 +00:00
$result = $this -> db -> query ( $query );
$this -> assertTrue ( $result , 'Query did not return a boolean' );
2009-10-30 00:31:29 +00:00
}
2009-12-17 19:12:46 +00:00
2009-12-17 19:20:36 +00:00
/**
* test order to generate query order clause for virtual fields
*
* @ return void
*/
2011-05-30 20:02:32 +00:00
public function testVirtualFieldsInOrder () {
2010-10-17 14:48:46 +00:00
$Article = ClassRegistry :: init ( 'Article' );
2009-12-17 19:12:46 +00:00
$Article -> virtualFields = array (
'this_moment' => 'NOW()' ,
'two' => '1 + 1' ,
);
2009-12-19 00:16:10 +00:00
$order = array ( 'two' , 'this_moment' );
$result = $this -> db -> order ( $order , 'ASC' , $Article );
2009-12-17 19:12:46 +00:00
$expected = ' ORDER BY (1 + 1) ASC, (NOW()) ASC' ;
2009-12-19 00:16:10 +00:00
$this -> assertEqual ( $expected , $result );
2010-05-31 00:30:58 +00: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 19:12:46 +00:00
}
2010-01-11 16:38:46 +00:00
2010-06-09 03:29:40 +00:00
/**
* test the permutations of fullTableName ()
*
* @ return void
*/
2011-05-30 20:02:32 +00:00
public function testFullTablePermutations () {
2010-10-17 14:48:46 +00:00
$Article = ClassRegistry :: init ( 'Article' );
2010-06-09 03:29:40 +00: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' );
2011-05-16 22:49:00 +00:00
2010-09-22 00:34:27 +00:00
$Article -> useTable = $Article -> table = 'with spaces' ;
$Article -> tablePrefix = '' ;
$result = $this -> testDb -> fullTableName ( $Article );
$this -> assertEqual ( $result , '`with spaces`' );
2010-06-09 03:29:40 +00:00
}
2010-07-11 17:06:33 +00:00
/**
* test that read () only calls queryAssociation on db objects when the method is defined .
*
* @ return void
*/
2011-05-30 20:02:32 +00:00
public function testReadOnlyCallingQueryAssociationWhenDefined () {
2010-11-11 04:01:54 +00:00
$this -> loadFixtures ( 'Article' , 'User' , 'ArticlesTag' , 'Tag' );
2010-07-11 17:06:33 +00:00
ConnectionManager :: create ( 'test_no_queryAssociation' , array (
2010-12-22 04:41:40 +00:00
'datasource' => 'MockDataSource'
2010-07-11 17:06:33 +00:00
));
2010-10-17 00:58:07 +00:00
$Article = ClassRegistry :: init ( 'Article' );
2010-07-11 17:06:33 +00:00
$Article -> Comment -> useDbConfig = 'test_no_queryAssociation' ;
$result = $Article -> find ( 'all' );
$this -> assertTrue ( is_array ( $result ));
}
2010-10-21 02:28:31 +00:00
/**
* test that fields () is using methodCache ()
*
* @ return void
*/
2011-05-30 20:02:32 +00:00
public function testFieldsUsingMethodCache () {
2010-10-21 02:28:31 +00:00
$this -> testDb -> cacheMethods = false ;
$this -> assertTrue ( empty ( $this -> testDb -> methodCache [ 'fields' ]), 'Cache not empty' );
2010-11-09 06:13:23 +00:00
$Article = ClassRegistry :: init ( 'Article' );
2010-10-21 02:28:31 +00:00
$this -> testDb -> fields ( $Article , null , array ( 'title' , 'body' , 'published' ));
$this -> assertTrue ( empty ( $this -> testDb -> methodCache [ 'fields' ]), 'Cache not empty' );
}
2010-11-11 04:52:08 +00:00
/**
* testStatements method
*
* @ return void
*/
2011-05-30 20:02:32 +00:00
public function testStatements () {
2010-11-11 04:52:08 +00:00
$this -> skipIf ( ! $this -> testDb instanceof DboMysql );
2011-05-31 00:49:46 +00:00
2010-11-11 04:52:08 +00:00
$this -> loadFixtures ( 'Article' , 'User' , 'Comment' , 'Tag' , 'Attachment' , 'ArticlesTag' );
$Article = new Article ();
$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 );
$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 );
$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 );
$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 );
$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 );
$result = $this -> testDb -> hasAny ( $Article , '1=2' );
$this -> assertFalse ( $result );
}
2011-06-23 19:48:06 +00:00
/**
* Test that group works without a model
*
* @ return void
*/
function testGroupNoModel () {
$result = $this -> db -> group ( 'created' );
$this -> assertEqual ( ' GROUP BY created' , $result );
}
2011-10-01 01:56:39 +00:00
/**
* Test getting the last error .
*/
function testLastError () {
$stmt = $this -> getMock ( 'PDOStatement' );
$stmt -> expects ( $this -> any ())
-> method ( 'errorInfo' )
-> will ( $this -> returnValue ( array ( '' , 'something' , 'bad' )));
$result = $this -> db -> lastError ( $stmt );
$expected = 'something: bad' ;
$this -> assertEquals ( $expected , $result );
}
2008-08-07 15:36:26 +00:00
}