Skip to content

Commit

Permalink
Adding test case for DbConfig task
Browse files Browse the repository at this point in the history
making DbConfigTask testable.
  • Loading branch information
markstory committed May 21, 2009
1 parent dc01673 commit 5843d5e
Show file tree
Hide file tree
Showing 2 changed files with 168 additions and 9 deletions.
22 changes: 13 additions & 9 deletions cake/console/libs/tasks/db_config.php
Expand Up @@ -24,9 +24,6 @@
* @lastmodified $Date$
* @license http://www.opensource.org/licenses/mit-license.php The MIT License
*/
if (!class_exists('File')) {
uses('file');
}
/**
* Task class for creating and updating the database configuration file.
*
Expand All @@ -52,6 +49,13 @@ class DbConfigTask extends Shell {
'login'=> 'root', 'password'=> 'password', 'database'=> 'project_name',
'schema'=> null, 'prefix'=> null, 'encoding' => null, 'port' => null
);
/**
* String name of the database config class name.
* Used for testing.
*
* @var string
**/
var $databaseClassName = 'DATABASE_CONFIG';
/**
* initialization callback
*
Expand Down Expand Up @@ -92,8 +96,7 @@ function __interactive() {
if (preg_match('/[^a-z0-9_]/i', $name)) {
$name = '';
$this->out('The name may only contain unaccented latin characters, numbers or underscores');
}
else if (preg_match('/^[^a-z_]/i', $name)) {
} else if (preg_match('/^[^a-z_]/i', $name)) {
$name = '';
$this->out('The name must start with an unaccented latin character or an underscore');
}
Expand Down Expand Up @@ -240,7 +243,7 @@ function __verify($config) {
$this->hr();
$looksGood = $this->in('Look okay?', array('y', 'n'), 'y');

if (low($looksGood) == 'y' || low($looksGood) == 'yes') {
if (strtolower($looksGood) == 'y') {
return $config;
}
return false;
Expand All @@ -262,7 +265,7 @@ function bake($configs) {
$oldConfigs = array();

if (file_exists($filename)) {
$db = new DATABASE_CONFIG;
$db = new $this->databaseClassName;
$temp = get_class_vars(get_class($db));

foreach ($temp as $configName => $info) {
Expand Down Expand Up @@ -346,7 +349,7 @@ function bake($configs) {

$out .= "}\n";
$out .= "?>";
$filename = $this->path.'database.php';
$filename = $this->path . 'database.php';
return $this->createFile($filename, $out);
}

Expand All @@ -357,7 +360,7 @@ function bake($configs) {
**/
function getConfig() {
$useDbConfig = 'default';
$configs = get_class_vars('DATABASE_CONFIG');
$configs = get_class_vars($this->databaseClassName);

if (!is_array($configs)) {
return $this->execute();
Expand All @@ -369,5 +372,6 @@ function getConfig() {
}
return $useDbConfig;
}

}
?>
155 changes: 155 additions & 0 deletions cake/tests/cases/console/libs/tasks/db_config.test.php
@@ -0,0 +1,155 @@
<?php
/**
* DBConfigTask Test Case
*
*
* PHP versions 4 and 5
*
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
* Copyright 2005-2009, Cake Software Foundation, Inc. (http://cakefoundation.org)
*
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright 2005-2009, Cake Software Foundation, Inc. (http://cakefoundation.org)
* @link http://cakephp.org
* @package cake
* @subpackage cake.tests.cases.console.libs.tasks
* @since CakePHP(tm) v 1.3
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
*/
App::import('Core', 'Shell');

if (!defined('DISABLE_AUTO_DISPATCH')) {
define('DISABLE_AUTO_DISPATCH', true);
}

if (!class_exists('ShellDispatcher')) {
ob_start();
$argv = false;
require CAKE . 'console' . DS . 'cake.php';
ob_end_clean();
}

require_once CAKE . 'console' . DS . 'libs' . DS . 'tasks' . DS . 'db_config.php';
//require_once CAKE . 'console' . DS . 'libs' . DS . 'tasks' . DS . 'template.php';


Mock::generatePartial(
'ShellDispatcher', 'TestDbConfigTaskMockShellDispatcher',
array('getInput', 'stdout', 'stderr', '_stop', '_initEnvironment')
);

Mock::generatePartial(
'DbConfigTask', 'MockDbConfigTask',
array('in', 'hr', 'out', 'err', 'createFile', '_stop', '_checkUnitTest')
);

class TEST_DATABASE_CONFIG {
var $default = array(
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'user',
'password' => 'password',
'database' => 'database_name',
'prefix' => '',
);

var $otherOne = array(
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'user',
'password' => 'password',
'database' => 'other_one',
'prefix' => '',
);
}

/**
* DbConfigTest class
*
* @package cake
* @subpackage cake.tests.cases.console.libs.tasks
*/
class DbConfigTaskTest extends CakeTestCase {

/**
* setUp method
*
* @return void
* @access public
*/
function startTest() {
$this->Dispatcher =& new TestDbConfigTaskMockShellDispatcher();
$this->Task =& new MockDbConfigTask($this->Dispatcher);
$this->Task->Dispatch =& new $this->Dispatcher;
$this->Task->Dispatch->shellPaths = Configure::read('shellPaths');
//$this->Task->Template =& new TemplateTask($this->Task->Dispatch);

$this->Task->params['working'] = rtrim(APP, '/');
$this->Task->databaseClassName = 'TEST_DATABASE_CONFIG';
}

/**
* tearDown method
*
* @return void
* @access public
*/
function endTest() {
unset($this->Task, $this->Dispatcher);
ClassRegistry::flush();
}

/**
* Test the getConfig method.
*
* @return void
**/
function testGetConfig() {
$this->Task->setReturnValueAt(0, 'in', 'otherOne');
$result = $this->Task->getConfig();
$this->assertEqual($result, 'otherOne');
}

/**
* test that initialize sets the path up.
*
* @return void
**/
function testInitialize() {
$this->assertTrue(empty($this->Task->path));
$this->Task->initialize();
$this->assertFalse(empty($this->Task->path));
$this->assertEqual($this->Task->path, APP . 'config' . DS);

}
/**
* test execute and by extension __interactive
*
* @return void
**/
function testExecuteIntoInteractive() {
$this->Task->initialize();

$this->Task->expectOnce('_stop');
$this->Task->setReturnValue('in', 'y');
$this->Task->setReturnValueAt(0, 'in', 'default');
$this->Task->setReturnValueAt(1, 'in', 'n');
$this->Task->setReturnValueAt(2, 'in', 'localhost');
$this->Task->setReturnValueAt(3, 'in', 'n');
$this->Task->setReturnValueAt(4, 'in', 'root');
$this->Task->setReturnValueAt(5, 'in', 'password');
$this->Task->setReturnValueAt(6, 'in', 'cake_test');
$this->Task->setReturnValueAt(7, 'in', 'n');
$this->Task->setReturnValueAt(8, 'in', 'y');
$this->Task->setReturnValueAt(9, 'in', 'y');
$this->Task->setReturnValueAt(10, 'in', 'y');
$this->Task->setReturnValueAt(11, 'in', 'n');

$result = $this->Task->execute();
}
}
?>

0 comments on commit 5843d5e

Please sign in to comment.