Add test covering new context parameter to QgsVector change attribute(s) functions

This commit is contained in:
Mathieu Pellerin 2024-04-29 16:54:16 +07:00
parent 83d61b5458
commit 19cb97109c

View File

@ -1139,6 +1139,36 @@ class TestQgsVectorLayer(QgisTestCase, FeatureSourceTestCase):
self.assertTrue(layer.commitChanges())
checkAfter()
def test_ChangeAttributeValuesWithContext(self):
layer = QgsVectorLayer("Point?field=fldtxt:string&field=fldint:integer",
"addfeat", "memory")
layer.setDefaultValueDefinition(0, QgsDefaultValue("geom_to_wkt(@current_parent_geometry)", True))
f = QgsFeature()
f.setAttributes(["test", 123])
f.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(100, 200)))
assert layer.dataProvider().addFeatures([f])
assert layer.featureCount() == 1
fid = 1
fields = QgsFields()
fields.append(QgsField("parenttxt", QVariant.String))
fields.append(QgsField("parentinteger", QVariant.Int))
pf = QgsFeature(fields)
pf.setAttributes(["parent", 789])
pf.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(1, 2)))
layer.startEditing()
context = layer.createExpressionContext()
context.appendScope(QgsExpressionContextUtils.parentFormScope(pf))
self.assertTrue(layer.changeAttributeValues(fid, {1: 100}, {}, False, context))
f = layer.getFeature(1)
self.assertEqual(f.attributes(), ["Point (1 2)", 100])
def test_ChangeAttributeAfterAddFeature(self):
layer = createLayerWithOnePoint()
layer.dataProvider().deleteFeatures([1]) # no need for this feature