Skip to content

Commit c4167c0

Browse files
Clean up the rest of import tests (#19071)
* Clean up ImportMediawikiTest Signed-off-by: Kamil Tekiela <tekiela246@gmail.com> * Clean up ImportOdsTest Signed-off-by: Kamil Tekiela <tekiela246@gmail.com> * Convert $_REQUEST to setImportOptions Signed-off-by: Kamil Tekiela <tekiela246@gmail.com> * Clean up ImportShpTest Signed-off-by: Kamil Tekiela <tekiela246@gmail.com> * Clean up ImportSqlTest Signed-off-by: Kamil Tekiela <tekiela246@gmail.com> * Clean up ImportXmlTest Signed-off-by: Kamil Tekiela <tekiela246@gmail.com> --------- Signed-off-by: Kamil Tekiela <tekiela246@gmail.com>
1 parent 6fde602 commit c4167c0

9 files changed

Lines changed: 66 additions & 144 deletions

File tree

phpstan-baseline.neon

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16320,16 +16320,6 @@ parameters:
1632016320
count: 6
1632116321
path: tests/unit/Plugins/Import/ImportLdiTest.php
1632216322

16323-
-
16324-
message: "#^Class PhpMyAdmin\\\\Tests\\\\Plugins\\\\Import\\\\ImportOdsTest has an uninitialized property \\$dbi\\. Give it default value or assign it in the constructor\\.$#"
16325-
count: 1
16326-
path: tests/unit/Plugins/Import/ImportOdsTest.php
16327-
16328-
-
16329-
message: "#^Class PhpMyAdmin\\\\Tests\\\\Plugins\\\\Import\\\\ImportOdsTest has an uninitialized property \\$dummyDbi\\. Give it default value or assign it in the constructor\\.$#"
16330-
count: 1
16331-
path: tests/unit/Plugins/Import/ImportOdsTest.php
16332-
1633316323
-
1633416324
message: "#^Parameter \\#2 \\$haystack of static method PHPUnit\\\\Framework\\\\Assert\\:\\:assertStringContainsString\\(\\) expects string, mixed given\\.$#"
1633516325
count: 3

psalm-baseline.xml

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8671,11 +8671,6 @@
86718671
<PossiblyUnusedReturnValue>
86728672
<code><![CDATA[string[]]]></code>
86738673
</PossiblyUnusedReturnValue>
8674-
<RiskyTruthyFalsyComparison>
8675-
<code><![CDATA[$_REQUEST['ods_empty_rows'] ?? false]]></code>
8676-
<code><![CDATA[$_REQUEST['ods_recognize_currency']]]></code>
8677-
<code><![CDATA[$_REQUEST['ods_recognize_percentages']]]></code>
8678-
</RiskyTruthyFalsyComparison>
86798674
</file>
86808675
<file src="src/Plugins/Import/ImportShp.php">
86818676
<DeprecatedMethod>
@@ -14246,11 +14241,6 @@
1424614241
<code><![CDATA[assertTrue]]></code>
1424714242
</TypeDoesNotContainType>
1424814243
</file>
14249-
<file src="tests/unit/Plugins/Import/ImportMediawikiTest.php">
14250-
<DeprecatedMethod>
14251-
<code><![CDATA[Config::getInstance()]]></code>
14252-
</DeprecatedMethod>
14253-
</file>
1425414244
<file src="tests/unit/Plugins/Import/ImportOdsTest.php">
1425514245
<DeprecatedMethod>
1425614246
<code><![CDATA[Config::getInstance()]]></code>
@@ -14260,24 +14250,11 @@
1426014250
</PossiblyUnusedMethod>
1426114251
</file>
1426214252
<file src="tests/unit/Plugins/Import/ImportShpTest.php">
14263-
<DeprecatedMethod>
14264-
<code><![CDATA[Config::getInstance()]]></code>
14265-
</DeprecatedMethod>
1426614253
<RedundantCondition>
1426714254
<code><![CDATA[assertFalse]]></code>
1426814255
<code><![CDATA[assertSame]]></code>
1426914256
</RedundantCondition>
1427014257
</file>
14271-
<file src="tests/unit/Plugins/Import/ImportSqlTest.php">
14272-
<DeprecatedMethod>
14273-
<code><![CDATA[Config::getInstance()]]></code>
14274-
</DeprecatedMethod>
14275-
</file>
14276-
<file src="tests/unit/Plugins/Import/ImportXmlTest.php">
14277-
<DeprecatedMethod>
14278-
<code><![CDATA[Config::getInstance()]]></code>
14279-
</DeprecatedMethod>
14280-
</file>
1428114258
<file src="tests/unit/Plugins/Schema/DiaRelationSchemaTest.php">
1428214259
<DeprecatedMethod>
1428314260
<code><![CDATA[Config::getInstance()]]></code>

src/Plugins/Import/ImportOds.php

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@
4040
*/
4141
class ImportOds extends ImportPlugin
4242
{
43+
private bool $recognizePercentages = false;
44+
private bool $recognizeCurrency = false;
45+
private bool $includeEmptyRows = false;
46+
private bool $hasColumnNames = false;
47+
4348
/** @psalm-return non-empty-lowercase-string */
4449
public function getName(): string
4550
{
@@ -99,6 +104,10 @@ protected function setProperties(): ImportPluginProperties
99104

100105
public function setImportOptions(ServerRequest $request): void
101106
{
107+
$this->recognizePercentages = $request->getParsedBodyParam('ods_recognize_percentages') !== null;
108+
$this->recognizeCurrency = $request->getParsedBodyParam('ods_recognize_currency') !== null;
109+
$this->includeEmptyRows = $request->getParsedBodyParam('ods_empty_rows') !== null;
110+
$this->hasColumnNames = $request->getParsedBodyParam('ods_col_names') !== null;
102111
}
103112

104113
/**
@@ -163,7 +172,7 @@ public function doImport(File|null $importHandle = null): array
163172
}
164173
}
165174

166-
$tables = $this->readSheets($sheets, isset($_REQUEST['ods_col_names']));
175+
$tables = $this->readSheets($sheets, $this->hasColumnNames);
167176

168177
/* Obtain the best-fit MySQL types for each column */
169178
$analyses = array_map($this->import->analyzeTable(...), $tables);
@@ -194,16 +203,14 @@ public function doImport(File|null $importHandle = null): array
194203
protected function getValue(SimpleXMLElement $cellAttrs, SimpleXMLElement $text): float|string
195204
{
196205
if (
197-
isset($_REQUEST['ods_recognize_percentages'])
198-
&& $_REQUEST['ods_recognize_percentages']
206+
$this->recognizePercentages
199207
&& (string) $cellAttrs['value-type'] === 'percentage'
200208
) {
201209
return (float) $cellAttrs['value'];
202210
}
203211

204212
if (
205-
isset($_REQUEST['ods_recognize_currency'])
206-
&& $_REQUEST['ods_recognize_currency']
213+
$this->recognizeCurrency
207214
&& (string) $cellAttrs['value-type'] === 'currency'
208215
) {
209216
return (float) $cellAttrs['value'];
@@ -302,7 +309,7 @@ private function readRows(
302309
$maxCols = max(count($tempRow), $maxCols);
303310

304311
/* Don't include a row that is full of NULL values */
305-
if ($_REQUEST['ods_empty_rows'] ?? false) {
312+
if ($this->includeEmptyRows) {
306313
foreach ($tempRow as $cell) {
307314
if ((string) $cell !== 'NULL') {
308315
$tempRows[] = $tempRow;

tests/unit/Plugins/Import/ImportLdiTest.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ protected function setUp(): void
3030
{
3131
parent::setUp();
3232

33-
DatabaseInterface::$instance = $this->createDatabaseInterface();
3433
ImportSettings::$charsetConversion = false;
3534
ImportSettings::$maxSqlLength = 0;
3635
$GLOBALS['sql_query'] = '';

tests/unit/Plugins/Import/ImportMediawikiTest.php

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44

55
namespace PhpMyAdmin\Tests\Plugins\Import;
66

7-
use PhpMyAdmin\Config;
87
use PhpMyAdmin\Current;
98
use PhpMyAdmin\DatabaseInterface;
109
use PhpMyAdmin\File;
@@ -30,7 +29,6 @@ protected function setUp(): void
3029
{
3130
parent::setUp();
3231

33-
DatabaseInterface::$instance = $this->createDatabaseInterface();
3432
$GLOBALS['error'] = null;
3533
ImportSettings::$timeoutPassed = false;
3634
ImportSettings::$maximumTime = 0;
@@ -44,17 +42,14 @@ protected function setUp(): void
4442
ImportSettings::$runQuery = false;
4543
ImportSettings::$goSql = false;
4644
ImportSettings::$importType = 'database';
47-
$this->object = new ImportMediawiki();
48-
49-
//setting
5045
ImportSettings::$finished = false;
5146
ImportSettings::$readLimit = 100000000;
5247
ImportSettings::$offset = 0;
53-
Config::getInstance()->selectedServer['DisableIS'] = false;
54-
5548
ImportSettings::$importFile = 'tests/test_data/phpmyadmin.mediawiki';
5649
$GLOBALS['import_text'] = 'ImportMediawiki_Test';
5750
ImportSettings::$readMultiply = 10;
51+
52+
$this->object = new ImportMediawiki();
5853
}
5954

6055
/**
@@ -98,9 +93,6 @@ public function testGetProperties(): void
9893
*/
9994
public function testDoImport(): void
10095
{
101-
//$import_notice will show the import detail result
102-
103-
//Mock DBI
10496
$dbi = $this->getMockBuilder(DatabaseInterface::class)
10597
->disableOriginalConstructor()
10698
->getMock();
@@ -139,7 +131,6 @@ public function testDoImport(): void
139131

140132
public function testDoImportWithEmptyTable(): void
141133
{
142-
//Mock DBI
143134
$dbi = $this->getMockBuilder(DatabaseInterface::class)
144135
->disableOriginalConstructor()
145136
->getMock();

tests/unit/Plugins/Import/ImportOdsTest.php

Lines changed: 42 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
use PhpMyAdmin\Current;
99
use PhpMyAdmin\DatabaseInterface;
1010
use PhpMyAdmin\File;
11+
use PhpMyAdmin\Http\Factory\ServerRequestFactory;
1112
use PhpMyAdmin\Import\ImportSettings;
1213
use PhpMyAdmin\Plugins\Import\ImportOds;
1314
use PhpMyAdmin\Tests\AbstractTestCase;
14-
use PhpMyAdmin\Tests\Stubs\DbiDummy;
1515
use PHPUnit\Framework\Attributes\CoversClass;
1616
use PHPUnit\Framework\Attributes\DataProvider;
1717
use PHPUnit\Framework\Attributes\Medium;
@@ -25,10 +25,6 @@
2525
#[Medium]
2626
class ImportOdsTest extends AbstractTestCase
2727
{
28-
protected DatabaseInterface $dbi;
29-
30-
protected DbiDummy $dummyDbi;
31-
3228
protected ImportOds $object;
3329

3430
/**
@@ -39,7 +35,6 @@ protected function setUp(): void
3935
{
4036
parent::setUp();
4137

42-
DatabaseInterface::$instance = $this->createDatabaseInterface();
4338
$GLOBALS['error'] = null;
4439
ImportSettings::$timeoutPassed = false;
4540
ImportSettings::$maximumTime = 0;
@@ -51,22 +46,21 @@ protected function setUp(): void
5146
ImportSettings::$runQuery = false;
5247
$GLOBALS['sql_query'] = '';
5348
ImportSettings::$goSql = false;
54-
$this->object = new ImportOds();
55-
56-
//setting
5749
ImportSettings::$finished = false;
5850
ImportSettings::$readLimit = 100000000;
5951
ImportSettings::$offset = 0;
6052
Config::getInstance()->selectedServer['DisableIS'] = false;
61-
62-
/**
63-
* Load interface for zip extension.
64-
*/
6553
ImportSettings::$readMultiply = 10;
6654

55+
$this->object = new ImportOds();
56+
6757
//variable for Ods
68-
$_REQUEST['ods_recognize_percentages'] = true;
69-
$_REQUEST['ods_recognize_currency'] = true;
58+
$request = ServerRequestFactory::create()->createServerRequest('POST', 'http://example.com/')
59+
->withParsedBody([
60+
'ods_recognize_percentages' => 'yes',
61+
'ods_recognize_currency' => 'yes',
62+
]);
63+
$this->object->setImportOptions($request);
7064
}
7165

7266
/**
@@ -105,23 +99,24 @@ public function testGetProperties(): void
10599
*/
106100
public function testDoImport(): void
107101
{
108-
//$sql_query_disabled will show the import SQL detail
109-
//$import_notice will show the import detail result
110-
111-
ImportSettings::$sqlQueryDisabled = false;
102+
ImportSettings::$sqlQueryDisabled = false; //will show the import SQL detail
112103

113104
ImportSettings::$importFile = 'tests/test_data/db_test.ods';
114-
$_REQUEST['ods_empty_rows'] = true;
115105

116-
$this->dummyDbi = $this->createDbiDummy();
117-
$this->dbi = $this->createDatabaseInterface($this->dummyDbi);
118-
DatabaseInterface::$instance = $this->dbi;
106+
$request = ServerRequestFactory::create()->createServerRequest('POST', 'http://example.com/')
107+
->withParsedBody([
108+
'ods_recognize_percentages' => 'yes',
109+
'ods_recognize_currency' => 'yes',
110+
'ods_empty_rows' => 'yes',
111+
]);
112+
$this->object->setImportOptions($request);
113+
114+
DatabaseInterface::$instance = $this->createDatabaseInterface();
119115

120116
$importHandle = new File(ImportSettings::$importFile);
121117
$importHandle->setDecompressContent(true);
122118
$importHandle->open();
123119

124-
//Test function called
125120
$this->object->doImport($importHandle);
126121

127122
self::assertStringContainsString(
@@ -134,7 +129,7 @@ public function testDoImport(): void
134129
$GLOBALS['sql_query'],
135130
);
136131

137-
//asset that all databases and tables are imported
132+
//assert that all databases and tables are imported
138133
self::assertStringContainsString(
139134
'The following structures have either been created or altered.',
140135
ImportSettings::$importNotice,
@@ -144,35 +139,39 @@ public function testDoImport(): void
144139
self::assertStringContainsString('Go to table: `pma_bookmark`', ImportSettings::$importNotice);
145140
self::assertStringContainsString('Edit settings for `pma_bookmark`', ImportSettings::$importNotice);
146141

147-
//asset that the import process is finished
142+
//assert that the import process is finished
148143
self::assertTrue(ImportSettings::$finished);
149144
}
150145

151-
/** @return mixed[] */
146+
/** @return array<string, array<string|null>> */
152147
public static function dataProviderOdsEmptyRows(): array
153148
{
154-
return ['remove empty columns' => [true], 'keep empty columns' => [false]];
149+
return [
150+
'remove empty columns' => ['yes'],
151+
'keep empty columns' => [null],
152+
];
155153
}
156154

157155
/**
158156
* Test for doImport using second dataset
159157
*/
160158
#[DataProvider('dataProviderOdsEmptyRows')]
161159
#[RequiresPhpExtension('simplexml')]
162-
public function testDoImportDataset2(bool $odsEmptyRowsMode): void
160+
public function testDoImportDataset2(string|null $odsEmptyRowsMode): void
163161
{
164-
//$sql_query_disabled will show the import SQL detail
165-
//$import_notice will show the import detail result
166-
167-
ImportSettings::$sqlQueryDisabled = false;
162+
ImportSettings::$sqlQueryDisabled = false; //will show the import SQL detail
168163

169164
ImportSettings::$importFile = 'tests/test_data/import-slim.ods.xml';
170-
$_REQUEST['ods_col_names'] = true;
171-
$_REQUEST['ods_empty_rows'] = $odsEmptyRowsMode;
165+
$request = ServerRequestFactory::create()->createServerRequest('POST', 'http://example.com/')
166+
->withParsedBody([
167+
'ods_recognize_percentages' => 'yes',
168+
'ods_recognize_currency' => 'yes',
169+
'ods_col_names' => 'yes',
170+
'ods_empty_rows' => $odsEmptyRowsMode,
171+
]);
172+
$this->object->setImportOptions($request);
172173

173-
$this->dummyDbi = $this->createDbiDummy();
174-
$this->dbi = $this->createDatabaseInterface($this->dummyDbi);
175-
DatabaseInterface::$instance = $this->dbi;
174+
DatabaseInterface::$instance = $this->createDatabaseInterface();
176175

177176
$importHandle = new File(ImportSettings::$importFile);
178177
$importHandle->setDecompressContent(false);// Not compressed
@@ -183,12 +182,11 @@ public function testDoImportDataset2(bool $odsEmptyRowsMode): void
183182

184183
$endOfSql = ');';
185184

186-
if (! $odsEmptyRowsMode) {
185+
if ($odsEmptyRowsMode === null) {
187186
$fullCols = 'NULL' . str_repeat(', NULL', 18);// 19 empty cells
188187
$endOfSql = '),' . "\n" . ' (' . $fullCols . '),' . "\n" . ' (' . $fullCols . ');';
189188
}
190189

191-
//Test function called
192190
$this->object->doImport($importHandle);
193191

194192
self::assertSame(
@@ -240,12 +238,12 @@ public function testDoImportDataset2(bool $odsEmptyRowsMode): void
240238
. ' (\'0.05\'),' . "\n"
241239
. ' (\'true\'),' . "\n"
242240
. ' (\'12\')'
243-
. ($odsEmptyRowsMode ? '' : ',' . "\n" . ' (NULL)')
244-
. ($odsEmptyRowsMode ? ';' : ',' . "\n" . ' (NULL);'),
241+
. ($odsEmptyRowsMode !== null ? '' : ',' . "\n" . ' (NULL)')
242+
. ($odsEmptyRowsMode !== null ? ';' : ',' . "\n" . ' (NULL);'),
245243
$GLOBALS['sql_query'],
246244
);
247245

248-
//asset that all databases and tables are imported
246+
//assert that all databases and tables are imported
249247
self::assertStringContainsString(
250248
'The following structures have either been created or altered.',
251249
ImportSettings::$importNotice,
@@ -255,7 +253,7 @@ public function testDoImportDataset2(bool $odsEmptyRowsMode): void
255253
self::assertStringContainsString('Go to table: `Shop`', ImportSettings::$importNotice);
256254
self::assertStringContainsString('Edit settings for `Shop`', ImportSettings::$importNotice);
257255

258-
//asset that the import process is finished
256+
//assert that the import process is finished
259257
self::assertTrue(ImportSettings::$finished);
260258
}
261259
}

0 commit comments

Comments
 (0)