Skip to content

Commit

Permalink
add _assertRed etc into QgsServerTestBase, some comment in cpp and py…
Browse files Browse the repository at this point in the history
… files, update test project
  • Loading branch information
speillet committed Jul 2, 2021
1 parent 79fa008 commit 985de5d
Show file tree
Hide file tree
Showing 6 changed files with 1,053 additions and 702 deletions.
4 changes: 4 additions & 0 deletions src/server/services/wms/qgswmsrenderer.cpp
Expand Up @@ -706,7 +706,10 @@ namespace QgsWms
const QgsExpressionContext ex { map->createExpressionContext() };
layerSet = map->layersToRender( &ex );
}
// Unable the theme
map->setFollowVisibilityPreset( false );

// Collect the style of each layer in the theme that has been unabled
QList<QgsMapThemeCollection::MapThemeLayerRecord> mapThemeRecords = QgsProject::instance()->mapThemeCollection()->mapThemeState( presetName ).layerRecords();
for ( auto layerMapThemeRecord : mapThemeRecords )
{
Expand All @@ -728,6 +731,7 @@ namespace QgsWms

map->setLayers( layerSet );
map->setKeepLayerSet( true );

// Set style override if a particular style should be used due to a map theme.
// It will actualize linked legend symbols too.
if ( !layersStyle.isEmpty() )
Expand Down
26 changes: 26 additions & 0 deletions tests/src/python/test_qgsserver.py
Expand Up @@ -43,6 +43,7 @@
from qgis.core import QgsRenderChecker, QgsApplication, QgsFontUtils, QgsMultiRenderChecker
from qgis.testing import unittest, start_app
from qgis.PyQt.QtCore import QSize
from qgis.PyQt.QtGui import QColor
from utilities import unitTestDataPath

import osgeo.gdal # NOQA
Expand Down Expand Up @@ -284,6 +285,31 @@ def _assert_status_code(self, status_code, qs, requestMethod=QgsServerRequest.Ge
self.server.handleRequest(request, response, project)
assert response.statusCode() == status_code, "%s != %s" % (response.statusCode(), status_code)

def _assertRed(self, color: QColor):
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 0)
self.assertEqual(color.blue(), 0)

def _assertGreen(self, color: QColor):
self.assertEqual(color.red(), 0)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 0)

def _assertBlue(self, color: QColor):
self.assertEqual(color.red(), 0)
self.assertEqual(color.green(), 0)
self.assertEqual(color.blue(), 255)

def _assertBlack(self, color: QColor):
self.assertEqual(color.red(), 0)
self.assertEqual(color.green(), 0)
self.assertEqual(color.blue(), 255)

def _assertWhite(self, color: QColor):
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 255)


class TestQgsServerTestBase(unittest.TestCase):

Expand Down
167 changes: 46 additions & 121 deletions tests/src/python/test_qgsserver_wms_getprint_legend.py
Expand Up @@ -77,14 +77,9 @@ def test_wms_getprint_legend(self):
self.server.handleRequest(request, response, project)

image = QImage.fromData(response.body(), "PNG")
color = image.pixelColor(600, 40)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 0)
self.assertEqual(color.blue(), 0)
color = image.pixelColor(600, 60)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 255)
# Only the red layer is displayed, there is no second item
self._assertRed(image.pixelColor(600, 40))
self._assertWhite(image.pixelColor(600, 60))

# blank template, specified layer is green
params["map0:LAYERS"] = "green"
Expand All @@ -93,14 +88,9 @@ def test_wms_getprint_legend(self):
self.server.handleRequest(request, response, project)

image = QImage.fromData(response.body(), "PNG")
color = image.pixelColor(600, 40)
self.assertEqual(color.red(), 0)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 0)
color = image.pixelColor(600, 60)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 255)
# Only the green layer is displayed, there is no second item
self._assertGreen(image.pixelColor(600, 40))
self._assertWhite(image.pixelColor(600, 60))

