PageRenderTime 46ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/test/classes/controllers/ServerDatabasesControllerTest.php

https://gitlab.com/trungthao379/phpmyadmin
PHP | 315 lines | 230 code | 37 blank | 48 comment | 0 complexity | e0589c84753e7c6f388b269f65e4fef6 MD5 | raw file
  1. <?php
  2. /* vim: set expandtab sw=4 ts=4 sts=4: */
  3. /**
  4. * Holds ServerDatabasesControllerTest class
  5. *
  6. * @package PhpMyAdmin-test
  7. */
  8. use PMA\libraries\di\Container;
  9. use PMA\libraries\Theme;
  10. use PMA\libraries\Charsets;
  11. require_once 'libraries/database_interface.inc.php';
  12. require_once 'test/libraries/stubs/ResponseStub.php';
  13. require_once 'test/PMATestCase.php';
  14. /**
  15. * Tests for ServerDatabasesController class
  16. *
  17. * @package PhpMyAdmin-test
  18. */
  19. class ServerDatabasesControllerTest extends PMATestCase
  20. {
  21. /**
  22. * Prepares environment for the test.
  23. *
  24. * @return void
  25. */
  26. public function setUp()
  27. {
  28. //$_REQUEST
  29. $_REQUEST['log'] = "index1";
  30. $_REQUEST['pos'] = 3;
  31. //$GLOBALS
  32. $GLOBALS['PMA_Config'] = new PMA\libraries\Config();
  33. $GLOBALS['PMA_Config']->enableBc();
  34. $GLOBALS['is_superuser'] = true;
  35. $GLOBALS['table'] = "table";
  36. $GLOBALS['replication_info']['master']['status'] = false;
  37. $GLOBALS['replication_info']['slave']['status'] = false;
  38. $GLOBALS['pmaThemeImage'] = 'image';
  39. $GLOBALS['text_dir'] = "text_dir";
  40. //$_SESSION
  41. $GLOBALS['server'] = 1;
  42. $container = Container::getDefaultContainer();
  43. $container->set('dbi', $GLOBALS['dbi']);
  44. $this->response = new \PMA\Test\Stubs\Response();
  45. $container->set('PMA\libraries\Response', $this->response);
  46. $container->alias('response', 'PMA\libraries\Response');
  47. }
  48. /**
  49. * Tests for _getHtmlForDatabases
  50. *
  51. * @return void
  52. * @group medium
  53. */
  54. public function testGetHtmlForDatabase()
  55. {
  56. $class = new ReflectionClass('\PMA\libraries\controllers\server\ServerDatabasesController');
  57. $method = $class->getMethod('_getHtmlForDatabases');
  58. $method->setAccessible(true);
  59. $container = Container::getDefaultContainer();
  60. $container->factory('PMA\libraries\controllers\server\ServerDatabasesController');
  61. $container->alias(
  62. 'ServerDatabasesController', 'PMA\libraries\controllers\server\ServerDatabasesController'
  63. );
  64. $ctrl = $container->get('ServerDatabasesController');
  65. //Call the test function
  66. $databases = array(
  67. array("SCHEMA_NAME" => "pma_bookmark"),
  68. array("SCHEMA_NAME" => "information_schema"),
  69. array("SCHEMA_NAME" => "mysql"),
  70. array("SCHEMA_NAME" => "performance_schema"),
  71. array("SCHEMA_NAME" => "phpmyadmin")
  72. );
  73. $property = $class->getProperty('_databases');
  74. $property->setAccessible(true);
  75. $property->setValue($ctrl, $databases);
  76. $property = $class->getProperty('_database_count');
  77. $property->setAccessible(true);
  78. $property->setValue($ctrl, 5);
  79. $property = $class->getProperty('_pos');
  80. $property->setAccessible(true);
  81. $property->setValue($ctrl, 0);
  82. $property = $class->getProperty('_dbstats');
  83. $property->setAccessible(true);
  84. $property->setValue($ctrl, 0);
  85. $property = $class->getProperty('_sort_by');
  86. $property->setAccessible(true);
  87. $property->setValue($ctrl, 'SCHEMA_NAME');
  88. $property = $class->getProperty('_sort_order');
  89. $property->setAccessible(true);
  90. $property->setValue($ctrl, 'asc');
  91. $replication_types = array("master", "slave");
  92. $html = $method->invoke($ctrl, $replication_types);
  93. //validate 1: General info
  94. $this->assertContains(
  95. '<div id="tableslistcontainer">',
  96. $html
  97. );
  98. //validate 2:ajax Form
  99. $this->assertContains(
  100. '<form class="ajax" action="server_databases.php" ',
  101. $html
  102. );
  103. $this->assertContains(
  104. '<table id="tabledatabases" class="data">',
  105. $html
  106. );
  107. //validate 3: PMA_getHtmlForColumnOrderWithSort
  108. $this->assertContains(
  109. '<a href="server_databases.php',
  110. $html
  111. );
  112. $this->assertContains(
  113. 'sort_by=SCHEMA_NAME',
  114. $html
  115. );
  116. //validate 4: PMA_getHtmlAndColumnOrderForDatabaseList
  117. $this->assertRegExp(
  118. '/title="pma_bookmark"[[:space:]]*value="pma_bookmark"/',
  119. $html
  120. );
  121. $this->assertRegExp(
  122. '/title="information_schema"[[:space:]]*value="information_schema"/',
  123. $html
  124. );
  125. $this->assertRegExp(
  126. '/title="performance_schema"[[:space:]]*value="performance_schema"/',
  127. $html
  128. );
  129. $this->assertRegExp(
  130. '/title="phpmyadmin"[[:space:]]*value="phpmyadmin"/',
  131. $html
  132. );
  133. //validate 5: PMA_getHtmlForTableFooter
  134. $this->assertContains(
  135. 'Total: <span id="databases_count">5</span>',
  136. $html
  137. );
  138. //validate 6: PMA_getHtmlForTableFooterButtons
  139. $this->assertContains(
  140. 'Check all',
  141. $html
  142. );
  143. //validate 7: PMA_getHtmlForNoticeEnableStatistics
  144. $this->assertContains(
  145. 'Note: Enabling the database statistics here might cause heavy traffic',
  146. $html
  147. );
  148. $this->assertContains(
  149. 'Enable statistics',
  150. $html
  151. );
  152. }
  153. /**
  154. * Tests for _setSortDetails()
  155. *
  156. * @return void
  157. */
  158. public function testSetSortDetails()
  159. {
  160. $class = new ReflectionClass('\PMA\libraries\controllers\server\ServerDatabasesController');
  161. $method = $class->getMethod('_setSortDetails');
  162. $method->setAccessible(true);
  163. $propertySortBy = $class->getProperty('_sort_by');
  164. $propertySortBy->setAccessible(true);
  165. $propertySortOrder = $class->getProperty('_sort_order');
  166. $propertySortOrder->setAccessible(true);
  167. $container = Container::getDefaultContainer();
  168. $container->factory('PMA\libraries\controllers\server\ServerDatabasesController');
  169. $container->alias(
  170. 'ServerDatabasesController', 'PMA\libraries\controllers\server\ServerDatabasesController'
  171. );
  172. $ctrl = $container->get('ServerDatabasesController');
  173. //$_REQUEST['sort_by'] and $_REQUEST['sort_order'] are empty
  174. $method->invoke($ctrl, array("master", "slave"));
  175. $this->assertEquals(
  176. 'SCHEMA_NAME',
  177. $propertySortBy->getValue($ctrl)
  178. );
  179. $this->assertEquals(
  180. 'asc',
  181. $propertySortOrder->getValue($ctrl)
  182. );
  183. $container = Container::getDefaultContainer();
  184. $container->factory('PMA\libraries\controllers\server\ServerDatabasesController');
  185. $container->alias(
  186. 'ServerDatabasesController', 'PMA\libraries\controllers\server\ServerDatabasesController'
  187. );
  188. $ctrl = $container->get('ServerDatabasesController');
  189. // $_REQUEST['sort_by'] = 'DEFAULT_COLLATION_NAME'
  190. // and $_REQUEST['sort_order'] is not 'desc'
  191. $_REQUEST['sort_by'] = 'DEFAULT_COLLATION_NAME';
  192. $_REQUEST['sort_order'] = 'abc';
  193. $method->invoke($ctrl);
  194. $this->assertEquals(
  195. 'DEFAULT_COLLATION_NAME',
  196. $propertySortBy->getValue($ctrl)
  197. );
  198. $this->assertEquals(
  199. 'asc',
  200. $propertySortOrder->getValue($ctrl)
  201. );
  202. $container = Container::getDefaultContainer();
  203. $container->factory('PMA\libraries\controllers\server\ServerDatabasesController');
  204. $container->alias(
  205. 'ServerDatabasesController', 'PMA\libraries\controllers\server\ServerDatabasesController'
  206. );
  207. $ctrl = $container->get('ServerDatabasesController');
  208. // $_REQUEST['sort_by'] = 'DEFAULT_COLLATION_NAME'
  209. // and $_REQUEST['sort_order'] is 'desc'
  210. $_REQUEST['sort_by'] = 'DEFAULT_COLLATION_NAME';
  211. $_REQUEST['sort_order'] = 'desc';
  212. $method->invoke($ctrl);
  213. $this->assertEquals(
  214. 'DEFAULT_COLLATION_NAME',
  215. $propertySortBy->getValue($ctrl)
  216. );
  217. $this->assertEquals(
  218. 'desc',
  219. $propertySortOrder->getValue($ctrl)
  220. );
  221. }
  222. /**
  223. * Tests for _getColumnOrder()
  224. *
  225. * @return void
  226. */
  227. public function testGetColumnOrder()
  228. {
  229. $class = new ReflectionClass('\PMA\libraries\controllers\server\ServerDatabasesController');
  230. $method = $class->getMethod('_getColumnOrder');
  231. $method->setAccessible(true);
  232. $container = Container::getDefaultContainer();
  233. $container->factory('PMA\libraries\controllers\server\ServerDatabasesController');
  234. $container->alias(
  235. 'ServerDatabasesController', 'PMA\libraries\controllers\server\ServerDatabasesController'
  236. );
  237. $ctrl = $container->get('ServerDatabasesController');
  238. $this->assertEquals(
  239. array(
  240. 'DEFAULT_COLLATION_NAME' => array(
  241. 'disp_name' => __('Collation'),
  242. 'description_function' => array(
  243. '\PMA\libraries\Charsets',
  244. 'getCollationDescr'
  245. ),
  246. 'format' => 'string',
  247. 'footer' => 'utf8_general_ci'
  248. ),
  249. 'SCHEMA_TABLES' => array(
  250. 'disp_name' => __('Tables'),
  251. 'format' => 'number',
  252. 'footer' => 0
  253. ),
  254. 'SCHEMA_TABLE_ROWS' => array(
  255. 'disp_name' => __('Rows'),
  256. 'format' => 'number',
  257. 'footer' => 0
  258. ),
  259. 'SCHEMA_DATA_LENGTH' => array(
  260. 'disp_name' => __('Data'),
  261. 'format' => 'byte',
  262. 'footer' => 0
  263. ),
  264. 'SCHEMA_INDEX_LENGTH' => array(
  265. 'disp_name' => __('Indexes'),
  266. 'format' => 'byte',
  267. 'footer' => 0
  268. ),
  269. 'SCHEMA_LENGTH' => array(
  270. 'disp_name' => __('Total'),
  271. 'format' => 'byte',
  272. 'footer' => 0
  273. )
  274. ),
  275. $method->invoke($ctrl)
  276. );
  277. }
  278. }