Skip to content

Commit d833970

Browse files
authored
Merge pull request #6926 from pblottiere/bugfix_ut
[backport][server][bugfix] Cleaning GetCapabilities response
2 parents 2dc76fd + b6aaf8d commit d833970

File tree

6 files changed

+45
-27
lines changed

6 files changed

+45
-27
lines changed

.docker/qgis3-build-deps.dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ RUN apt-get update \
9797
mock \
9898
future \
9999
termcolor \
100-
&& apt-get autoremove -y python3-pip \
100+
owslib \
101101
&& apt-get clean
102102

103103
RUN echo "alias python=python3" >> ~/.bash_aliases

src/server/services/wms/qgswmsgetcapabilities.cpp

+22-23
Original file line numberDiff line numberDiff line change
@@ -756,40 +756,39 @@ namespace QgsWms
756756

757757
QDomElement layerParentElem = doc.createElement( QStringLiteral( "Layer" ) );
758758

759-
// Root Layer title
760-
QDomElement layerParentTitleElem = doc.createElement( QStringLiteral( "Title" ) );
761-
QDomText layerParentTitleText = doc.createTextNode( project->title() );
762-
layerParentTitleElem.appendChild( layerParentTitleText );
763-
layerParentElem.appendChild( layerParentTitleElem );
764-
765-
// Root Layer abstract
766-
QDomElement layerParentAbstElem = doc.createElement( QStringLiteral( "Abstract" ) );
767-
QDomText layerParentAbstText = doc.createTextNode( project->title() );
768-
layerParentAbstElem.appendChild( layerParentAbstText );
769-
layerParentElem.appendChild( layerParentAbstElem );
759+
if ( !project->title().isEmpty() )
760+
{
761+
// Root Layer title
762+
QDomElement layerParentTitleElem = doc.createElement( QStringLiteral( "Title" ) );
763+
QDomText layerParentTitleText = doc.createTextNode( project->title() );
764+
layerParentTitleElem.appendChild( layerParentTitleText );
765+
layerParentElem.appendChild( layerParentTitleElem );
766+
767+
// Root Layer abstract
768+
QDomElement layerParentAbstElem = doc.createElement( QStringLiteral( "Abstract" ) );
769+
QDomText layerParentAbstText = doc.createTextNode( project->title() );
770+
layerParentAbstElem.appendChild( layerParentAbstText );
771+
layerParentElem.appendChild( layerParentAbstElem );
772+
}
770773

771774
// Root Layer name
772-
QDomElement layerParentNameElem = doc.createElement( QStringLiteral( "Name" ) );
773-
QString rootName = QgsServerProjectUtils::wmsRootName( *project );
774-
if ( rootName.isEmpty() )
775+
QString rootLayerName = QgsServerProjectUtils::wmsRootName( *project );
776+
if ( rootLayerName.isEmpty() && !project->title().isEmpty() )
775777
{
776-
QDomText layerParentNameText = doc.createTextNode( project->title() );
777-
layerParentNameElem.appendChild( layerParentNameText );
778+
rootLayerName = project->title();
778779
}
779-
else
780+
781+
if ( !rootLayerName.isEmpty() )
780782
{
781-
QDomText layerParentNameText = doc.createTextNode( rootName );
783+
QDomElement layerParentNameElem = doc.createElement( QStringLiteral( "Name" ) );
784+
QDomText layerParentNameText = doc.createTextNode( rootLayerName );
782785
layerParentNameElem.appendChild( layerParentNameText );
786+
layerParentElem.appendChild( layerParentNameElem );
783787
}
784-
layerParentElem.appendChild( layerParentNameElem );
785788

786789
// Keyword list
787790
addKeywordListElement( project, doc, layerParentElem );
788791

789-
// Metadata (empty but needed for OGC tests RECOMMENDATIONS)
790-
QDomElement metaUrlElem = doc.createElement( QStringLiteral( "MetadataURL" ) );
791-
layerParentElem.appendChild( metaUrlElem );
792-
793792
// Root Layer tree name
794793
if ( projectSettings )
795794
{

tests/src/python/test_qgsserver_wms.py

+22
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131

3232
import osgeo.gdal # NOQA
3333

34+
from owslib.wms import WebMapService
35+
3436
from test_qgsserver import QgsServerTestBase
3537
from qgis.core import QgsProject
3638

@@ -395,6 +397,26 @@ def test_wms_GetProjectSettings_wms_print_layers(self):
395397
self.assertTrue(xmlResult.find("<WMSDataSource>contextualWMSLegend=0&amp;crs=EPSG:21781&amp;dpiMode=7&amp;featureCount=10&amp;format=image/png&amp;layers=public_geo_gemeinden&amp;styles=&amp;url=https://qgiscloud.com/mhugent/qgis_unittest_wms/wms?</WMSDataSource>") != -1)
396398
self.assertTrue(xmlResult.find("<WMSPrintLayer>contextualWMSLegend=0&amp;amp;crs=EPSG:21781&amp;amp;dpiMode=7&amp;amp;featureCount=10&amp;amp;format=image/png&amp;amp;layers=public_geo_gemeinden&amp;amp;styles=&amp;amp;url=https://qgiscloud.com/mhugent/qgis_unittest_wms_print/wms?</WMSPrintLayer>") != -1)
397399

400+
def test_getcapabilities_owslib(self):
401+
402+
# read getcapabilities document
403+
docPath = self.testdata_path + 'getcapabilities.txt'
404+
f = open(docPath, 'r')
405+
doc = f.read()
406+
f.close()
407+
408+
# clean header in doc
409+
doc = doc.replace('Content-Length: 5775\n', '')
410+
doc = doc.replace('Content-Type: text/xml; charset=utf-8\n\n', '')
411+
doc = doc.replace('<?xml version="1.0" encoding="utf-8"?>\n', '')
412+
413+
# read capabilities document with owslib
414+
w = WebMapService(None, xml=doc, version='1.3.0')
415+
416+
# check root layer name
417+
rootLayerName = 'QGIS Test Project'
418+
self.assertTrue(rootLayerName in w.contents.keys())
419+
398420

399421
if __name__ == '__main__':
400422
unittest.main()

tests/testdata/qgis_server/getcapabilities.txt

-1
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,6 @@ Content-Type: text/xml; charset=utf-8
115115
<KeywordList>
116116
<Keyword vocabulary="ISO">infoMapAccessService</Keyword>
117117
</KeywordList>
118-
<MetadataURL/>
119118
<Layer queryable="1">
120119
<Name>testlayer èé</Name>
121120
<Title>A test vector layer</Title>

tests/testdata/qgis_server/getcapabilities_inspire.txt

-1
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,6 @@ Content-Type: text/xml; charset=utf-8
137137
<KeywordList>
138138
<Keyword vocabulary="ISO">infoMapAccessService</Keyword>
139139
</KeywordList>
140-
<MetadataURL/>
141140
<Layer queryable="1">
142141
<Name>testlayer èé</Name>
143142
<Title>A test vector layer</Title>

tests/testdata/qgis_server/getprojectsettings.txt

-1
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,6 @@ Content-Type: text/xml; charset=utf-8
137137
<KeywordList>
138138
<Keyword vocabulary="ISO">infoMapAccessService</Keyword>
139139
</KeywordList>
140-
<MetadataURL/>
141140
<TreeName>QGIS Test Project</TreeName>
142141
<Layer geometryType="Point" queryable="1" displayField="name" visible="1">
143142
<Name>testlayer èé</Name>

0 commit comments

Comments
 (0)