phpmyadmin/test/classes/Display/ExportTest.php
Maurício Meneghini Fauth fe6a7f754c Fix some inconsistencies in themes
Signed-off-by: Maurício Meneghini Fauth <mauricio@fauth.dev>
2019-09-08 23:20:19 -03:00

287 lines
7.8 KiB
PHP

<?php
/**
* tests for PhpMyAdmin\Display\Export
*
* @package PhpMyAdmin-test
*/
declare(strict_types=1);
namespace PhpMyAdmin\Tests\Display;
use PhpMyAdmin\Config;
use PhpMyAdmin\Display\Export;
use PhpMyAdmin\Plugins;
use PhpMyAdmin\Util;
use PHPUnit\Framework\TestCase;
/**
* class PhpMyAdmin\Tests\Display\ExportTest
*
* this class is for testing PhpMyAdmin\Display\Export methods
*
* @package PhpMyAdmin-test
* @group large
*/
class ExportTest extends TestCase
{
private $export;
/**
* Test for setUp
*
* @return void
*/
protected function setUp(): void
{
$GLOBALS['PMA_Config'] = new Config();
$GLOBALS['PMA_Config']->enableBc();
$GLOBALS['cfg']['Server']['host'] = "localhost";
$GLOBALS['cfg']['Server']['user'] = "pma_user";
$GLOBALS['server'] = 0;
$GLOBALS['table'] = "table";
$GLOBALS['db'] = "PMA";
//$_SESSION
$_SESSION['relation'][$GLOBALS['server']] = "";
$pmaconfig = $this->getMockBuilder('PhpMyAdmin\Config')
->disableOriginalConstructor()
->getMock();
$pmaconfig->expects($this->any())
->method('getUserValue')
->will($this->returnValue('user value for test'));
$GLOBALS['PMA_Config'] = $pmaconfig;
$this->export = new Export();
}
/**
* Test for Export::getHtmlForHiddenInputs
*
* @return void
*/
public function testGetHtmlForHiddenInputs()
{
$export_type = "server";
$db = "PMA";
$table = "PMA_test";
$single_table_str = "PMA_single_str";
$sql_query_str = "sql_query_str";
//Call the test function
$html = $this->export->getHtmlForHiddenInputs(
$export_type,
$db,
$table,
$single_table_str,
$sql_query_str
);
//validate 1: Url::getHiddenInputs
//$single_table
$this->assertStringContainsString(
'<input type="hidden" name="single_table" value="TRUE"',
$html
);
//$export_type
$this->assertStringContainsString(
'<input type="hidden" name="export_type" value="server"',
$html
);
$this->assertStringContainsString(
'<input type="hidden" name="export_method" value="quick"',
$html
);
}
/**
* Test for Export::getHtmlForOptions
*
* @return void
*/
public function testGetHtmlForOptions()
{
global $cfg;
$cfg['Export']['method'] = "XML";
$cfg['SaveDir'] = "/tmp";
$export_type = "server";
$db = "PMA";
$table = "PMA_test";
$multi_values_str = "multi_values_str";
$num_tables_str = "10";
$unlim_num_rows_str = "unlim_num_rows_str";
//$single_table = "single_table";
$GLOBALS['dbi']->cacheTableContent([$db, $table, 'ENGINE'], 'MERGE');
$columns_info = [
'test_column1' => [
'COLUMN_NAME' => 'test_column1',
],
'test_column2' => [
'COLUMN_NAME' => 'test_column2',
],
];
$dbi = $this->getMockBuilder('PhpMyAdmin\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$dbi->expects($this->any())->method('getColumnsFull')
->will($this->returnValue($columns_info));
$dbi->expects($this->any())->method('getCompatibilities')
->will($this->returnValue([]));
$GLOBALS['dbi'] = $dbi;
/* Scan for plugins */
$export_list = Plugins::getPlugins(
"export",
'libraries/classes/Plugins/Export/',
[
'export_type' => $export_type,
'single_table' => true,// isset($single_table)
]
);
//Call the test function
$html = $this->export->getHtmlForOptions(
$export_type,
$db,
$table,
$multi_values_str,
$num_tables_str,
$export_list,
$unlim_num_rows_str
);
//validate 2: Export::getHtmlForOptionsMethod
$this->assertStringContainsString(
$cfg['Export']['method'],
$html
);
$this->assertStringContainsString(
'<div class="exportoptions" id="quick_or_custom">',
$html
);
$this->assertStringContainsString(
__('Export method:'),
$html
);
$this->assertStringContainsString(
__('Custom - display all possible options'),
$html
);
//validate 3: Export::getHtmlForOptionsSelection
$this->assertStringContainsString(
'<div class="exportoptions" id="databases_and_tables">',
$html
);
$this->assertStringContainsString(
'<h3>' . __('Databases:') . '</h3>',
$html
);
$this->assertStringContainsString(
$multi_values_str,
$html
);
//validate 4: Export::getHtmlForOptionsQuickExport
$this->assertStringContainsString(
'<input type="checkbox" name="onserver" value="saveit"',
$html
);
$dir = htmlspecialchars(Util::userDir($cfg['SaveDir']));
$this->assertStringContainsString(
'Save on server in the directory <strong>' . $dir . '</strong>',
$html
);
//validate 5: Export::getHtmlForAliasModalDialog
$this->assertStringContainsString(
'<div id="alias_modal" class="hide" title="'
. 'Rename exported databases/tables/columns">',
$html
);
$this->assertStringContainsString(
'Select database',
$html
);
$this->assertStringContainsString(
'Select table',
$html
);
$this->assertStringContainsString(
'New database name',
$html
);
$this->assertStringContainsString(
'New table name',
$html
);
//validate 6: Export::getHtmlForOptionsOutput
$this->assertStringContainsString(
'<div class="exportoptions" id="output">',
$html
);
$this->assertStringContainsString(
'user value for test',
$html
);
//validate 7: Export::getHtmlForOptionsFormat
$this->assertStringContainsString(
'<div class="exportoptions" id="format">',
$html
);
$this->assertStringContainsString(
'<h3>' . __('Format:') . '</h3>',
$html
);
}
/**
* Test for Export::getHtmlForAliasModalDialog
*
* @return void
*/
public function testGetHtmlForAliasModalDialog()
{
$columns_info = [
'test\'_db' => [
'test_<b>table' => [
'co"l1' => [
'COLUMN_NAME' => 'co"l1',
],
'col<2' => [
'COLUMN_NAME' => 'col<2',
],
],
],
];
$dbi = $this->getMockBuilder('PhpMyAdmin\DatabaseInterface')
->disableOriginalConstructor()
->getMock();
$dbi->expects($this->any())->method('getColumnsFull')
->will($this->returnValue($columns_info));
$GLOBALS['dbi'] = $dbi;
$html = $this->export->getHtmlForAliasModalDialog();
$this->assertStringContainsString(
'<div id="alias_modal" class="hide" title="'
. 'Rename exported databases/tables/columns">',
$html
);
$this->assertStringContainsString('<button class="alias_remove', $html);
}
}