Skip to content

Commit 9c85334

Browse files
committed
[bugfix][ogr] Tests for capabilities update on filter changes
Fixes #17795
1 parent 3edc547 commit 9c85334

File tree

4 files changed

+49
-19
lines changed

4 files changed

+49
-19
lines changed

tests/src/python/test_provider_ogr.py

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -318,25 +318,6 @@ def testSetupProxy(self):
318318
self.assertEqual(gdal.GetConfigOption("GDAL_HTTP_PROXY"), "myproxyhostname.com")
319319
self.assertEqual(gdal.GetConfigOption("GDAL_HTTP_PROXYUSERPWD"), "username")
320320

321-
def testSubSetStringEditable(self):
322-
"""Test that a shapefile is editable after setting a subset"""
323-
vl = QgsVectorLayer(TEST_DATA_DIR + '/' + 'lines.shp', 'subset_test', 'ogr')
324-
self.assertTrue(vl.isValid())
325-
self.assertTrue(vl.dataProvider().capabilities() & QgsVectorDataProvider.DeleteFeatures)
326-
327-
vl = QgsVectorLayer(TEST_DATA_DIR + '/' + 'lines.shp', 'subset_test', 'ogr')
328-
vl.setSubsetString('')
329-
self.assertTrue(vl.isValid())
330-
self.assertTrue(vl.dataProvider().capabilities() & QgsVectorDataProvider.DeleteFeatures)
331-
332-
vl = QgsVectorLayer(TEST_DATA_DIR + '/' + 'lines.shp', 'subset_test', 'ogr')
333-
vl.setSubsetString('"Name" = \'Arterial\'')
334-
self.assertTrue(vl.isValid())
335-
self.assertFalse(vl.dataProvider().capabilities() & QgsVectorDataProvider.DeleteFeatures)
336-
337-
vl.setSubsetString('')
338-
self.assertTrue(vl.dataProvider().capabilities() & QgsVectorDataProvider.DeleteFeatures)
339-
340321

341322
if __name__ == '__main__':
342323
unittest.main()

tests/src/python/test_provider_ogr_gpkg.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@
3939
from qgis.PyQt.QtCore import QCoreApplication, QVariant
4040
from qgis.testing import start_app, unittest
4141
from qgis.utils import spatialite_connect
42+
from utilities import unitTestDataPath
43+
44+
TEST_DATA_DIR = unitTestDataPath()
4245

4346

4447
def GDAL_COMPUTE_VERSION(maj, min, rev):
@@ -834,6 +837,29 @@ def testCreateSpatialIndex(self):
834837
self.assertTrue(vl.dataProvider().capabilities() & QgsVectorDataProvider.CreateSpatialIndex)
835838
self.assertTrue(vl.dataProvider().createSpatialIndex())
836839

840+
def testSubSetStringEditable_bug17795(self):
841+
"""Test that a layer is not editable after setting a subset and it's reverted to editable after the filter is removed"""
842+
843+
isEditable = QgsVectorDataProvider.ChangeAttributeValues
844+
testPath = TEST_DATA_DIR + '/' + 'provider/bug_17795.gpkg|layername=bug_17795'
845+
846+
vl = QgsVectorLayer(testPath, 'subset_test', 'ogr')
847+
self.assertTrue(vl.isValid())
848+
self.assertTrue(vl.dataProvider().capabilities() & isEditable)
849+
850+
vl = QgsVectorLayer(testPath, 'subset_test', 'ogr')
851+
vl.setSubsetString('')
852+
self.assertTrue(vl.isValid())
853+
self.assertTrue(vl.dataProvider().capabilities() & isEditable)
854+
855+
vl = QgsVectorLayer(testPath, 'subset_test', 'ogr')
856+
vl.setSubsetString('"category" = \'one\'')
857+
self.assertTrue(vl.isValid())
858+
self.assertFalse(vl.dataProvider().capabilities() & isEditable)
859+
860+
vl.setSubsetString('')
861+
self.assertTrue(vl.dataProvider().capabilities() & isEditable)
862+
837863

838864
if __name__ == '__main__':
839865
unittest.main()

tests/src/python/test_provider_shapefile.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -612,6 +612,29 @@ def testCreateSpatialIndex(self):
612612
self.assertTrue(vl.dataProvider().capabilities() & QgsVectorDataProvider.CreateSpatialIndex)
613613
self.assertTrue(vl.dataProvider().createSpatialIndex())
614614

615+
def testSubSetStringEditable_bug17795(self):
616+
"""Test that a layer is not editable after setting a subset and it's reverted to editable after the filter is removed"""
617+
618+
testPath = TEST_DATA_DIR + '/' + 'lines.shp'
619+
isEditable = QgsVectorDataProvider.ChangeAttributeValues
620+
621+
vl = QgsVectorLayer(testPath, 'subset_test', 'ogr')
622+
self.assertTrue(vl.isValid())
623+
self.assertTrue(vl.dataProvider().capabilities() & isEditable)
624+
625+
vl = QgsVectorLayer(testPath, 'subset_test', 'ogr')
626+
vl.setSubsetString('')
627+
self.assertTrue(vl.isValid())
628+
self.assertTrue(vl.dataProvider().capabilities() & isEditable)
629+
630+
vl = QgsVectorLayer(testPath, 'subset_test', 'ogr')
631+
vl.setSubsetString('"Name" = \'Arterial\'')
632+
self.assertTrue(vl.isValid())
633+
self.assertFalse(vl.dataProvider().capabilities() & isEditable)
634+
635+
vl.setSubsetString('')
636+
self.assertTrue(vl.dataProvider().capabilities() & isEditable)
637+
615638

616639
if __name__ == '__main__':
617640
unittest.main()
116 KB
Binary file not shown.

0 commit comments

Comments
 (0)