Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[bugfix][ogr] Tests for capabilities update on filter changes
Fixes #17795
  • Loading branch information
elpaso committed Jan 5, 2018
1 parent 3edc547 commit 9c85334
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 19 deletions.
19 changes: 0 additions & 19 deletions tests/src/python/test_provider_ogr.py
Expand Up @@ -318,25 +318,6 @@ def testSetupProxy(self):
self.assertEqual(gdal.GetConfigOption("GDAL_HTTP_PROXY"), "myproxyhostname.com")
self.assertEqual(gdal.GetConfigOption("GDAL_HTTP_PROXYUSERPWD"), "username")

def testSubSetStringEditable(self):
"""Test that a shapefile is editable after setting a subset"""
vl = QgsVectorLayer(TEST_DATA_DIR + '/' + 'lines.shp', 'subset_test', 'ogr')
self.assertTrue(vl.isValid())
self.assertTrue(vl.dataProvider().capabilities() & QgsVectorDataProvider.DeleteFeatures)

vl = QgsVectorLayer(TEST_DATA_DIR + '/' + 'lines.shp', 'subset_test', 'ogr')
vl.setSubsetString('')
self.assertTrue(vl.isValid())
self.assertTrue(vl.dataProvider().capabilities() & QgsVectorDataProvider.DeleteFeatures)

vl = QgsVectorLayer(TEST_DATA_DIR + '/' + 'lines.shp', 'subset_test', 'ogr')
vl.setSubsetString('"Name" = \'Arterial\'')
self.assertTrue(vl.isValid())
self.assertFalse(vl.dataProvider().capabilities() & QgsVectorDataProvider.DeleteFeatures)

vl.setSubsetString('')
self.assertTrue(vl.dataProvider().capabilities() & QgsVectorDataProvider.DeleteFeatures)


if __name__ == '__main__':
unittest.main()
26 changes: 26 additions & 0 deletions tests/src/python/test_provider_ogr_gpkg.py
Expand Up @@ -39,6 +39,9 @@
from qgis.PyQt.QtCore import QCoreApplication, QVariant
from qgis.testing import start_app, unittest
from qgis.utils import spatialite_connect
from utilities import unitTestDataPath

TEST_DATA_DIR = unitTestDataPath()


def GDAL_COMPUTE_VERSION(maj, min, rev):
Expand Down Expand Up @@ -834,6 +837,29 @@ def testCreateSpatialIndex(self):
self.assertTrue(vl.dataProvider().capabilities() & QgsVectorDataProvider.CreateSpatialIndex)
self.assertTrue(vl.dataProvider().createSpatialIndex())

def testSubSetStringEditable_bug17795(self):
"""Test that a layer is not editable after setting a subset and it's reverted to editable after the filter is removed"""

isEditable = QgsVectorDataProvider.ChangeAttributeValues
testPath = TEST_DATA_DIR + '/' + 'provider/bug_17795.gpkg|layername=bug_17795'

vl = QgsVectorLayer(testPath, 'subset_test', 'ogr')
self.assertTrue(vl.isValid())
self.assertTrue(vl.dataProvider().capabilities() & isEditable)

vl = QgsVectorLayer(testPath, 'subset_test', 'ogr')
vl.setSubsetString('')
self.assertTrue(vl.isValid())
self.assertTrue(vl.dataProvider().capabilities() & isEditable)

vl = QgsVectorLayer(testPath, 'subset_test', 'ogr')
vl.setSubsetString('"category" = \'one\'')
self.assertTrue(vl.isValid())
self.assertFalse(vl.dataProvider().capabilities() & isEditable)

vl.setSubsetString('')
self.assertTrue(vl.dataProvider().capabilities() & isEditable)


if __name__ == '__main__':
unittest.main()
23 changes: 23 additions & 0 deletions tests/src/python/test_provider_shapefile.py
Expand Up @@ -612,6 +612,29 @@ def testCreateSpatialIndex(self):
self.assertTrue(vl.dataProvider().capabilities() & QgsVectorDataProvider.CreateSpatialIndex)
self.assertTrue(vl.dataProvider().createSpatialIndex())

def testSubSetStringEditable_bug17795(self):
"""Test that a layer is not editable after setting a subset and it's reverted to editable after the filter is removed"""

testPath = TEST_DATA_DIR + '/' + 'lines.shp'
isEditable = QgsVectorDataProvider.ChangeAttributeValues

vl = QgsVectorLayer(testPath, 'subset_test', 'ogr')
self.assertTrue(vl.isValid())
self.assertTrue(vl.dataProvider().capabilities() & isEditable)

vl = QgsVectorLayer(testPath, 'subset_test', 'ogr')
vl.setSubsetString('')
self.assertTrue(vl.isValid())
self.assertTrue(vl.dataProvider().capabilities() & isEditable)

vl = QgsVectorLayer(testPath, 'subset_test', 'ogr')
vl.setSubsetString('"Name" = \'Arterial\'')
self.assertTrue(vl.isValid())
self.assertFalse(vl.dataProvider().capabilities() & isEditable)

vl.setSubsetString('')
self.assertTrue(vl.dataProvider().capabilities() & isEditable)


if __name__ == '__main__':
unittest.main()
Binary file added tests/testdata/provider/bug_17795.gpkg
Binary file not shown.

0 comments on commit 9c85334

Please sign in to comment.