PageRenderTime 48ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/test/classes/Plugins/Import/ImportOdsTest.php

http://github.com/phpmyadmin/phpmyadmin
PHP | 262 lines | 177 code | 34 blank | 51 comment | 1 complexity | 38f376d2d946597405e576e3edd77381 MD5 | raw file
Possible License(s): GPL-2.0, MIT, LGPL-3.0
  1. <?php
  2. declare(strict_types=1);
  3. namespace PhpMyAdmin\Tests\Plugins\Import;
  4. use PhpMyAdmin\File;
  5. use PhpMyAdmin\Plugins\Import\ImportOds;
  6. use PhpMyAdmin\Tests\AbstractTestCase;
  7. use function __;
  8. use function str_repeat;
  9. /**
  10. * @covers \PhpMyAdmin\Plugins\Import\ImportOds
  11. * @requires extension zip
  12. */
  13. class ImportOdsTest extends AbstractTestCase
  14. {
  15. /** @var ImportOds */
  16. protected $object;
  17. /**
  18. * Sets up the fixture, for example, opens a network connection.
  19. * This method is called before a test is executed.
  20. *
  21. * @access protected
  22. */
  23. protected function setUp(): void
  24. {
  25. parent::setUp();
  26. $GLOBALS['server'] = 0;
  27. $GLOBALS['plugin_param'] = 'csv';
  28. $this->object = new ImportOds();
  29. //setting
  30. $GLOBALS['finished'] = false;
  31. $GLOBALS['read_limit'] = 100000000;
  32. $GLOBALS['offset'] = 0;
  33. $GLOBALS['cfg']['Server']['DisableIS'] = false;
  34. /**
  35. * Load interface for zip extension.
  36. */
  37. $GLOBALS['read_multiply'] = 10;
  38. $GLOBALS['import_type'] = 'ods';
  39. //variable for Ods
  40. $_REQUEST['ods_recognize_percentages'] = true;
  41. $_REQUEST['ods_recognize_currency'] = true;
  42. }
  43. /**
  44. * Tears down the fixture, for example, closes a network connection.
  45. * This method is called after a test is executed.
  46. *
  47. * @access protected
  48. */
  49. protected function tearDown(): void
  50. {
  51. parent::tearDown();
  52. unset($this->object);
  53. }
  54. /**
  55. * Test for getProperties
  56. *
  57. * @group medium
  58. */
  59. public function testGetProperties(): void
  60. {
  61. $properties = $this->object->getProperties();
  62. $this->assertEquals(
  63. __('OpenDocument Spreadsheet'),
  64. $properties->getText()
  65. );
  66. $this->assertEquals(
  67. 'ods',
  68. $properties->getExtension()
  69. );
  70. $this->assertEquals(
  71. __('Options'),
  72. $properties->getOptionsText()
  73. );
  74. }
  75. /**
  76. * Test for doImport
  77. *
  78. * @group medium
  79. */
  80. public function testDoImport(): void
  81. {
  82. //$sql_query_disabled will show the import SQL detail
  83. //$import_notice will show the import detail result
  84. global $import_notice, $sql_query, $sql_query_disabled;
  85. $sql_query_disabled = false;
  86. $GLOBALS['import_file'] = 'test/test_data/db_test.ods';
  87. $_REQUEST['ods_empty_rows'] = true;
  88. parent::setGlobalDbi();
  89. $importHandle = new File($GLOBALS['import_file']);
  90. $importHandle->setDecompressContent(true);
  91. $importHandle->open();
  92. //Test function called
  93. $this->object->doImport($importHandle);
  94. $this->assertStringContainsString(
  95. 'CREATE DATABASE IF NOT EXISTS `ODS_DB` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci',
  96. $sql_query
  97. );
  98. $this->assertStringContainsString('CREATE TABLE IF NOT EXISTS `ODS_DB`.`pma_bookmark`', $sql_query);
  99. $this->assertStringContainsString(
  100. 'INSERT INTO `ODS_DB`.`pma_bookmark` (`A`, `B`, `C`, `D`) VALUES (1, \'dbbase\', NULL, \'ddd\');',
  101. $sql_query
  102. );
  103. //asset that all databases and tables are imported
  104. $this->assertStringContainsString(
  105. 'The following structures have either been created or altered.',
  106. $import_notice
  107. );
  108. $this->assertStringContainsString('Go to database: `ODS_DB`', $import_notice);
  109. $this->assertStringContainsString('Edit settings for `ODS_DB`', $import_notice);
  110. $this->assertStringContainsString('Go to table: `pma_bookmark`', $import_notice);
  111. $this->assertStringContainsString('Edit settings for `pma_bookmark`', $import_notice);
  112. //asset that the import process is finished
  113. $this->assertTrue($GLOBALS['finished']);
  114. }
  115. public function dataProviderOdsEmptyRows(): array
  116. {
  117. return [
  118. 'remove empty columns' => [true],
  119. 'keep empty columns' => [false],
  120. ];
  121. }
  122. /**
  123. * Test for doImport using second dataset
  124. *
  125. * @group medium
  126. * @dataProvider dataProviderOdsEmptyRows
  127. * @requires extension simplexml
  128. */
  129. public function testDoImportDataset2(bool $odsEmptyRowsMode): void
  130. {
  131. //$sql_query_disabled will show the import SQL detail
  132. //$import_notice will show the import detail result
  133. global $import_notice, $sql_query, $sql_query_disabled;
  134. $sql_query_disabled = false;
  135. $GLOBALS['import_file'] = 'test/test_data/import-slim.ods.xml';
  136. $_REQUEST['ods_col_names'] = true;
  137. $_REQUEST['ods_empty_rows'] = $odsEmptyRowsMode;
  138. parent::setGlobalDbi();
  139. $importHandle = new File($GLOBALS['import_file']);
  140. $importHandle->setDecompressContent(false);// Not compressed
  141. $importHandle->open();
  142. // The process could probably detect that all the values for columns V to BL are empty
  143. // That would make the empty columns not needed and would create a cleaner structure
  144. $nulls = ', NULL' . str_repeat(', NULL', 44);// 45 empty cells
  145. $nullCells = ', `T` varchar(10), `U` varchar(10),'
  146. . ' `V` varchar(10), `W` varchar(10), `X` varchar(10), `Y` varchar(10), `Z` varchar(10),'
  147. . ' `AA` varchar(10), `AB` varchar(10), `AC` varchar(10), `AD` varchar(10), `AE` varchar(10),'
  148. . ' `AF` varchar(10), `AG` varchar(10), `AH` varchar(10), `AI` varchar(10), `AJ` varchar(10),'
  149. . ' `AK` varchar(10), `AL` varchar(10), `AM` varchar(10), `AN` varchar(10), `AO` varchar(10),'
  150. . ' `AP` varchar(10), `AQ` varchar(10), `AR` varchar(10), `AS` varchar(10), `AT` varchar(10),'
  151. . ' `AU` varchar(10), `AV` varchar(10), `AW` varchar(10), `AX` varchar(10), `AY` varchar(10),'
  152. . ' `AZ` varchar(10), `BA` varchar(10), `BB` varchar(10), `BC` varchar(10), `BD` varchar(10),'
  153. . ' `BE` varchar(10), `BF` varchar(10), `BG` varchar(10), `BH` varchar(10), `BI` varchar(10),'
  154. . ' `BJ` varchar(10), `BK` varchar(10), `BL` varchar(10)';
  155. $nullCellNames = ', `T`, `U`, `V`, `W`, `X`, `Y`, `Z`, `AA`, `AB`, `AC`,'
  156. . ' `AD`, `AE`, `AF`, `AG`, `AH`, `AI`, `AJ`, `AK`, `AL`, `AM`, `AN`, `AO`, `AP`, `AQ`,'
  157. . ' `AR`, `AS`, `AT`, `AU`, `AV`, `AW`, `AX`, `AY`, `AZ`, `BA`, `BB`, `BC`, `BD`, `BE`,'
  158. . ' `BF`, `BG`, `BH`, `BI`, `BJ`, `BK`, `BL`';
  159. $endOfSql = ');;';
  160. if (! $odsEmptyRowsMode) {
  161. $fullCols = 'NULL' . str_repeat(', NULL', 44 + 19);
  162. $endOfSql = '),' . "\n"// three more empty lines
  163. . ' (' . $fullCols . '),' . "\n"
  164. . ' (' . $fullCols . '),' . "\n"
  165. . ' (' . $fullCols . ');;';
  166. }
  167. //Test function called
  168. $this->object->doImport($importHandle);
  169. $this->assertSame(
  170. 'CREATE DATABASE IF NOT EXISTS `ODS_DB` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;;'
  171. . 'CREATE TABLE IF NOT EXISTS `ODS_DB`.`Shop` ('
  172. . '`Artikelnummer` varchar(7), `Name` varchar(41), `keywords` varchar(15), `EK_Preis` varchar(21),'
  173. . ' `Preis` varchar(23), `Details` varchar(10), `addInfo` varchar(22), `Einheit` varchar(3),'
  174. . ' `Wirkstoff` varchar(10), `verkuerztHaltbar` varchar(21), `kuehlkette` varchar(7),'
  175. . ' `Gebinde` varchar(71), `Verbrauchsnachweis` varchar(7), `Genehmigungspflichtig` varchar(7),'
  176. . ' `Gefahrstoff` varchar(11), `GefahrArbeitsbereich` varchar(14), `Verwendungszweck` varchar(10),'
  177. . ' `Verbrauch` varchar(10), `showLagerbestand` varchar(7)' . $nullCells . ') '
  178. . 'DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;;'
  179. . 'INSERT INTO `ODS_DB`.`Shop` ('
  180. . '`Artikelnummer`, `Name`, `keywords`, `EK_Preis`, `Preis`, `Details`, `addInfo`, `Einheit`,'
  181. . ' `Wirkstoff`, `verkuerztHaltbar`, `kuehlkette`, `Gebinde`, `Verbrauchsnachweis`,'
  182. . ' `Genehmigungspflichtig`, `Gefahrstoff`, `GefahrArbeitsbereich`, `Verwendungszweck`,'
  183. . ' `Verbrauch`, `showLagerbestand`' . $nullCellNames . ') VALUES ('
  184. . 'NULL, NULL, \'Schlüsselwörter\', \'Einkaufspreis (Netto)\', \'VK-Preis (Orientierung)\', NULL,'
  185. . ' \'Hintergrundinformation\', \'VPE\', NULL, \'verkürzte Haltbarkeit\', \'ja/nein\','
  186. . ' \'Stück,Rolle,Pack,Flasche,Sack,Eimer,Karton,Palette,Beutel,Kanister,Paar\', \'ja/nein\','
  187. . ' \'ja/nein\', \'GHS01-GHS09\', \'Arbeitsbereich\', NULL, NULL, \'ja/nein\''
  188. . $nulls . '),' . "\n"
  189. . ' (\'1005\', \'Beatmungsfilter\', NULL, \'0,85\', \'1,2\', NULL, NULL, \'5\', NULL, NULL, \'nein\','
  190. . ' \'Stück\', \'nein\', \'nein\', NULL, NULL, NULL, NULL, \'ja\'' . $nulls . '),' . "\n"
  191. . ' (\'04-3-06\', \'Absaugkatheter, CH06 grün\', NULL, \'0.13\', \'0.13\', NULL, NULL, \'1\','
  192. . ' NULL, NULL,'
  193. . ' NULL, \'Stück\', \'nein\', \'nein\', NULL, NULL, NULL, NULL, \'ja\''
  194. . $nulls . '),' . "\n"
  195. . ' (\'04-3-10\', \'Absaugkatheter, CH10 schwarz\', NULL, \'0.13\', \'0.13\', NULL, NULL, \'1\','
  196. . ' NULL, NULL, NULL, \'Stück\', \'nein\', \'nein\', NULL, NULL, NULL, NULL, \'ja\''
  197. . $nulls . '),' . "\n"
  198. . ' (\'04-3-18\', \'Absaugkatheter, CH18 rot\', NULL, \'0.13\', \'0.13\', NULL, NULL, \'1\','
  199. . ' NULL, NULL, NULL, \'Stück\', \'nein\', \'nein\', NULL, NULL, NULL, NULL, \'ja\''
  200. . $nulls . '),' . "\n"
  201. . ' (\'06-38\', \'Bakterienfilter\', NULL, \'1.25\', \'1.25\', NULL, NULL, \'1\', NULL, NULL, NULL,'
  202. . ' \'Stück\', \'nein\', \'nein\', NULL, NULL, NULL, NULL, \'ja\''
  203. . $nulls . '),' . "\n"
  204. . ' (\'05-453\', \'Blockerspritze für Larynxtubus, Erwachsen\', NULL, \'2.6\', \'2.6\', NULL, NULL,'
  205. . ' \'1\', NULL, NULL, NULL, \'Stück\', \'nein\', \'nein\', NULL, NULL, NULL, NULL, \'ja\''
  206. . $nulls . '),' . "\n"
  207. . ' (\'04-402\', \'Absaugschlauch mit Fingertip für Accuvac\', NULL, \'1.7\', \'1.7\', NULL, NULL,'
  208. . ' \'1\', NULL, NULL, NULL, \'Stück\', \'nein\', \'nein\', NULL, NULL, NULL, NULL, \'ja\''
  209. . $nulls . '),' . "\n"
  210. . ' (\'02-580\', \'Einmalbeatmungsbeutel, Erwachsen\', NULL, \'8.9\', \'8.9\', NULL, NULL,'
  211. . ' \'1\', NULL, NULL, NULL, \'Stück\', \'nein\', \'nein\', NULL, NULL, NULL, NULL, \'ja\''
  212. . $nulls
  213. . $endOfSql,
  214. $sql_query
  215. );
  216. //asset that all databases and tables are imported
  217. $this->assertStringContainsString(
  218. 'The following structures have either been created or altered.',
  219. $import_notice
  220. );
  221. $this->assertStringContainsString('Go to database: `ODS_DB`', $import_notice);
  222. $this->assertStringContainsString('Edit settings for `ODS_DB`', $import_notice);
  223. $this->assertStringContainsString('Go to table: `Shop`', $import_notice);
  224. $this->assertStringContainsString('Edit settings for `Shop`', $import_notice);
  225. //asset that the import process is finished
  226. $this->assertTrue($GLOBALS['finished']);
  227. }
  228. }