Skip to content
Permalink
Browse files

Adding test case for DbConfig task

making DbConfigTask testable.
  • Loading branch information...
markstory committed May 21, 2009
1 parent dc01673 commit 5843d5e40a50f331901855b917f994f7c5513f41
Showing with 168 additions and 9 deletions.
  1. +13 −9 cake/console/libs/tasks/db_config.php
  2. +155 −0 cake/tests/cases/console/libs/tasks/db_config.test.php
@@ -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.
*
@@ -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
*
@@ -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');
}
@@ -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;
@@ -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) {
@@ -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);
}
@@ -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();
@@ -369,5 +372,6 @@ function getConfig() {
}
return $useDbConfig;
}
}
?>
@@ -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.
You can’t perform that action at this time.