Skip to content

Commit f97b5a5

Browse files
committedNov 20, 2017
Fix test for primary key constraints
1 parent 73d6765 commit f97b5a5

File tree

2 files changed

+36
-4
lines changed

2 files changed

+36
-4
lines changed
 

‎tests/src/python/test_provider_ogr_gpkg.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -634,7 +634,7 @@ def testGeopackageLargeFID(self):
634634
self.assertTrue(vl.commitChanges())
635635

636636
def test_SplitFeature(self):
637-
"""Test gpkg feature can be splitted"""
637+
"""Test gpkg feature can be split"""
638638
tmpfile = os.path.join(self.basetestpath, 'testGeopackageSplitFeatures.gpkg')
639639
ds = ogr.GetDriverByName('GPKG').CreateDataSource(tmpfile)
640640
lyr = ds.CreateLayer('test', geom_type=ogr.wkbPolygon)

‎tests/src/python/test_provider_ogr_sqlite.py

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import shutil
2020
from osgeo import gdal, ogr
2121

22-
from qgis.core import QgsVectorLayer, QgsFeature, QgsFeatureRequest, QgsFieldConstraints, NULL
22+
from qgis.core import QgsVectorLayer, QgsFeature, QgsFeatureRequest, QgsFieldConstraints, QgsFieldConstraints, QgsPointXY, NULL
2323
from qgis.testing import start_app, unittest
2424
from qgis.PyQt.QtCore import QDate, QTime, QDateTime
2525

@@ -147,13 +147,13 @@ def testNotNullConstraint(self):
147147
self.assertEqual(vl.dataProvider().fieldConstraints(-1), QgsFieldConstraints.Constraints())
148148
self.assertEqual(vl.dataProvider().fieldConstraints(1001), QgsFieldConstraints.Constraints())
149149

150-
self.assertFalse(vl.dataProvider().fieldConstraints(0) & QgsFieldConstraints.ConstraintNotNull)
150+
self.assertTrue(vl.dataProvider().fieldConstraints(0) & QgsFieldConstraints.ConstraintNotNull)
151151
self.assertFalse(vl.dataProvider().fieldConstraints(1) & QgsFieldConstraints.ConstraintNotNull)
152152
self.assertTrue(vl.dataProvider().fieldConstraints(2) & QgsFieldConstraints.ConstraintNotNull)
153153

154154
# test that constraints have been saved to fields correctly
155155
fields = vl.fields()
156-
self.assertFalse(fields.at(0).constraints().constraints() & QgsFieldConstraints.ConstraintNotNull)
156+
self.assertTrue(fields.at(0).constraints().constraints() & QgsFieldConstraints.ConstraintNotNull)
157157
self.assertFalse(fields.at(1).constraints().constraints() & QgsFieldConstraints.ConstraintNotNull)
158158
self.assertTrue(fields.at(2).constraints().constraints() & QgsFieldConstraints.ConstraintNotNull)
159159
self.assertEqual(fields.at(2).constraints().constraintOrigin(QgsFieldConstraints.ConstraintNotNull), QgsFieldConstraints.ConstraintOriginProvider)
@@ -270,6 +270,38 @@ def testSubsetStringFids(self):
270270
vl.reload()
271271
self.assertTrue(vl.fields().at(vl.fields().count() - 1).name() == "orig_ogc_fid")
272272

273+
def test_SplitFeature(self):
274+
"""Test sqlite feature can be split"""
275+
tmpfile = os.path.join(self.basetestpath, 'testGeopackageSplitFeatures.sqlite')
276+
ds = ogr.GetDriverByName('SQlite').CreateDataSource(tmpfile)
277+
lyr = ds.CreateLayer('test', geom_type=ogr.wkbPolygon)
278+
lyr.CreateField(ogr.FieldDefn('str_field', ogr.OFTString))
279+
f = ogr.Feature(lyr.GetLayerDefn())
280+
f.SetGeometry(ogr.CreateGeometryFromWkt('POLYGON ((0 0,0 1,1 1,1 0,0 0))'))
281+
lyr.CreateFeature(f)
282+
f = None
283+
ds = None
284+
285+
layer = QgsVectorLayer(u'{}'.format(tmpfile) + "|layername=" + "test", 'test', u'ogr')
286+
287+
# Check that pk field has unique constraint
288+
fields = layer.fields()
289+
pkfield = fields.at(0)
290+
self.assertTrue(pkfield.constraints().constraints() & QgsFieldConstraints.ConstraintUnique)
291+
292+
self.assertTrue(layer.isValid())
293+
self.assertTrue(layer.isSpatial())
294+
self.assertEqual([f for f in layer.getFeatures()][0].geometry().asWkt(), 'Polygon ((0 0, 0 1, 1 1, 1 0, 0 0))')
295+
layer.startEditing()
296+
self.assertEqual(layer.splitFeatures([QgsPointXY(0.5, 0), QgsPointXY(0.5, 1)], 0), 0)
297+
self.assertTrue(layer.commitChanges())
298+
self.assertEqual(layer.featureCount(), 2)
299+
300+
layer = QgsVectorLayer(u'{}'.format(tmpfile) + "|layername=" + "test", 'test', u'ogr')
301+
self.assertEqual(layer.featureCount(), 2)
302+
self.assertEqual([f for f in layer.getFeatures()][0].geometry().asWkt(), 'Polygon ((0.5 0, 0.5 1, 1 1, 1 0, 0.5 0))')
303+
self.assertEqual([f for f in layer.getFeatures()][1].geometry().asWkt(), 'Polygon ((0.5 1, 0.5 0, 0 0, 0 1, 0.5 1))')
304+
273305

274306
if __name__ == '__main__':
275307
unittest.main()

0 commit comments

Comments
 (0)
Please sign in to comment.