Initial commit
This commit is contained in:
@ -0,0 +1,416 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* DatabaseStructureController_Test class
|
||||
*
|
||||
* this class is for testing DatabaseStructureController class
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include to test.
|
||||
*/
|
||||
use PMA\libraries\controllers\database\DatabaseStructureController;
|
||||
use PMA\libraries\di\Container;
|
||||
use PMA\libraries\Table;
|
||||
use PMA\libraries\Theme;
|
||||
|
||||
require_once 'test/PMATestCase.php';
|
||||
require_once 'libraries/database_interface.inc.php';
|
||||
require_once 'test/libraries/stubs/ResponseStub.php';
|
||||
|
||||
/**
|
||||
* DatabaseStructureController_Test class
|
||||
*
|
||||
* this class is for testing DatabaseStructureController class
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
class DatabaseStructureControllerTest extends PMATestCase
|
||||
{
|
||||
/**
|
||||
* @var \PMA\Test\Stubs\Response
|
||||
*/
|
||||
private $_response;
|
||||
|
||||
/**
|
||||
* Prepares environment for the test.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setUp()
|
||||
{
|
||||
//$_REQUEST
|
||||
$_REQUEST['log'] = "index1";
|
||||
$_REQUEST['pos'] = 3;
|
||||
|
||||
//$GLOBALS
|
||||
$GLOBALS['server'] = 1;
|
||||
$GLOBALS['cfg']['Server']['DisableIS'] = false;
|
||||
|
||||
$GLOBALS['table'] = "table";
|
||||
$GLOBALS['pmaThemeImage'] = 'image';
|
||||
|
||||
//$_SESSION
|
||||
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
|
||||
$_SESSION['PMA_Theme'] = new Theme();
|
||||
|
||||
if (!defined('PMA_USR_BROWSER_AGENT')) {
|
||||
define('PMA_USR_BROWSER_AGENT', 'Other');
|
||||
}
|
||||
|
||||
$table = $this->getMockBuilder('PMA\libraries\Table')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
// Expect the table will have 6 rows
|
||||
$table->expects($this->any())->method('getRealRowCountTable')
|
||||
->will($this->returnValue(6));
|
||||
$table->expects($this->any())->method('countRecords')
|
||||
->will($this->returnValue(6));
|
||||
|
||||
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$dbi->expects($this->any())->method('getTable')
|
||||
->will($this->returnValue($table));
|
||||
|
||||
$GLOBALS['dbi'] = $dbi;
|
||||
|
||||
$container = Container::getDefaultContainer();
|
||||
$container->set('db', 'db');
|
||||
$container->set('table', 'table');
|
||||
$container->set('dbi', $GLOBALS['dbi']);
|
||||
$this->_response = new \PMA\Test\Stubs\Response();
|
||||
$container->set('PMA\libraries\Response', $this->_response);
|
||||
$container->alias('response', 'PMA\libraries\Response');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for getValuesForInnodbTable()
|
||||
*
|
||||
* @return void
|
||||
* @test
|
||||
*/
|
||||
public function testGetValuesForInnodbTable()
|
||||
{
|
||||
$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');
|
||||
|
||||
$class = new ReflectionClass('PMA\libraries\controllers\database\DatabaseStructureController');
|
||||
$method = $class->getMethod('getValuesForInnodbTable');
|
||||
$method->setAccessible(true);
|
||||
$ctrl = new DatabaseStructureController(
|
||||
$GLOBALS['db'], null
|
||||
);
|
||||
// Showing statistics
|
||||
$property = $class->getProperty('_is_show_stats');
|
||||
$property->setAccessible(true);
|
||||
$property->setValue($ctrl, true);
|
||||
|
||||
$GLOBALS['cfg']['MaxExactCount'] = 10;
|
||||
$current_table = array(
|
||||
'ENGINE' => 'InnoDB',
|
||||
'TABLE_ROWS' => 5,
|
||||
'Data_length' => 16384,
|
||||
'Index_length' => 0,
|
||||
'TABLE_NAME' => 'table'
|
||||
);
|
||||
list($current_table,,, $sum_size)
|
||||
= $method->invokeArgs($ctrl, array($current_table, 10));
|
||||
|
||||
$this->assertEquals(
|
||||
true,
|
||||
$current_table['COUNTED']
|
||||
);
|
||||
$this->assertEquals(
|
||||
6,
|
||||
$current_table['TABLE_ROWS']
|
||||
);
|
||||
$this->assertEquals(
|
||||
16394,
|
||||
$sum_size
|
||||
);
|
||||
|
||||
$current_table['ENGINE'] = 'MYISAM';
|
||||
list($current_table,,, $sum_size)
|
||||
= $method->invokeArgs($ctrl, array($current_table, 10));
|
||||
|
||||
$this->assertEquals(
|
||||
false,
|
||||
$current_table['COUNTED']
|
||||
);
|
||||
$this->assertEquals(
|
||||
16394,
|
||||
$sum_size
|
||||
);
|
||||
// Not showing statistics
|
||||
$is_show_stats = false;
|
||||
$ctrl = new DatabaseStructureController(
|
||||
$GLOBALS['db'], null
|
||||
);
|
||||
|
||||
$current_table['ENGINE'] = 'InnoDB';
|
||||
list($current_table,,, $sum_size)
|
||||
= $method->invokeArgs($ctrl, array($current_table, 10));
|
||||
$this->assertEquals(
|
||||
true,
|
||||
$current_table['COUNTED']
|
||||
);
|
||||
$this->assertEquals(
|
||||
10,
|
||||
$sum_size
|
||||
);
|
||||
|
||||
$current_table['ENGINE'] = 'MYISAM';
|
||||
list($current_table,,, $sum_size)
|
||||
= $method->invokeArgs($ctrl, array($current_table, 10));
|
||||
$this->assertEquals(
|
||||
false,
|
||||
$current_table['COUNTED']
|
||||
);
|
||||
$this->assertEquals(
|
||||
10,
|
||||
$sum_size
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for the getValuesForAriaTable()
|
||||
*
|
||||
* @return void
|
||||
* @test
|
||||
*/
|
||||
public function testGetValuesForAriaTable()
|
||||
{
|
||||
$class = new ReflectionClass('PMA\libraries\controllers\database\DatabaseStructureController');
|
||||
$method = $class->getMethod('getValuesForAriaTable');
|
||||
$method->setAccessible(true);
|
||||
|
||||
$ctrl = new DatabaseStructureController(
|
||||
$GLOBALS['db'], null
|
||||
);
|
||||
// Showing statistics
|
||||
$property = $class->getProperty('_is_show_stats');
|
||||
$property->setAccessible(true);
|
||||
$property->setValue($ctrl, true);
|
||||
$property = $class->getProperty('_db_is_system_schema');
|
||||
$property->setAccessible(true);
|
||||
$property->setValue($ctrl, true);
|
||||
|
||||
$current_table = array(
|
||||
'Data_length' => 16384,
|
||||
'Index_length' => 0,
|
||||
'Name' => 'table',
|
||||
'Data_free' => 300,
|
||||
);
|
||||
list($current_table,,,,, $overhead_size, $sum_size)
|
||||
= $method->invokeArgs($ctrl, array($current_table, 0, 0, 0, 0, 0, 0,));
|
||||
$this->assertEquals(
|
||||
6,
|
||||
$current_table['Rows']
|
||||
);
|
||||
$this->assertEquals(
|
||||
16384,
|
||||
$sum_size
|
||||
);
|
||||
$this->assertEquals(
|
||||
300,
|
||||
$overhead_size
|
||||
);
|
||||
|
||||
unset($current_table['Data_free']);
|
||||
list($current_table,,,,, $overhead_size,)
|
||||
= $method->invokeArgs($ctrl, array($current_table, 0, 0, 0, 0, 0, 0,));
|
||||
$this->assertEquals(0, $overhead_size);
|
||||
|
||||
$is_show_stats = false;
|
||||
$ctrl = new DatabaseStructureController(
|
||||
$GLOBALS['db'], null
|
||||
);
|
||||
list($current_table,,,,,, $sum_size)
|
||||
= $method->invokeArgs($ctrl, array($current_table, 0, 0, 0, 0, 0, 0));
|
||||
$this->assertEquals(0, $sum_size);
|
||||
|
||||
$db_is_system_schema = false;
|
||||
$ctrl = new DatabaseStructureController(
|
||||
$GLOBALS['db'], null
|
||||
);
|
||||
list($current_table,,,,,,)
|
||||
= $method->invokeArgs($ctrl, array($current_table, 0, 0, 0, 0, 0, 0,));
|
||||
$this->assertArrayNotHasKey('Row', $current_table);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for hasTable()
|
||||
*
|
||||
* @return void
|
||||
* @test
|
||||
*/
|
||||
public function testHasTable()
|
||||
{
|
||||
$class = new ReflectionClass('PMA\libraries\controllers\database\DatabaseStructureController');
|
||||
$method = $class->getMethod('hasTable');
|
||||
$method->setAccessible(true);
|
||||
|
||||
$ctrl = new DatabaseStructureController(
|
||||
$GLOBALS['db'], null
|
||||
);
|
||||
|
||||
// When parameter $db is empty
|
||||
$this->assertEquals(
|
||||
false,
|
||||
$method->invokeArgs($ctrl, array(array(), 'table'))
|
||||
);
|
||||
|
||||
// Correct parameter
|
||||
$tables = array(
|
||||
'db.table'
|
||||
);
|
||||
$this->assertEquals(
|
||||
true,
|
||||
$method->invokeArgs($ctrl, array($tables, 'table'))
|
||||
);
|
||||
|
||||
// Table not in database
|
||||
$tables = array(
|
||||
'db.tab1e'
|
||||
);
|
||||
$this->assertEquals(
|
||||
false,
|
||||
$method->invokeArgs($ctrl, array($tables, 'table'))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for checkFavoriteTable()
|
||||
*
|
||||
* @return void
|
||||
* @test
|
||||
*/
|
||||
public function testCheckFavoriteTable()
|
||||
{
|
||||
$class = new ReflectionClass('PMA\libraries\controllers\database\DatabaseStructureController');
|
||||
$method = $class->getMethod('checkFavoriteTable');
|
||||
$method->setAccessible(true);
|
||||
|
||||
$ctrl = new DatabaseStructureController(
|
||||
$GLOBALS['db'], null
|
||||
);
|
||||
|
||||
$_SESSION['tmpval']['favorite_tables'][$GLOBALS['server']] = array(
|
||||
array('db' => 'db', 'table' => 'table')
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
false,
|
||||
$method->invokeArgs($ctrl, array(''))
|
||||
);
|
||||
|
||||
$this->assertEquals(
|
||||
true,
|
||||
$method->invokeArgs($ctrl, array('table'))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for synchronizeFavoriteTables()
|
||||
*
|
||||
* @return void
|
||||
* @test
|
||||
*/
|
||||
public function testSynchronizeFavoriteTables()
|
||||
{
|
||||
$fav_instance = $this->getMockBuilder('PMA\libraries\RecentFavoriteTable')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$fav_instance->expects($this->at(1))->method('getTables')
|
||||
->will($this->returnValue(array()));
|
||||
$fav_instance->expects($this->at(2))
|
||||
->method('getTables')
|
||||
->will(
|
||||
$this->returnValue(
|
||||
array(
|
||||
array('db' => 'db', 'table' => 'table'),
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
$class = new ReflectionClass('PMA\libraries\controllers\database\DatabaseStructureController');
|
||||
$method = $class->getMethod('synchronizeFavoriteTables');
|
||||
$method->setAccessible(true);
|
||||
|
||||
$ctrl = new DatabaseStructureController(
|
||||
$GLOBALS['db'], null
|
||||
);
|
||||
|
||||
// The user hash for test
|
||||
$user = 'abcdefg';
|
||||
$favorite_table = array(
|
||||
$user => array(
|
||||
array('db' => 'db', 'table' => 'table')
|
||||
),
|
||||
);
|
||||
|
||||
$method->invokeArgs($ctrl, array($fav_instance, $user, $favorite_table));
|
||||
$json = $this->_response->getJSONResult();
|
||||
|
||||
$this->assertEquals(json_encode($favorite_table), $json['favorite_tables']);
|
||||
$this->assertArrayHasKey('list', $json);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for handleRealRowCountRequestAction()
|
||||
*
|
||||
* @return void
|
||||
* @test
|
||||
*/
|
||||
public function testHandleRealRowCountRequestAction()
|
||||
{
|
||||
$_REQUEST['table'] = 'table';
|
||||
|
||||
$ctrl = new DatabaseStructureController(
|
||||
$GLOBALS['db'], null
|
||||
);
|
||||
// Showing statistics
|
||||
$class = new ReflectionClass('PMA\libraries\controllers\database\DatabaseStructureController');
|
||||
$property = $class->getProperty('_tables');
|
||||
$property->setAccessible(true);
|
||||
|
||||
$ctrl->handleRealRowCountRequestAction();
|
||||
$json = $this->_response->getJSONResult();
|
||||
$this->assertEquals(
|
||||
6,
|
||||
$json['real_row_count']
|
||||
);
|
||||
|
||||
// Fall into another branch
|
||||
$_REQUEST['real_row_count_all'] = 'abc';
|
||||
$property->setValue(
|
||||
$ctrl,
|
||||
array(
|
||||
array(
|
||||
'TABLE_NAME' => 'table'
|
||||
)
|
||||
)
|
||||
);
|
||||
$ctrl->handleRealRowCountRequestAction();
|
||||
$json = $this->_response->getJSONResult();
|
||||
|
||||
$expected_result = array(
|
||||
array(
|
||||
'table' => 'table',
|
||||
'row_count' => 6
|
||||
)
|
||||
);
|
||||
$this->assertEquals(
|
||||
json_encode($expected_result),
|
||||
$json['real_row_count_all']
|
||||
);
|
||||
}
|
||||
}
|
284
#pma/test/classes/controllers/ServerBinlogControllerTest.php
Normal file
284
#pma/test/classes/controllers/ServerBinlogControllerTest.php
Normal file
@ -0,0 +1,284 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* Holds ServerBinlogControllerTest
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
|
||||
use PMA\libraries\Theme;
|
||||
use PMA\libraries\controllers\server\ServerBinlogController;
|
||||
use PMA\libraries\di\Container;
|
||||
use PMA\libraries\Util;
|
||||
|
||||
require_once 'test/PMATestCase.php';
|
||||
require_once 'libraries/url_generating.lib.php';
|
||||
require_once 'libraries/database_interface.inc.php';
|
||||
require_once 'libraries/sanitizing.lib.php';
|
||||
require_once 'libraries/js_escape.lib.php';
|
||||
|
||||
/**
|
||||
* Tests for ServerCollationsController class
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
class ServerBinlogControllerTest extends PMATestCase
|
||||
{
|
||||
/**
|
||||
* Prepares environment for the test.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setUp()
|
||||
{
|
||||
//$_REQUEST
|
||||
$_REQUEST['log'] = "index1";
|
||||
$_REQUEST['pos'] = 3;
|
||||
|
||||
//$GLOBALS
|
||||
$GLOBALS['cfg']['MaxRows'] = 10;
|
||||
$GLOBALS['server'] = 1;
|
||||
$GLOBALS['cfg']['ServerDefault'] = "server";
|
||||
$GLOBALS['cfg']['RememberSorting'] = true;
|
||||
$GLOBALS['cfg']['SQP'] = array();
|
||||
$GLOBALS['cfg']['MaxCharactersInDisplayedSQL'] = 1000;
|
||||
$GLOBALS['cfg']['ShowSQL'] = true;
|
||||
$GLOBALS['cfg']['TableNavigationLinksMode'] = 'icons';
|
||||
$GLOBALS['cfg']['LimitChars'] = 100;
|
||||
|
||||
$GLOBALS['table'] = "table";
|
||||
$GLOBALS['pmaThemeImage'] = 'image';
|
||||
|
||||
//$_SESSION
|
||||
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
|
||||
$_SESSION['PMA_Theme'] = new Theme();
|
||||
|
||||
Util::cacheSet('profiling_supported', true);
|
||||
|
||||
$binary_log_file_names = array();
|
||||
$binary_log_file_names[] = array("Log_name"=>"index1", "File_size"=>100);
|
||||
$binary_log_file_names[] = array("Log_name"=>"index2", "File_size"=>200);
|
||||
|
||||
//Mock DBI
|
||||
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$dbi->expects($this->once())->method('fetchResult')
|
||||
->will($this->returnValue($binary_log_file_names));
|
||||
$container = Container::getDefaultContainer();
|
||||
$container->set('dbi', $dbi);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for _getLogSelector
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testGetLogSelector()
|
||||
{
|
||||
$url_params = array();
|
||||
$url_params['log'] = "log";
|
||||
$url_params['dontlimitchars'] = 1;
|
||||
|
||||
$class = new ReflectionClass('\PMA\libraries\controllers\server\ServerBinlogController');
|
||||
$method = $class->getMethod('_getLogSelector');
|
||||
$method->setAccessible(true);
|
||||
|
||||
$ctrl = new ServerBinlogController();
|
||||
$html = $method->invoke(
|
||||
$ctrl,
|
||||
$url_params
|
||||
);
|
||||
|
||||
$this->assertContains(
|
||||
'Select binary log to view',
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
'<option value="index1" selected="selected">',
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
'<option value="index2">',
|
||||
$html
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for _getLogInfo
|
||||
*
|
||||
* @return void
|
||||
* @group medium
|
||||
*/
|
||||
public function testGetLogInfo()
|
||||
{
|
||||
$class = new ReflectionClass('\PMA\libraries\controllers\server\ServerBinlogController');
|
||||
$method = $class->getMethod('_getLogInfo');
|
||||
$method->setAccessible(true);
|
||||
$ctrl = new ServerBinlogController();
|
||||
|
||||
//Mock DBI
|
||||
$container = Container::getDefaultContainer();
|
||||
$dbi = $container->get('dbi');
|
||||
|
||||
//expects return value
|
||||
$result = array(
|
||||
array(
|
||||
"SHOW BINLOG EVENTS IN 'index1' LIMIT 3, 10",
|
||||
null,
|
||||
1,
|
||||
true,
|
||||
array("log1"=>"logd")
|
||||
),
|
||||
array(
|
||||
array("log2"=>"logb"),
|
||||
null,
|
||||
0,
|
||||
false,
|
||||
'executed'
|
||||
)
|
||||
);
|
||||
$value = array(
|
||||
'Info' => "index1_Info",
|
||||
'Log_name' => "index1_Log_name",
|
||||
'Pos' => "index1_Pos",
|
||||
'Event_type' => "index1_Event_type",
|
||||
'End_log_pos' => "index1_End_log_pos",
|
||||
'Server_id' => "index1_Server_id",
|
||||
);
|
||||
$count = 3;
|
||||
|
||||
//expects functions
|
||||
$dbi->expects($this->once())->method('query')
|
||||
->will($this->returnValue($result));
|
||||
|
||||
$dbi->expects($this->once())->method('numRows')
|
||||
->will($this->returnValue($count));
|
||||
|
||||
$dbi->expects($this->at(0))->method('fetchAssoc')
|
||||
->will($this->returnValue($value));
|
||||
|
||||
$dbi->expects($this->at(1))->method('fetchAssoc')
|
||||
->will($this->returnValue(false));
|
||||
|
||||
$container->set('dbi', $dbi);
|
||||
|
||||
//Call the test function
|
||||
$url_params = array();
|
||||
$url_params['log'] = "log";
|
||||
$url_params['dontlimitchars'] = 1;
|
||||
$html = $method->invoke($ctrl, $url_params);
|
||||
|
||||
//validate 1: the sql has been executed
|
||||
$this->assertContains(
|
||||
'Your SQL query has been executed successfully',
|
||||
$html
|
||||
);
|
||||
//validate 2: SQL
|
||||
$this->assertContains(
|
||||
"SHOW BINLOG EVENTS IN 'index1' LIMIT 3, 10",
|
||||
$html
|
||||
);
|
||||
//validate 3: BINLOG HTML
|
||||
$this->assertContains(
|
||||
'<table id="binlogTable">',
|
||||
$html
|
||||
);
|
||||
//validate 4: PMA_getNavigationRow is right
|
||||
$urlNavigation = 'server_binlog.php?log=log&dontlimitchars=1&'
|
||||
. 'pos=3&server=1&';
|
||||
$this->assertContains(
|
||||
$urlNavigation,
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
'title="Previous"',
|
||||
$html
|
||||
);
|
||||
//validate 5: Log Item
|
||||
$this->assertContains(
|
||||
'Log name',
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
'Position',
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
'Event type',
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
'Server ID',
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
'Original position',
|
||||
$html
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for _getAllLogItemInfo
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testGetAllLogItemInfo()
|
||||
{
|
||||
$class = new ReflectionClass('\PMA\libraries\controllers\server\ServerBinlogController');
|
||||
$method = $class->getMethod('_getAllLogItemInfo');
|
||||
$method->setAccessible(true);
|
||||
$ctrl = new ServerBinlogController();
|
||||
|
||||
//Mock DBI
|
||||
$container = Container::getDefaultContainer();
|
||||
$dbi = $container->get('dbi');
|
||||
|
||||
$fetchAssoc = array(
|
||||
'Info' => 'Info',
|
||||
'Log_name' => 'Log_name',
|
||||
'Pos' => 'Pos',
|
||||
'Event_type' => 'Event_type',
|
||||
'Server_id' => 'Server_id',
|
||||
'Orig_log_pos' => 'Orig_log_pos',
|
||||
'End_log_pos' => 'End_log_pos',
|
||||
);
|
||||
$dbi->expects($this->at(0))->method('fetchAssoc')
|
||||
->will($this->returnValue($fetchAssoc));
|
||||
$dbi->expects($this->at(1))->method('fetchAssoc')
|
||||
->will($this->returnValue(false));
|
||||
$container->set('dbi', $dbi);
|
||||
|
||||
$GLOBALS['cfg']['LimitChars'] = 2;
|
||||
|
||||
$result = array();
|
||||
$dontlimitchars = ";";
|
||||
$html = $method->invoke($ctrl, $result, $dontlimitchars);
|
||||
|
||||
$value = $fetchAssoc;
|
||||
$this->assertContains(
|
||||
$value['Log_name'],
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
$value['Pos'],
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
$value['Event_type'],
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
$value['Server_id'],
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
$value['Orig_log_pos'],
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
htmlspecialchars($value['Info']),
|
||||
$html
|
||||
);
|
||||
}
|
||||
}
|
151
#pma/test/classes/controllers/ServerCollationsControllerTest.php
Normal file
151
#pma/test/classes/controllers/ServerCollationsControllerTest.php
Normal file
@ -0,0 +1,151 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* Holds ServerCollationsControllerTest class
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include to test.
|
||||
*/
|
||||
//$GLOBALS
|
||||
use PMA\libraries\Theme;
|
||||
use PMA\libraries\controllers\server\ServerCollationsController;
|
||||
|
||||
$GLOBALS['server'] = 1;
|
||||
$GLOBALS['is_superuser'] = false;
|
||||
$GLOBALS['cfg']['ServerDefault'] = 1;
|
||||
$GLOBALS['url_query'] = "url_query";
|
||||
$GLOBALS['PMA_PHP_SELF'] = PMA_getenv('PHP_SELF');
|
||||
$GLOBALS['lang'] = "en";
|
||||
$GLOBALS['text_dir'] = "text_dir";
|
||||
$GLOBALS['cfg']['Server'] = array(
|
||||
'DisableIS' => false
|
||||
);
|
||||
//$_SESSION
|
||||
|
||||
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
|
||||
|
||||
|
||||
require_once 'libraries/url_generating.lib.php';
|
||||
|
||||
|
||||
require_once 'libraries/sanitizing.lib.php';
|
||||
require_once 'libraries/js_escape.lib.php';
|
||||
require_once 'libraries/database_interface.inc.php';
|
||||
require_once 'libraries/server_common.inc.php';
|
||||
require_once 'libraries/mysql_charsets.inc.php';
|
||||
require_once 'test/PMATestCase.php';
|
||||
|
||||
/**
|
||||
* Tests for ServerCollationsController class
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
class ServerCollationsControllerTest extends PMATestCase
|
||||
{
|
||||
/**
|
||||
* Prepares environment for the test.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setUp()
|
||||
{
|
||||
//$_REQUEST
|
||||
$_REQUEST['log'] = "index1";
|
||||
$_REQUEST['pos'] = 3;
|
||||
|
||||
//$GLOBALS
|
||||
$GLOBALS['is_ajax_request'] = true;
|
||||
$GLOBALS['table'] = "table";
|
||||
$GLOBALS['pmaThemeImage'] = 'image';
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_getHtmlForCharsets
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testPMAGetHtmlForCharsets()
|
||||
{
|
||||
$mysql_charsets = array("armscii8", "ascii", "big5", "binary");
|
||||
$mysql_collations = array(
|
||||
"armscii8" => array("armscii8"),
|
||||
"ascii" => array("ascii"),
|
||||
"big5" => array("big5"),
|
||||
"binary" => array("binary"),
|
||||
);
|
||||
$mysql_charsets_descriptions = array(
|
||||
"armscii8" => "PMA_armscii8_general_ci",
|
||||
"ascii" => "PMA_ascii_general_ci",
|
||||
"big5" => "PMA_big5_general_ci",
|
||||
"binary" => "PMA_binary_general_ci",
|
||||
);
|
||||
$mysql_default_collations = array(
|
||||
"armscii8" => "armscii8",
|
||||
"ascii" => "ascii",
|
||||
"big5" => "big5",
|
||||
"binary" => "binary",
|
||||
);
|
||||
$mysql_collations_available = array(
|
||||
"armscii8" => true,
|
||||
"ascii" => true,
|
||||
"big5" => true,
|
||||
"binary" => true,
|
||||
);
|
||||
|
||||
$class = new ReflectionClass('\PMA\libraries\controllers\server\ServerCollationsController');
|
||||
$method = $class->getMethod('_getHtmlForCharsets');
|
||||
$method->setAccessible(true);
|
||||
|
||||
$ctrl = new ServerCollationsController();
|
||||
$html = $method->invoke(
|
||||
$ctrl,
|
||||
$mysql_charsets,
|
||||
$mysql_collations,
|
||||
$mysql_charsets_descriptions,
|
||||
$mysql_default_collations,
|
||||
$mysql_collations_available
|
||||
);
|
||||
|
||||
//validate 1: Charset HTML
|
||||
$this->assertContains(
|
||||
'<div id="div_mysql_charset_collations">',
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
__('Collation'),
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
__('Description'),
|
||||
$html
|
||||
);
|
||||
//validate 2: Charset Item
|
||||
$this->assertContains(
|
||||
'<i>PMA_armscii8_general_ci</i>',
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
'<td>armscii8</td>',
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
'<i>PMA_ascii_general_ci</i>',
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
'<td>ascii</td>',
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
'<i>PMA_big5_general_ci</i>',
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
'<td>big5</td>',
|
||||
$html
|
||||
);
|
||||
}
|
||||
}
|
324
#pma/test/classes/controllers/ServerDatabasesControllerTest.php
Normal file
324
#pma/test/classes/controllers/ServerDatabasesControllerTest.php
Normal file
@ -0,0 +1,324 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* Holds ServerDatabasesControllerTest class
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
|
||||
use PMA\libraries\di\Container;
|
||||
use PMA\libraries\Theme;
|
||||
|
||||
require_once 'libraries/url_generating.lib.php';
|
||||
require_once 'libraries/mysql_charsets.lib.php';
|
||||
|
||||
require_once 'libraries/database_interface.inc.php';
|
||||
|
||||
require_once 'libraries/sanitizing.lib.php';
|
||||
require_once 'libraries/js_escape.lib.php';
|
||||
|
||||
require_once 'test/libraries/stubs/ResponseStub.php';
|
||||
require_once 'test/PMATestCase.php';
|
||||
|
||||
/**
|
||||
* Tests for ServerDatabasesController class
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
|
||||
class ServerDatabasesControllerTest extends PMATestCase
|
||||
{
|
||||
/**
|
||||
* Prepares environment for the test.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setUp()
|
||||
{
|
||||
//$_REQUEST
|
||||
$_REQUEST['log'] = "index1";
|
||||
$_REQUEST['pos'] = 3;
|
||||
|
||||
//$GLOBALS
|
||||
$GLOBALS['PMA_Config'] = new PMA\libraries\Config();
|
||||
$GLOBALS['PMA_Config']->enableBc();
|
||||
$GLOBALS['is_superuser'] = true;
|
||||
|
||||
$GLOBALS['table'] = "table";
|
||||
$GLOBALS['replication_info']['master']['status'] = false;
|
||||
$GLOBALS['replication_info']['slave']['status'] = false;
|
||||
$GLOBALS['pmaThemeImage'] = 'image';
|
||||
$GLOBALS['text_dir'] = "text_dir";
|
||||
|
||||
//$_SESSION
|
||||
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
|
||||
$_SESSION['PMA_Theme'] = new Theme();
|
||||
$GLOBALS['server'] = 1;
|
||||
|
||||
$container = Container::getDefaultContainer();
|
||||
$container->set('dbi', $GLOBALS['dbi']);
|
||||
$this->response = new \PMA\Test\Stubs\Response();
|
||||
$container->set('PMA\libraries\Response', $this->response);
|
||||
$container->alias('response', 'PMA\libraries\Response');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for _getHtmlForDatabases
|
||||
*
|
||||
* @return void
|
||||
* @group medium
|
||||
*/
|
||||
public function testGetHtmlForDatabase()
|
||||
{
|
||||
$class = new ReflectionClass('\PMA\libraries\controllers\server\ServerDatabasesController');
|
||||
$method = $class->getMethod('_getHtmlForDatabases');
|
||||
$method->setAccessible(true);
|
||||
|
||||
$container = Container::getDefaultContainer();
|
||||
$container->factory('PMA\libraries\controllers\server\ServerDatabasesController');
|
||||
$container->alias(
|
||||
'ServerDatabasesController', 'PMA\libraries\controllers\server\ServerDatabasesController'
|
||||
);
|
||||
$ctrl = $container->get('ServerDatabasesController');
|
||||
|
||||
//Call the test function
|
||||
$databases = array(
|
||||
array("SCHEMA_NAME" => "pma_bookmark"),
|
||||
array("SCHEMA_NAME" => "information_schema"),
|
||||
array("SCHEMA_NAME" => "mysql"),
|
||||
array("SCHEMA_NAME" => "performance_schema"),
|
||||
array("SCHEMA_NAME" => "phpmyadmin")
|
||||
);
|
||||
$property = $class->getProperty('_databases');
|
||||
$property->setAccessible(true);
|
||||
$property->setValue($ctrl, $databases);
|
||||
|
||||
$property = $class->getProperty('_database_count');
|
||||
$property->setAccessible(true);
|
||||
$property->setValue($ctrl, 5);
|
||||
|
||||
$property = $class->getProperty('_pos');
|
||||
$property->setAccessible(true);
|
||||
$property->setValue($ctrl, 0);
|
||||
|
||||
$property = $class->getProperty('_dbstats');
|
||||
$property->setAccessible(true);
|
||||
$property->setValue($ctrl, 0);
|
||||
|
||||
$property = $class->getProperty('_sort_by');
|
||||
$property->setAccessible(true);
|
||||
$property->setValue($ctrl, 'SCHEMA_NAME');
|
||||
|
||||
$property = $class->getProperty('_sort_order');
|
||||
$property->setAccessible(true);
|
||||
$property->setValue($ctrl, 'asc');
|
||||
|
||||
$replication_types = array("master", "slave");
|
||||
|
||||
$html = $method->invoke($ctrl, $replication_types);
|
||||
|
||||
//validate 1: General info
|
||||
$this->assertContains(
|
||||
'<div id="tableslistcontainer">',
|
||||
$html
|
||||
);
|
||||
|
||||
//validate 2:ajax Form
|
||||
$this->assertContains(
|
||||
'<form class="ajax" action="server_databases.php" ',
|
||||
$html
|
||||
);
|
||||
|
||||
$this->assertContains(
|
||||
'<table id="tabledatabases" class="data">',
|
||||
$html
|
||||
);
|
||||
|
||||
//validate 3: PMA_getHtmlForColumnOrderWithSort
|
||||
$this->assertContains(
|
||||
'<a href="server_databases.php',
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
'sort_by=SCHEMA_NAME',
|
||||
$html
|
||||
);
|
||||
|
||||
//validate 4: PMA_getHtmlAndColumnOrderForDatabaseList
|
||||
$this->assertRegExp(
|
||||
'/title="pma_bookmark"[[:space:]]*value="pma_bookmark"/',
|
||||
$html
|
||||
);
|
||||
$this->assertRegExp(
|
||||
'/title="information_schema"[[:space:]]*value="information_schema"/',
|
||||
$html
|
||||
);
|
||||
$this->assertRegExp(
|
||||
'/title="performance_schema"[[:space:]]*value="performance_schema"/',
|
||||
$html
|
||||
);
|
||||
$this->assertRegExp(
|
||||
'/title="phpmyadmin"[[:space:]]*value="phpmyadmin"/',
|
||||
$html
|
||||
);
|
||||
|
||||
//validate 5: PMA_getHtmlForTableFooter
|
||||
$this->assertContains(
|
||||
'Total: <span id="databases_count">5</span>',
|
||||
$html
|
||||
);
|
||||
|
||||
//validate 6: PMA_getHtmlForTableFooterButtons
|
||||
$this->assertContains(
|
||||
'Check all',
|
||||
$html
|
||||
);
|
||||
|
||||
//validate 7: PMA_getHtmlForNoticeEnableStatistics
|
||||
$this->assertContains(
|
||||
'Note: Enabling the database statistics here might cause heavy traffic',
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
'Enable statistics',
|
||||
$html
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for _setSortDetails()
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testSetSortDetails()
|
||||
{
|
||||
$class = new ReflectionClass('\PMA\libraries\controllers\server\ServerDatabasesController');
|
||||
$method = $class->getMethod('_setSortDetails');
|
||||
$method->setAccessible(true);
|
||||
$propertySortBy = $class->getProperty('_sort_by');
|
||||
$propertySortBy->setAccessible(true);
|
||||
$propertySortOrder = $class->getProperty('_sort_order');
|
||||
$propertySortOrder->setAccessible(true);
|
||||
|
||||
$container = Container::getDefaultContainer();
|
||||
$container->factory('PMA\libraries\controllers\server\ServerDatabasesController');
|
||||
$container->alias(
|
||||
'ServerDatabasesController', 'PMA\libraries\controllers\server\ServerDatabasesController'
|
||||
);
|
||||
$ctrl = $container->get('ServerDatabasesController');
|
||||
|
||||
//$_REQUEST['sort_by'] and $_REQUEST['sort_order'] are empty
|
||||
$method->invoke($ctrl, array("master", "slave"));
|
||||
$this->assertEquals(
|
||||
'SCHEMA_NAME',
|
||||
$propertySortBy->getValue($ctrl)
|
||||
);
|
||||
$this->assertEquals(
|
||||
'asc',
|
||||
$propertySortOrder->getValue($ctrl)
|
||||
);
|
||||
|
||||
$container = Container::getDefaultContainer();
|
||||
$container->factory('PMA\libraries\controllers\server\ServerDatabasesController');
|
||||
$container->alias(
|
||||
'ServerDatabasesController', 'PMA\libraries\controllers\server\ServerDatabasesController'
|
||||
);
|
||||
$ctrl = $container->get('ServerDatabasesController');
|
||||
|
||||
// $_REQUEST['sort_by'] = 'DEFAULT_COLLATION_NAME'
|
||||
// and $_REQUEST['sort_order'] is not 'desc'
|
||||
$_REQUEST['sort_by'] = 'DEFAULT_COLLATION_NAME';
|
||||
$_REQUEST['sort_order'] = 'abc';
|
||||
$method->invoke($ctrl);
|
||||
$this->assertEquals(
|
||||
'DEFAULT_COLLATION_NAME',
|
||||
$propertySortBy->getValue($ctrl)
|
||||
);
|
||||
$this->assertEquals(
|
||||
'asc',
|
||||
$propertySortOrder->getValue($ctrl)
|
||||
);
|
||||
|
||||
$container = Container::getDefaultContainer();
|
||||
$container->factory('PMA\libraries\controllers\server\ServerDatabasesController');
|
||||
$container->alias(
|
||||
'ServerDatabasesController', 'PMA\libraries\controllers\server\ServerDatabasesController'
|
||||
);
|
||||
$ctrl = $container->get('ServerDatabasesController');
|
||||
|
||||
// $_REQUEST['sort_by'] = 'DEFAULT_COLLATION_NAME'
|
||||
// and $_REQUEST['sort_order'] is 'desc'
|
||||
$_REQUEST['sort_by'] = 'DEFAULT_COLLATION_NAME';
|
||||
$_REQUEST['sort_order'] = 'desc';
|
||||
$method->invoke($ctrl);
|
||||
$this->assertEquals(
|
||||
'DEFAULT_COLLATION_NAME',
|
||||
$propertySortBy->getValue($ctrl)
|
||||
);
|
||||
$this->assertEquals(
|
||||
'desc',
|
||||
$propertySortOrder->getValue($ctrl)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for _getColumnOrder()
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testGetColumnOrder()
|
||||
{
|
||||
$class = new ReflectionClass('\PMA\libraries\controllers\server\ServerDatabasesController');
|
||||
$method = $class->getMethod('_getColumnOrder');
|
||||
$method->setAccessible(true);
|
||||
|
||||
$container = Container::getDefaultContainer();
|
||||
$container->factory('PMA\libraries\controllers\server\ServerDatabasesController');
|
||||
$container->alias(
|
||||
'ServerDatabasesController', 'PMA\libraries\controllers\server\ServerDatabasesController'
|
||||
);
|
||||
$ctrl = $container->get('ServerDatabasesController');
|
||||
|
||||
$this->assertEquals(
|
||||
array(
|
||||
'DEFAULT_COLLATION_NAME' => array(
|
||||
'disp_name' => __('Collation'),
|
||||
'description_function' => 'PMA_getCollationDescr',
|
||||
'format' => 'string',
|
||||
'footer' => 'utf8_general_ci'
|
||||
),
|
||||
'SCHEMA_TABLES' => array(
|
||||
'disp_name' => __('Tables'),
|
||||
'format' => 'number',
|
||||
'footer' => 0
|
||||
),
|
||||
'SCHEMA_TABLE_ROWS' => array(
|
||||
'disp_name' => __('Rows'),
|
||||
'format' => 'number',
|
||||
'footer' => 0
|
||||
),
|
||||
'SCHEMA_DATA_LENGTH' => array(
|
||||
'disp_name' => __('Data'),
|
||||
'format' => 'byte',
|
||||
'footer' => 0
|
||||
),
|
||||
'SCHEMA_INDEX_LENGTH' => array(
|
||||
'disp_name' => __('Indexes'),
|
||||
'format' => 'byte',
|
||||
'footer' => 0
|
||||
),
|
||||
'SCHEMA_LENGTH' => array(
|
||||
'disp_name' => __('Total'),
|
||||
'format' => 'byte',
|
||||
'footer' => 0
|
||||
),
|
||||
'SCHEMA_DATA_FREE' => array(
|
||||
'disp_name' => __('Overhead'),
|
||||
'format' => 'byte',
|
||||
'footer' => 0
|
||||
)
|
||||
),
|
||||
$method->invoke($ctrl)
|
||||
);
|
||||
}
|
||||
}
|
170
#pma/test/classes/controllers/ServerEnginesControllerTest.php
Normal file
170
#pma/test/classes/controllers/ServerEnginesControllerTest.php
Normal file
@ -0,0 +1,170 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* Holds ServerEnginesControllerTest class
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
|
||||
use PMA\libraries\StorageEngine;
|
||||
use PMA\libraries\Theme;
|
||||
use PMA\libraries\controllers\server\ServerEnginesController;
|
||||
|
||||
require_once 'libraries/url_generating.lib.php';
|
||||
|
||||
require_once 'libraries/database_interface.inc.php';
|
||||
|
||||
require_once 'libraries/sanitizing.lib.php';
|
||||
require_once 'libraries/js_escape.lib.php';
|
||||
require_once 'test/PMATestCase.php';
|
||||
|
||||
/**
|
||||
* Tests for ServerEnginesController class
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
class ServerEnginesControllerTest extends PMATestCase
|
||||
{
|
||||
/**
|
||||
* Prepares environment for the test.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setUp()
|
||||
{
|
||||
//$_REQUEST
|
||||
$_REQUEST['log'] = "index1";
|
||||
$_REQUEST['pos'] = 3;
|
||||
|
||||
//$GLOBALS
|
||||
$GLOBALS['server'] = 0;
|
||||
$GLOBALS['table'] = "table";
|
||||
$GLOBALS['pmaThemeImage'] = 'image';
|
||||
|
||||
//$_SESSION
|
||||
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
|
||||
$_SESSION['PMA_Theme'] = new Theme();
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for _getHtmlForAllServerEngines() method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testGetHtmlForAllServerEngines()
|
||||
{
|
||||
$class = new ReflectionClass('\PMA\libraries\controllers\server\ServerEnginesController');
|
||||
$method = $class->getMethod('_getHtmlForAllServerEngines');
|
||||
$method->setAccessible(true);
|
||||
|
||||
$ctrl = new ServerEnginesController();
|
||||
$html = $method->invoke($ctrl);
|
||||
|
||||
//validate 1: Item header
|
||||
$this->assertContains(
|
||||
'<th>Storage Engine</th>',
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
'<th>Description</th>',
|
||||
$html
|
||||
);
|
||||
|
||||
//validate 2: FEDERATED
|
||||
$this->assertContains(
|
||||
'<td>Federated MySQL storage engine</td>',
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
'FEDERATED',
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
'server_engines.php?engine=FEDERATED',
|
||||
$html
|
||||
);
|
||||
|
||||
//validate 3: dummy
|
||||
$this->assertContains(
|
||||
'<td>dummy comment</td>',
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
'dummy',
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
'server_engines.php?engine=dummy',
|
||||
$html
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for _getHtmlForServerEngine() method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testGetHtmlForServerEngine()
|
||||
{
|
||||
$_REQUEST['engine'] = "Pbxt";
|
||||
$_REQUEST['page'] = "page";
|
||||
//Mock DBI
|
||||
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$GLOBALS['dbi'] = $dbi;
|
||||
|
||||
$class = new ReflectionClass('\PMA\libraries\controllers\server\ServerEnginesController');
|
||||
$method = $class->getMethod('_getHtmlForServerEngine');
|
||||
$method->setAccessible(true);
|
||||
|
||||
$engine_plugin = StorageEngine::getEngine("Pbxt");
|
||||
$ctrl = new ServerEnginesController();
|
||||
$html = $method->invoke($ctrl, $engine_plugin);
|
||||
|
||||
//validate 1: Engine title
|
||||
$this->assertContains(
|
||||
htmlspecialchars($engine_plugin->getTitle()),
|
||||
$html
|
||||
);
|
||||
|
||||
//validate 2: Engine Mysql Help Page
|
||||
$this->assertContains(
|
||||
PMA\libraries\Util::showMySQLDocu($engine_plugin->getMysqlHelpPage()),
|
||||
$html
|
||||
);
|
||||
|
||||
//validate 3: Engine Comment
|
||||
$this->assertContains(
|
||||
htmlspecialchars($engine_plugin->getComment()),
|
||||
$html
|
||||
);
|
||||
|
||||
//validate 4: Engine Info Pages
|
||||
$this->assertContains(
|
||||
__('Variables'),
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
PMA_URL_getCommon(
|
||||
array('engine' => $_REQUEST['engine'], 'page' => "Documentation")
|
||||
),
|
||||
$html
|
||||
);
|
||||
|
||||
//validate 5: other items
|
||||
$this->assertContains(
|
||||
PMA_URL_getCommon(array('engine' => $_REQUEST['engine'])),
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
$engine_plugin->getSupportInformationMessage(),
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
'There is no detailed status information available for this '
|
||||
. 'storage engine.',
|
||||
$html
|
||||
);
|
||||
}
|
||||
}
|
139
#pma/test/classes/controllers/ServerPluginsControllerTest.php
Normal file
139
#pma/test/classes/controllers/ServerPluginsControllerTest.php
Normal file
@ -0,0 +1,139 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* Holds ServerPluginsControllerTest class
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include to test.
|
||||
*/
|
||||
use PMA\libraries\Theme;
|
||||
use PMA\libraries\controllers\server\ServerPluginsController;
|
||||
use PMA\libraries\di\Container;
|
||||
|
||||
require_once 'libraries/database_interface.inc.php';
|
||||
require_once 'libraries/sanitizing.lib.php';
|
||||
require_once 'libraries/js_escape.lib.php';
|
||||
require_once 'test/PMATestCase.php';
|
||||
|
||||
/**
|
||||
* Tests for ServerPluginsController class
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
class ServerPluginsControllerTest extends PMATestCase
|
||||
{
|
||||
/**
|
||||
* Prepares environment for the test.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setUp()
|
||||
{
|
||||
//$_REQUEST
|
||||
$_REQUEST['log'] = "index1";
|
||||
$_REQUEST['pos'] = 3;
|
||||
|
||||
//$GLOBALS
|
||||
$GLOBALS['table'] = "table";
|
||||
$GLOBALS['pmaThemeImage'] = 'image';
|
||||
|
||||
//$_SESSION
|
||||
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
|
||||
$_SESSION['PMA_Theme'] = new Theme();
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for _getPluginsHtml() method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testPMAGetPluginAndModuleInfo()
|
||||
{
|
||||
/**
|
||||
* Prepare plugin list
|
||||
*/
|
||||
$row = array();
|
||||
$row["plugin_name"] = "plugin_name1";
|
||||
$row["plugin_type"] = "plugin_type1";
|
||||
$row["plugin_type_version"] = "plugin_version1";
|
||||
$row["plugin_author"] = "plugin_author1";
|
||||
$row["plugin_license"] = "plugin_license1";
|
||||
$row["plugin_description"] = "plugin_description1";
|
||||
$row["is_active"] = true;
|
||||
|
||||
//Mock DBI
|
||||
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$dbi->expects($this->once())
|
||||
->method('query')
|
||||
->will($this->returnValue(true));
|
||||
$dbi->expects($this->at(1))
|
||||
->method('fetchAssoc')
|
||||
->will($this->returnValue($row));
|
||||
$dbi->expects($this->at(2))
|
||||
->method('fetchAssoc')
|
||||
->will($this->returnValue(false));
|
||||
$dbi->expects($this->once())
|
||||
->method('freeResult')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
$container = Container::getDefaultContainer();
|
||||
$container->set('dbi', $dbi);
|
||||
|
||||
$class = new ReflectionClass('\PMA\libraries\controllers\server\ServerPluginsController');
|
||||
$method = $class->getMethod('_getPluginsHtml');
|
||||
$method->setAccessible(true);
|
||||
|
||||
$ctrl = new ServerPluginsController();
|
||||
$html = $method->invoke($ctrl);
|
||||
|
||||
//validate 1:Items
|
||||
$this->assertContains(
|
||||
'<th>Plugin</th>',
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
'<th>Description</th>',
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
'<th>Version</th>',
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
'<th>Author</th>',
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
'<th>License</th>',
|
||||
$html
|
||||
);
|
||||
|
||||
//validate 2: one Item HTML
|
||||
$this->assertContains(
|
||||
'plugin_name1',
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
'<td>plugin_description1</td>',
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
'<td>plugin_version1</td>',
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
'<td>plugin_author1</td>',
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
'<td>plugin_license1</td>',
|
||||
$html
|
||||
);
|
||||
}
|
||||
}
|
320
#pma/test/classes/controllers/ServerVariablesControllerTest.php
Normal file
320
#pma/test/classes/controllers/ServerVariablesControllerTest.php
Normal file
@ -0,0 +1,320 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* Holds ServerVariablesControllerTest class
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
|
||||
use PMA\libraries\di\Container;
|
||||
use PMA\libraries\Theme;
|
||||
|
||||
require_once 'libraries/url_generating.lib.php';
|
||||
|
||||
require_once 'libraries/database_interface.inc.php';
|
||||
require_once 'test/libraries/stubs/ResponseStub.php';
|
||||
require_once 'test/PMATestCase.php';
|
||||
|
||||
require_once 'libraries/sanitizing.lib.php';
|
||||
require_once 'libraries/js_escape.lib.php';
|
||||
|
||||
/**
|
||||
* Tests for ServerVariablesController class
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
class ServerVariablesControllerTest extends PMATestCase
|
||||
{
|
||||
/**
|
||||
* @var \PMA\Test\Stubs\Response
|
||||
*/
|
||||
private $_response;
|
||||
|
||||
/**
|
||||
* Test for setUp
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setUp()
|
||||
{
|
||||
//$_REQUEST
|
||||
$_REQUEST['log'] = "index1";
|
||||
$_REQUEST['pos'] = 3;
|
||||
|
||||
//$GLOBALS
|
||||
$GLOBALS['PMA_PHP_SELF'] = PMA_getenv('PHP_SELF');
|
||||
$GLOBALS['server'] = 1;
|
||||
$GLOBALS['table'] = "table";
|
||||
$GLOBALS['pmaThemeImage'] = 'image';
|
||||
|
||||
//$_SESSION
|
||||
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
|
||||
$_SESSION['PMA_Theme'] = new Theme();
|
||||
|
||||
//Mock DBI
|
||||
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
//this data is needed when ServerStatusData constructs
|
||||
$server_session_variable = array(
|
||||
"auto_increment_increment" => "1",
|
||||
"auto_increment_offset" => "13",
|
||||
"automatic_sp_privileges" => "ON",
|
||||
"back_log" => "50",
|
||||
"big_tables" => "OFF",
|
||||
);
|
||||
|
||||
$server_global_variables = array(
|
||||
"auto_increment_increment" => "0",
|
||||
"auto_increment_offset" => "12"
|
||||
);
|
||||
|
||||
$fetchResult = array(
|
||||
array(
|
||||
"SHOW SESSION VARIABLES;",
|
||||
0,
|
||||
1,
|
||||
null,
|
||||
0,
|
||||
$server_session_variable
|
||||
),
|
||||
array(
|
||||
"SHOW GLOBAL VARIABLES;",
|
||||
0,
|
||||
1,
|
||||
null,
|
||||
0,
|
||||
$server_global_variables
|
||||
)
|
||||
);
|
||||
|
||||
$dbi->expects($this->any())->method('fetchResult')
|
||||
->will($this->returnValueMap($fetchResult));
|
||||
|
||||
$GLOBALS['dbi'] = $dbi;
|
||||
|
||||
$container = Container::getDefaultContainer();
|
||||
$container->set('dbi', $GLOBALS['dbi']);
|
||||
$this->_response = new \PMA\Test\Stubs\Response();
|
||||
$container->set('PMA\libraries\Response', $this->_response);
|
||||
$container->alias('response', 'PMA\libraries\Response');
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for _formatVariable()
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testFormatVariable()
|
||||
{
|
||||
$class = new ReflectionClass(
|
||||
'\PMA\libraries\controllers\server\ServerVariablesController'
|
||||
);
|
||||
$method = $class->getMethod('_formatVariable');
|
||||
$method->setAccessible(true);
|
||||
|
||||
$container = Container::getDefaultContainer();
|
||||
$container->factory(
|
||||
'PMA\libraries\controllers\server\ServerVariablesController'
|
||||
);
|
||||
$container->alias(
|
||||
'ServerVariablesController',
|
||||
'PMA\libraries\controllers\server\ServerVariablesController'
|
||||
);
|
||||
$ctrl = $container->get('ServerVariablesController');
|
||||
|
||||
//Call the test function
|
||||
$name_for_value_byte = "binlog_cache_size";
|
||||
$name_for_value_not_byte = "auto_increment_increment";
|
||||
$name_for_value_not_num = "PMA_key";
|
||||
|
||||
//name is_numeric and the value type is byte
|
||||
$this->assertEquals(
|
||||
'<abbr title="3">3 B</abbr>',
|
||||
$method->invoke($ctrl, $name_for_value_byte, "3")
|
||||
);
|
||||
|
||||
//name is_numeric and the value type is not byte
|
||||
$this->assertEquals(
|
||||
'3',
|
||||
$method->invoke($ctrl, $name_for_value_not_byte, "3")
|
||||
);
|
||||
|
||||
//value is not a number
|
||||
$this->assertEquals(
|
||||
'value',
|
||||
$method->invoke($ctrl, $name_for_value_not_num, "value")
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for _getHtmlForLinkTemplates()
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testGetHtmlForLinkTemplates()
|
||||
{
|
||||
$class = new ReflectionClass(
|
||||
'\PMA\libraries\controllers\server\ServerVariablesController'
|
||||
);
|
||||
$method = $class->getMethod('_getHtmlForLinkTemplates');
|
||||
$method->setAccessible(true);
|
||||
|
||||
$container = Container::getDefaultContainer();
|
||||
$container->factory(
|
||||
'PMA\libraries\controllers\server\ServerVariablesController'
|
||||
);
|
||||
$container->alias(
|
||||
'ServerVariablesController',
|
||||
'PMA\libraries\controllers\server\ServerVariablesController'
|
||||
);
|
||||
$ctrl = $container->get('ServerVariablesController');
|
||||
|
||||
//Call the test function
|
||||
$html = $method->invoke($ctrl);
|
||||
$url = 'server_variables.php' . PMA_URL_getCommon(array());
|
||||
|
||||
//validate 1: URL
|
||||
$this->assertContains(
|
||||
$url,
|
||||
$html
|
||||
);
|
||||
//validate 2: images
|
||||
$this->assertContains(
|
||||
PMA\libraries\Util::getIcon('b_save.png', __('Save')),
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
PMA\libraries\Util::getIcon('b_close.png', __('Cancel')),
|
||||
$html
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_getHtmlForServerVariables()
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testPMAGetHtmlForServerVariables()
|
||||
{
|
||||
|
||||
$class = new ReflectionClass(
|
||||
'\PMA\libraries\controllers\server\ServerVariablesController'
|
||||
);
|
||||
$method = $class->getMethod('_getHtmlForServerVariables');
|
||||
$method->setAccessible(true);
|
||||
|
||||
$container = Container::getDefaultContainer();
|
||||
$container->factory(
|
||||
'PMA\libraries\controllers\server\ServerVariablesController'
|
||||
);
|
||||
$container->alias(
|
||||
'ServerVariablesController',
|
||||
'PMA\libraries\controllers\server\ServerVariablesController'
|
||||
);
|
||||
$ctrl = $container->get('ServerVariablesController');
|
||||
|
||||
$_REQUEST['filter'] = "auto-commit";
|
||||
$serverVarsSession
|
||||
= $GLOBALS['dbi']->fetchResult('SHOW SESSION VARIABLES;', 0, 1);
|
||||
$serverVars = $GLOBALS['dbi']->fetchResult('SHOW GLOBAL VARIABLES;', 0, 1);
|
||||
|
||||
$html = $method->invoke($ctrl, $serverVars, $serverVarsSession);
|
||||
|
||||
//validate 1: Filters
|
||||
$this->assertContains(
|
||||
'<legend>' . __('Filters') . '</legend>',
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
__('Containing the word:'),
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
$_REQUEST['filter'],
|
||||
$html
|
||||
);
|
||||
|
||||
//validate 2: Server Variables
|
||||
$this->assertContains(
|
||||
'<table id="serverVariables" class="data filteredData noclick">',
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
__('Variable'),
|
||||
$html
|
||||
);
|
||||
$this->assertContains(
|
||||
__('Global value'),
|
||||
$html
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for _getHtmlForServerVariablesItems()
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testGetHtmlForServerVariablesItems()
|
||||
{
|
||||
$class = new ReflectionClass(
|
||||
'\PMA\libraries\controllers\server\ServerVariablesController'
|
||||
);
|
||||
$method = $class->getMethod('_getHtmlForServerVariablesItems');
|
||||
$method->setAccessible(true);
|
||||
|
||||
$container = Container::getDefaultContainer();
|
||||
$container->factory(
|
||||
'PMA\libraries\controllers\server\ServerVariablesController'
|
||||
);
|
||||
$container->alias(
|
||||
'ServerVariablesController',
|
||||
'PMA\libraries\controllers\server\ServerVariablesController'
|
||||
);
|
||||
$ctrl = $container->get('ServerVariablesController');
|
||||
|
||||
$serverVarsSession
|
||||
= $GLOBALS['dbi']->fetchResult('SHOW SESSION VARIABLES;', 0, 1);
|
||||
$serverVars = $GLOBALS['dbi']->fetchResult('SHOW GLOBAL VARIABLES;', 0, 1);
|
||||
|
||||
$html = $method->invoke($ctrl, $serverVars, $serverVarsSession);
|
||||
|
||||
//validate 1: variable: auto_increment_increment
|
||||
$name = "auto_increment_increment";
|
||||
$value = htmlspecialchars(str_replace('_', ' ', $name));
|
||||
$this->assertContains(
|
||||
$value,
|
||||
$html
|
||||
);
|
||||
|
||||
//validate 2: variable: auto_increment_offset
|
||||
$name = "auto_increment_offset";
|
||||
$value = htmlspecialchars(str_replace('_', ' ', $name));
|
||||
$this->assertContains(
|
||||
$value,
|
||||
$html
|
||||
);
|
||||
|
||||
$formatVariable = $class->getMethod('_formatVariable');
|
||||
$formatVariable->setAccessible(true);
|
||||
|
||||
$value = $formatVariable->invoke($ctrl, $name, "12");
|
||||
$this->assertContains(
|
||||
$value,
|
||||
$html
|
||||
);
|
||||
|
||||
//validate 3: variables
|
||||
$this->assertContains(
|
||||
__('Session value'),
|
||||
$html
|
||||
);
|
||||
|
||||
$value = $formatVariable->invoke($ctrl, $name, "13");
|
||||
$this->assertContains(
|
||||
$value,
|
||||
$html
|
||||
);
|
||||
}
|
||||
}
|
224
#pma/test/classes/controllers/TableIndexesControllerTest.php
Normal file
224
#pma/test/classes/controllers/TableIndexesControllerTest.php
Normal file
@ -0,0 +1,224 @@
|
||||
<?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
|
||||
);
|
||||
}
|
||||
}
|
277
#pma/test/classes/controllers/TableRelationControllerTest.php
Normal file
277
#pma/test/classes/controllers/TableRelationControllerTest.php
Normal file
@ -0,0 +1,277 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* Tests for libraries/controllers/TableRelationController.php
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include to test.
|
||||
*/
|
||||
use PMA\libraries\di\Container;
|
||||
use PMA\libraries\Theme;
|
||||
|
||||
require_once 'libraries/url_generating.lib.php';
|
||||
require_once 'libraries/database_interface.inc.php';
|
||||
require_once 'libraries/relation.lib.php';
|
||||
require_once 'test/libraries/stubs/ResponseStub.php';
|
||||
require_once 'test/PMATestCase.php';
|
||||
|
||||
/**
|
||||
* Tests for libraries/controllers/TableRelationController.php
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
class TableRelationControllerTest extends PMATestCase
|
||||
{
|
||||
/**
|
||||
* @var \PMA\Test\Stubs\Response
|
||||
*/
|
||||
private $_response;
|
||||
|
||||
/**
|
||||
* Configures environment
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
protected function setUp()
|
||||
{
|
||||
$GLOBALS['server'] = 0;
|
||||
$GLOBALS['pmaThemeImage'] = 'theme/';
|
||||
//$_SESSION
|
||||
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
|
||||
$_SESSION['PMA_Theme'] = new Theme();
|
||||
|
||||
$_REQUEST['foreignDb'] = 'db';
|
||||
$_REQUEST['foreignTable'] = 'table';
|
||||
|
||||
$GLOBALS['dblist'] = new DataBasePMAMockForTblRelation();
|
||||
$GLOBALS['dblist']->databases = new DataBaseMockForTblRelation();
|
||||
|
||||
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$GLOBALS['dbi'] = $dbi;
|
||||
|
||||
$container = Container::getDefaultContainer();
|
||||
$container->set('db', 'db');
|
||||
$container->set('table', 'table');
|
||||
$container->set('dbi', $GLOBALS['dbi']);
|
||||
$this->_response = new \PMA\Test\Stubs\Response();
|
||||
$container->set('PMA\libraries\Response', $this->_response);
|
||||
$container->alias('response', 'PMA\libraries\Response');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for getDropdownValueForTableAction()
|
||||
*
|
||||
* Case one: this case is for the situation when the target
|
||||
* table is a view.
|
||||
*
|
||||
* @return void
|
||||
* @test
|
||||
*/
|
||||
public function testGetDropdownValueForTableActionIsView()
|
||||
{
|
||||
$viewColumns = array(
|
||||
'viewCol', 'viewCol2', 'viewCol3'
|
||||
);
|
||||
$tableMock = $this->getMockBuilder('PMA\libraries\Table')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
// Test the situation when the table is a view
|
||||
$tableMock->expects($this->any())->method('isView')
|
||||
->will($this->returnValue(true));
|
||||
$tableMock->expects($this->any())->method('getColumns')
|
||||
->will($this->returnValue($viewColumns));
|
||||
|
||||
$GLOBALS['dbi']->expects($this->any())->method('getTable')
|
||||
->will($this->returnValue($tableMock));
|
||||
|
||||
$container = Container::getDefaultContainer();
|
||||
$container->set('dbi', $GLOBALS['dbi']);
|
||||
$container->factory('PMA\libraries\controllers\table\TableRelationController');
|
||||
$container->alias(
|
||||
'TableRelationController',
|
||||
'PMA\libraries\controllers\table\TableRelationController'
|
||||
);
|
||||
/**
|
||||
* @var PMA\libraries\controllers\table\TableRelationController
|
||||
*/
|
||||
$ctrl = $container->get('TableRelationController');
|
||||
|
||||
$ctrl->getDropdownValueForTableAction();
|
||||
$json = $this->_response->getJSONResult();
|
||||
$this->assertEquals(
|
||||
$viewColumns,
|
||||
$json['columns']
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for getDropdownValueForTableAction()
|
||||
*
|
||||
* Case one: this case is for the situation when the target
|
||||
* table is not a view (real tabletable).
|
||||
*
|
||||
* @return void
|
||||
* @test
|
||||
*/
|
||||
public function testGetDropdownValueForTableActionNotView()
|
||||
{
|
||||
$indexedColumns = array(
|
||||
'primaryTableCol'
|
||||
);
|
||||
$tableMock = $this->getMockBuilder('PMA\libraries\Table')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
// Test the situation when the table is a view
|
||||
$tableMock->expects($this->any())->method('isView')
|
||||
->will($this->returnValue(false));
|
||||
$tableMock->expects($this->any())->method('getIndexedColumns')
|
||||
->will($this->returnValue($indexedColumns));
|
||||
|
||||
$GLOBALS['dbi']->expects($this->any())->method('getTable')
|
||||
->will($this->returnValue($tableMock));
|
||||
|
||||
$container = Container::getDefaultContainer();
|
||||
$container->set('dbi', $GLOBALS['dbi']);
|
||||
$container->factory('PMA\libraries\controllers\table\TableRelationController');
|
||||
$container->alias(
|
||||
'TableRelationController',
|
||||
'PMA\libraries\controllers\table\TableRelationController'
|
||||
);
|
||||
$ctrl = $container->get('TableRelationController');
|
||||
|
||||
$ctrl->getDropdownValueForTableAction();
|
||||
$json = $this->_response->getJSONResult();
|
||||
$this->assertEquals(
|
||||
$indexedColumns,
|
||||
$json['columns']
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for getDropdownValueForDbAction()
|
||||
*
|
||||
* Case one: foreign
|
||||
*
|
||||
* @return void
|
||||
* @test
|
||||
*/
|
||||
public function testGetDropdownValueForDbActionOne()
|
||||
{
|
||||
$GLOBALS['dbi']->expects($this->any())
|
||||
->method('fetchArray')
|
||||
->will(
|
||||
$this->returnCallback(
|
||||
function () {
|
||||
static $count = 0;
|
||||
if ($count == 0) {
|
||||
$count++;
|
||||
return array('Engine' => 'InnoDB', 'Name' => 'table',);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
)
|
||||
);
|
||||
|
||||
$container = Container::getDefaultContainer();
|
||||
$container->set('dbi', $GLOBALS['dbi']);
|
||||
$container->factory('PMA\libraries\controllers\table\TableRelationController');
|
||||
$container->alias(
|
||||
'TableRelationController',
|
||||
'PMA\libraries\controllers\table\TableRelationController'
|
||||
);
|
||||
$ctrl = $container->get(
|
||||
'TableRelationController',
|
||||
array('tbl_storage_engine' => 'INNODB')
|
||||
);
|
||||
|
||||
$_REQUEST['foreign'] = 'true';
|
||||
$ctrl->getDropdownValueForDbAction();
|
||||
$json = $this->_response->getJSONResult();
|
||||
$this->assertEquals(
|
||||
array('table'),
|
||||
$json['tables']
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for getDropdownValueForDbAction()
|
||||
*
|
||||
* Case two: not foreign
|
||||
*
|
||||
* @return void
|
||||
* @test
|
||||
*/
|
||||
public function testGetDropdownValueForDbActionTwo()
|
||||
{
|
||||
$GLOBALS['dbi']->expects($this->any())
|
||||
->method('fetchArray')
|
||||
->will(
|
||||
$this->returnCallback(
|
||||
function () {
|
||||
static $count = 0;
|
||||
if ($count == 0) {
|
||||
$count++;
|
||||
return array('table');
|
||||
}
|
||||
return null;
|
||||
}
|
||||
)
|
||||
);
|
||||
|
||||
$container = Container::getDefaultContainer();
|
||||
$container->set('dbi', $GLOBALS['dbi']);
|
||||
$container->factory('PMA\libraries\controllers\table\TableRelationController');
|
||||
$container->alias(
|
||||
'TableRelationController',
|
||||
'PMA\libraries\controllers\table\TableRelationController'
|
||||
);
|
||||
$ctrl = $container->get(
|
||||
'TableRelationController',
|
||||
array('tbl_storage_engine' => 'INNODB',)
|
||||
);
|
||||
|
||||
$_REQUEST['foreign'] = 'false';
|
||||
$ctrl->getDropdownValueForDbAction();
|
||||
$json = $this->_response->getJSONResult();
|
||||
$this->assertEquals(
|
||||
array('table'),
|
||||
$json['tables']
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Mock class for DataBasePMAMock
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
Class DataBasePMAMockForTblRelation
|
||||
{
|
||||
var $databases;
|
||||
}
|
||||
|
||||
/**
|
||||
* Mock class for DataBaseMock
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
Class DataBaseMockForTblRelation
|
||||
{
|
||||
/**
|
||||
* mock function to return table is existed
|
||||
*
|
||||
* @param string $name table name
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
function exists($name)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
383
#pma/test/classes/controllers/TableSearchControllerTest.php
Normal file
383
#pma/test/classes/controllers/TableSearchControllerTest.php
Normal file
@ -0,0 +1,383 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* Tests for PMA_TableSearch
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include to test.
|
||||
*/
|
||||
use PMA\libraries\controllers\table\TableSearchController;
|
||||
use PMA\libraries\di\Container;
|
||||
use PMA\libraries\Theme;
|
||||
use PMA\libraries\TypesMySQL;
|
||||
|
||||
require_once 'test/libraries/stubs/ResponseStub.php';
|
||||
require_once 'test/PMATestCase.php';
|
||||
|
||||
/**
|
||||
* Tests for PMA_TableSearch
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
class TableSearchControllerTest extends PMATestCase
|
||||
{
|
||||
/**
|
||||
* @var PMA\Test\Stubs\Response
|
||||
*/
|
||||
private $_response;
|
||||
|
||||
/**
|
||||
* Setup function for test cases
|
||||
*
|
||||
* @access protected
|
||||
* @return void
|
||||
*/
|
||||
protected function setUp()
|
||||
{
|
||||
/**
|
||||
* SET these to avoid undefined index error
|
||||
*/
|
||||
$_SESSION['PMA_Theme'] = new Theme();
|
||||
$_POST['zoom_submit'] = 'zoom';
|
||||
|
||||
$GLOBALS['server'] = 1;
|
||||
$GLOBALS['PMA_PHP_SELF'] = 'index.php';
|
||||
$GLOBALS['pmaThemeImage'] = 'themes/dot.gif';
|
||||
$GLOBALS['is_ajax_request'] = false;
|
||||
$GLOBALS['cfgRelation'] = PMA_getRelationsParam();
|
||||
$GLOBALS['PMA_Types'] = new TypesMySQL();
|
||||
$GLOBALS['cfg']['Server']['DisableIS'] = false;
|
||||
|
||||
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$columns =array(
|
||||
array(
|
||||
'Field' => 'Field1',
|
||||
'Type' => 'Type1',
|
||||
'Null' => 'Null1',
|
||||
'Collation' => 'Collation1',
|
||||
),
|
||||
array(
|
||||
'Field' => 'Field2',
|
||||
'Type' => 'Type2',
|
||||
'Null' => 'Null2',
|
||||
'Collation' => 'Collation2',
|
||||
)
|
||||
);
|
||||
$dbi->expects($this->any())->method('getColumns')
|
||||
->will($this->returnValue($columns));
|
||||
|
||||
$show_create_table = "CREATE TABLE `pma_bookmark` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`dbase` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||
`user` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT '',
|
||||
`label` varchar(255) CHARACTER SET utf8 NOT NULL DEFAULT '',
|
||||
`query` text COLLATE utf8_bin NOT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `foreign_field` (`foreign_db`,`foreign_table`)
|
||||
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_bin "
|
||||
. "COMMENT='Bookmarks'";
|
||||
|
||||
$dbi->expects($this->any())->method('fetchValue')
|
||||
->will($this->returnValue($show_create_table));
|
||||
$dbi->expects($this->any())->method('escapeString')
|
||||
->will($this->returnArgument(0));
|
||||
|
||||
$GLOBALS['dbi'] = $dbi;
|
||||
|
||||
$this->_response = new PMA\Test\Stubs\Response();
|
||||
|
||||
$container = Container::getDefaultContainer();
|
||||
$container->set('db', 'PMA');
|
||||
$container->set('table', 'PMA_BookMark');
|
||||
$container->set('dbi', $GLOBALS['dbi']);
|
||||
$container->set('response', $this->_response);
|
||||
$container->set('searchType', 'replace');
|
||||
}
|
||||
|
||||
/**
|
||||
* tearDown function for test cases
|
||||
*
|
||||
* @access protected
|
||||
* @return void
|
||||
*/
|
||||
protected function tearDown()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for replace
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testReplace()
|
||||
{
|
||||
$tableSearch = new TableSearchController("zoom", null);
|
||||
$columnIndex = 0;
|
||||
$find = "Field";
|
||||
$replaceWith = "Column";
|
||||
$useRegex = false;
|
||||
$charSet = "UTF-8";
|
||||
$tableSearch->replace(
|
||||
$columnIndex, $find, $replaceWith, $useRegex, $charSet
|
||||
);
|
||||
|
||||
$sql_query = $GLOBALS['sql_query'];
|
||||
$result = "UPDATE `PMA_BookMark` SET `Field1` = "
|
||||
. "REPLACE(`Field1`, 'Field', 'Column') "
|
||||
. "WHERE `Field1` LIKE '%Field%' COLLATE UTF-8_bin";
|
||||
$this->assertEquals(
|
||||
$result,
|
||||
$sql_query
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for buildSqlQuery
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testBuildSqlQuery()
|
||||
{
|
||||
$_POST['distinct'] = true;
|
||||
$_POST['zoom_submit'] = true;
|
||||
$_POST['table'] = "PMA";
|
||||
$_POST['orderByColumn'] = "name";
|
||||
$_POST['order'] = "asc";
|
||||
$_POST['customWhereClause'] = "name='pma'";
|
||||
|
||||
$class = new ReflectionClass('PMA\libraries\controllers\table\TableSearchController');
|
||||
$method = $class->getMethod('_buildSqlQuery');
|
||||
$method->setAccessible(true);
|
||||
$tableSearch = new TableSearchController("zoom", null);
|
||||
|
||||
$sql = $method->invoke($tableSearch);
|
||||
$result = "SELECT DISTINCT * FROM `PMA` WHERE name='pma' "
|
||||
. "ORDER BY `name` asc";
|
||||
|
||||
$this->assertEquals(
|
||||
$result,
|
||||
$sql
|
||||
);
|
||||
|
||||
unset($_POST['customWhereClause']);
|
||||
$sql = $method->invoke($tableSearch);
|
||||
$result = "SELECT DISTINCT * FROM `PMA` ORDER BY `name` asc";
|
||||
$this->assertEquals(
|
||||
$result,
|
||||
$sql
|
||||
);
|
||||
|
||||
$_POST['criteriaValues'] = array(
|
||||
'value1',
|
||||
'value2',
|
||||
'value3',
|
||||
'value4',
|
||||
'value5',
|
||||
'value6',
|
||||
'value7,value8'
|
||||
);
|
||||
$_POST['criteriaColumnNames'] = array(
|
||||
'name',
|
||||
'id',
|
||||
'index',
|
||||
'index2',
|
||||
'index3',
|
||||
'index4',
|
||||
'index5',
|
||||
);
|
||||
$_POST['criteriaColumnTypes'] = array(
|
||||
'varchar',
|
||||
'int',
|
||||
'enum',
|
||||
'type1',
|
||||
'type2',
|
||||
'type3',
|
||||
'type4'
|
||||
);
|
||||
$_POST['criteriaColumnCollations'] = array(
|
||||
"char1",
|
||||
"char2",
|
||||
"char3",
|
||||
"char4",
|
||||
"char5",
|
||||
"char6",
|
||||
"char7",
|
||||
);
|
||||
$_POST['criteriaColumnOperators'] = array(
|
||||
"!=",
|
||||
">",
|
||||
"IS NULL",
|
||||
"LIKE %...%",
|
||||
"REGEXP ^...$",
|
||||
"IN (...)",
|
||||
"BETWEEN"
|
||||
);
|
||||
|
||||
$sql = $method->invoke($tableSearch);
|
||||
$result = "SELECT DISTINCT * FROM `PMA` WHERE `name` != 'value1'"
|
||||
. " AND `id` > value2 AND `index` IS NULL AND `index2` LIKE '%value4%'"
|
||||
. " AND `index3` REGEXP ^value5$ AND `index4` IN (value6) AND `index5`"
|
||||
. " BETWEEN value7 AND value8 ORDER BY `name` asc";
|
||||
$this->assertEquals(
|
||||
$result,
|
||||
$sql
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for getColumnMinMax()
|
||||
*
|
||||
* @return void
|
||||
* @test
|
||||
*/
|
||||
public function testGetColumnMinMax()
|
||||
{
|
||||
$GLOBALS['dbi']->expects($this->any())->method('fetchSingleRow')
|
||||
->will($this->returnArgument(0));
|
||||
|
||||
$container = Container::getDefaultContainer();
|
||||
$container->set('dbi', $GLOBALS['dbi']);
|
||||
$container->factory('PMA\libraries\controllers\table\TableSearchController');
|
||||
$container->alias(
|
||||
'TableSearchController', 'PMA\libraries\controllers\table\TableSearchController'
|
||||
);
|
||||
$ctrl = $container->get('TableSearchController');
|
||||
|
||||
$result = $ctrl->getColumnMinMax('column');
|
||||
$expected = 'SELECT MIN(`column`) AS `min`, '
|
||||
. 'MAX(`column`) AS `max` '
|
||||
. 'FROM `PMA`.`PMA_BookMark`';
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
$result
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for _generateWhereClause()
|
||||
*
|
||||
* @return void
|
||||
* @test
|
||||
*/
|
||||
public function testGenerateWhereClause()
|
||||
{
|
||||
$types = $this->getMockBuilder('PMA\libraries\Types')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$types->expects($this->any())->method('isUnaryOperator')
|
||||
->will($this->returnValue(false));
|
||||
$GLOBALS['PMA_Types'] = $types;
|
||||
|
||||
$class = new ReflectionClass('\PMA\libraries\controllers\Table\TableSearchController');
|
||||
$method = $class->getMethod('_generateWhereClause');
|
||||
$method->setAccessible(true);
|
||||
|
||||
$container = Container::getDefaultContainer();
|
||||
$container->factory('\PMA\libraries\controllers\Table\TableSearchController');
|
||||
$container->alias(
|
||||
'TableSearchController', 'PMA\libraries\controllers\table\TableSearchController'
|
||||
);
|
||||
$ctrl = $container->get('TableSearchController');
|
||||
|
||||
$_POST['customWhereClause'] = '`table` = \'PMA_BookMark\'';
|
||||
$result = $method->invoke($ctrl);
|
||||
$this->assertEquals(
|
||||
' WHERE `table` = \'PMA_BookMark\'',
|
||||
$result
|
||||
);
|
||||
|
||||
unset($_POST['customWhereClause']);
|
||||
$this->assertEquals(
|
||||
'',
|
||||
$method->invoke($ctrl)
|
||||
);
|
||||
|
||||
$_POST['criteriaColumnNames'] = array(
|
||||
'b', 'a'
|
||||
);
|
||||
$_POST['criteriaColumnOperators'] = array(
|
||||
'<=', '='
|
||||
);
|
||||
$_POST['criteriaValues'] = array(
|
||||
'10', '2'
|
||||
);
|
||||
$_POST['criteriaColumnTypes'] = array(
|
||||
'int(11)', 'int(11)'
|
||||
);
|
||||
$result = $method->invoke($ctrl);
|
||||
$this->assertEquals(
|
||||
' WHERE `b` <= 10 AND `a` = 2',
|
||||
$result
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for getDataRowAction()
|
||||
*
|
||||
* @return void
|
||||
* @test
|
||||
*/
|
||||
public function testGetDataRowAction()
|
||||
{
|
||||
$meta_one = new stdClass();
|
||||
$meta_one->type = 'int';
|
||||
$meta_one->length = 11;
|
||||
$meta_two = new stdClass();
|
||||
$meta_two->length = 11;
|
||||
$meta_two->type = 'int';
|
||||
$fields_meta = array(
|
||||
$meta_one, $meta_two
|
||||
);
|
||||
$GLOBALS['dbi']->expects($this->any())->method('getFieldsMeta')
|
||||
->will($this->returnValue($fields_meta));
|
||||
|
||||
$GLOBALS['dbi']->expects($this->any())->method('fetchAssoc')
|
||||
->will(
|
||||
$this->returnCallback(
|
||||
function () {
|
||||
static $count = 0;
|
||||
if ($count == 0) {
|
||||
$count++;
|
||||
|
||||
return array(
|
||||
'col1' => 1,
|
||||
'col2' => 2,
|
||||
);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
)
|
||||
);
|
||||
|
||||
$container = Container::getDefaultContainer();
|
||||
$container->set('dbi', $GLOBALS['dbi']);
|
||||
$container->factory('\PMA\libraries\controllers\Table\TableSearchController');
|
||||
$container->alias(
|
||||
'TableSearchController', 'PMA\libraries\controllers\table\TableSearchController'
|
||||
);
|
||||
$ctrl = $container->get('TableSearchController');
|
||||
|
||||
$_REQUEST['db'] = 'PMA';
|
||||
$_REQUEST['table'] = 'PMA_BookMark';
|
||||
$_REQUEST['where_clause'] = '`col1` = 1';
|
||||
$expected = array(
|
||||
'col1' => 1,
|
||||
'col2' => 2
|
||||
);
|
||||
$ctrl->getDataRowAction();
|
||||
|
||||
$json = $this->_response->getJSONResult();
|
||||
$this->assertEquals(
|
||||
$expected,
|
||||
$json['row_info']
|
||||
);
|
||||
}
|
||||
}
|
345
#pma/test/classes/controllers/TableStructureControllerTest.php
Normal file
345
#pma/test/classes/controllers/TableStructureControllerTest.php
Normal file
@ -0,0 +1,345 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* TableStructureController_Test class
|
||||
*
|
||||
* this class is for testing TableStructureController class
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include to test.
|
||||
*/
|
||||
use PMA\libraries\di\Container;
|
||||
use PMA\libraries\Theme;
|
||||
|
||||
require_once 'libraries/database_interface.inc.php';
|
||||
require_once 'test/libraries/stubs/ResponseStub.php';
|
||||
require_once 'test/PMATestCase.php';
|
||||
|
||||
/**
|
||||
* TableStructureController_Test class
|
||||
*
|
||||
* this class is for testing TableStructureController class
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
class TableStructureControllerTest extends PMATestCase
|
||||
{
|
||||
/**
|
||||
* @var \PMA\Test\Stubs\Response
|
||||
*/
|
||||
private $_response;
|
||||
|
||||
/**
|
||||
* Prepares environment for the test.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setUp()
|
||||
{
|
||||
//$_REQUEST
|
||||
$_REQUEST['log'] = "index1";
|
||||
$_REQUEST['pos'] = 3;
|
||||
|
||||
//$GLOBALS
|
||||
$GLOBALS['server'] = 1;
|
||||
$GLOBALS['cfg']['Server']['DisableIS'] = false;
|
||||
|
||||
$GLOBALS['table'] = "table";
|
||||
$GLOBALS['pmaThemeImage'] = 'image';
|
||||
|
||||
//$_SESSION
|
||||
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
|
||||
$_SESSION['PMA_Theme'] = new Theme();
|
||||
|
||||
$table = $this->getMockBuilder('PMA\libraries\Table')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$dbi->expects($this->any())->method('getTable')
|
||||
->will($this->returnValue($table));
|
||||
|
||||
$GLOBALS['dbi'] = $dbi;
|
||||
|
||||
$container = Container::getDefaultContainer();
|
||||
$container->set('db', 'db');
|
||||
$container->set('table', 'table');
|
||||
$container->set('dbi', $GLOBALS['dbi']);
|
||||
$this->_response = new \PMA\Test\Stubs\Response();
|
||||
$container->set('PMA\libraries\Response', $this->_response);
|
||||
$container->alias('response', 'PMA\libraries\Response');
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for getKeyForTablePrimary()
|
||||
*
|
||||
* Case one: there are no primary key in the table
|
||||
*
|
||||
* @return void
|
||||
* @test
|
||||
*/
|
||||
public function testGetKeyForTablePrimaryOne()
|
||||
{
|
||||
$GLOBALS['dbi']->expects($this->any())->method('fetchAssoc')
|
||||
->will($this->returnValue(null));
|
||||
|
||||
$class = new ReflectionClass('\PMA\libraries\controllers\table\TableStructureController');
|
||||
$method = $class->getMethod('getKeyForTablePrimary');
|
||||
$method->setAccessible(true);
|
||||
|
||||
$container = Container::getDefaultContainer();
|
||||
$container->set('dbi', $GLOBALS['dbi']);
|
||||
$container->factory('PMA\libraries\controllers\table\TableStructureController');
|
||||
$container->alias(
|
||||
'TableStructureController', 'PMA\libraries\controllers\table\TableStructureController'
|
||||
);
|
||||
$ctrl = $container->get('TableStructureController');
|
||||
// No primary key in db.table2
|
||||
$this->assertEquals(
|
||||
'',
|
||||
$method->invoke($ctrl)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for getKeyForTablePrimary()
|
||||
*
|
||||
* Case two: there are a primary key in the table
|
||||
*
|
||||
* @return void
|
||||
* @test
|
||||
*/
|
||||
public function testGetKeyForTablePrimaryTwo()
|
||||
{
|
||||
$GLOBALS['dbi']->expects($this->any())
|
||||
->method('fetchAssoc')
|
||||
->will(
|
||||
$this->returnCallback(
|
||||
function () {
|
||||
static $callCount = 0;
|
||||
if ($callCount == 0) {
|
||||
$callCount++;
|
||||
|
||||
return array(
|
||||
'Key_name' => 'PRIMARY',
|
||||
'Column_name' => 'column',
|
||||
);
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
)
|
||||
);
|
||||
|
||||
$class = new ReflectionClass('\PMA\libraries\controllers\table\TableStructureController');
|
||||
$method = $class->getMethod('getKeyForTablePrimary');
|
||||
$method->setAccessible(true);
|
||||
|
||||
$container = Container::getDefaultContainer();
|
||||
$container->set('dbi', $GLOBALS['dbi']);
|
||||
$container->factory('PMA\libraries\controllers\table\TableStructureController');
|
||||
$container->alias(
|
||||
'TableStructureController', 'PMA\libraries\controllers\table\TableStructureController'
|
||||
);
|
||||
$ctrl = $container->get('TableStructureController');
|
||||
// With db.table, it has a primary key `column`
|
||||
$this->assertEquals(
|
||||
'column, ',
|
||||
$method->invoke($ctrl)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for adjustColumnPrivileges()
|
||||
*
|
||||
* @return void
|
||||
* @test
|
||||
*/
|
||||
public function testAdjustColumnPrivileges()
|
||||
{
|
||||
$class = new ReflectionClass('\PMA\libraries\controllers\table\TableStructureController');
|
||||
$method = $class->getMethod('adjustColumnPrivileges');
|
||||
$method->setAccessible(true);
|
||||
|
||||
$container = Container::getDefaultContainer();
|
||||
$container->set('dbi', $GLOBALS['dbi']);
|
||||
$container->factory('PMA\libraries\controllers\table\TableStructureController');
|
||||
$container->alias(
|
||||
'TableStructureController', 'PMA\libraries\controllers\table\TableStructureController'
|
||||
);
|
||||
$ctrl = $container->get('TableStructureController');
|
||||
|
||||
$this->assertEquals(
|
||||
false,
|
||||
$method->invokeArgs($ctrl, array(null))
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Tests for getMultipleFieldCommandType()
|
||||
*
|
||||
* @return void
|
||||
* @test
|
||||
*/
|
||||
public function testGetMultipleFieldCommandType()
|
||||
{
|
||||
$class = new ReflectionClass('\PMA\libraries\controllers\table\TableStructureController');
|
||||
$method = $class->getMethod('getMultipleFieldCommandType');
|
||||
$method->setAccessible(true);
|
||||
|
||||
$container = Container::getDefaultContainer();
|
||||
$container->set('dbi', $GLOBALS['dbi']);
|
||||
$container->factory('PMA\libraries\controllers\table\TableStructureController');
|
||||
$container->alias(
|
||||
'TableStructureController', 'PMA\libraries\controllers\table\TableStructureController'
|
||||
);
|
||||
$ctrl = $container->get('TableStructureController');
|
||||
|
||||
$this->assertEquals(
|
||||
null,
|
||||
$method->invoke($ctrl)
|
||||
);
|
||||
|
||||
$_REQUEST['submit_mult_drop_x'] = true;
|
||||
$this->assertEquals(
|
||||
'drop',
|
||||
$method->invoke($ctrl)
|
||||
);
|
||||
unset($_REQUEST['submit_mult_drop_x']);
|
||||
|
||||
$_REQUEST['submit_mult'] = 'create';
|
||||
$this->assertEquals(
|
||||
'create',
|
||||
$method->invoke($ctrl)
|
||||
);
|
||||
unset($_REQUEST['submit_mult']);
|
||||
|
||||
$_REQUEST['mult_btn'] = __('Yes');
|
||||
$this->assertEquals(
|
||||
'row_delete',
|
||||
$method->invoke($ctrl)
|
||||
);
|
||||
|
||||
$_REQUEST['selected'] = array('a', 'b');
|
||||
$method->invoke($ctrl);
|
||||
$this->assertEquals(
|
||||
$_REQUEST['selected'],
|
||||
$_REQUEST['selected_fld']
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for getDataForSubmitMult()
|
||||
*
|
||||
* @return void
|
||||
* @test
|
||||
*/
|
||||
public function testPMAGetDataForSubmitMult()
|
||||
{
|
||||
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$dbi->expects($this->any())
|
||||
->method('query')
|
||||
->will($this->returnValue(true));
|
||||
|
||||
$class = new ReflectionClass('PMA\libraries\controllers\table\TableStructureController');
|
||||
$method = $class->getMethod('getDataForSubmitMult');
|
||||
$method->setAccessible(true);
|
||||
|
||||
$container = Container::getDefaultContainer();
|
||||
$container->set('dbi', $dbi);
|
||||
$container->factory('PMA\libraries\controllers\table\TableStructureController');
|
||||
$container->alias(
|
||||
'TableStructureController', 'PMA\libraries\controllers\table\TableStructureController'
|
||||
);
|
||||
$ctrl = $container->get('TableStructureController');
|
||||
|
||||
$submit_mult = "index";
|
||||
$db = "PMA_db";
|
||||
$table = "PMA_table";
|
||||
$selected = array(
|
||||
"table1", "table2"
|
||||
);
|
||||
$action = 'db_delete_row';
|
||||
|
||||
list($what, $query_type, $is_unset_submit_mult, $mult_btn, $centralColsError)
|
||||
= $method->invokeArgs(
|
||||
$ctrl,
|
||||
array($submit_mult, $db, $table, $selected, $action)
|
||||
);
|
||||
|
||||
//validate 1: $what
|
||||
$this->assertEquals(
|
||||
null,
|
||||
$what
|
||||
);
|
||||
|
||||
//validate 2: $query_type
|
||||
$this->assertEquals(
|
||||
'index_fld',
|
||||
$query_type
|
||||
);
|
||||
|
||||
//validate 3: $is_unset_submit_mult
|
||||
$this->assertEquals(
|
||||
true,
|
||||
$is_unset_submit_mult
|
||||
);
|
||||
|
||||
//validate 4:
|
||||
$this->assertEquals(
|
||||
__('Yes'),
|
||||
$mult_btn
|
||||
);
|
||||
|
||||
//validate 5: $centralColsError
|
||||
$this->assertEquals(
|
||||
null,
|
||||
$centralColsError
|
||||
);
|
||||
|
||||
$submit_mult = "unique";
|
||||
|
||||
list($what, $query_type, $is_unset_submit_mult, $mult_btn, $centralColsError)
|
||||
= $method->invokeArgs(
|
||||
$ctrl,
|
||||
array($submit_mult, $db, $table, $selected, $action)
|
||||
);
|
||||
|
||||
//validate 1: $what
|
||||
$this->assertEquals(
|
||||
null,
|
||||
$what
|
||||
);
|
||||
|
||||
//validate 2: $query_type
|
||||
$this->assertEquals(
|
||||
'unique_fld',
|
||||
$query_type
|
||||
);
|
||||
|
||||
//validate 3: $is_unset_submit_mult
|
||||
$this->assertEquals(
|
||||
true,
|
||||
$is_unset_submit_mult
|
||||
);
|
||||
|
||||
//validate 4: $mult_btn
|
||||
$this->assertEquals(
|
||||
__('Yes'),
|
||||
$mult_btn
|
||||
);
|
||||
|
||||
//validate 5: $centralColsError
|
||||
$this->assertEquals(
|
||||
null,
|
||||
$centralColsError
|
||||
);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user