createDbiDummy(); $dummyDbi->addSelectDb('test_db'); $dummyDbi->addResult( 'SELECT * FROM `gis_all`', [['POINT', 'POINT(100 250)']], ['name', 'shape'], [ FieldHelper::fromArray(['type' => MYSQLI_TYPE_VAR_STRING]), FieldHelper::fromArray(['type' => MYSQLI_TYPE_GEOMETRY]), ], ); $dummyDbi->addResult( 'SELECT ST_ASTEXT(`shape`) AS `shape`, ST_SRID(`shape`) AS `srid`' . ' FROM (SELECT * FROM `gis_all`) AS `temp_gis` LIMIT 25', [['POINT(100 250)', '0']], ['shape', 'srid'], ); $dbi = $this->createDatabaseInterface($dummyDbi); DatabaseInterface::$instance = $dbi; $params = [ 'goto' => 'index.php?route=/database/structure&server=2&lang=en', 'back' => 'index.php?route=/sql&server=2&lang=en', 'sql_query' => 'SELECT * FROM `gis_all`', 'sql_signature' => Core::signSqlQuery('SELECT * FROM `gis_all`'), ]; $downloadParams = [ 'saveToFile' => true, 'session_max_rows' => 25, 'pos' => 0, 'visualizationSettings[spatialColumn]' => 'shape', 'visualizationSettings[labelColumn]' => null, ]; $downloadUrl = Url::getFromRoute('/table/gis-visualization', $downloadParams + $params); $template = new Template(); $expected = $template->render('table/gis_visualization/gis_visualization', [ 'url_params' => $params, 'download_url' => $downloadUrl, 'label_candidates' => ['name'], 'spatial_candidates' => ['shape'], 'spatialColumn' => 'shape', 'labelColumn' => null, 'width' => 600, 'height' => 450, 'start_and_number_of_rows_fieldset' => [ 'pos' => 0, 'unlim_num_rows' => 0, 'rows' => 25, 'sql_query' => 'SELECT * FROM `gis_all`', ], 'visualization' => '' . "\n" . '', 'draw_ol' => 'window.drawOpenLayers = function drawOpenLayers(target) {if (typeof ol === "undefined") ' . '{ return undefined; }' . 'var olCss = "js/vendor/openlayers/theme/ol.css";$(\'head\').append(\'\');var vectorSource = new ol.source.Vector({});' . 'var map = new ol.Map({target: target,layers: [new ol.layer.Tile({source: ' . 'new ol.source.OSM()}),new ol.layer.Vector({source: vectorSource})],view: new ol.View({center: ' . '[0, 0],zoom: 4}),controls: [new ol.control.MousePosition({coordinateFormat: ol.coordinate.' . 'createStringXY(4),projection: \'EPSG:4326\'}),new ol.control.Zoom,new ol.control.Attribution]});' . 'var feature = new ol.Feature(new ol.geom.Point([100,250]).transform(\'EPSG:4326\', ' . '\'EPSG:3857\'));feature.setStyle(new ol.style.Style({image: new ol.style.Circle({fill: ' . 'new ol.style.Fill({"color":"white"}),stroke: new ol.style.Stroke({"color":[176,46,224],' . '"width":2}),radius: 3})}));vectorSource.addFeature(feature);var extent = vectorSource.getExtent();' . 'if (!ol.extent.isEmpty(extent)) {map.getView().fit(extent, {padding: [20, 20, 20, 20]});}' . 'return map;}', ]); $request = ServerRequestFactory::create()->createServerRequest('POST', 'http://example.com/') ->withQueryParams(['db' => 'test_db', 'table' => 'test_table']); $response = new ResponseRenderer(); (new GisVisualizationController($response, $template, $dbi, new DbTableExists($dbi)))($request); self::assertSame($expected, $response->getHTMLResult()); } }