Navigation Menu

Skip to content

Commit

Permalink
Merge pull request #51646 from elpaso/server-more-getfeatureinfo-test…
Browse files Browse the repository at this point in the history
…s-gh_51613

More tests for server getfeatureinfo with non queryable layer
  • Loading branch information
elpaso committed Jan 30, 2023
2 parents 477595f + 38756ba commit 7d81fdd
Showing 1 changed file with 88 additions and 2 deletions.
90 changes: 88 additions & 2 deletions tests/src/python/test_qgsserver_wms_getfeatureinfo.py
Expand Up @@ -28,12 +28,13 @@
import json

from qgis.testing import unittest
from qgis.PyQt.QtCore import QSize
from qgis.PyQt.QtCore import QSize, QVariant

import osgeo.gdal # NOQA

from test_qgsserver_wms import TestQgsServerWMSTestBase
from qgis.core import QgsProject
from qgis.core import (QgsProject, QgsField, QgsFields, QgsFeature, QgsGeometry,
QgsMemoryProviderUtils, QgsWkbTypes, QgsCoordinateReferenceSystem, QgsMapLayer)
from qgis.server import QgsBufferServerRequest, QgsBufferServerResponse


Expand Down Expand Up @@ -679,6 +680,91 @@ def testGetFeatureInfoGroupedLayers(self):
'test_project_wms_grouped_nested_layers.qgs',
normalizeJson=True)

def testGetFeatureInfoNoQueriable(self):
"""Test GetFeatureInfo for all layers when there is a single not queryable,
issue GH #51613, cannot reproduce
"""

project = QgsProject()
project.setTitle('wmsproject')

fields = QgsFields()
fields.append(QgsField('fid', QVariant.Int))
vl1 = QgsMemoryProviderUtils.createMemoryLayer(
'vl1', fields, QgsWkbTypes.Point, QgsCoordinateReferenceSystem(4326))

f1 = QgsFeature(vl1.fields())
f1['fid'] = 1
f1.setGeometry(QgsGeometry.fromWkt('Point(9 45)'))
f2 = QgsFeature(vl1.fields())
f2['fid'] = 1
f2.setGeometry(QgsGeometry.fromWkt('Point(10 46)'))

vl1.dataProvider().addFeatures([f1, f2])

vl2 = QgsMemoryProviderUtils.createMemoryLayer(
'vl2', fields, QgsWkbTypes.Point, QgsCoordinateReferenceSystem(4326))
vl2.dataProvider().addFeatures([f1, f2])

project.addMapLayers([vl1, vl2])

req_params = {
'SERVICE': 'WMS',
'REQUEST': 'GetFeatureInfo',
'VERSION': '1.3.0',
'LAYERS': '',
'STYLES': '',
'INFO_FORMAT': r'application%2Fjson',
'WIDTH': '10',
'HEIGHT': '10',
'SRS': r'EPSG%3A4326',
'BBOX': '45,9,46,10',
'CRS': 'EPSG:4326',
'FEATURE_COUNT': '2',
'QUERY_LAYERS': 'wmsproject',
'I': '0',
'J': '10',
'FILTER': '',
'FI_POINT_TOLERANCE': '2'
}

req = QgsBufferServerRequest('?' + '&'.join(["%s=%s" % (k, v) for k, v in req_params.items()]))
res = QgsBufferServerResponse()
self.server.handleRequest(req, res, project)
j_body = json.loads(bytes(res.body()).decode())
self.assertEqual(len(j_body['features']), 2)

vl1.setFlags(vl1.flags() & ~ QgsMapLayer.Identifiable)

req = QgsBufferServerRequest('?' + '&'.join(["%s=%s" % (k, v) for k, v in req_params.items()]))
res = QgsBufferServerResponse()
self.server.handleRequest(req, res, project)
j_body = json.loads(bytes(res.body()).decode())
self.assertEqual(len(j_body['features']), 1)

req_params['LAYERS'] = 'vl1,vl2'
req = QgsBufferServerRequest('?' + '&'.join(["%s=%s" % (k, v) for k, v in req_params.items()]))
res = QgsBufferServerResponse()
self.server.handleRequest(req, res, project)
j_body = json.loads(bytes(res.body()).decode())
self.assertEqual(len(j_body['features']), 1)

req_params['LAYERS'] = 'wmsproject'
req_params['QUERY_LAYERS'] = 'vl2'
req = QgsBufferServerRequest('?' + '&'.join(["%s=%s" % (k, v) for k, v in req_params.items()]))
res = QgsBufferServerResponse()
self.server.handleRequest(req, res, project)
j_body = json.loads(bytes(res.body()).decode())
self.assertEqual(len(j_body['features']), 1)

req_params['LAYERS'] = 'vl2'
req_params['QUERY_LAYERS'] = 'wmsproject'
req = QgsBufferServerRequest('?' + '&'.join(["%s=%s" % (k, v) for k, v in req_params.items()]))
res = QgsBufferServerResponse()
self.server.handleRequest(req, res, project)
j_body = json.loads(bytes(res.body()).decode())
self.assertEqual(len(j_body['features']), 1)

def testGetFeatureInfoJsonUseIdAsLayerName(self):
"""Test GH #36262 where json response + use layer id"""

Expand Down

0 comments on commit 7d81fdd

Please sign in to comment.