Initial commit

This commit is contained in:
2022-11-21 09:47:28 +01:00
commit 76cec83d26
11652 changed files with 1980467 additions and 0 deletions

View File

@ -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']
);
}
}

View 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&amp;dontlimitchars=1&amp;'
. 'pos=3&amp;server=1&amp';
$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
);
}
}

View 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
);
}
}

View 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)
);
}
}

View 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
);
}
}

View 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
);
}
}

View 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
);
}
}

View 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
);
}
}

View 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;
}
}

View 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']
);
}
}

View 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
);
}
}