%PDF-1.5 %���� ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY
| Server IP : 122.154.253.140  /  Your IP : 216.73.216.49 Web Server : Microsoft-IIS/7.5 System : Windows NT SERVER02 6.1 build 7601 (Windows Server 2008 R2 Standard Edition Service Pack 1) i586 User : IUSR ( 0) PHP Version : 5.6.31 Disable Function : NONE MySQL : ON | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : C:/BK/wwwroot/phpMyAdmin/test/classes/controllers/  | 
Upload File :  | 
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
 * Tests for libraries/controllers/TableIndexesController.php
 *
 * @package PhpMyAdmin-test
 */
use PMA\libraries\controllers\table\TableIndexesController;
use PMA\libraries\di\Container;
use PMA\libraries\Theme;
/*
 * Include to test.
 */
require_once 'libraries/database_interface.inc.php';
require_once 'libraries/relation.lib.php';
require_once 'libraries/url_generating.lib.php';
require_once 'libraries/sanitizing.lib.php';
require_once 'test/libraries/stubs/ResponseStub.php';
require_once 'test/PMATestCase.php';
/**
 * Tests for libraries/controllers/TableIndexesController.php
 *
 * @package PhpMyAdmin-test
 */
class TableIndexesControllerTest extends PMATestCase
{
    /**
     * Setup function for test cases
     *
     * @access protected
     * @return void
     */
    protected function setUp()
    {
        /**
         * SET these to avoid undefined index error
         */
        $GLOBALS['server'] = 1;
        $GLOBALS['cfg']['Server']['pmadb'] = '';
        $GLOBALS['pmaThemeImage'] = 'theme/';
        $GLOBALS['url_params'] = array(
            'db' => 'db',
            'server' => 1
        );
        $dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
            ->disableOriginalConstructor()
            ->getMock();
        $indexs = array(
            array(
                "Schema" => "Schema1",
                "Key_name"=>"Key_name1",
                "Column_name"=>"Column_name1"
            ),
            array(
                "Schema" => "Schema2",
                "Key_name"=>"Key_name2",
                "Column_name"=>"Column_name2"
            ),
            array(
                "Schema" => "Schema3",
                "Key_name"=>"Key_name3",
                "Column_name"=>"Column_name3"
            ),
        );
        $dbi->expects($this->any())->method('getTableIndexes')
            ->will($this->returnValue($indexs));
        $GLOBALS['dbi'] = $dbi;
        //$_SESSION
        $_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
        $_SESSION['PMA_Theme'] = new Theme();
    }
    /**
     * Tests for doSaveDataAction() method
     *
     * @return void
     * @test
     */
    public function testDoSaveDataAction()
    {
        $sql_query = 'ALTER TABLE `db`.`table` DROP PRIMARY KEY, ADD UNIQUE ;';
        $table = $this->getMockBuilder('PMA\libraries\Table')
            ->disableOriginalConstructor()
            ->getMock();
        $table->expects($this->any())->method('getSqlQueryForIndexCreateOrEdit')
            ->will($this->returnValue($sql_query));
        $GLOBALS['dbi']->expects($this->any())->method('getTable')
            ->will($this->returnValue($table));
        $container = Container::getDefaultContainer();
        $container->set('db', 'db');
        $container->set('table', 'table');
        $container->set('dbi', $GLOBALS['dbi']);
        $response = new \PMA\Test\Stubs\Response();
        $container->set('PMA\libraries\Response', $response);
        $container->alias('response', 'PMA\libraries\Response');
        $ctrl = new TableIndexesController(null);
        // Preview SQL
        $_REQUEST['preview_sql'] = true;
        $ctrl->doSaveDataAction();
        $jsonArray = $response->getJSONResult();
        $this->assertArrayHasKey('sql_data', $jsonArray);
        $this->assertContains(
            $sql_query,
            $jsonArray['sql_data']
        );
        // Alter success
        $response->clear();
        unset($_REQUEST['preview_sql']);
        $GLOBALS['is_ajax_request'] = true;
        $ctrl->doSaveDataAction();
        $jsonArray = $response->getJSONResult();
        $this->assertArrayHasKey('index_table', $jsonArray);
        $this->assertArrayHasKey('message', $jsonArray);
    }
    /**
     * Tests for displayFormAction()
     *
     * @return void
     * @test
     */
    public function testDisplayFormAction()
    {
        $table = $this->getMockBuilder('PMA\libraries\Table')
            ->disableOriginalConstructor()
            ->getMock();
        $table->expects($this->any())->method('getStatusInfo')
            ->will($this->returnValue(""));
        $table->expects($this->any())->method('isView')
            ->will($this->returnValue(false));
        $table->expects($this->any())->method('getNameAndTypeOfTheColumns')
            ->will($this->returnValue(array("field_name" => "field_type")));
        $GLOBALS['dbi']->expects($this->any())->method('getTable')
            ->will($this->returnValue($table));
        $container = Container::getDefaultContainer();
        $container->set('db', 'db');
        $container->set('table', 'table');
        $container->set('dbi', $GLOBALS['dbi']);
        $response = new \PMA\Test\Stubs\Response();
        $container->set('PMA\libraries\Response', $response);
        $container->alias('response', 'PMA\libraries\Response');
        $index = new PMA\libraries\Index();
        $ctrl = new TableIndexesController($index);
        $_REQUEST['create_index'] = true;
        $_REQUEST['added_fields'] = 3;
        $ctrl->displayFormAction();
        $html = $response->getHTMLResult();
        //PMA_URL_getHiddenInputs
        $this->assertContains(
            PMA_URL_getHiddenInputs(
                array(
                    'db' => 'db',
                    'table' => 'table',
                    'create_index' => 1,
                )
            ),
            $html
        );
        $doc_html = PMA\libraries\Util::showHint(
            PMA\libraries\Message::notice(
                __(
                    '"PRIMARY" <b>must</b> be the name of'
                    . ' and <b>only of</b> a primary key!'
                )
            )
        );
        $this->assertContains(
            $doc_html,
            $html
        );
        $this->assertContains(
            PMA\libraries\Util::showMySQLDocu('ALTER_TABLE'),
            $html
        );
        // generateIndexSelector
        $this->assertContains(
            $index->generateIndexChoiceSelector(false),
            $html
        );
        $this->assertContains(
            sprintf(__('Add %s column(s) to index'), 1),
            $html
        );
        //$field_name & $field_type
        $this->assertContains(
            "field_name",
            $html
        );
        $this->assertContains(
            "field_type",
            $html
        );
    }
}