phpmyadmin/test/classes/Database/SearchTest.php
Liviu-Mihail Concioiu f3c7a5eb14
Remove whitespace to avoid double whitespace (#19336)
* Remove whitespace to avoid double whitespace

---------

Signed-off-by: Liviu-Mihail Concioiu <liviu.concioiu@gmail.com>
2024-10-26 12:07:03 -03:00

170 lines
5.1 KiB
PHP

<?php
declare(strict_types=1);
namespace PhpMyAdmin\Tests\Database;
use PhpMyAdmin\Database\Search;
use PhpMyAdmin\DatabaseInterface;
use PhpMyAdmin\Template;
use PhpMyAdmin\Tests\AbstractTestCase;
/**
* @covers \PhpMyAdmin\Database\Search
*/
class SearchTest extends AbstractTestCase
{
/** @var Search */
protected $object;
/**
* Sets up the fixture, for example, opens a network connection.
* This method is called before a test is executed.
*/
protected function setUp(): void
{
parent::setUp();
$GLOBALS['server'] = 0;
$GLOBALS['db'] = 'pma';
$GLOBALS['_POST'] = [];
//mock DBI
$dbi = $this->getMockBuilder(DatabaseInterface::class)
->disableOriginalConstructor()
->getMock();
$dbi->expects($this->any())
->method('getColumns')
->with('pma', 'table1')
->will($this->returnValue([
['Field' => 'column1'],
['Field' => 'column2'],
]));
$dbi->expects($this->any())
->method('escapeString')
->will($this->returnArgument(0));
$GLOBALS['dbi'] = $dbi;
$this->object = new Search($dbi, 'pma_test', new Template());
}
/**
* Tears down the fixture, for example, closes a network connection.
* This method is called after a test is executed.
*/
protected function tearDown(): void
{
parent::tearDown();
unset($this->object);
}
/**
* Test for generating where clause for different search types
*
* @param string $type type
* @param string $expected expected result
*
* @dataProvider searchTypes
*/
public function testGetWhereClause(string $type, string $expected): void
{
$_POST['criteriaSearchType'] = $type;
$_POST['criteriaSearchString'] = 'search string';
$this->object = new Search($GLOBALS['dbi'], 'pma_test', new Template());
self::assertSame($expected, $this->callFunction(
$this->object,
Search::class,
'getWhereClause',
['table1']
));
}
/**
* Data provider for testGetWhereClause
*
* @return array
*/
public static function searchTypes(): array
{
return [
[
'1',
" WHERE (CONVERT(`column1` USING utf8) LIKE '%search%'"
. " OR CONVERT(`column2` USING utf8) LIKE '%search%') "
. " OR (CONVERT(`column1` USING utf8) LIKE '%string%'"
. " OR CONVERT(`column2` USING utf8) LIKE '%string%')",
],
[
'2',
" WHERE (CONVERT(`column1` USING utf8) LIKE '%search%'"
. " OR CONVERT(`column2` USING utf8) LIKE '%search%') "
. " AND (CONVERT(`column1` USING utf8) LIKE '%string%'"
. " OR CONVERT(`column2` USING utf8) LIKE '%string%')",
],
[
'3',
" WHERE (CONVERT(`column1` USING utf8) LIKE '%search string%'"
. " OR CONVERT(`column2` USING utf8) LIKE '%search string%')",
],
[
'4',
" WHERE (CONVERT(`column1` USING utf8) LIKE 'search string'"
. " OR CONVERT(`column2` USING utf8) LIKE 'search string')",
],
[
'5',
" WHERE (CONVERT(`column1` USING utf8) REGEXP 'search string'"
. " OR CONVERT(`column2` USING utf8) REGEXP 'search string')",
],
];
}
/**
* Test for getSearchSqls
*/
public function testGetSearchSqls(): void
{
self::assertSame([
'select_columns' => 'SELECT * FROM `pma`.`table1` WHERE FALSE',
'select_count' => 'SELECT COUNT(*) AS `count` FROM `pma`.`table1` WHERE FALSE',
'delete' => 'DELETE FROM `pma`.`table1` WHERE FALSE',
], $this->callFunction(
$this->object,
Search::class,
'getSearchSqls',
['table1']
));
}
/**
* Test for getSearchResults
*/
public function testGetSearchResults(): void
{
self::assertStringContainsString('Search results for "<em></em>" :', $this->object->getSearchResults());
}
/**
* Test for getSelectionForm
*/
public function testGetMainHtml(): void
{
$main = $this->object->getMainHtml();
// test selection form
self::assertStringContainsString('<form', $main);
self::assertStringContainsString('<a id="togglesearchformlink">', $main);
self::assertStringContainsString('criteriaSearchType', $main);
// test result divs
self::assertStringContainsString('<div id="table-info"', $main);
self::assertStringContainsString('<a id="table-link"', $main);
self::assertStringContainsString('<div id="browse-results"', $main);
self::assertStringContainsString('<div id="sqlqueryform"', $main);
self::assertStringContainsString('<button class="btn btn-secondary" id="togglequerybox"', $main);
}
}