Skip to content

Commit 6745eec

Browse files
m-kuhnrouault
authored andcommitted
Add tests for editing filtered gpkg layer
1 parent 391ec8a commit 6745eec

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

tests/src/python/test_provider_ogr_gpkg.py

+45
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,51 @@ def testSelectSubsetString(self):
318318
got = [feat for feat in vl.getFeatures(QgsFeatureRequest(1))]
319319
self.assertEqual(len(got), 1) # this is the current behavior, broken
320320

321+
def testEditSubsetString(self):
322+
323+
tmpfile = os.path.join(self.basetestpath, 'testEditSubsetString.gpkg')
324+
ds = ogr.GetDriverByName('GPKG').CreateDataSource(tmpfile)
325+
lyr = ds.CreateLayer('test', geom_type=ogr.wkbMultiPolygon)
326+
lyr.CreateField(ogr.FieldDefn('foo', ogr.OFTString))
327+
f = ogr.Feature(lyr.GetLayerDefn())
328+
f['foo'] = 'bar'
329+
lyr.CreateFeature(f)
330+
f = None
331+
f = ogr.Feature(lyr.GetLayerDefn())
332+
f['foo'] = 'baz'
333+
lyr.CreateFeature(f)
334+
f = None
335+
ds = None
336+
337+
vl = QgsVectorLayer('{}|layerid=0'.format(tmpfile), 'test', 'ogr')
338+
self.assertEqual(vl.dataProvider().featureCount(), 2)
339+
340+
# Test adding features
341+
vl.setSubsetString("foo = 'baz'")
342+
self.assertTrue(vl.startEditing())
343+
feature = QgsFeature(vl.fields())
344+
feature['foo'] = 'abc'
345+
vl.addFeature(feature)
346+
vl.commitChanges()
347+
vl.setSubsetString(None)
348+
self.assertEqual(vl.dataProvider().featureCount(), 3)
349+
350+
# Test deleting a feature
351+
vl.setSubsetString("foo = 'baz'")
352+
self.assertTrue(vl.startEditing())
353+
vl.deleteFeature(1)
354+
vl.commitChanges()
355+
vl.setSubsetString(None)
356+
self.assertEqual(vl.dataProvider().featureCount(), 2)
357+
358+
# Test editing a feature
359+
vl.setSubsetString("foo = 'baz'")
360+
self.assertTrue(vl.startEditing())
361+
vl.changeAttributeValue(2, 1, 'xx')
362+
vl.commitChanges()
363+
vl.setSubsetString(None)
364+
self.assertEqual(set((feat['foo'] for feat in vl.getFeatures())), set(['xx', 'abc']))
365+
321366
def testStyle(self):
322367

323368
# First test with invalid URI

0 commit comments

Comments
 (0)