Skip to content

Commit

Permalink
Add unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
pblottiere committed Feb 2, 2022
1 parent a6a6ebd commit 6d5a2a7
Show file tree
Hide file tree
Showing 3 changed files with 164 additions and 2 deletions.
116 changes: 114 additions & 2 deletions tests/src/python/test_qgsserver.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,10 @@
import difflib

from io import StringIO
from qgis.server import QgsServer, QgsServerRequest, QgsBufferServerRequest, QgsBufferServerResponse
from qgis.server import QgsServer, QgsServerRequest, QgsBufferServerRequest, QgsBufferServerResponse, QgsServerParameterDefinition
from qgis.core import QgsRenderChecker, QgsApplication, QgsFontUtils, QgsMultiRenderChecker
from qgis.testing import unittest, start_app
from qgis.PyQt.QtCore import QSize
from qgis.PyQt.QtCore import QSize, QUrlQuery
from qgis.PyQt.QtGui import QColor
from utilities import unitTestDataPath

Expand Down Expand Up @@ -527,5 +527,117 @@ def test_wcs_getcapabilities_url(self):
self.assertTrue(item_found)


class TestQgsServerParameter(unittest.TestCase):

def test_filter(self):
# empty filter
param = QgsServerParameterDefinition()
param.mValue = ""

self.assertEqual(len(param.toOgcFilterList()), 0)
self.assertEqual(len(param.toExpressionList()), 0)

# single qgis expression
filter = "\"name\"=concat('t', 'wo')"

param = QgsServerParameterDefinition()
param.mValue = filter

self.assertEqual(len(param.toOgcFilterList()), 0)
self.assertEqual(len(param.toExpressionList()), 1)

self.assertEqual(param.toExpressionList()[0], filter)

# multiple qgis expressions
filter0 = "to_datetime('2017-09-29 12:00:00')"
filter1 = "\"name\"=concat('t', 'wo')"
filter2 = "\"name\"='three'"

param = QgsServerParameterDefinition()
param.mValue = f"{filter0};{filter1};{filter2}"

self.assertEqual(len(param.toOgcFilterList()), 0)
self.assertEqual(len(param.toExpressionList()), 3)

self.assertEqual(param.toExpressionList()[0], filter0)
self.assertEqual(param.toExpressionList()[1], filter1)
self.assertEqual(param.toExpressionList()[2], filter2)

# multiple qgis expressions with some empty one
param = QgsServerParameterDefinition()
param.mValue = f";;{filter0};;;{filter2};;"

self.assertEqual(len(param.toOgcFilterList()), 0)
self.assertEqual(len(param.toExpressionList()), 8)

self.assertEqual(param.toExpressionList()[0], "")
self.assertEqual(param.toExpressionList()[1], "")
self.assertEqual(param.toExpressionList()[2], filter0)
self.assertEqual(param.toExpressionList()[3], "")
self.assertEqual(param.toExpressionList()[4], "")
self.assertEqual(param.toExpressionList()[5], filter2)
self.assertEqual(param.toExpressionList()[6], "")
self.assertEqual(param.toExpressionList()[7], "")

# two empty expressions
param = QgsServerParameterDefinition()
param.mValue = f";"

self.assertEqual(len(param.toOgcFilterList()), 0)
self.assertEqual(len(param.toExpressionList()), 2)

# single ogc empty filter
param = QgsServerParameterDefinition()
param.mValue = "()"

self.assertEqual(len(param.toExpressionList()), 0)
self.assertEqual(len(param.toOgcFilterList()), 1)

self.assertEqual(param.toOgcFilterList()[0], "")

# single ogc filter
filter = "<Filter><Within><PropertyName>name<PropertyName><gml:Envelope><gml:lowerCorner>43.5707 -79.5797</gml:lowerCorner><gml:upperCorner>43.8219 -79.2693</gml:upperCorner></gml:Envelope></Within></Filter>"

param = QgsServerParameterDefinition()
param.mValue = filter

self.assertEqual(len(param.toExpressionList()), 0)
self.assertEqual(len(param.toOgcFilterList()), 1)

self.assertEqual(param.toOgcFilterList()[0], filter)

# multiple ogc filter
filter0 = "<Filter><Within><PropertyName>InWaterA_1M/wkbGeom<PropertyName><gml:Envelope><gml:lowerCorner>43.5707 -79.5797</gml:lowerCorner><gml:upperCorner>43.8219 -79.2693</gml:upperCorner></gml:Envelope></Within></Filter>"
filter1 = "<Filter><Within><PropertyName>BuiltUpA_1M/wkbGeom<PropertyName><gml:Envelope><gml:lowerCorner>43.5705 -79.5797</gml:lowerCorner><gml:upperCorner>43.8219 -79.2693</gml:upperCorner></gml:Envelope></Within></Filter>"

param = QgsServerParameterDefinition()
param.mValue = f"({filter0})({filter1})"

