Merge pull request #19552 from kamil-tekiela/Fix-default-values
[phpmyadmin.git] / tests / unit / Plugins / Export / ExportPhparrayTest.php
blobf95c3339961198117973b40546988762c66cfb86
1 <?php
3 declare(strict_types=1);
5 namespace PhpMyAdmin\Tests\Plugins\Export;
7 use PhpMyAdmin\ConfigStorage\Relation;
8 use PhpMyAdmin\Current;
9 use PhpMyAdmin\Dbal\DatabaseInterface;
10 use PhpMyAdmin\Export\Export;
11 use PhpMyAdmin\Plugins\Export\ExportPhparray;
12 use PhpMyAdmin\Properties\Options\Groups\OptionsPropertyMainGroup;
13 use PhpMyAdmin\Properties\Options\Groups\OptionsPropertyRootGroup;
14 use PhpMyAdmin\Properties\Options\Items\HiddenPropertyItem;
15 use PhpMyAdmin\Properties\Plugins\ExportPluginProperties;
16 use PhpMyAdmin\Tests\AbstractTestCase;
17 use PhpMyAdmin\Transformations;
18 use PHPUnit\Framework\Attributes\CoversClass;
19 use PHPUnit\Framework\Attributes\Medium;
20 use ReflectionMethod;
21 use ReflectionProperty;
23 use function ob_get_clean;
24 use function ob_start;
26 #[CoversClass(ExportPhparray::class)]
27 #[Medium]
28 class ExportPhparrayTest extends AbstractTestCase
30 protected ExportPhparray $object;
32 /**
33 * Configures global environment.
35 protected function setUp(): void
37 parent::setUp();
39 $dbi = $this->createDatabaseInterface();
40 DatabaseInterface::$instance = $dbi;
41 Export::$outputKanjiConversion = false;
42 Export::$outputCharsetConversion = false;
43 Export::$bufferNeeded = false;
44 Export::$asFile = true;
45 Export::$saveOnServer = false;
46 Current::$database = '';
47 Current::$table = '';
48 Current::$lang = 'en';
49 $this->object = new ExportPhparray(
50 new Relation($dbi),
51 new Export($dbi),
52 new Transformations(),
56 /**
57 * tearDown for test cases
59 protected function tearDown(): void
61 parent::tearDown();
63 unset($this->object);
66 public function testSetProperties(): void
68 $method = new ReflectionMethod(ExportPhparray::class, 'setProperties');
69 $method->invoke($this->object, null);
71 $attrProperties = new ReflectionProperty(ExportPhparray::class, 'properties');
72 $properties = $attrProperties->getValue($this->object);
74 self::assertInstanceOf(ExportPluginProperties::class, $properties);
76 self::assertSame(
77 'PHP array',
78 $properties->getText(),
81 self::assertSame(
82 'php',
83 $properties->getExtension(),
86 self::assertSame(
87 'text/plain',
88 $properties->getMimeType(),
91 self::assertSame(
92 'Options',
93 $properties->getOptionsText(),
96 $options = $properties->getOptions();
98 self::assertInstanceOf(OptionsPropertyRootGroup::class, $options);
100 self::assertSame(
101 'Format Specific Options',
102 $options->getName(),
105 $generalOptionsArray = $options->getProperties();
106 $generalOptions = $generalOptionsArray->current();
108 self::assertInstanceOf(OptionsPropertyMainGroup::class, $generalOptions);
110 self::assertSame(
111 'general_opts',
112 $generalOptions->getName(),
115 $generalProperties = $generalOptions->getProperties();
117 $property = $generalProperties->current();
119 self::assertInstanceOf(HiddenPropertyItem::class, $property);
122 public function testExportHeader(): void
124 ob_start();
125 self::assertTrue(
126 $this->object->exportHeader(),
128 $result = ob_get_clean();
130 self::assertIsString($result);
132 self::assertStringContainsString('<?php' . "\n", $result);
135 public function testExportFooter(): void
137 self::assertTrue(
138 $this->object->exportFooter(),
142 public function testExportDBHeader(): void
144 ob_start();
145 self::assertTrue(
146 $this->object->exportDBHeader('db'),
148 $result = ob_get_clean();
150 self::assertIsString($result);
152 self::assertStringContainsString("/**\n * Database `db`\n */", $result);
155 public function testExportDBFooter(): void
157 self::assertTrue(
158 $this->object->exportDBFooter('testDB'),
162 public function testExportDBCreate(): void
164 self::assertTrue(
165 $this->object->exportDBCreate('testDB'),
169 public function testExportData(): void
171 ob_start();
172 self::assertTrue(
173 $this->object->exportData(
174 'test_db',
175 'test_table',
176 'SELECT * FROM `test_db`.`test_table`;',
179 $result = ob_get_clean();
181 self::assertSame(
182 "\n" . '/* `test_db`.`test_table` */' . "\n" .
183 '$test_table = array(' . "\n" .
184 ' array(\'id\' => \'1\',\'name\' => \'abcd\',\'datetimefield\' => \'2011-01-20 02:00:02\'),' . "\n" .
185 ' array(\'id\' => \'2\',\'name\' => \'foo\',\'datetimefield\' => \'2010-01-20 02:00:02\'),' . "\n" .
186 ' array(\'id\' => \'3\',\'name\' => \'Abcd\',\'datetimefield\' => \'2012-01-20 02:00:02\')' . "\n" .
187 ');' . "\n",
188 $result,
191 // case 2: test invalid variable name fix
192 ob_start();
193 self::assertTrue(
194 $this->object->exportData(
195 'test_db',
196 '0`932table',
197 'SELECT * FROM `test_db`.`test_table`;',
200 $result = ob_get_clean();
202 self::assertIsString($result);
203 self::assertSame(
204 "\n" . '/* `test_db`.`0``932table` */' . "\n" .
205 '$_0_932table = array(' . "\n" .
206 ' array(\'id\' => \'1\',\'name\' => \'abcd\',\'datetimefield\' => \'2011-01-20 02:00:02\'),' . "\n" .
207 ' array(\'id\' => \'2\',\'name\' => \'foo\',\'datetimefield\' => \'2010-01-20 02:00:02\'),' . "\n" .
208 ' array(\'id\' => \'3\',\'name\' => \'Abcd\',\'datetimefield\' => \'2012-01-20 02:00:02\')' . "\n" .
209 ');' . "\n",
210 $result,