268 Zeilen
		
	
	
		
			Kein EOL
		
	
	
		
			8,7 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			268 Zeilen
		
	
	
		
			Kein 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);
 | 
						|
    }
 | 
						|
 | 
						|
} |