diff --git a/psalm-baseline.xml b/psalm-baseline.xml
index 8f252fcd6e..1fea08d890 100644
--- a/psalm-baseline.xml
+++ b/psalm-baseline.xml
@@ -9984,8 +9984,6 @@
-
-
diff --git a/tests/unit/Gis/GisVisualizationTest.php b/tests/unit/Gis/GisVisualizationTest.php
index c9a2e14c2f..84a3f4a1db 100644
--- a/tests/unit/Gis/GisVisualizationTest.php
+++ b/tests/unit/Gis/GisVisualizationTest.php
@@ -80,173 +80,176 @@ class GisVisualizationTest extends AbstractTestCase
/**
* Scale the data set
+ *
+ * @param list $data
*/
- public function testScaleDataSet(): void
+ #[DataProvider('providerForTestScaleDataSet')]
+ public function testScaleDataSet(ScaleData|null $expected, array $data): void
{
- $this->dbi->setVersion(['@@version' => '5.5.0']);
- $gis = GisVisualization::getByData([], new GisVisualizationSettings(600, 450, 'abc'));
-
- $dataSet = (new ReflectionMethod(GisVisualization::class, 'scaleDataSet'))->invokeArgs($gis, [
- [
- ['abc' => null],// The column is nullable
- ['abc' => 2],// Some impossible test case
- ],
- ]);
- self::assertNull($dataSet);
-
- $dataSet = (new ReflectionMethod(GisVisualization::class, 'scaleDataSet'))->invokeArgs($gis, [
- [
- ['abc' => null],// The column is nullable
- ['abc' => 2],// Some impossible test case
- ['abc' => 'MULTILINESTRING((36 140,47 233,62 75),(36 100,17 233,178 93))'],
- ['abc' => 'POINT(100 250)'],
- ['abc' => 'MULTIPOINT(125 50,156 250,178 143,175 80)'],
- ],
- ]);
- self::assertEquals(
- new ScaleData(
- offsetX: -45.35714285714286,
- offsetY: 42.85714285714286,
- scale: 2.1,
- height: 450,
- ),
- $dataSet,
+ $gis = GisVisualization::getByData(
+ $data,
+ new GisVisualizationSettings(width: 600, height: 450, spatialColumn: 'abc'),
);
+ $dataSet = (new ReflectionMethod(GisVisualization::class, 'scaleDataSet'))
+ ->invoke($gis, $data);
- // Regression test for bug with 0.0 sentinel values
- $dataSet = (new ReflectionMethod(GisVisualization::class, 'scaleDataSet'))->invokeArgs($gis, [
- [
- ['abc' => 'MULTIPOLYGON(((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1)))'],
- ['abc' => 'MULTIPOLYGON(((10 10,10 13,13 13,13 10,10 10),(11 11,11 12,12 12,12 11,11 11)))'],
+ self::assertEquals($expected, $dataSet);
+ }
+
+ /** @return array}> */
+ public static function providerForTestScaleDataSet(): array
+ {
+ return [
+ 'no valid data' => [
+ null,
+ [
+ ['abc' => null], // The column is nullable
+ ['abc' => 2], // Some impossible test case
+ ],
],
- ]);
- self::assertEquals(
- new ScaleData(
- scale: 32.30769230769231,
- offsetX: -2.7857142857142865,
- offsetY: -0.4642857142857143,
- height: 450,
- ),
- $dataSet,
- );
+ 'partially valid data' => [
+ new ScaleData(offsetX: -45.35714285714286, offsetY: 42.85714285714286, scale: 2.1, height: 450),
+ [
+ ['abc' => null], // The column is nullable
+ ['abc' => 2], // Some impossible test case
+ ['abc' => 'MULTILINESTRING((36 140,47 233,62 75),(36 100,17 233,178 93))'],
+ ['abc' => 'POINT(100 250)'],
+ ['abc' => 'MULTIPOINT(125 50,156 250,178 143,175 80)'],
+ ],
+ ],
+ 'Regression test for bug with 0.0 sentinel values' => [
+ new ScaleData(
+ scale: 32.30769230769231,
+ offsetX: -2.7857142857142865,
+ offsetY: -0.4642857142857143,
+ height: 450,
+ ),
+ [
+ ['abc' => 'MULTIPOLYGON(((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1)))'],
+ ['abc' => 'MULTIPOLYGON(((10 10,10 13,13 13,13 10,10 10),(11 11,11 12,12 12,12 11,11 11)))'],
+ ],
+ ],
+ ];
+ }
+
+ /** @param array{version:string,sql:string,spatialColumn:string,labelColumn?:string,rows?:int,pos?:int} $config */
+ #[DataProvider('providerForTestModifyQuery')]
+ public function testModifyQuery(string $expected, array $config): void
+ {
+ $this->dbi->setVersion(['@@version' => $config['version']]);
+
+ $vis = new ReflectionClass(GisVisualization::class);
+ $obj = $vis->newInstanceWithoutConstructor();
+ $vis->getProperty('pos')->setValue($obj, $config['pos'] ?? 0);
+ $vis->getProperty('rows')->setValue($obj, $config['rows'] ?? 0);
+ $vis->getProperty('spatialColumn')->setValue($obj, $config['spatialColumn']);
+ $vis->getProperty('labelColumn')->setValue($obj, $config['labelColumn'] ?? '');
+
+ $queryString = $vis->getMethod('modifySqlQuery')->invoke($obj, $config['sql']);
+
+ self::assertSame($expected, $queryString);
}
/**
- * Modify the query for an old version
+ * @return Generator<
+ * string,
+ * list{
+ * string,
+ * array{
+ * version: string,
+ * sql: string,
+ * spatialColumn: string,
+ * labelColumn?: string,
+ * rows?: int,
+ * pos?: int,
+ * }
+ * }
+ * >
*/
- public function testModifyQueryOld(): void
+ public static function providerForTestModifyQuery(): Generator
{
- $this->dbi->setVersion(['@@version' => '5.5.0']);
- $queryString = (new ReflectionMethod(GisVisualization::class, 'modifySqlQuery'))
- ->invokeArgs(GisVisualization::getByData([], new GisVisualizationSettings(600, 450, 'abc')), ['']);
+ yield 'Modify the query for an old version' => [
+ 'SELECT ASTEXT(`abc`) AS `abc`, SRID(`abc`) AS `srid` FROM (SELECT POINT(0, 0) AS abc) AS `temp_gis`',
+ [
+ 'version' => '5.5.0',
+ 'sql' => 'SELECT POINT(0, 0) AS abc',
+ 'spatialColumn' => 'abc',
+ ],
+ ];
- self::assertSame('SELECT ASTEXT(`abc`) AS `abc`, SRID(`abc`) AS `srid` FROM () AS `temp_gis`', $queryString);
- }
+ yield 'Modify the query for an MySQL 8.0 version' => [
+ 'SELECT ST_ASTEXT(`abc`) AS `abc`, ST_SRID(`abc`) AS `srid`'
+ . ' FROM (SELECT POINT(0, 0) AS abc) AS `temp_gis`',
+ [
+ 'version' => '8.0.0',
+ 'spatialColumn' => 'abc',
+ 'sql' => 'SELECT POINT(0, 0) AS abc',
+ ],
+ ];
- /**
- * Modify the query for an MySQL 8.0 version
- */
- public function testModifyQuery(): void
- {
- $this->dbi->setVersion(['@@version' => '8.0.0']);
- $queryString = (new ReflectionMethod(GisVisualization::class, 'modifySqlQuery'))
- ->invokeArgs(GisVisualization::getByData([], new GisVisualizationSettings(600, 450, 'abc')), ['']);
-
- self::assertSame(
- 'SELECT ST_ASTEXT(`abc`) AS `abc`, ST_SRID(`abc`) AS `srid` FROM () AS `temp_gis`',
- $queryString,
- );
- }
-
- /**
- * Modify the query for an MySQL 8.0 version and trim the SQL end character
- */
- public function testModifyQueryTrimSqlEnd(): void
- {
- $this->dbi->setVersion(['@@version' => '8.0.0']);
- $queryString = (new ReflectionMethod(GisVisualization::class, 'modifySqlQuery'))->invokeArgs(
- GisVisualization::getByData([], new GisVisualizationSettings(600, 450, 'abc')),
- ['SELECT 1 FROM foo;'],
- );
-
- self::assertSame(
+ yield 'Modify the query for an MySQL 8.0 version and trim the SQL end character' => [
'SELECT ST_ASTEXT(`abc`) AS `abc`, ST_SRID(`abc`) AS `srid` FROM (SELECT 1 FROM foo) AS `temp_gis`',
- $queryString,
- );
- }
+ [
+ 'version' => '8.0.0',
+ 'spatialColumn' => 'abc',
+ 'sql' => 'SELECT 1 FROM foo;',
+ ],
+ ];
- /**
- * Modify the query for an MySQL 8.0 version using a label column
- */
- public function testModifyQueryLabelColumn(): void
- {
- $this->dbi->setVersion(['@@version' => '8.0.0']);
- $queryString = (new ReflectionMethod(GisVisualization::class, 'modifySqlQuery'))->invokeArgs(
- GisVisualization::getByData([], new GisVisualizationSettings(600, 450, 'country_geom', 'country name')),
- [''],
- );
-
- self::assertSame(
+ yield 'Modify the query for an MySQL 8.0 version using a label column' => [
'SELECT `country name`, ST_ASTEXT(`country_geom`) AS `country_geom`,'
- . ' ST_SRID(`country_geom`) AS `srid` FROM () AS `temp_gis`',
- $queryString,
- );
- }
+ . ' ST_SRID(`country_geom`) AS `srid`'
+ . " FROM (SELECT POINT(0, 0) AS country_geom, 'country name') AS `temp_gis`",
+ [
+ 'version' => '8.0.0',
+ 'spatialColumn' => 'country_geom',
+ 'labelColumn' => 'country name',
+ 'sql' => "SELECT POINT(0, 0) AS country_geom, 'country name'",
+ ],
+ ];
- /**
- * Modify the query for an MySQL 8.0 version adding a LIMIT statement
- */
- public function testModifyQueryWithLimit(): void
- {
- $this->dbi->setVersion(['@@version' => '8.0.0']);
- $gis = GisVisualization::getByData([], new GisVisualizationSettings(600, 450, 'abc'));
- (new ReflectionProperty(GisVisualization::class, 'rows'))->setValue($gis, 10);
- $queryString = (new ReflectionMethod(GisVisualization::class, 'modifySqlQuery'))->invokeArgs($gis, ['']);
+ yield 'Modify the query for an MySQL 8.0 version adding a LIMIT statement' => [
+ 'SELECT ST_ASTEXT(`abc`) AS `abc`, ST_SRID(`abc`) AS `srid`'
+ . ' FROM (SELECT POINT(0, 0) AS abc) AS `temp_gis` LIMIT 10',
+ [
+ 'version' => '8.0.0',
+ 'spatialColumn' => 'abc',
+ 'sql' => 'SELECT POINT(0, 0) AS abc',
+ 'rows' => 10,
+ ],
+ ];
- self::assertSame(
- 'SELECT ST_ASTEXT(`abc`) AS `abc`, ST_SRID(`abc`) AS `srid` FROM () AS `temp_gis` LIMIT 10',
- $queryString,
- );
+ yield 'Modify the query for an MySQL 8.0 version adding a LIMIT statement with offset' => [
+ 'SELECT ST_ASTEXT(`abc`) AS `abc`, ST_SRID(`abc`) AS `srid`'
+ . ' FROM (SELECT POINT(0, 0) AS abc) AS `temp_gis` LIMIT 10, 15',
+ [
+ 'version' => '8.0.0',
+ 'spatialColumn' => 'abc',
+ 'sql' => 'SELECT POINT(0, 0) AS abc',
+ 'rows' => 15,
+ 'pos' => 10,
+ ],
+ ];
- $gis = GisVisualization::getByData([], new GisVisualizationSettings(600, 450, 'abc'));
- (new ReflectionProperty(GisVisualization::class, 'pos'))->setValue($gis, 10);
- (new ReflectionProperty(GisVisualization::class, 'rows'))->setValue($gis, 15);
- $queryString = (new ReflectionMethod(GisVisualization::class, 'modifySqlQuery'))->invokeArgs($gis, ['']);
+ yield 'Modify the query for an MySQL 8.0.1 version' => [
+ 'SELECT ST_ASTEXT(`abc`, \'axis-order=long-lat\') AS `abc`, ST_SRID(`abc`) AS `srid`'
+ . ' FROM (SELECT POINT(0, 0) AS abc) AS `temp_gis`',
+ [
+ 'version' => '8.0.1',
+ 'spatialColumn' => 'abc',
+ 'sql' => 'SELECT POINT(0, 0) AS abc',
+ ],
+ ];
- self::assertSame(
- 'SELECT ST_ASTEXT(`abc`) AS `abc`, ST_SRID(`abc`) AS `srid` FROM () AS `temp_gis` LIMIT 10, 15',
- $queryString,
- );
- }
-
- /**
- * Modify the query for an MySQL 8.0.1 version
- */
- public function testModifyQueryVersion8(): void
- {
- $this->dbi->setVersion(['@@version' => '8.0.1']);
- $queryString = (new ReflectionMethod(GisVisualization::class, 'modifySqlQuery'))
- ->invokeArgs(GisVisualization::getByData([], new GisVisualizationSettings(600, 450, 'abc')), ['']);
-
- self::assertSame(
- 'SELECT ST_ASTEXT(`abc`, \'axis-order=long-lat\') AS `abc`, ST_SRID(`abc`) AS `srid` FROM () AS `temp_gis`',
- $queryString,
- );
- }
-
- /**
- * Modify the query for a MariaDB 10.4 version
- */
- public function testModifyQueryMariaDB(): void
- {
- $this->dbi->setVersion(['@@version' => '8.0.0-MariaDB']);
- $queryString = (new ReflectionMethod(GisVisualization::class, 'modifySqlQuery'))
- ->invokeArgs(GisVisualization::getByData([], new GisVisualizationSettings(600, 450, 'abc')), ['']);
-
- self::assertSame(
- 'SELECT ST_ASTEXT(`abc`) AS `abc`, ST_SRID(`abc`) AS `srid` FROM () AS `temp_gis`',
- $queryString,
- );
+ yield 'Modify the query for a MariaDB 10.4 version' => [
+ 'SELECT ST_ASTEXT(`abc`) AS `abc`, ST_SRID(`abc`) AS `srid`'
+ . ' FROM (SELECT POINT(0, 0) AS abc) AS `temp_gis`',
+ [
+ 'version' => '8.0.0-MariaDB',
+ 'spatialColumn' => 'abc',
+ 'sql' => 'SELECT POINT(0, 0) AS abc',
+ ],
+ ];
}
/** @return array}> */