dummyDbi = $this->createDbiDummy();
$this->dbi = $this->createDatabaseInterface($this->dummyDbi);
DatabaseInterface::$instance = $this->dbi;
}
public function testIndex(): void
{
$this->setLanguage();
Current::$database = 'air-balloon_burner_dev2';
$config = Config::getInstance();
$config->selectedServer['DisableIS'] = false;
$config->selectedServer['auth_type'] = 'cookie';
// This example path data has nothing to do with the actual test
// root.air-balloon_burner_dev2
$_POST['n0_aPath'] = 'cm9vdA==.YWlyLWJhbGxvb25fYnVybmVyX2RldjI=';
// root.air-balloon.burner_dev2
$_POST['n0_vPath'] = 'cm9vdA==.YWlyLWJhbGxvb24=.YnVybmVyX2RldjI=';
$this->dummyDbi->removeDefaultResults();
$this->dummyDbi->addResult(
'SELECT CURRENT_USER();',
[['pma_test@localhost']],
);
$this->dummyDbi->addResult(
'SHOW GRANTS',
[],
);
$this->dummyDbi->addResult(
'SELECT (COUNT(DB_first_level) DIV 100) * 100 from ('
. ' SELECT distinct SUBSTRING_INDEX(SCHEMA_NAME, \'_\', 1) DB_first_level '
. 'FROM INFORMATION_SCHEMA.SCHEMATA WHERE `SCHEMA_NAME` < \'air-balloon_burner_dev2\' ) t',
[],
);
$this->dummyDbi->addResult(
'SELECT `SCHEMA_NAME` FROM `INFORMATION_SCHEMA`.`SCHEMATA`, '
. '(SELECT DB_first_level FROM ( SELECT DISTINCT '
. "SUBSTRING_INDEX(SCHEMA_NAME, '_', 1) DB_first_level "
. 'FROM INFORMATION_SCHEMA.SCHEMATA WHERE TRUE ) t ORDER BY '
. 'DB_first_level ASC LIMIT 0, 100) t2 WHERE TRUE AND 1 = LOCATE('
. "CONCAT(DB_first_level, '_'), CONCAT(SCHEMA_NAME, '_')) "
. 'ORDER BY SCHEMA_NAME ASC',
[['air-balloon_burner_dev2']],
['SCHEMA_NAME'],
);
$sqlCount = 'SELECT COUNT(*) FROM ( SELECT DISTINCT SUBSTRING_INDEX(SCHEMA_NAME, \'_\', 1) '
. 'DB_first_level FROM INFORMATION_SCHEMA.SCHEMATA WHERE TRUE ) t';
$this->dummyDbi->addResult(
$sqlCount,
[[179]],
);
$this->dummyDbi->addResult(
$sqlCount,
[[179]],
);
$this->dummyDbi->addResult(
'SELECT `TABLE_NAME` AS `name`, `TABLE_TYPE` AS `type` FROM `INFORMATION_SCHEMA`.`TABLES`'
. ' WHERE `TABLE_SCHEMA`=\'air-balloon_burner_dev2\' ORDER BY `TABLE_NAME` ASC',
[],
);
$this->dummyDbi->addResult('SELECT @@lower_case_table_names', [['0']]);
$this->dummyDbi->addResult(
'SELECT `ROUTINE_NAME` AS `name` FROM `INFORMATION_SCHEMA`.`ROUTINES` WHERE '
. '`ROUTINE_SCHEMA` COLLATE utf8_bin=\'air-balloon_burner_dev2\' AND `ROUTINE_TYPE`=\'FUNCTION\' '
. 'ORDER BY `ROUTINE_NAME` ASC',
[],
);
$this->dummyDbi->addResult(
'SELECT `ROUTINE_NAME` AS `name` FROM `INFORMATION_SCHEMA`.`ROUTINES` WHERE '
. '`ROUTINE_SCHEMA` COLLATE utf8_bin=\'air-balloon_burner_dev2\' AND `ROUTINE_TYPE`=\'PROCEDURE\' '
. 'ORDER BY `ROUTINE_NAME` ASC',
[],
);
$this->dummyDbi->addResult(
'SELECT `EVENT_NAME` AS `name` FROM `INFORMATION_SCHEMA`.`EVENTS`'
. ' WHERE `EVENT_SCHEMA` COLLATE utf8_bin=\'air-balloon_burner_dev2\' ORDER BY `EVENT_NAME` ASC',
[],
);
$responseRenderer = new ResponseRenderer();
$template = new Template();
$relation = new Relation($this->dbi);
$navigationController = new NavigationController(
$responseRenderer,
new Navigation($template, $relation, $this->dbi, $config),
$relation,
new PageSettings(new UserPreferences($this->dbi, $relation, $template)),
);
$_POST['full'] = '1';
$request = self::createStub(ServerRequest::class);
$request->method('isAjax')->willReturn(true);
$navigationController($request);
self::assertTrue($responseRenderer->hasSuccessState(), 'expected the request not to fail');
$responseMessage = $responseRenderer->getJSONResult()['message'];
self::assertStringContainsString('
', $responseMessage);
// root.air-balloon_burner_dev2
// cm9vdA==.YWlyLWJhbGxvb25fYnVybmVyX2RldjI=
self::assertStringContainsString(
'
' . "\n"
. '
' . "\n"
. ' - ' . "\n"
. ' ' . "\n"
. ' ' . "\n"
. '
' . "\n"
. '
'
. '
' . "\n"
. '
' . "\n"
. "\n"
. ' air-balloon_burner_dev2' . "\n"
. ' ' . "\n"
. ' ' . "\n"
. "\n"
. ' ' . "\n"
. ' ' . "\n"
. "\n"
. "\n"
. "\n"
. "\n"
. '
' . "\n"
. '
',
$responseMessage,
);
$this->dummyDbi->assertAllQueriesConsumed();
}
public function testIndexWithPosAndValue(): void
{
$this->setLanguage();
Current::$database = 'air-balloon_burner_dev2';
$config = Config::getInstance();
$config->selectedServer['DisableIS'] = false;
$config->selectedServer['auth_type'] = 'cookie';
// root.air-balloon_burner_dev2
$_POST['n0_aPath'] = 'cm9vdA==.YWlyLWJhbGxvb25fYnVybmVyX2RldjI=';
// root.air-balloon.burner_dev2
$_POST['n0_vPath'] = 'cm9vdA==.YWlyLWJhbGxvb24=.YnVybmVyX2RldjI=';
$_POST['n0_pos2_name'] = 'tables';
$_POST['n0_pos2_value'] = 0;
$this->dummyDbi->removeDefaultResults();
$this->dummyDbi->addResult(
'SELECT CURRENT_USER();',
[['pma_test@localhost']],
);
$this->dummyDbi->addResult(
'SHOW GRANTS',
[],
);
$this->dummyDbi->addResult(
'SELECT (COUNT(DB_first_level) DIV 100) * 100 from ('
. ' SELECT distinct SUBSTRING_INDEX(SCHEMA_NAME, \'_\', 1) DB_first_level '
. 'FROM INFORMATION_SCHEMA.SCHEMATA WHERE `SCHEMA_NAME` < \'air-balloon_burner_dev2\' ) t',
[],
);
$this->dummyDbi->addResult(
'SELECT `SCHEMA_NAME` FROM `INFORMATION_SCHEMA`.`SCHEMATA`, '
. '(SELECT DB_first_level FROM ( SELECT DISTINCT '
. "SUBSTRING_INDEX(SCHEMA_NAME, '_', 1) DB_first_level "
. 'FROM INFORMATION_SCHEMA.SCHEMATA WHERE TRUE ) t ORDER BY '
. 'DB_first_level ASC LIMIT 0, 100) t2 WHERE TRUE AND 1 = LOCATE('
. "CONCAT(DB_first_level, '_'), CONCAT(SCHEMA_NAME, '_')) "
. 'ORDER BY SCHEMA_NAME ASC',
[['air-balloon_burner_dev'], ['air-balloon_burner_dev2'], ['air-balloon_dev']],
['SCHEMA_NAME'],
);
$sqlCount = 'SELECT COUNT(*) FROM ( SELECT DISTINCT SUBSTRING_INDEX(SCHEMA_NAME, \'_\', 1) '
. 'DB_first_level FROM INFORMATION_SCHEMA.SCHEMATA WHERE TRUE ) t';
$this->dummyDbi->addResult(
$sqlCount,
[[179]],
);
$this->dummyDbi->addResult(
$sqlCount,
[[179]],
);
$this->dummyDbi->addResult(
'SELECT `TABLE_NAME` AS `name`, `TABLE_TYPE` AS `type` FROM `INFORMATION_SCHEMA`.`TABLES`'
. ' WHERE `TABLE_SCHEMA`=\'air-balloon_burner_dev2\' ORDER BY `TABLE_NAME` ASC',
[],
);
$this->dummyDbi->addResult('SELECT @@lower_case_table_names', [['0']]);
$this->dummyDbi->addResult(
'SELECT `ROUTINE_NAME` AS `name` FROM `INFORMATION_SCHEMA`.`ROUTINES` WHERE '
. '`ROUTINE_SCHEMA` COLLATE utf8_bin=\'air-balloon_burner_dev2\' AND `ROUTINE_TYPE`=\'FUNCTION\' '
. 'ORDER BY `ROUTINE_NAME` ASC',
[],
);
$this->dummyDbi->addResult(
'SELECT `EVENT_NAME` AS `name` FROM `INFORMATION_SCHEMA`.`EVENTS` WHERE'
. ' `EVENT_SCHEMA` COLLATE utf8_bin=\'air-balloon_burner_dev2\' ORDER BY `EVENT_NAME` ASC',
[],
);
$this->dummyDbi->addResult(
'SELECT `ROUTINE_NAME` AS `name` FROM `INFORMATION_SCHEMA`.`ROUTINES` WHERE '
. '`ROUTINE_SCHEMA` COLLATE utf8_bin=\'air-balloon_burner_dev2\' AND `ROUTINE_TYPE`=\'PROCEDURE\' '
. 'ORDER BY `ROUTINE_NAME` ASC',
[],
);
$responseRenderer = new ResponseRenderer();
$template = new Template();
$relation = new Relation($this->dbi);
$navigationController = new NavigationController(
$responseRenderer,
new Navigation($template, $relation, $this->dbi, $config),
$relation,
new PageSettings(new UserPreferences($this->dbi, $relation, $template)),
);
$_POST['full'] = '1';
$request = self::createStub(ServerRequest::class);
$request->method('isAjax')->willReturn(true);
$navigationController($request);
self::assertTrue($responseRenderer->hasSuccessState(), 'expected the request not to fail');
$responseMessage = $responseRenderer->getJSONResult()['message'];
self::assertStringContainsString('
', $responseMessage);
$dbTemplate = '
' . "\n"
. ' ' . "\n"
. ' ' . "\n"
. ' ' . "\n"
. '
'
. '
' . "\n"
. '
' . "\n"
. "\n"
. ' %s' . "\n"
. ' ' . "\n"
. ' ' . "\n"
. "\n"
. ' ' . "\n"
. ' ' . "\n"
. "\n"
. "\n"
. "\n"
. ' ';
$dbTemplateLast = '
' . "\n"// "last" class added
. ' ' . "\n"
. ' ' . "\n"
. ' ' . "\n"
. '
'
. '
' . "\n"
. '
' . "\n"
. "\n"
. ' %s' . "\n"
. ' ' . "\n"
. ' ' . "\n"
. "\n"
. ' ' . "\n"
. ' ' . "\n"
. "\n"
. "\n"
. "\n"
. ' ';
$dbTemplateExpanded = '
' . "\n"
. ' ' . "\n"
. ' ' . "\n"
. ' ' . "\n"
. '
'
. '
' . "\n"
. '
' . "\n"
. "\n"
. ' %s' . "\n"
. ' ' . "\n"
. ' ' . "\n"
. "\n"
. ' ' . "\n"
. ' ' . "\n"
. "\n"
. "\n"
. "\n"
. ' ';
// root.air-balloon_burner_dev2
// cm9vdA==.YWlyLWJhbGxvb25fYnVybmVyX2RldjI=
self::assertStringContainsString(
'
' . "\n"
. '
' . "\n"
. ' - ' . "\n"
. ' ' . "\n"
. '
' . "\n"
. ' ' . "\n"
. '
' . "\n"
. '

' . "\n"
. '
' . "\n"
. ' air-balloon' . "\n"
. ' ' . "\n"
. ' ' . "\n"
. "\n"
. '
' . "\n"
. ' ' . "\n"
. ' ' . "\n"
. "\n"
. ' ' . "\n"
. '
' . "\n"
. sprintf(
$dbTemplate,
'cm9vdA==.YWlyLWJhbGxvb25fYnVybmVyX2Rldg==',
'cm9vdA==.YWlyLWJhbGxvb24=.YnVybmVyX2Rldg==',
'air-balloon_burner_dev',
'air-balloon_burner_dev',
'air-balloon_burner_dev',
) . "\n"
. sprintf(
$dbTemplateExpanded,
'cm9vdA==.YWlyLWJhbGxvb25fYnVybmVyX2RldjI=',
'cm9vdA==.YWlyLWJhbGxvb24=.YnVybmVyX2RldjI=',
'air-balloon_burner_dev2',
'air-balloon_burner_dev2',
'air-balloon_burner_dev2',
) . "\n"
. sprintf(
$dbTemplateLast,
'cm9vdA==.YWlyLWJhbGxvb25fZGV2',
'cm9vdA==.YWlyLWJhbGxvb24=.ZGV2',
'air-balloon_dev',
'air-balloon_dev',
'air-balloon_dev',
) . "\n"
. "\n"
. '
' . "\n"
. '
' . "\n"
. "\n"
. "\n"
. '
' . "\n"
. '
' . "\n",
$responseMessage,
);
$this->dummyDbi->assertAllQueriesConsumed();
}
}