Skip to content

Commit 0c18d3b

Browse files
committed
[WMSServer] Add unit test for non queryable layer in getfeatureinfo operation, add special case for group.
1 parent fd5c8e7 commit 0c18d3b

File tree

6 files changed

+530
-465
lines changed

6 files changed

+530
-465
lines changed

src/server/services/wms/qgswmsrenderer.cpp

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -947,7 +947,7 @@ namespace QgsWms
947947
// remove unwanted layers (restricted layers, ...)
948948
removeUnwantedLayers( layers, scaleDenominator );
949949
// remove non identifiable layers
950-
removeNonIdentifiableLayers( layers );
950+
//removeNonIdentifiableLayers( layers );
951951

952952
Q_FOREACH ( QgsMapLayer *layer, layers )
953953
{
@@ -1245,13 +1245,16 @@ namespace QgsWms
12451245
Q_FOREACH ( QString queryLayer, queryLayers )
12461246
{
12471247
bool validLayer = false;
1248-
bool queryableLayer = false;
1248+
bool queryableLayer = true;
12491249
Q_FOREACH ( QgsMapLayer *layer, layers )
12501250
{
12511251
if ( queryLayer == layerNickname( *layer ) )
12521252
{
12531253
validLayer = true;
1254-
queryableLayer = !mProject->nonIdentifiableLayers().contains( layer->id() );
1254+
queryableLayer = !mProject->nonIdentifiableLayers().contains( layer->id() ) ;
1255+
if (!queryableLayer){
1256+
break;
1257+
}
12551258

12561259
QDomElement layerElement;
12571260
if ( infoFormat == QgsWmsParameters::Format::GML )
@@ -1314,16 +1317,16 @@ namespace QgsWms
13141317
break;
13151318
}
13161319
}
1317-
if ( !queryableLayer )
1318-
{
1319-
QString msg = QObject::tr( "Layer '%1' is not queryable" ).arg( queryLayer );
1320-
throw QgsBadRequestException( QStringLiteral( "LayerNotQueryable" ), msg );
1321-
}
1322-
else if ( !validLayer && !mNicknameLayers.contains( queryLayer ) )
1320+
if ( !validLayer && !mNicknameLayers.contains( queryLayer ) && !mLayerGroups.contains( queryLayer ) )
13231321
{
13241322
QString msg = QObject::tr( "Layer '%1' not found" ).arg( queryLayer );
13251323
throw QgsBadRequestException( QStringLiteral( "LayerNotDefined" ), msg );
13261324
}
1325+
else if ( (validLayer && !queryableLayer) || (!validLayer && mLayerGroups.contains( queryLayer )) )
1326+
{
1327+
QString msg = QObject::tr( "Layer '%1' is not queryable" ).arg( queryLayer );
1328+
throw QgsBadRequestException( QStringLiteral( "LayerNotQueryable" ), msg );
1329+
}
13271330
}
13281331

13291332
if ( featuresRect )

tests/src/python/test_qgsserver_wms_getfeatureinfo.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,33 @@ def testGetFeatureInfo(self):
5757
'query_layers=testlayer%20%C3%A8%C3%A9&X=190&Y=320',
5858
'wms_getfeatureinfo-text-xml')
5959

60+
# Test getfeatureinfo on non queryable layer
61+
self.wms_request_compare('GetFeatureInfo',
62+
'&layers=testlayer3&styles=&' +
63+
'info_format=text%2Fxml&transparent=true&' +
64+
'width=600&height=400&srs=EPSG%3A3857&bbox=913190.6389747962%2C' +
65+
'5606005.488876367%2C913235.426296057%2C5606035.347090538&' +
66+
'query_layers=testlayer3&X=190&Y=320',
67+
'wms_getfeatureinfo-testlayer3-notqueryable')
68+
69+
# Test getfeatureinfo on group without shortname (no queryable...)
70+
self.wms_request_compare('GetFeatureInfo',
71+
'&layers=groupwithoutshortname&styles=&' +
72+
'info_format=text%2Fxml&transparent=true&' +
73+
'width=600&height=400&srs=EPSG%3A3857&bbox=913190.6389747962%2C' +
74+
'5606005.488876367%2C913235.426296057%2C5606035.347090538&' +
75+
'query_layers=groupwithoutshortname&X=190&Y=320',
76+
'wms_getfeatureinfo-groupwithoutshortname-notqueryable')
77+
78+
# Test getfeatureinfo on group with shortname (no queryable...)
79+
self.wms_request_compare('GetFeatureInfo',
80+
'&layers=group_name&styles=&' +
81+
'info_format=text%2Fxml&transparent=true&' +
82+
'width=600&height=400&srs=EPSG%3A3857&bbox=913190.6389747962%2C' +
83+
'5606005.488876367%2C913235.426296057%2C5606035.347090538&' +
84+
'query_layers=group_name&X=190&Y=320',
85+
'wms_getfeatureinfo-group_name-notqueryable')
86+
6087
# Test getfeatureinfo response html
6188
self.wms_request_compare('GetFeatureInfo',
6289
'&layers=testlayer%20%C3%A8%C3%A9&styles=&' +

0 commit comments

Comments
 (0)