Skip to content

Commit 4a084bf

Browse files
committed
Add tests
1 parent 384e85c commit 4a084bf

File tree

2 files changed

+87
-1
lines changed

2 files changed

+87
-1
lines changed

tests/src/python/test_provider_postgres.py

+82-1
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,14 @@
2828
NULL,
2929
QgsVectorLayerUtils,
3030
QgsSettings,
31-
QgsTransactionGroup
31+
QgsTransactionGroup,
32+
QgsReadWriteContext,
33+
QgsRectangle
3234
)
3335
from qgis.gui import QgsGui
3436
from qgis.PyQt.QtCore import QDate, QTime, QDateTime, QVariant, QDir
3537
from qgis.testing import start_app, unittest
38+
from qgis.PyQt.QtXml import QDomDocument
3639
from utilities import unitTestDataPath
3740
from providertestbase import ProviderTestCase
3841

@@ -718,6 +721,84 @@ def testStyle(self):
718721
self.assertEqual(desclist, [])
719722
self.assertEqual(errmsg, "")
720723

724+
def testHasMetadata(self):
725+
# views don't have metadata
726+
vl = QgsVectorLayer('{} table="qgis_test"."{}" key="pk" sql='.format(self.dbconn, 'bikes_view'), "bikes_view", "postgres")
727+
self.assertTrue(vl.isValid())
728+
self.assertFalse(vl.dataProvider().hasMetadata())
729+
730+
# ordinary tables have metadata
731+
vl = QgsVectorLayer('%s table="qgis_test"."someData" sql=' % (self.dbconn), "someData", "postgres")
732+
self.assertTrue(vl.isValid())
733+
self.assertTrue(vl.dataProvider().hasMetadata())
734+
735+
def testReadExtentOnView(self):
736+
# vector layer based on view
737+
vl0 = QgsVectorLayer(self.dbconn + ' sslmode=disable key=\'pk\' srid=4326 type=POLYGON table="qgis_test"."some_poly_data_view" (geom) sql=', 'test', 'postgres')
738+
self.assertTrue(vl0.isValid())
739+
self.assertFalse(vl0.dataProvider().hasMetadata())
740+
741+
# set a custom extent
742+
originalExtent = vl0.extent()
743+
744+
customExtent = QgsRectangle(-80, 80, -70, 90)
745+
vl0.setExtent(customExtent)
746+
747+
# write xml
748+
doc = QDomDocument("testdoc")
749+
elem = doc.createElement("maplayer")
750+
self.assertTrue(vl0.writeLayerXml(elem, doc, QgsReadWriteContext()))
751+
752+
# read xml with the custom extent. It should not be used by default
753+
vl1 = QgsVectorLayer()
754+
vl1.readLayerXml(elem, QgsReadWriteContext())
755+
self.assertTrue(vl1.isValid())
756+
757+
self.assertEqual(vl1.extent(), originalExtent)
758+
759+
# read xml with custom extent with readExtent option. Extent read from
760+
# xml document should be used because we have a view
761+
vl2 = QgsVectorLayer()
762+
vl2.setReadExtent(True)
763+
vl2.readLayerXml(elem, QgsReadWriteContext())
764+
self.assertTrue(vl2.isValid())
765+
766+
self.assertEqual(vl2.extent(), customExtent)
767+
768+
def testReadExtentOnTable(self):
769+
# vector layer based on a standard table
770+
vl0 = QgsVectorLayer(self.dbconn + ' sslmode=disable key=\'pk\' srid=4326 type=POLYGON table="qgis_test"."some_poly_data" (geom) sql=', 'test', 'postgres')
771+
self.assertTrue(vl0.isValid())
772+
self.assertTrue(vl0.dataProvider().hasMetadata())
773+
774+
# set a custom extent
775+
originalExtent = vl0.extent()
776+
777+
customExtent = QgsRectangle(-80, 80, -70, 90)
778+
vl0.setExtent(customExtent)
779+
780+
# write xml
781+
doc = QDomDocument("testdoc")
782+
elem = doc.createElement("maplayer")
783+
self.assertTrue(vl0.writeLayerXml(elem, doc, QgsReadWriteContext()))
784+
785+
# read xml with the custom extent. It should not be used by default
786+
vl1 = QgsVectorLayer()
787+
vl1.readLayerXml(elem, QgsReadWriteContext())
788+
self.assertTrue(vl1.isValid())
789+
790+
self.assertEqual(vl1.extent(), originalExtent)
791+
792+
# read xml with custom extent with readExtent option. Extent read from
793+
# xml document should NOT be used because we don't have a view or a
794+
# materialized view
795+
vl2 = QgsVectorLayer()
796+
vl2.setReadExtent(True)
797+
vl2.readLayerXml(elem, QgsReadWriteContext())
798+
self.assertTrue(vl2.isValid())
799+
800+
self.assertEqual(vl2.extent(), originalExtent)
801+
721802

722803
class TestPyQgsPostgresProviderCompoundKey(unittest.TestCase, ProviderTestCase):
723804

tests/testdata/provider/testdata_pg.sql

+5
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ CREATE TABLE qgis_test."some_poly_data" (
4747
geom public.geometry(Polygon,4326)
4848
);
4949

50+
CREATE OR REPLACE VIEW qgis_test.some_poly_data_view
51+
AS
52+
SELECT *
53+
FROM qgis_test.some_poly_data;
54+
5055
--
5156
-- TOC entry 4068 (class 0 OID 377761)
5257
-- Dependencies: 171

0 commit comments

Comments
 (0)