# blank template
params["map0:LAYERS"] = ""
Expand All @@ -109,14 +99,9 @@ def test_wms_getprint_legend(self):
self.server.handleRequest(request, response, project)

image = QImage.fromData(response.body(), "PNG")
color = image.pixelColor(600, 40)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 0)
self.assertEqual(color.blue(), 0)
color = image.pixelColor(600, 60)
self.assertEqual(color.red(), 0)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 0)
# Only the red layer is displayed, there is no second item
self._assertRed(image.pixelColor(600, 40))
self._assertGreen(image.pixelColor(600, 60))

# red template, red theme, specified layer is red
params["TEMPLATE"] = "red"
Expand All @@ -126,14 +111,9 @@ def test_wms_getprint_legend(self):
self.server.handleRequest(request, response, project)

image = QImage.fromData(response.body(), "PNG")
color = image.pixelColor(600, 40)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 0)
self.assertEqual(color.blue(), 0)
color = image.pixelColor(600, 60)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 255)
# Only the red layer is displayed, there is no second item
self._assertRed(image.pixelColor(600, 40))
self._assertWhite(image.pixelColor(600, 60))

# red template, red theme, specified layer is green
params["map0:LAYERS"] = "green"
Expand All @@ -142,14 +122,9 @@ def test_wms_getprint_legend(self):
self.server.handleRequest(request, response, project)

image = QImage.fromData(response.body(), "PNG")
color = image.pixelColor(600, 40)
self.assertEqual(color.red(), 0)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 0)
color = image.pixelColor(600, 60)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 255)
# Only the green layer is displayed, there is no second item
self._assertGreen(image.pixelColor(600, 40))
self._assertWhite(image.pixelColor(600, 60))

# red template, red theme
params["map0:LAYERS"] = ""
Expand All @@ -158,14 +133,9 @@ def test_wms_getprint_legend(self):
self.server.handleRequest(request, response, project)

image = QImage.fromData(response.body(), "PNG")
color = image.pixelColor(600, 40)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 0)
self.assertEqual(color.blue(), 0)
color = image.pixelColor(600, 60)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 255)
# Only the red layer is displayed, there is no second item
self._assertRed(image.pixelColor(600, 40))
self._assertWhite(image.pixelColor(600, 60))

# green template, green theme, specified layer is red
params["TEMPLATE"] = "green"
Expand All @@ -175,14 +145,9 @@ def test_wms_getprint_legend(self):
self.server.handleRequest(request, response, project)

image = QImage.fromData(response.body(), "PNG")
color = image.pixelColor(600, 40)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 0)
self.assertEqual(color.blue(), 0)
color = image.pixelColor(600, 60)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 255)
# Only the red layer is displayed, there is no second item
self._assertRed(image.pixelColor(600, 40))
self._assertWhite(image.pixelColor(600, 60))

# green template, green theme, specified layer is green
params["map0:LAYERS"] = "green"
Expand All @@ -191,14 +156,9 @@ def test_wms_getprint_legend(self):
self.server.handleRequest(request, response, project)

image = QImage.fromData(response.body(), "PNG")
color = image.pixelColor(600, 40)
self.assertEqual(color.red(), 0)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 0)
color = image.pixelColor(600, 60)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 255)
# Only the green layer is displayed, there is no second item
self._assertGreen(image.pixelColor(600, 40))
self._assertWhite(image.pixelColor(600, 60))

# green template, green theme
params["map0:LAYERS"] = ""
Expand All @@ -207,14 +167,9 @@ def test_wms_getprint_legend(self):
self.server.handleRequest(request, response, project)

image = QImage.fromData(response.body(), "PNG")
color = image.pixelColor(600, 40)
self.assertEqual(color.red(), 0)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 0)
color = image.pixelColor(600, 60)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 255)
# Only the green layer is displayed, there is no second item
self._assertGreen(image.pixelColor(600, 40))
self._assertWhite(image.pixelColor(600, 60))

