|
28 | 28 | NULL,
|
29 | 29 | QgsVectorLayerUtils,
|
30 | 30 | QgsSettings,
|
31 |
| - QgsTransactionGroup |
| 31 | + QgsTransactionGroup, |
| 32 | + QgsReadWriteContext, |
| 33 | + QgsRectangle |
32 | 34 | )
|
33 | 35 | from qgis.gui import QgsGui
|
34 | 36 | from qgis.PyQt.QtCore import QDate, QTime, QDateTime, QVariant, QDir
|
35 | 37 | from qgis.testing import start_app, unittest
|
| 38 | +from qgis.PyQt.QtXml import QDomDocument |
36 | 39 | from utilities import unitTestDataPath
|
37 | 40 | from providertestbase import ProviderTestCase
|
38 | 41 |
|
@@ -718,6 +721,84 @@ def testStyle(self):
|
718 | 721 | self.assertEqual(desclist, [])
|
719 | 722 | self.assertEqual(errmsg, "")
|
720 | 723 |
|
| 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 | + |
721 | 802 |
|
722 | 803 | class TestPyQgsPostgresProviderCompoundKey(unittest.TestCase, ProviderTestCase):
|
723 | 804 |
|
|
0 commit comments