|
32 | 32 | from test_qgsserver_wms import TestQgsServerWMSTestBase
|
33 | 33 | from qgis.core import (
|
34 | 34 | QgsProject,
|
| 35 | + QgsSymbol, |
| 36 | + QgsWkbTypes, |
35 | 37 | QgsMarkerSymbol,
|
36 | 38 | QgsRuleBasedRenderer,
|
37 | 39 | QgsVectorLayer,
|
|
41 | 43 | QgsBufferServerRequest,
|
42 | 44 | QgsBufferServerResponse,
|
43 | 45 | QgsServer,
|
44 |
| - QgsServerRequest, |
45 | 46 | )
|
46 | 47 |
|
47 | 48 | # Strip path and content length because path may vary
|
@@ -1285,6 +1286,61 @@ def testJsonSymbolMaxMinScale(self):
|
1285 | 1286 | self.assertEqual(node['scaleMaxDenom'], 1000)
|
1286 | 1287 | self.assertEqual(node['scaleMinDenom'], 10000)
|
1287 | 1288 |
|
| 1289 | + def test_json_rule_based_max_min_scale_without_symbol(self): |
| 1290 | + """ Test min/max scale in rule based json export when a rule doesn't have a symbol. """ |
| 1291 | + root_rule = QgsRuleBasedRenderer.Rule(None) |
| 1292 | + |
| 1293 | + # Rule with symbol |
| 1294 | + high_scale_rule = QgsRuleBasedRenderer.Rule( |
| 1295 | + QgsSymbol.defaultSymbol(QgsWkbTypes.PointGeometry), |
| 1296 | + minimumScale=25000, maximumScale=1000, label='high-scale') |
| 1297 | + root_rule.appendChild(high_scale_rule) |
| 1298 | + |
| 1299 | + # Rule without symbol |
| 1300 | + low_scale_rule = QgsRuleBasedRenderer.Rule(None, minimumScale=100000, maximumScale=25000, label='low-scale') |
| 1301 | + |
| 1302 | + # Sub-rule with a symbol |
| 1303 | + sub_rule = QgsRuleBasedRenderer.Rule( |
| 1304 | + QgsSymbol.defaultSymbol(QgsWkbTypes.PointGeometry), label='low-scale-sub') |
| 1305 | + |
| 1306 | + low_scale_rule.appendChild(sub_rule) |
| 1307 | + root_rule.appendChild(low_scale_rule) |
| 1308 | + |
| 1309 | + layer = QgsVectorLayer("Point?field=fldtxt:string", "layer1", "memory") |
| 1310 | + layer.setRenderer(QgsRuleBasedRenderer(root_rule)) |
| 1311 | + |
| 1312 | + project = QgsProject() |
| 1313 | + project.addMapLayer(layer) |
| 1314 | + |
| 1315 | + server = QgsServer() |
| 1316 | + request = QgsBufferServerRequest( |
| 1317 | + "/?" |
| 1318 | + "SERVICE=WMS&" |
| 1319 | + "VERSION=1.3.0&" |
| 1320 | + "REQUEST=GetLegendGraphic&" |
| 1321 | + "LAYERS=layer1&" |
| 1322 | + "FORMAT=application/json" |
| 1323 | + ) |
| 1324 | + response = QgsBufferServerResponse() |
| 1325 | + server.handleRequest(request, response, project) |
| 1326 | + result = json.loads(bytes(response.body())) |
| 1327 | + |
| 1328 | + node = result['nodes'][0]['symbols'] |
| 1329 | + |
| 1330 | + # With icon |
| 1331 | + first_rule = node[0] |
| 1332 | + self.assertEqual(first_rule['scaleMaxDenom'], 25000) |
| 1333 | + self.assertEqual(first_rule['scaleMinDenom'], 1000) |
| 1334 | + self.assertEqual(first_rule['title'], 'high-scale') |
| 1335 | + self.assertIn('icon', first_rule) |
| 1336 | + |
| 1337 | + # Without icon |
| 1338 | + second_rule = node[1] |
| 1339 | + self.assertEqual(second_rule['scaleMaxDenom'], 100000) |
| 1340 | + self.assertEqual(second_rule['scaleMinDenom'], 25000) |
| 1341 | + self.assertEqual(second_rule['title'], 'low-scale') |
| 1342 | + self.assertNotIn('icon', second_rule) |
| 1343 | + |
1288 | 1344 | def testLegendPlaceholderIcon(self):
|
1289 | 1345 | qs = "?" + "&".join(["%s=%s" % i for i in list({
|
1290 | 1346 | "MAP": self.testdata_path + 'test_project_legend_placeholder_image.qgs',
|
|
0 commit comments