self.assertEqual(len(param.toExpressionList()), 0)
self.assertEqual(len(param.toOgcFilterList()), 2)

self.assertEqual(param.toOgcFilterList()[0], filter0)
self.assertEqual(param.toOgcFilterList()[1], filter1)

# multiple ogc filter with some empty one
filter0 = "<Filter><Within><PropertyName>InWaterA_1M/wkbGeom<PropertyName><gml:Envelope><gml:lowerCorner>43.5707 -79.5797</gml:lowerCorner><gml:upperCorner>43.8219 -79.2693</gml:upperCorner></gml:Envelope></Within></Filter>"
filter1 = "<Filter><Within><PropertyName>BuiltUpA_1M/wkbGeom<PropertyName><gml:Envelope><gml:lowerCorner>43.5705 -79.5797</gml:lowerCorner><gml:upperCorner>43.8219 -79.2693</gml:upperCorner></gml:Envelope></Within></Filter>"

param = QgsServerParameterDefinition()
param.mValue = f"()()({filter0})()()({filter1})()()"

self.assertEqual(len(param.toExpressionList()), 0)
self.assertEqual(len(param.toOgcFilterList()), 8)

self.assertEqual(param.toOgcFilterList()[0], "")
self.assertEqual(param.toOgcFilterList()[1], "")
self.assertEqual(param.toOgcFilterList()[2], filter0)
self.assertEqual(param.toOgcFilterList()[3], "")
self.assertEqual(param.toOgcFilterList()[4], "")
self.assertEqual(param.toOgcFilterList()[5], filter1)
self.assertEqual(param.toOgcFilterList()[6], "")
self.assertEqual(param.toOgcFilterList()[7], "")


if __name__ == '__main__':
unittest.main()
7 changes: 7 additions & 0 deletions tests/src/python/test_qgsserver_wfs.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,13 @@ def test_getfeature(self):
for id, req in tests:
self.wfs_getfeature_compare(id, req)

def test_getfeature_exp_filter(self):
# multiple filters
exp_filter = "EXP_FILTER=\"name\"='one';\"name\"='two'"
req = f"SRSNAME=EPSG:4326&TYPENAME=testlayer,testlayer&{exp_filter}"
self.wfs_request_compare(
"GetFeature", '1.0.0', req, 'wfs_getFeature_exp_filter_2')

def test_wfs_getcapabilities_100_url(self):
"""Check that URL in GetCapabilities response is complete"""

Expand Down
43 changes: 43 additions & 0 deletions tests/testdata/qgis_server/wfs_getFeature_exp_filter_2_1_0_0.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
Content-Type: text/xml; subtype=gml/2.1.2; charset=utf-8

<wfs:FeatureCollection xmlns:wfs="http://www.opengis.net/wfs" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" xmlns:ows="http://www.opengis.net/ows" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:qgs="http://www.qgis.org/gml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/wfs.xsd http://www.qgis.org/gml ?">
<gml:boundedBy>
<gml:Box srsName="EPSG:4326">
<gml:coordinates cs="," ts=" ">8.203459,44.901395 8.203547,44.901483</gml:coordinates>
</gml:Box>
</gml:boundedBy>
<gml:featureMember>
<qgs:testlayer fid="testlayer.0">
<gml:boundedBy>
<gml:Box srsName="EPSG:4326">
<gml:coordinates cs="," ts=" ">8.20349634,44.90148253 8.20349634,44.90148253</gml:coordinates>
</gml:Box>
</gml:boundedBy>
<qgs:geometry>
<Point xmlns="http://www.opengis.net/gml" srsName="EPSG:4326">
<coordinates xmlns="http://www.opengis.net/gml" cs="," ts=" ">8.20349634,44.90148253</coordinates>
</Point>
</qgs:geometry>
<qgs:id>1</qgs:id>
<qgs:name>one</qgs:name>
<qgs:utf8nameè>one èé</qgs:utf8nameè>
</qgs:testlayer>
</gml:featureMember>
<gml:featureMember>
<qgs:testlayer fid="testlayer.1">
<gml:boundedBy>
<gml:Box srsName="EPSG:4326">
<gml:coordinates cs="," ts=" ">8.20354699,44.90143568 8.20354699,44.90143568</gml:coordinates>
</gml:Box>
</gml:boundedBy>
<qgs:geometry>
<Point xmlns="http://www.opengis.net/gml" srsName="EPSG:4326">
<coordinates xmlns="http://www.opengis.net/gml" cs="," ts=" ">8.20354699,44.90143568</coordinates>
</Point>
</qgs:geometry>
<qgs:id>2</qgs:id>
<qgs:name>two</qgs:name>
<qgs:utf8nameè>two àò</qgs:utf8nameè>
</qgs:testlayer>
</gml:featureMember>
</wfs:FeatureCollection>

0 comments on commit 6d5a2a7

Please sign in to comment.