1
0
Fork 0
MySQLDumper/tests/functional/controllers/IndexControllerTest.php
2011-06-10 21:55:32 +00:00

268 Zeilen
No EOL
8,7 KiB
PHP

<?php
/**
* @group Index
*/
class Msd_Application_Controller_IndexControllerTest
extends ControllerTestCase
{
public static function setUpBeforeClass()
{
Testhelper::copyFile('mysqldumper2.ini', CONFIG_PATH . DS .'mysqldumper2.ini');
}
public static function tearDownAfterClass()
{
Testhelper::removeFile(CONFIG_PATH . DS . 'mysqldumper2.ini');
}
public function testRedirectsToLoginFormIfUserNotLoggedIn()
{
$this->dispatch('/index/phpinfo');
//we should be redirected to the log in page
$this->assertResponseCode('302');
$this->assertRedirectTo('/index/login');
}
public function testCanLoginUser()
{
$this->loginUser();
$this->dispatch('/');
//make sure we are not redirected to the log in page
$this->assertNotRedirect();
// make sure we are on the home page now
$this->assertQueryContentContains('h2', 'Home');
// we should have one div with id username
$this->assertQueryCount('#username', 1);
// which contains the username
$this->assertQueryContentContains('#username > p', 'tester');
// now lets check if we can access a page without being redirected
// to the log in page
$this->clearRequest();
$this->dispatch('/index/phpinfo');
$this->assertNotRedirect();
$this->assertQueryCount('#phpinfo', 1);
}
public function testWontLoginUserWithWrongCredentials()
{
$this->getRequest()
->setMethod('POST')
->setParams(
array(
'user' => 'tester',
'pass' => 'wrongPassword',
'autologin' => 0
)
);
$this->dispatch('/index/login');
$this->assertNotRedirect();
// make sure we see the login error message
$this->assertQueryCount("//div[@id='login-message']", 1);
$msg = "Diese Kombination von Benutzername und Passwort ist unbekannt.";
$this->assertQueryContentContains('#login-message', $msg);
}
public function testCanRedirectToInstallIfUserFileIsBroken()
{
$path= APPLICATION_PATH . '/configs/';
rename($path.'users.ini', $path.'users.bak');
$this->getRequest()
->setMethod('POST')
->setParams(
array(
'user' => 'tester',
'pass' => 'test',
'autologin' => 0
)
);
$this->dispatch('/index/login');
$this->assertResponseCode('302');
rename($path.'users.bak', $path.'users.ini');
$this->assertRedirect();
$this->assertRedirectTo('/install');
}
/**
* @depends testCanLoginUser
*/
public function testCanLogoutUser()
{
$_COOKIE['msd_autologin'] =
'ZC5UZ1xNHTfnaQN2FqIOCuA--:1ef26361573f7032cebe97cec16f0bd0';
$this->dispatch('/index/logout');
// now we should be redirected to login page
$this->assertRedirectTo('/index/login');
$this->assertResponseCode('302');
$this->assertRedirect();
}
public function testCanAutoLoginUserByCookie()
{
$_COOKIE['msd_autologin'] =
'ZC5UZ1xNHTfnaQN2FqIOCuA--:1ef26361573f7032cebe97cec16f0bd0';
$this->dispatch('/index/phpinfo');
$this->assertNotRedirect();
// dom id #phpinfo is only shown on phpinfo page, so let's look for it
$this->assertQueryCount('#phpinfo', 1);
}
/**
* @outputBuffering enabled
*/
public function testCanLoginWithAutoLogin()
{
$this->dispatch('/index/logout');
$this->clearRequest();
$this->getRequest()
->setMethod('POST')
->setParams(
array(
'user' => 'tester',
'pass' => 'test',
'autologin' => 1
)
);
$this->dispatch('/index/login');
// after successful login we should be redirected to the index page
$this->assertResponseCode('302');
$this->assertRedirectTo('/');
$this->clearRequest();
}
public function testCanShowIndex()
{
$this->loginUser();
$this->dispatch('/');
$this->assertNotRedirect();
// we are there if button PHP-Info is shown
$this->assertQueryContentContains('#content', 'PHP-Info');
}
public function testCanShowPhpinfo()
{
$this->loginUser();
$this->dispatch('/index/phpinfo');
$this->assertNotRedirect();
// dom id #phpinfo is only shown on phpinfo page, so let's look for it
$this->assertQueryCount('#phpinfo', 1);
}
public function testCanRefreshDbListAndRedirectsToOldAction()
{
$this->loginUser();
$this->getRequest()
->setMethod('POST')
->setParams(
array(
'lastAction' => 'phpinfo',
'lastController' => 'index'
)
);
$this->dispatch('/index/dbrefresh');
$this->assertRedirectTo('/index/phpinfo');
}
public function testCanRefreshDbListWithInvalidActiveDb()
{
$this->loginUser();
$this->getRequest()
->setMethod('POST')
->setParams(
array(
'lastAction' => 'phpinfo',
'lastController' => 'index'
)
);
$config = Msd_Configuration::getInstance();
$config->set('dynamic.dbActual', -1);
$this->dispatch('/index/dbrefresh');
$this->assertRedirectTo('/index/phpinfo');
}
public function testCanSelectDb()
{
$this->loginUser();
$config = Msd_Configuration::getInstance();
// set invalid active db
$config->set('dynamic.dbActual', -1);
$this->getRequest()
->setMethod('POST')
->setParams(
array(
'lastAction' => 'phpinfo',
'lastController' => 'index',
'selectedDb' => base64_encode('information_schema')
)
);
$this->dispatch('/index/selectdb');
$this->assertRedirectTo('/index/phpinfo');
// check if actual db was switched
$this->assertEquals(
'information_schema',
$config->get('dynamic.dbActual')
);
}
public function testCanToggleMenuStatus()
{
$this->dispatch('index/ajax.Toggle.Menu');
$menu = new Zend_Session_Namespace('menu');
$this->assertEquals(1, $menu->showMenu);
$this->dispatch('index/ajax.Toggle.Menu');
$this->assertEquals(0, $menu->showMenu);
}
public function testCanSwitchConfiguration()
{
$this->loginUser();
$this->getRequest()
->setMethod('POST')
->setParams(
array(
'lastAction' => 'phpinfo',
'lastController' => 'index',
'selectedConfig' => base64_encode('mysqldumper')
)
);
$this->dispatch('/index/switchconfig');
$config = Msd_Configuration::getInstance();
$this->assertEquals('mysqldumper', $config->get('dynamic.configFile'));
// are we still on the phpinfo page?
$this->assertQueryCount('#phpinfo', 1);
// now lets switch to another configuration
$this->clearRequest();
$this->getRequest()
->setMethod('POST')
->setParams(
array(
'lastAction' => 'phpinfo',
'lastController' => 'index',
'selectedConfig' => base64_encode('mysqldumper2')
)
);
$this->dispatch('/index/switchconfig');
$config = Msd_Configuration::getInstance();
$this->assertEquals('mysqldumper2', $config->get('dynamic.configFile'));
// are we still on the phpinfo page?
$this->assertQueryCount('#phpinfo', 1);
}
public function testCanLoadConfigFromSession()
{
$_SESSION = unserialize($this->loadFixtureFile('sessions/sessionTester.txt'));
$reflection = new ReflectionClass('Msd_Configuration');
$property = $reflection->getProperty('_instance');
$property->setAccessible(true);
$oldInstance = $property->getValue(null);
$property->setValue(null, null);
Msd_Configuration::getInstance();
$property->setValue(null, $oldInstance);
$this->loginUser();
$this->assertTrue(true);
}
}