# full template, full theme, specified layer is red
params["TEMPLATE"] = "full"
Expand All @@ -224,14 +179,9 @@ def test_wms_getprint_legend(self):
self.server.handleRequest(request, response, project)

image = QImage.fromData(response.body(), "PNG")
color = image.pixelColor(600, 40)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 0)
self.assertEqual(color.blue(), 0)
color = image.pixelColor(600, 60)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 255)
# Only the red layer is displayed, there is no second item
self._assertRed(image.pixelColor(600, 40))
self._assertWhite(image.pixelColor(600, 60))

# full template, full theme, specified layer is green
params["map0:LAYERS"] = "green"
Expand All @@ -240,14 +190,9 @@ def test_wms_getprint_legend(self):
self.server.handleRequest(request, response, project)

image = QImage.fromData(response.body(), "PNG")
color = image.pixelColor(600, 40)
self.assertEqual(color.red(), 0)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 0)
color = image.pixelColor(600, 60)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 255)
# Only the green layer is displayed, there is no second item
self._assertGreen(image.pixelColor(600, 40))
self._assertWhite(image.pixelColor(600, 60))

# full template, full theme
params["map0:LAYERS"] = ""
Expand All @@ -256,31 +201,21 @@ def test_wms_getprint_legend(self):
self.server.handleRequest(request, response, project)

image = QImage.fromData(response.body(), "PNG")
color = image.pixelColor(600, 40)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 0)
self.assertEqual(color.blue(), 0)
color = image.pixelColor(600, 60)
self.assertEqual(color.red(), 0)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 0)
# Both red and green layers are displayed
self._assertRed(image.pixelColor(600, 40))
self._assertGreen(image.pixelColor(600, 60))

# full template, full theme, specified layer is red
# falsegreen template, falsegreen theme (green layer is blue), specified layer is red
params["TEMPLATE"] = "falsegreen"
params["map0:LAYERS"] = "red"
response = QgsBufferServerResponse()
request = QgsBufferServerRequest('?' + '&'.join(["%s=%s" % i for i in params.items()]))
self.server.handleRequest(request, response, project)

image = QImage.fromData(response.body(), "PNG")
color = image.pixelColor(600, 40)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 0)
self.assertEqual(color.blue(), 0)
color = image.pixelColor(600, 60)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 255)
# Only the red layer is displayed, there is no second item
self._assertRed(image.pixelColor(600, 40))
self._assertWhite(image.pixelColor(600, 60))

# full template, full theme, specified layer is green
params["map0:LAYERS"] = "green"
Expand All @@ -289,14 +224,9 @@ def test_wms_getprint_legend(self):
self.server.handleRequest(request, response, project)

image = QImage.fromData(response.body(), "PNG")
color = image.pixelColor(600, 40)
self.assertEqual(color.red(), 0)
self.assertEqual(color.green(), 0)
self.assertEqual(color.blue(), 255)
color = image.pixelColor(600, 60)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 255)
# Only the green layer (in blue) is displayed, there is no second item
self._assertBlue(image.pixelColor(600, 40))
self._assertWhite(image.pixelColor(600, 60))

# full template, full theme
params["map0:LAYERS"] = ""
Expand All @@ -305,14 +235,9 @@ def test_wms_getprint_legend(self):
self.server.handleRequest(request, response, project)

image = QImage.fromData(response.body(), "PNG")
color = image.pixelColor(600, 40)
self.assertEqual(color.red(), 0)
self.assertEqual(color.green(), 0)
self.assertEqual(color.blue(), 255)
color = image.pixelColor(600, 60)
self.assertEqual(color.red(), 255)
self.assertEqual(color.green(), 255)
self.assertEqual(color.blue(), 255)
# Only the green layer (in blue) is displayed, there is no second item
self._assertBlue(image.pixelColor(600, 40))
self._assertWhite(image.pixelColor(600, 60))


if __name__ == '__main__':
Expand Down

0 comments on commit 985de5d

Please sign in to comment.