def testFeatureSourceInput(self): # create a memory layer and add to project and context layer = QgsVectorLayer("Point?crs=epsg:3857&field=fldtxt:string&field=fldint:integer", "testmem", "memory") self.assertTrue(layer.isValid()) pr = layer.dataProvider() f = QgsFeature() f.setAttributes(["test", 123]) f.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(100, 200))) f2 = QgsFeature() f2.setAttributes(["test2", 457]) f2.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(110, 200))) self.assertTrue(pr.addFeatures([f, f2])) self.assertEqual(layer.featureCount(), 2) # select first feature layer.selectByIds([next(layer.getFeatures()).id()]) self.assertEqual(len(layer.selectedFeatureIds()), 1) QgsProject.instance().addMapLayer(layer) context = QgsProcessingContext() context.setProject(QgsProject.instance()) alg = QgsApplication.processingRegistry().createAlgorithmById('grass7:v.buffer') self.assertIsNotNone(alg) temp_file = os.path.join(self.temp_dir, 'grass_output_sel.shp') parameters = {'input': QgsProcessingFeatureSourceDefinition('testmem', True), 'cats': '', 'where': '', 'type': [0, 1, 4], 'distance': 1, 'minordistance': None, 'angle': 0, 'column': None, 'scale': 1, 'tolerance': 0.01, '-s': False, '-c': False, '-t': False, 'output': temp_file, 'GRASS_REGION_PARAMETER': None, 'GRASS_SNAP_TOLERANCE_PARAMETER': -1, 'GRASS_MIN_AREA_PARAMETER': 0.0001, 'GRASS_OUTPUT_TYPE_PARAMETER': 0, 'GRASS_VECTOR_DSCO': '', 'GRASS_VECTOR_LCO': ''} feedback = QgsProcessingFeedback() results, ok = alg.run(parameters, context, feedback) self.assertTrue(ok) self.assertTrue(os.path.exists(temp_file)) # make sure that layer has correct features res = QgsVectorLayer(temp_file, 'res') self.assertTrue(res.isValid()) self.assertEqual(res.featureCount(), 1) QgsProject.instance().removeMapLayer(layer)
def testRepack(self): vl = QgsVectorLayer('{}|layerid=0'.format(self.repackfile), 'test', 'ogr') ids = [f.id() for f in vl.getFeatures(QgsFeatureRequest().setFilterExpression('pk=1'))] vl.selectByIds(ids) self.assertEqual(vl.selectedFeatureIds(), ids) self.assertEqual(vl.featureCount(), 5) self.assertTrue(vl.startEditing()) self.assertTrue(vl.deleteFeature(3)) self.assertTrue(vl.commitChanges()) self.assertTrue(vl.selectedFeatureCount() == 0 or vl.selectedFeatures()[0]['pk'] == 1)
def testRepack(self): vl = QgsVectorLayer("{}|layerid=0".format(self.repackfile), "test", "ogr") ids = [f.id() for f in vl.getFeatures(QgsFeatureRequest().setFilterExpression("pk=1"))] vl.selectByIds(ids) self.assertEqual(vl.selectedFeatureIds(), ids) self.assertEqual(vl.pendingFeatureCount(), 5) self.assertTrue(vl.startEditing()) self.assertTrue(vl.deleteFeature(3)) self.assertTrue(vl.commitChanges()) self.assertTrue(vl.selectedFeatureCount() == 0 or vl.selectedFeatures()[0]["pk"] == 1)
def testRepack(self): vl = QgsVectorLayer('{}|layerid=0'.format(self.repackfile), 'test', 'ogr') ids = [ f.id() for f in vl.getFeatures( QgsFeatureRequest().setFilterExpression('pk=1')) ] vl.selectByIds(ids) self.assertEqual(vl.selectedFeatureIds(), ids) self.assertEqual(vl.featureCount(), 5) self.assertTrue(vl.startEditing()) self.assertTrue(vl.deleteFeature(3)) self.assertTrue(vl.commitChanges()) self.assertTrue(vl.selectedFeatureCount() == 0 or vl.selectedFeatures()[0]['pk'] == 1)
def testGetOgrCompatibleSourceFromFeatureSource(self): # create a memory layer and add to project and context layer = QgsVectorLayer( "Point?field=fldtxt:string&field=fldint:integer", "testmem", "memory") self.assertTrue(layer.isValid()) pr = layer.dataProvider() f = QgsFeature() f.setAttributes(["test", 123]) f.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(100, 200))) f2 = QgsFeature() f2.setAttributes(["test2", 457]) f2.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(100, 200))) self.assertTrue(pr.addFeatures([f, f2])) self.assertEqual(layer.featureCount(), 2) # select first feature layer.selectByIds([next(layer.getFeatures()).id()]) self.assertEqual(len(layer.selectedFeatureIds()), 1) QgsProject.instance().addMapLayer(layer) context = QgsProcessingContext() context.setProject(QgsProject.instance()) alg = QgsApplication.processingRegistry().createAlgorithmById( 'gdal:buffervectors') self.assertIsNotNone(alg) parameters = { 'INPUT': QgsProcessingFeatureSourceDefinition('testmem', True) } feedback = QgsProcessingFeedback() # check that memory layer is automatically saved out to geopackage when required by GDAL algorithms ogr_data_path, ogr_layer_name = alg.getOgrCompatibleSource( 'INPUT', parameters, context, feedback, executing=True) self.assertTrue(ogr_data_path) self.assertTrue(ogr_data_path.endswith('.gpkg')) self.assertTrue(os.path.exists(ogr_data_path)) self.assertTrue(ogr_layer_name) # make sure that layer has only selected feature res = QgsVectorLayer(ogr_data_path, 'res') self.assertTrue(res.isValid()) self.assertEqual(res.featureCount(), 1) QgsProject.instance().removeMapLayer(layer)
def testGetOgrCompatibleSourceFromFeatureSource(self): # create a memory layer and add to project and context layer = QgsVectorLayer("Point?field=fldtxt:string&field=fldint:integer", "testmem", "memory") self.assertTrue(layer.isValid()) pr = layer.dataProvider() f = QgsFeature() f.setAttributes(["test", 123]) f.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(100, 200))) f2 = QgsFeature() f2.setAttributes(["test2", 457]) f2.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(100, 200))) self.assertTrue(pr.addFeatures([f, f2])) self.assertEqual(layer.featureCount(), 2) # select first feature layer.selectByIds([next(layer.getFeatures()).id()]) self.assertEqual(len(layer.selectedFeatureIds()), 1) QgsProject.instance().addMapLayer(layer) context = QgsProcessingContext() context.setProject(QgsProject.instance()) alg = QgsApplication.processingRegistry().createAlgorithmById('gdal:buffervectors') self.assertIsNotNone(alg) parameters = {'INPUT': QgsProcessingFeatureSourceDefinition('testmem', True)} feedback = QgsProcessingFeedback() # check that memory layer is automatically saved out to shape when required by GDAL algorithms ogr_data_path, ogr_layer_name = alg.getOgrCompatibleSource('INPUT', parameters, context, feedback, executing=True) self.assertTrue(ogr_data_path) self.assertTrue(ogr_data_path.endswith('.shp')) self.assertTrue(os.path.exists(ogr_data_path)) self.assertTrue(ogr_layer_name) # make sure that layer has only selected feature res = QgsVectorLayer(ogr_data_path, 'res') self.assertTrue(res.isValid()) self.assertEqual(res.featureCount(), 1) QgsProject.instance().removeMapLayer(layer)
class TestStratigraphy(utils_for_tests.MidvattenTestPostgisDbSv): @mock.patch('db_utils.QgsProject.instance', utils_for_tests. MidvattenTestPostgisNotCreated.mock_instance_settings_database) @mock.patch( 'db_utils.get_postgis_connections', utils_for_tests.MidvattenTestPostgisNotCreated.mock_postgis_connections ) def create_and_select_vlayer(self): self.qgs = QgsApplication([], True) self.qgs.initQgis() self.midvatten.ms.settingsdict['secplotdrillstop'] = "%berg%" dbconnection = db_utils.DbConnectionManager() uri = dbconnection.uri uri.setDataSource('', 'obs_points', 'geometry', '', 'obsid') dbtype = db_utils.get_dbtype(dbconnection.dbtype) self.vlayer = QgsVectorLayer(uri.uri(), 'TestLayer', dbtype) features = self.vlayer.getFeatures() feature_ids = [feature.id() for feature in features] self.vlayer.selectByIds(feature_ids) print("1. Valid vlayer '{}'".format(self.vlayer.isValid())) print("2. feature_ids: " + str(feature_ids)) print("3. QgsVectorLayer.selectedFeatureIds: " + str(self.vlayer.selectedFeatureIds())) print("4. QgsVectorLayer.getSelectedFeatures: " + str([x.id() for x in self.vlayer.getSelectedFeatures()])) print("5. QgsVectorLayer.getFeature(): " + str([self.vlayer.getFeature(x).id() for x in feature_ids])) print("6. QgsVectorLayer.getFeature() type: " + str([str(type(self.vlayer.getFeature(x))) for x in feature_ids])) print("7. QgsVectorLayer.getFeatures(): " + str([x.id() for x in self.vlayer.getFeatures(feature_ids)])) @mock.patch('midvatten_utils.MessagebarAndLog') @mock.patch('stratigraphy.utils.pop_up_info', autospec=True) @mock.patch('db_utils.QgsProject.instance', utils_for_tests. MidvattenTestPostgisNotCreated.mock_instance_settings_database) @mock.patch( 'db_utils.get_postgis_connections', utils_for_tests.MidvattenTestPostgisNotCreated.mock_postgis_connections ) def test_stratigraphy(self, mock_skippopup, mock_messagebar): """ :param mock_skippopup: :param mock_messagebar: :return: """ db_utils.sql_alter_db( '''INSERT INTO obs_points (obsid, h_gs, geometry) VALUES ('1', 5, ST_GeomFromText('POINT(633466 711659)', 3006))''' ) db_utils.sql_alter_db( '''INSERT INTO obs_points (obsid, h_gs, geometry) VALUES ('2', 10, ST_GeomFromText('POINT(6720727 016568)', 3006))''' ) db_utils.sql_alter_db( '''INSERT INTO obs_points (obsid, h_gs, geometry) VALUES ('3', 20, ST_GeomFromText('POINT(6720728 016569)', 3006))''' ) db_utils.sql_alter_db( '''INSERT INTO stratigraphy (obsid, stratid, depthtop, depthbot, geology, geoshort, capacity, development) VALUES ('1', 1, 0, 1, 'sand', 'sand', '3', 'j')''' ) db_utils.sql_alter_db( '''INSERT INTO stratigraphy (obsid, stratid, depthtop, depthbot, geology, geoshort, capacity, development) VALUES ('1', 2, 1, 4.5, 'morän', 'morän', '3', 'j')''' ) self.create_and_select_vlayer() #print(str(self.vlayer.isValid())) #print(str(db_utils.sql_load_fr_db('select * from obs_points'))) #print(str(db_utils.sql_load_fr_db('select * from stratigraphy'))) dlg = Stratigraphy(self.iface, self.vlayer, self.ms.settingsdict) #print(str(mock_messagebar.mock_calls)) #print(str(mock_skippopup.mock_calls)) dlg.showSurvey() test = utils.anything_to_string_representation(dlg.data) test_survey = utils.anything_to_string_representation( repr(dlg.data['1'])) test_strata = utils.anything_to_string_representation( utils.returnunicode(dlg.data['1'].strata, keep_containers=True)) assert len(mock_skippopup.mock_calls) == 0 print(str(mock_messagebar.mock_calls)) assert len(mock_messagebar.mock_calls) == 0 assert test == """{"1": SURVEY('1', 5.000000, '<QgsPointXY: POINT(633466 711659)>')}""" assert test_survey == '''"SURVEY('1', 5.000000, '<QgsPointXY: POINT(633466 711659)>')"''' print("test_strata: " + test_strata) assert test_strata == '''["strata(1, '3', 'sand', 'sand', 0.000000-1.000000)", "strata(2, '3', 'morän', 'moran', 1.000000-4.500000)"]''' @mock.patch('midvatten_utils.MessagebarAndLog') @mock.patch('stratigraphy.utils.pop_up_info', autospec=True) @mock.patch('db_utils.QgsProject.instance', utils_for_tests. MidvattenTestPostgisNotCreated.mock_instance_settings_database) @mock.patch( 'db_utils.get_postgis_connections', utils_for_tests.MidvattenTestPostgisNotCreated.mock_postgis_connections ) def test_stratigraphy_with_other_obsid_numbers(self, mock_skippopup, mock_messagebar): """ :param mock_skippopup: :param mock_messagebar: :return: """ db_utils.sql_alter_db( '''INSERT INTO obs_points (obsid, h_gs, geometry) VALUES ('8', 5, ST_GeomFromText('POINT(633466 711659)', 3006))''' ) db_utils.sql_alter_db( '''INSERT INTO obs_points (obsid, h_gs, geometry) VALUES ('9', 10, ST_GeomFromText('POINT(6720727 016568)', 3006))''' ) db_utils.sql_alter_db( '''INSERT INTO obs_points (obsid, h_gs, geometry) VALUES ('10', 20, ST_GeomFromText('POINT(6720728 016569)', 3006))''' ) db_utils.sql_alter_db( '''INSERT INTO stratigraphy (obsid, stratid, depthtop, depthbot, geology, geoshort, capacity, development) VALUES ('8', 1, 0, 1, 'sand', 'sand', '3', 'j')''' ) db_utils.sql_alter_db( '''INSERT INTO stratigraphy (obsid, stratid, depthtop, depthbot, geology, geoshort, capacity, development) VALUES ('8', 2, 1, 4.5, 'morän', 'morän', '3', 'j')''' ) self.create_and_select_vlayer() dlg = Stratigraphy(self.iface, self.vlayer, self.ms.settingsdict) dlg.showSurvey() print(str(mock_skippopup.mock_calls)) test = utils.anything_to_string_representation(dlg.data) test_survey = utils.anything_to_string_representation( repr(dlg.data['8'])) test_strata = utils.anything_to_string_representation( utils.returnunicode(dlg.data['8'].strata, keep_containers=True)) assert len(mock_skippopup.mock_calls) == 0 assert len(mock_messagebar.mock_calls) == 0 assert test == """{"8": SURVEY('8', 5.000000, '<QgsPointXY: POINT(633466 711659)>')}""" assert test_survey == '''"SURVEY('8', 5.000000, '<QgsPointXY: POINT(633466 711659)>')"''' print("Test strata " + test_strata) assert test_strata == '''["strata(1, '3', 'sand', 'sand', 0.000000-1.000000)", "strata(2, '3', 'morän', 'moran', 1.000000-4.500000)"]''' @mock.patch('midvatten_utils.MessagebarAndLog') @mock.patch('stratigraphy.utils.pop_up_info', autospec=True) @mock.patch('db_utils.QgsProject.instance', utils_for_tests. MidvattenTestPostgisNotCreated.mock_instance_settings_database) @mock.patch( 'db_utils.get_postgis_connections', utils_for_tests.MidvattenTestPostgisNotCreated.mock_postgis_connections ) def test_stratigraphy_with_string_obsid(self, mock_skippopup, mock_messagebar): """ :param mock_skippopup: :param mock_messagebar: :return: """ db_utils.sql_alter_db( '''INSERT INTO obs_points (obsid, h_gs, geometry) VALUES ('P1', 5, ST_GeomFromText('POINT(633466 711659)', 3006))''' ) db_utils.sql_alter_db( '''INSERT INTO obs_points (obsid, h_gs, geometry) VALUES ('P2', 10, ST_GeomFromText('POINT(6720727 016568)', 3006))''' ) db_utils.sql_alter_db( '''INSERT INTO obs_points (obsid, h_gs, geometry) VALUES ('P3', 20, ST_GeomFromText('POINT(6720728 016569)', 3006))''' ) db_utils.sql_alter_db( '''INSERT INTO stratigraphy (obsid, stratid, depthtop, depthbot, geology, geoshort, capacity, development) VALUES ('P1', 1, 0, 1, 'sand', 'sand', '3', 'j')''' ) db_utils.sql_alter_db( '''INSERT INTO stratigraphy (obsid, stratid, depthtop, depthbot, geology, geoshort, capacity, development) VALUES ('P1', 2, 1, 4.5, 'morän', 'morän', '3', 'j')''' ) self.create_and_select_vlayer() print(str(self.vlayer.isValid())) print(str(db_utils.sql_load_fr_db('select * from obs_points'))) print(str(db_utils.sql_load_fr_db('select * from stratigraphy'))) dlg = Stratigraphy(self.iface, self.vlayer, self.ms.settingsdict) print(str(mock_messagebar.mock_calls)) print(str(mock_skippopup.mock_calls)) dlg.showSurvey() test = utils.anything_to_string_representation(dlg.data) test_survey = utils.anything_to_string_representation( repr(dlg.data['P1'])) test_strata = utils.anything_to_string_representation( utils.returnunicode(dlg.data['P1'].strata, keep_containers=True)) assert len(mock_skippopup.mock_calls) == 0 print(str(mock_messagebar.mock_calls)) assert len(mock_messagebar.mock_calls) == 0 assert test == """{"P1": SURVEY('P1', 5.000000, '<QgsPointXY: POINT(633466 711659)>')}""" assert test_survey == '''"SURVEY('P1', 5.000000, '<QgsPointXY: POINT(633466 711659)>')"''' assert test_strata == '''["strata(1, '3', 'sand', 'sand', 0.000000-1.000000)", "strata(2, '3', 'morän', 'moran', 1.000000-4.500000)"]''' @mock.patch('midvatten_utils.MessagebarAndLog') @mock.patch('stratigraphy.utils.pop_up_info', autospec=True) @mock.patch('db_utils.QgsProject.instance', utils_for_tests. MidvattenTestPostgisNotCreated.mock_instance_settings_database) @mock.patch( 'db_utils.get_postgis_connections', utils_for_tests.MidvattenTestPostgisNotCreated.mock_postgis_connections ) def test_stratigraphy_gap(self, mock_skippopup, mock_messagebar): """ :param mock_skippopup: :param mock_messagebar: :return: """ db_utils.sql_alter_db( '''INSERT INTO obs_points (obsid, h_gs, geometry) VALUES ('1', 5, ST_GeomFromText('POINT(633466 711659)', 3006))''' ) db_utils.sql_alter_db( '''INSERT INTO obs_points (obsid, h_gs, geometry) VALUES ('2', 10, ST_GeomFromText('POINT(6720727 016568)', 3006))''' ) db_utils.sql_alter_db( '''INSERT INTO obs_points (obsid, h_gs, geometry) VALUES ('3', 20, ST_GeomFromText('POINT(6720728 016569)', 3006))''' ) db_utils.sql_alter_db( '''INSERT INTO stratigraphy (obsid, stratid, depthtop, depthbot, geology, geoshort, capacity, development) VALUES ('1', 1, 0, 1, 'sand', 'sand', '3', 'j')''' ) db_utils.sql_alter_db( '''INSERT INTO stratigraphy (obsid, stratid, depthtop, depthbot, geology, geoshort, capacity, development) VALUES ('1', 2, 2, 4.5, 'morän', 'morän', '3', 'j')''' ) self.create_and_select_vlayer() print(str(self.vlayer.isValid())) print(str(db_utils.sql_load_fr_db('select * from obs_points'))) print(str(db_utils.sql_load_fr_db('select * from stratigraphy'))) dlg = Stratigraphy(self.iface, self.vlayer, self.ms.settingsdict) print(str(mock_messagebar.mock_calls)) print(str(mock_skippopup.mock_calls)) dlg.showSurvey() test = utils.anything_to_string_representation(dlg.data) test_survey = utils.anything_to_string_representation( repr(dlg.data['1'])) test_strata = utils.anything_to_string_representation( utils.returnunicode(dlg.data['1'].strata, keep_containers=True)) assert len(mock_skippopup.mock_calls) == 0 assert len(mock_messagebar.mock_calls) == 0 assert test == """{"1": SURVEY('1', 5.000000, '<QgsPointXY: POINT(633466 711659)>')}""" assert test_survey == '''"SURVEY('1', 5.000000, '<QgsPointXY: POINT(633466 711659)>')"''' assert test_strata == '''["strata(1, '3', 'sand', 'sand', 0.000000-1.000000)", "strata(2, '', '', '', 1.000000-2.000000)", "strata(3, '3', 'morän', 'moran', 2.000000-4.500000)"]''' @mock.patch('midvatten_utils.MessagebarAndLog') @mock.patch('stratigraphy.utils.pop_up_info', autospec=True) @mock.patch('db_utils.QgsProject.instance', utils_for_tests. MidvattenTestPostgisNotCreated.mock_instance_settings_database) @mock.patch( 'db_utils.get_postgis_connections', utils_for_tests.MidvattenTestPostgisNotCreated.mock_postgis_connections ) def test_stratigraphy_missing_h_gs(self, mock_skippopup, mock_messagebar): """ :param mock_skippopup: :param mock_messagebar: :return: """ db_utils.sql_alter_db( '''INSERT INTO obs_points (obsid, h_gs, geometry) VALUES ('1', 5, ST_GeomFromText('POINT(633466 711659)', 3006))''' ) db_utils.sql_alter_db( '''INSERT INTO obs_points (obsid, h_gs, h_toc, geometry) VALUES ('2', NULL, 10, ST_GeomFromText('POINT(6720727 016568)', 3006))''' ) db_utils.sql_alter_db( '''INSERT INTO obs_points (obsid, geometry) VALUES ('3', ST_GeomFromText('POINT(6720728 016569)', 3006))''' ) db_utils.sql_alter_db( '''INSERT INTO stratigraphy (obsid, stratid, depthtop, depthbot, geology, geoshort, capacity, development) VALUES ('1', 1, 0, 1, 'sand', 'sand', '3', 'j')''' ) db_utils.sql_alter_db( '''INSERT INTO stratigraphy (obsid, stratid, depthtop, depthbot, geology, geoshort, capacity, development) VALUES ('1', 2, 1, 4.5, 'morän', 'morän', '3', 'j')''' ) db_utils.sql_alter_db( '''INSERT INTO stratigraphy (obsid, stratid, depthtop, depthbot, geology, geoshort, capacity, development) VALUES ('2', 1, 0, 1, 'sand', 'sand', '3', 'j')''' ) db_utils.sql_alter_db( '''INSERT INTO stratigraphy (obsid, stratid, depthtop, depthbot, geology, geoshort, capacity, development) VALUES ('2', 2, 1, 4.5, 'morän', 'morän', '3', 'j')''' ) db_utils.sql_alter_db( '''INSERT INTO stratigraphy (obsid, stratid, depthtop, depthbot, geology, geoshort, capacity, development) VALUES ('3', 1, 0, 2, 'sand', 'sand', '3', 'j')''' ) db_utils.sql_alter_db( '''INSERT INTO stratigraphy (obsid, stratid, depthtop, depthbot, geology, geoshort, capacity, development) VALUES ('3', 2, 2, 6, 'morän', 'morän', '3', 'j')''' ) self.create_and_select_vlayer() dlg = Stratigraphy(self.iface, self.vlayer, self.ms.settingsdict) dlg.showSurvey() test = utils.anything_to_string_representation(dlg.data) test_survey = utils.anything_to_string_representation( repr(dlg.data['1'])) test_strata = utils.anything_to_string_representation( utils.returnunicode(dlg.data['1'].strata, keep_containers=True)) assert len(mock_skippopup.mock_calls) == 1 print(str(mock_skippopup.mock_calls)) print(str(mock_messagebar.mock_calls)) assert mock_skippopup.mock_calls == [ mock.call('Warning, h_gs is missing. See messagebar.') ] assert mock_messagebar.mock_calls == [ mock.call.warning( bar_msg="Obsid 2: using h_gs '' failed, using 'h_toc' instead.", duration=90, log_msg='False'), mock.call.warning( bar_msg="Obsid 3: using h_gs '' failed, using '-1' instead.", duration=90, log_msg='False') ] print("test: " + test) assert test == """{"1": SURVEY('1', 5.000000, '<QgsPointXY: POINT(633466 711659)>'), "2": SURVEY('2', 10.000000, '<QgsPointXY: POINT(6720727 16568)>'), "3": SURVEY('3', -1.000000, '<QgsPointXY: POINT(6720728 16569)>')}""" print("test_survey " + test_survey) assert test_survey == '''"SURVEY('1', 5.000000, '<QgsPointXY: POINT(633466 711659)>')"''' print("Test strata " + test_strata) assert test_strata == '''["strata(1, '3', 'sand', 'sand', 0.000000-1.000000)", "strata(2, '3', 'morän', 'moran', 1.000000-4.500000)"]''' def tearDown(self): QgsProject.instance().addMapLayer(self.vlayer) QgsProject.instance().removeMapLayer(self.vlayer.id()) super(self.__class__, self).tearDown()
def testFeatureSourceInput(self): # create a memory layer and add to project and context layer = QgsVectorLayer( "Point?crs=epsg:3857&field=fldtxt:string&field=fldint:integer", "testmem", "memory") self.assertTrue(layer.isValid()) pr = layer.dataProvider() f = QgsFeature() f.setAttributes(["test", 123]) f.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(100, 200))) f2 = QgsFeature() f2.setAttributes(["test2", 457]) f2.setGeometry(QgsGeometry.fromPointXY(QgsPointXY(110, 200))) self.assertTrue(pr.addFeatures([f, f2])) self.assertEqual(layer.featureCount(), 2) # select first feature layer.selectByIds([next(layer.getFeatures()).id()]) self.assertEqual(len(layer.selectedFeatureIds()), 1) QgsProject.instance().addMapLayer(layer) context = QgsProcessingContext() context.setProject(QgsProject.instance()) alg = QgsApplication.processingRegistry().createAlgorithmById( 'grass7:v.buffer') self.assertIsNotNone(alg) temp_file = os.path.join(self.temp_dir, 'grass_output_sel.shp') parameters = { 'input': QgsProcessingFeatureSourceDefinition('testmem', True), 'cats': '', 'where': '', 'type': [0, 1, 4], 'distance': 1, 'minordistance': None, 'angle': 0, 'column': None, 'scale': 1, 'tolerance': 0.01, '-s': False, '-c': False, '-t': False, 'output': temp_file, 'GRASS_REGION_PARAMETER': None, 'GRASS_SNAP_TOLERANCE_PARAMETER': -1, 'GRASS_MIN_AREA_PARAMETER': 0.0001, 'GRASS_OUTPUT_TYPE_PARAMETER': 0, 'GRASS_VECTOR_DSCO': '', 'GRASS_VECTOR_LCO': '' } feedback = QgsProcessingFeedback() results, ok = alg.run(parameters, context, feedback) self.assertTrue(ok) self.assertTrue(os.path.exists(temp_file)) # make sure that layer has correct features res = QgsVectorLayer(temp_file, 'res') self.assertTrue(res.isValid()) self.assertEqual(res.featureCount(), 1) QgsProject.instance().removeMapLayer(layer)
class TestVectorlayer(utils_for_tests.MidvattenTestSpatialiteDbSv): def create_vlayer(self, no_print=False): dbconnection = db_utils.DbConnectionManager() uri = dbconnection.uri uri.setDataSource('', 'obs_points', 'geometry', '', 'obsid') dbtype = db_utils.get_dbtype(dbconnection.dbtype) self.vlayer = QgsVectorLayer(uri.uri(), 'TestLayer', dbtype) QgsProject.instance().addMapLayer(self.vlayer) features = self.vlayer.getFeatures() feature_ids = [feature.id() for feature in features] if not no_print: print("1. Valid vlayer '{}'".format(self.vlayer.isValid())) print("2. feature_ids: " + str(feature_ids)) print("5. QgsVectorLayer.getFeature(): " + str([self.vlayer.getFeature(x).id() for x in feature_ids])) print("6. QgsVectorLayer.getFeature() type: " + str( [str(type(self.vlayer.getFeature(x))) for x in feature_ids])) print("7. QgsVectorLayer.getFeatures(): " + str([x.id() for x in self.vlayer.getFeatures(feature_ids)])) print("8. QgsVectorLayer.featureCount(): " + str(self.vlayer.featureCount())) def select_features(self, feature_ids=None, no_print=True): if feature_ids is None: features = self.vlayer.getFeatures() feature_ids = [feature.id() for feature in features] self.vlayer.selectByIds(feature_ids) if not no_print: print("3. QgsVectorLayer.selectedFeatureIds: " + str(self.vlayer.selectedFeatureIds())) print("4. QgsVectorLayer.getSelectedFeatures: " + str([x.id() for x in self.vlayer.getSelectedFeatures()])) @mock.patch('midvatten_utils.MessagebarAndLog') @mock.patch('stratigraphy.utils.pop_up_info', autospec=True) def test_vlayer(self, mock_skippopup, mock_messagebar): """ :param mock_skippopup: :param mock_messagebar: :return: """ for obsid in [1, 2, 3]: db_utils.sql_alter_db( '''INSERT INTO obs_points (obsid) VALUES ({})'''.format( str(obsid))) self.create_vlayer() self.select_features() feature_ids = [feature.id() for feature in self.vlayer.getFeatures()] reference_ids = (1, 2, 3) assert self.vlayer.isValid() assert len(feature_ids) == len(reference_ids) assert tuple(feature_ids) == reference_ids assert tuple(sorted([x for x in self.vlayer.selectedFeatureIds() ])) == reference_ids assert tuple( sorted([x.id() for x in self.vlayer.getSelectedFeatures() ])) == reference_ids assert tuple( sorted([x.id() for x in self.vlayer.getFeatures(feature_ids) ])) == reference_ids @mock.patch('midvatten_utils.MessagebarAndLog') @mock.patch('stratigraphy.utils.pop_up_info', autospec=True) def test_vlayer_other_ints_ids(self, mock_skippopup, mock_messagebar): """ :param mock_skippopup: :param mock_messagebar: :return: """ for obsid in [4, 5, 6]: db_utils.sql_alter_db( '''INSERT INTO obs_points (obsid) VALUES ({})'''.format( str(obsid))) self.create_vlayer() self.select_features() feature_ids = [feature.id() for feature in self.vlayer.getFeatures()] reference_ids = (1, 2, 3) assert self.vlayer.isValid() assert len(feature_ids) == len(reference_ids) assert tuple(feature_ids) == reference_ids assert tuple(sorted([x for x in self.vlayer.selectedFeatureIds() ])) == reference_ids assert tuple( sorted([x.id() for x in self.vlayer.getSelectedFeatures() ])) == reference_ids assert tuple( sorted([x.id() for x in self.vlayer.getFeatures(feature_ids) ])) == reference_ids @mock.patch('midvatten_utils.MessagebarAndLog') @mock.patch('stratigraphy.utils.pop_up_info', autospec=True) def test_vlayer_strings(self, mock_skippopup, mock_messagebar): """ :param mock_skippopup: :param mock_messagebar: :return: """ for obsid in ['A', 'b', 'c1']: db_utils.sql_alter_db( '''INSERT INTO obs_points (obsid) VALUES ('{}')'''.format( str(obsid))) self.create_vlayer() self.select_features() feature_ids = [feature.id() for feature in self.vlayer.getFeatures()] reference_ids = (1, 2, 3) assert self.vlayer.isValid() assert len(feature_ids) == len(reference_ids) assert tuple(feature_ids) == reference_ids assert tuple(sorted([x for x in self.vlayer.selectedFeatureIds() ])) == reference_ids assert tuple( sorted([x.id() for x in self.vlayer.getSelectedFeatures() ])) == reference_ids assert tuple( sorted([x.id() for x in self.vlayer.getFeatures(feature_ids) ])) == reference_ids @mock.patch('midvatten_utils.MessagebarAndLog') @mock.patch('stratigraphy.utils.pop_up_info', autospec=True) def test_vlayer_1000_features(self, mock_skippopup, mock_messagebar): """ :param mock_skippopup: :param mock_messagebar: :return: """ dbconnection = db_utils.DbConnectionManager() cur = dbconnection.cursor cur.execute('''BEGIN TRANSACTION;''') for obsid in range(1000): cur.execute( '''INSERT INTO obs_points (obsid) VALUES ('{}');'''.format( str(obsid))) cur.execute('''END TRANSACTION;''') self.create_vlayer(no_print=True) self.select_features(no_print=True) feature_ids = [feature.id() for feature in self.vlayer.getFeatures()] reference_ids = tuple(range(1, 1001)) print("First 10 ids: " + str(feature_ids[:10])) print("Last 10 ids: " + str(feature_ids[-10:])) print("First 10 reference_ids: " + str(reference_ids[:10])) print("Last 10 reference_ids: " + str(reference_ids[-10:])) assert self.vlayer.isValid() assert len(feature_ids) == len(reference_ids) assert tuple(feature_ids) == reference_ids assert tuple(sorted([x for x in self.vlayer.selectedFeatureIds() ])) == reference_ids assert tuple( sorted([x.id() for x in self.vlayer.getSelectedFeatures() ])) == reference_ids assert tuple( sorted([x.id() for x in self.vlayer.getFeatures(feature_ids) ])) == reference_ids @mock.patch('midvatten_utils.MessagebarAndLog') @mock.patch('stratigraphy.utils.pop_up_info', autospec=True) def test_vlayer_2000_ints(self, mock_skippopup, mock_messagebar): """ :param mock_skippopup: :param mock_messagebar: :return: """ dbconnection = db_utils.DbConnectionManager() cur = dbconnection.cursor cur.execute('''BEGIN TRANSACTION;''') for obsid in range(2000): cur.execute( '''INSERT INTO obs_points (obsid) VALUES ('{}');'''.format( str(obsid))) cur.execute('''END TRANSACTION;''') self.create_vlayer(no_print=True) self.select_features(no_print=True) feature_ids = [feature.id() for feature in self.vlayer.getFeatures()] reference_ids = tuple(range(1, 2001)) print("First 10 ids: " + str(feature_ids[:10])) print("Last 10 ids: " + str(feature_ids[-10:])) print("First 10 reference_ids: " + str(reference_ids[:10])) print("Last 10 reference_ids: " + str(reference_ids[-10:])) assert self.vlayer.isValid() assert len(feature_ids) == len(reference_ids) assert tuple(feature_ids) == reference_ids assert tuple(sorted([x for x in self.vlayer.selectedFeatureIds() ])) == reference_ids assert tuple( sorted([x.id() for x in self.vlayer.getSelectedFeatures() ])) == reference_ids assert tuple( sorted([x.id() for x in self.vlayer.getFeatures(feature_ids) ])) == reference_ids @mock.patch('midvatten_utils.MessagebarAndLog') @mock.patch('stratigraphy.utils.pop_up_info', autospec=True) def test_vlayer_2000_strings(self, mock_skippopup, mock_messagebar): """ :param mock_skippopup: :param mock_messagebar: :return: """ dbconnection = db_utils.DbConnectionManager() cur = dbconnection.cursor obsids = [ letter + str(_int) for letter in string.ascii_letters for _int in range(80) ] cur.execute('''BEGIN TRANSACTION;''') for obsid in obsids: cur.execute( '''INSERT INTO obs_points (obsid) VALUES ('{}');'''.format( str(obsid))) cur.execute('''END TRANSACTION;''') dbconnection.commit() self.create_vlayer(no_print=True) self.select_features(no_print=True) feature_ids = [feature.id() for feature in self.vlayer.getFeatures()] reference_ids = tuple(range(1, len(obsids) + 1)) print("First 10 ids: " + str(feature_ids[:10])) print("Last 10 ids: " + str(feature_ids[-10:])) print("First 10 reference_ids: " + str(reference_ids[:10])) print("Last 10 reference_ids: " + str(reference_ids[-10:])) print(str(self.vlayer.featureCount())) assert self.vlayer.isValid() assert len(feature_ids) == len(reference_ids) assert tuple(feature_ids) == reference_ids assert tuple(sorted([x for x in self.vlayer.selectedFeatureIds() ])) == reference_ids assert tuple( sorted([x.id() for x in self.vlayer.getSelectedFeatures() ])) == reference_ids assert tuple( sorted([x.id() for x in self.vlayer.getFeatures(feature_ids) ])) == reference_ids
class TestVectorlayer(utils_for_tests.MidvattenTestSpatialiteDbSv): @mock.patch('db_utils.QgsProject.instance', utils_for_tests.MidvattenTestSpatialiteNotCreated.mock_instance_settings_database) def create_vlayer(self, no_print=False): self.qgs = QgsApplication([], True) self.qgs.initQgis() dbconnection = db_utils.DbConnectionManager() uri = dbconnection.uri uri.setDataSource('', 'obs_points', 'geometry', '', 'obsid') dbtype = db_utils.get_dbtype(dbconnection.dbtype) self.vlayer = QgsVectorLayer(uri.uri(), 'TestLayer', dbtype) features = self.vlayer.getFeatures() feature_ids = [feature.id() for feature in features] if not no_print: print("1. Valid vlayer '{}'".format(self.vlayer.isValid())) print("2. feature_ids: " + str(feature_ids)) print("5. QgsVectorLayer.getFeature(): " + str([self.vlayer.getFeature(x).id() for x in feature_ids])) print("6. QgsVectorLayer.getFeature() type: " + str([str(type(self.vlayer.getFeature(x))) for x in feature_ids])) print("7. QgsVectorLayer.getFeatures(): " + str([x.id() for x in self.vlayer.getFeatures(feature_ids)])) print("8. QgsVectorLayer.featureCount(): " + str(self.vlayer.featureCount())) def select_features(self, feature_ids=None, no_print=True): if feature_ids is None: features = self.vlayer.getFeatures() feature_ids = [feature.id() for feature in features] self.vlayer.selectByIds(feature_ids) if not no_print: print("3. QgsVectorLayer.selectedFeatureIds: " + str(self.vlayer.selectedFeatureIds())) print("4. QgsVectorLayer.getSelectedFeatures: " + str([x.id() for x in self.vlayer.getSelectedFeatures()])) @mock.patch('midvatten_utils.MessagebarAndLog') @mock.patch('stratigraphy.utils.pop_up_info', autospec=True) @mock.patch('db_utils.QgsProject.instance', utils_for_tests.MidvattenTestSpatialiteNotCreated.mock_instance_settings_database) def test_vlayer(self, mock_skippopup, mock_messagebar): """ :param mock_skippopup: :param mock_messagebar: :return: """ for obsid in [1, 2, 3]: db_utils.sql_alter_db('''INSERT INTO obs_points (obsid) VALUES ({})'''.format(str(obsid))) self.create_vlayer() self.select_features() feature_ids = [feature.id() for feature in self.vlayer.getFeatures()] reference_ids = (1, 2, 3) assert self.vlayer.isValid() assert len(feature_ids) == len(reference_ids) assert tuple(feature_ids) == reference_ids assert tuple(sorted([x for x in self.vlayer.selectedFeatureIds()])) == reference_ids assert tuple(sorted([x.id() for x in self.vlayer.getSelectedFeatures()])) == reference_ids assert tuple(sorted([x.id() for x in self.vlayer.getFeatures(feature_ids)])) == reference_ids assert self.vlayer.featureCount() == 3 @mock.patch('midvatten_utils.MessagebarAndLog') @mock.patch('stratigraphy.utils.pop_up_info', autospec=True) @mock.patch('db_utils.QgsProject.instance', utils_for_tests.MidvattenTestSpatialiteNotCreated.mock_instance_settings_database) def test_vlayer_other_ints_ids(self, mock_skippopup, mock_messagebar): """ :param mock_skippopup: :param mock_messagebar: :return: """ for obsid in [4, 5, 6]: db_utils.sql_alter_db('''INSERT INTO obs_points (obsid) VALUES ({})'''.format(str(obsid))) self.create_vlayer() self.select_features() feature_ids = [feature.id() for feature in self.vlayer.getFeatures()] reference_ids = (1, 2, 3) assert self.vlayer.isValid() assert len(feature_ids) == len(reference_ids) assert tuple(feature_ids) == reference_ids assert tuple(sorted([x for x in self.vlayer.selectedFeatureIds()])) == reference_ids assert tuple(sorted([x.id() for x in self.vlayer.getSelectedFeatures()])) == reference_ids assert tuple(sorted([x.id() for x in self.vlayer.getFeatures(feature_ids)])) == reference_ids assert self.vlayer.featureCount() == 3 @mock.patch('midvatten_utils.MessagebarAndLog') @mock.patch('stratigraphy.utils.pop_up_info', autospec=True) @mock.patch('db_utils.QgsProject.instance', utils_for_tests.MidvattenTestSpatialiteNotCreated.mock_instance_settings_database) def test_vlayer_strings(self, mock_skippopup, mock_messagebar): """ :param mock_skippopup: :param mock_messagebar: :return: """ for obsid in ['A', 'b', 'c1']: db_utils.sql_alter_db('''INSERT INTO obs_points (obsid) VALUES ('{}')'''.format(str(obsid))) self.create_vlayer() self.select_features() feature_ids = [feature.id() for feature in self.vlayer.getFeatures()] reference_ids = (1, 2, 3) assert self.vlayer.isValid() assert len(feature_ids) == len(reference_ids) assert tuple(feature_ids) == reference_ids assert tuple(sorted([x for x in self.vlayer.selectedFeatureIds()])) == reference_ids assert tuple(sorted([x.id() for x in self.vlayer.getSelectedFeatures()])) == reference_ids assert tuple(sorted([x.id() for x in self.vlayer.getFeatures(feature_ids)])) == reference_ids assert self.vlayer.featureCount() == 3 @mock.patch('midvatten_utils.MessagebarAndLog') @mock.patch('stratigraphy.utils.pop_up_info', autospec=True) @mock.patch('db_utils.QgsProject.instance', utils_for_tests.MidvattenTestSpatialiteNotCreated.mock_instance_settings_database) def test_vlayer_1000_features(self, mock_skippopup, mock_messagebar): """ :param mock_skippopup: :param mock_messagebar: :return: """ dbconnection = db_utils.DbConnectionManager() cur = dbconnection.cursor cur.execute('''BEGIN TRANSACTION;''') for obsid in range(1000): cur.execute('''INSERT INTO obs_points (obsid) VALUES ('{}');'''.format(str(obsid))) cur.execute('''END TRANSACTION;''') self.create_vlayer(no_print=True) self.select_features(no_print=True) feature_ids = [feature.id() for feature in self.vlayer.getFeatures()] reference_ids = tuple(range(1, 1001)) print("First 10 ids: " + str(feature_ids[:10])) print("Last 10 ids: " + str(feature_ids[-10:])) print("First 10 reference_ids: " + str(reference_ids[:10])) print("Last 10 reference_ids: " + str(reference_ids[-10:])) assert self.vlayer.isValid() assert len(feature_ids) == len(reference_ids) assert tuple(feature_ids) == reference_ids assert tuple(sorted([x for x in self.vlayer.selectedFeatureIds()])) == reference_ids assert tuple(sorted([x.id() for x in self.vlayer.getSelectedFeatures()])) == reference_ids assert tuple(sorted([x.id() for x in self.vlayer.getFeatures(feature_ids)])) == reference_ids assert self.vlayer.featureCount() == len(reference_ids) @mock.patch('midvatten_utils.MessagebarAndLog') @mock.patch('stratigraphy.utils.pop_up_info', autospec=True) @mock.patch('db_utils.QgsProject.instance', utils_for_tests.MidvattenTestSpatialiteNotCreated.mock_instance_settings_database) def test_vlayer_2000_ints(self, mock_skippopup, mock_messagebar): """ :param mock_skippopup: :param mock_messagebar: :return: """ dbconnection = db_utils.DbConnectionManager() cur = dbconnection.cursor cur.execute('''BEGIN TRANSACTION;''') for obsid in range(2000): cur.execute('''INSERT INTO obs_points (obsid) VALUES ('{}');'''.format(str(obsid))) cur.execute('''END TRANSACTION;''') self.create_vlayer(no_print=True) self.select_features(no_print=True) feature_ids = [feature.id() for feature in self.vlayer.getFeatures()] reference_ids = tuple(range(1, 2001)) print("First 10 ids: " + str(feature_ids[:10])) print("Last 10 ids: " + str(feature_ids[-10:])) print("First 10 reference_ids: " + str(reference_ids[:10])) print("Last 10 reference_ids: " + str(reference_ids[-10:])) assert self.vlayer.isValid() assert len(feature_ids) == len(reference_ids) assert tuple(feature_ids) == reference_ids assert tuple(sorted([x for x in self.vlayer.selectedFeatureIds()])) == reference_ids assert tuple(sorted([x.id() for x in self.vlayer.getSelectedFeatures()])) == reference_ids assert tuple(sorted([x.id() for x in self.vlayer.getFeatures(feature_ids)])) == reference_ids assert self.vlayer.featureCount() == len(reference_ids) @mock.patch('midvatten_utils.MessagebarAndLog') @mock.patch('stratigraphy.utils.pop_up_info', autospec=True) @mock.patch('db_utils.QgsProject.instance', utils_for_tests.MidvattenTestSpatialiteNotCreated.mock_instance_settings_database) def test_vlayer_2000_strings(self, mock_skippopup, mock_messagebar): """ :param mock_skippopup: :param mock_messagebar: :return: """ dbconnection = db_utils.DbConnectionManager() cur = dbconnection.cursor obsids = [letter + str(_int) for letter in string.ascii_letters for _int in range(80)] cur.execute('''BEGIN TRANSACTION;''') for obsid in obsids: cur.execute('''INSERT INTO obs_points (obsid) VALUES ('{}');'''.format(str(obsid))) cur.execute('''END TRANSACTION;''') dbconnection.commit() self.create_vlayer(no_print=True) self.select_features(no_print=True) feature_ids = [feature.id() for feature in self.vlayer.getFeatures()] reference_ids = tuple(range(1, len(obsids)+1)) print("First 10 ids: " + str(feature_ids[:10])) print("Last 10 ids: " + str(feature_ids[-10:])) print("First 10 reference_ids: " + str(reference_ids[:10])) print("Last 10 reference_ids: " + str(reference_ids[-10:])) print(str(self.vlayer.featureCount())) assert self.vlayer.isValid() assert len(feature_ids) == len(reference_ids) assert tuple(feature_ids) == reference_ids assert tuple(sorted([x for x in self.vlayer.selectedFeatureIds()])) == reference_ids assert tuple(sorted([x.id() for x in self.vlayer.getSelectedFeatures()])) == reference_ids assert tuple(sorted([x.id() for x in self.vlayer.getFeatures(feature_ids)])) == reference_ids assert self.vlayer.featureCount() == len(reference_ids) def tearDown(self): QgsProject.instance().addMapLayer(self.vlayer) QgsProject.instance().removeMapLayer(self.vlayer.id()) super(self.__class__, self).tearDown()
class TestStratigraphy(utils_for_tests.MidvattenTestPostgisDbSv): @mock.patch('db_utils.QgsProject.instance', utils_for_tests.MidvattenTestPostgisNotCreated.mock_instance_settings_database) @mock.patch('db_utils.get_postgis_connections', utils_for_tests.MidvattenTestPostgisNotCreated.mock_postgis_connections) def create_and_select_vlayer(self): self.qgs = QgsApplication([], True) self.qgs.initQgis() self.midvatten.ms.settingsdict['secplotdrillstop'] = "%berg%" dbconnection = db_utils.DbConnectionManager() uri = dbconnection.uri uri.setDataSource('', 'obs_points', 'geometry', '', 'obsid') dbtype = db_utils.get_dbtype(dbconnection.dbtype) self.vlayer = QgsVectorLayer(uri.uri(), 'TestLayer', dbtype) features = self.vlayer.getFeatures() feature_ids = [feature.id() for feature in features] self.vlayer.selectByIds(feature_ids) print("1. Valid vlayer '{}'".format(self.vlayer.isValid())) print("2. feature_ids: " + str(feature_ids)) print("3. QgsVectorLayer.selectedFeatureIds: " + str(self.vlayer.selectedFeatureIds())) print("4. QgsVectorLayer.getSelectedFeatures: " + str([x.id() for x in self.vlayer.getSelectedFeatures()])) print("5. QgsVectorLayer.getFeature(): " + str([self.vlayer.getFeature(x).id() for x in feature_ids])) print("6. QgsVectorLayer.getFeature() type: " + str([str(type(self.vlayer.getFeature(x))) for x in feature_ids])) print("7. QgsVectorLayer.getFeatures(): " + str([x.id() for x in self.vlayer.getFeatures(feature_ids)])) @mock.patch('midvatten_utils.MessagebarAndLog') @mock.patch('stratigraphy.utils.pop_up_info', autospec=True) @mock.patch('db_utils.QgsProject.instance', utils_for_tests.MidvattenTestPostgisNotCreated.mock_instance_settings_database) @mock.patch('db_utils.get_postgis_connections', utils_for_tests.MidvattenTestPostgisNotCreated.mock_postgis_connections) def test_stratigraphy(self, mock_skippopup, mock_messagebar): """ :param mock_skippopup: :param mock_messagebar: :return: """ db_utils.sql_alter_db('''INSERT INTO obs_points (obsid, h_gs, geometry) VALUES ('1', 5, ST_GeomFromText('POINT(633466 711659)', 3006))''') db_utils.sql_alter_db('''INSERT INTO obs_points (obsid, h_gs, geometry) VALUES ('2', 10, ST_GeomFromText('POINT(6720727 016568)', 3006))''') db_utils.sql_alter_db('''INSERT INTO obs_points (obsid, h_gs, geometry) VALUES ('3', 20, ST_GeomFromText('POINT(6720728 016569)', 3006))''') db_utils.sql_alter_db('''INSERT INTO stratigraphy (obsid, stratid, depthtop, depthbot, geology, geoshort, capacity, development) VALUES ('1', 1, 0, 1, 'sand', 'sand', '3', 'j')''') db_utils.sql_alter_db('''INSERT INTO stratigraphy (obsid, stratid, depthtop, depthbot, geology, geoshort, capacity, development) VALUES ('1', 2, 1, 4.5, 'morän', 'morän', '3', 'j')''') self.create_and_select_vlayer() #print(str(self.vlayer.isValid())) #print(str(db_utils.sql_load_fr_db('select * from obs_points'))) #print(str(db_utils.sql_load_fr_db('select * from stratigraphy'))) dlg = Stratigraphy(self.iface, self.vlayer, self.ms.settingsdict) #print(str(mock_messagebar.mock_calls)) #print(str(mock_skippopup.mock_calls)) dlg.showSurvey() test = utils.anything_to_string_representation(dlg.data) test_survey = utils.anything_to_string_representation(repr(dlg.data['1'])) test_strata = utils.anything_to_string_representation(utils.returnunicode(dlg.data['1'].strata, keep_containers=True)) assert len(mock_skippopup.mock_calls) == 0 print(str(mock_messagebar.mock_calls)) assert len(mock_messagebar.mock_calls) == 0 assert test == """{"1": SURVEY('1', 5.000000, '<QgsPointXY: POINT(633466 711659)>')}""" assert test_survey == '''"SURVEY('1', 5.000000, '<QgsPointXY: POINT(633466 711659)>')"''' print("test_strata: " + test_strata) assert test_strata == '''["strata(1, '3', 'sand', 'sand', 0.000000-1.000000)", "strata(2, '3', 'morän', 'moran', 1.000000-4.500000)"]''' @mock.patch('midvatten_utils.MessagebarAndLog') @mock.patch('stratigraphy.utils.pop_up_info', autospec=True) @mock.patch('db_utils.QgsProject.instance', utils_for_tests.MidvattenTestPostgisNotCreated.mock_instance_settings_database) @mock.patch('db_utils.get_postgis_connections', utils_for_tests.MidvattenTestPostgisNotCreated.mock_postgis_connections) def test_stratigraphy_with_other_obsid_numbers(self, mock_skippopup, mock_messagebar): """ :param mock_skippopup: :param mock_messagebar: :return: """ db_utils.sql_alter_db('''INSERT INTO obs_points (obsid, h_gs, geometry) VALUES ('8', 5, ST_GeomFromText('POINT(633466 711659)', 3006))''') db_utils.sql_alter_db('''INSERT INTO obs_points (obsid, h_gs, geometry) VALUES ('9', 10, ST_GeomFromText('POINT(6720727 016568)', 3006))''') db_utils.sql_alter_db('''INSERT INTO obs_points (obsid, h_gs, geometry) VALUES ('10', 20, ST_GeomFromText('POINT(6720728 016569)', 3006))''') db_utils.sql_alter_db('''INSERT INTO stratigraphy (obsid, stratid, depthtop, depthbot, geology, geoshort, capacity, development) VALUES ('8', 1, 0, 1, 'sand', 'sand', '3', 'j')''') db_utils.sql_alter_db('''INSERT INTO stratigraphy (obsid, stratid, depthtop, depthbot, geology, geoshort, capacity, development) VALUES ('8', 2, 1, 4.5, 'morän', 'morän', '3', 'j')''') self.create_and_select_vlayer() dlg = Stratigraphy(self.iface, self.vlayer, self.ms.settingsdict) dlg.showSurvey() print(str(mock_skippopup.mock_calls)) test = utils.anything_to_string_representation(dlg.data) test_survey = utils.anything_to_string_representation(repr(dlg.data['8'])) test_strata = utils.anything_to_string_representation( utils.returnunicode(dlg.data['8'].strata, keep_containers=True)) assert len(mock_skippopup.mock_calls) == 0 assert len(mock_messagebar.mock_calls) == 0 assert test == """{"8": SURVEY('8', 5.000000, '<QgsPointXY: POINT(633466 711659)>')}""" assert test_survey == '''"SURVEY('8', 5.000000, '<QgsPointXY: POINT(633466 711659)>')"''' print("Test strata " + test_strata) assert test_strata == '''["strata(1, '3', 'sand', 'sand', 0.000000-1.000000)", "strata(2, '3', 'morän', 'moran', 1.000000-4.500000)"]''' @mock.patch('midvatten_utils.MessagebarAndLog') @mock.patch('stratigraphy.utils.pop_up_info', autospec=True) @mock.patch('db_utils.QgsProject.instance', utils_for_tests.MidvattenTestPostgisNotCreated.mock_instance_settings_database) @mock.patch('db_utils.get_postgis_connections', utils_for_tests.MidvattenTestPostgisNotCreated.mock_postgis_connections) def test_stratigraphy_with_string_obsid(self, mock_skippopup, mock_messagebar): """ :param mock_skippopup: :param mock_messagebar: :return: """ db_utils.sql_alter_db('''INSERT INTO obs_points (obsid, h_gs, geometry) VALUES ('P1', 5, ST_GeomFromText('POINT(633466 711659)', 3006))''') db_utils.sql_alter_db('''INSERT INTO obs_points (obsid, h_gs, geometry) VALUES ('P2', 10, ST_GeomFromText('POINT(6720727 016568)', 3006))''') db_utils.sql_alter_db('''INSERT INTO obs_points (obsid, h_gs, geometry) VALUES ('P3', 20, ST_GeomFromText('POINT(6720728 016569)', 3006))''') db_utils.sql_alter_db('''INSERT INTO stratigraphy (obsid, stratid, depthtop, depthbot, geology, geoshort, capacity, development) VALUES ('P1', 1, 0, 1, 'sand', 'sand', '3', 'j')''') db_utils.sql_alter_db('''INSERT INTO stratigraphy (obsid, stratid, depthtop, depthbot, geology, geoshort, capacity, development) VALUES ('P1', 2, 1, 4.5, 'morän', 'morän', '3', 'j')''') self.create_and_select_vlayer() print(str(self.vlayer.isValid())) print(str(db_utils.sql_load_fr_db('select * from obs_points'))) print(str(db_utils.sql_load_fr_db('select * from stratigraphy'))) dlg = Stratigraphy(self.iface, self.vlayer, self.ms.settingsdict) print(str(mock_messagebar.mock_calls)) print(str(mock_skippopup.mock_calls)) dlg.showSurvey() test = utils.anything_to_string_representation(dlg.data) test_survey = utils.anything_to_string_representation(repr(dlg.data['P1'])) test_strata = utils.anything_to_string_representation(utils.returnunicode(dlg.data['P1'].strata, keep_containers=True)) assert len(mock_skippopup.mock_calls) == 0 print(str(mock_messagebar.mock_calls)) assert len(mock_messagebar.mock_calls) == 0 assert test == """{"P1": SURVEY('P1', 5.000000, '<QgsPointXY: POINT(633466 711659)>')}""" assert test_survey == '''"SURVEY('P1', 5.000000, '<QgsPointXY: POINT(633466 711659)>')"''' assert test_strata == '''["strata(1, '3', 'sand', 'sand', 0.000000-1.000000)", "strata(2, '3', 'morän', 'moran', 1.000000-4.500000)"]''' @mock.patch('midvatten_utils.MessagebarAndLog') @mock.patch('stratigraphy.utils.pop_up_info', autospec=True) @mock.patch('db_utils.QgsProject.instance', utils_for_tests.MidvattenTestPostgisNotCreated.mock_instance_settings_database) @mock.patch('db_utils.get_postgis_connections', utils_for_tests.MidvattenTestPostgisNotCreated.mock_postgis_connections) def test_stratigraphy_gap(self, mock_skippopup, mock_messagebar): """ :param mock_skippopup: :param mock_messagebar: :return: """ db_utils.sql_alter_db('''INSERT INTO obs_points (obsid, h_gs, geometry) VALUES ('1', 5, ST_GeomFromText('POINT(633466 711659)', 3006))''') db_utils.sql_alter_db('''INSERT INTO obs_points (obsid, h_gs, geometry) VALUES ('2', 10, ST_GeomFromText('POINT(6720727 016568)', 3006))''') db_utils.sql_alter_db('''INSERT INTO obs_points (obsid, h_gs, geometry) VALUES ('3', 20, ST_GeomFromText('POINT(6720728 016569)', 3006))''') db_utils.sql_alter_db('''INSERT INTO stratigraphy (obsid, stratid, depthtop, depthbot, geology, geoshort, capacity, development) VALUES ('1', 1, 0, 1, 'sand', 'sand', '3', 'j')''') db_utils.sql_alter_db('''INSERT INTO stratigraphy (obsid, stratid, depthtop, depthbot, geology, geoshort, capacity, development) VALUES ('1', 2, 2, 4.5, 'morän', 'morän', '3', 'j')''') self.create_and_select_vlayer() print(str(self.vlayer.isValid())) print(str(db_utils.sql_load_fr_db('select * from obs_points'))) print(str(db_utils.sql_load_fr_db('select * from stratigraphy'))) dlg = Stratigraphy(self.iface, self.vlayer, self.ms.settingsdict) print(str(mock_messagebar.mock_calls)) print(str(mock_skippopup.mock_calls)) dlg.showSurvey() test = utils.anything_to_string_representation(dlg.data) test_survey = utils.anything_to_string_representation(repr(dlg.data['1'])) test_strata = utils.anything_to_string_representation(utils.returnunicode(dlg.data['1'].strata, keep_containers=True)) assert len(mock_skippopup.mock_calls) == 0 assert len(mock_messagebar.mock_calls) == 0 assert test == """{"1": SURVEY('1', 5.000000, '<QgsPointXY: POINT(633466 711659)>')}""" assert test_survey == '''"SURVEY('1', 5.000000, '<QgsPointXY: POINT(633466 711659)>')"''' assert test_strata == '''["strata(1, '3', 'sand', 'sand', 0.000000-1.000000)", "strata(2, '', '', '', 1.000000-2.000000)", "strata(3, '3', 'morän', 'moran', 2.000000-4.500000)"]''' @mock.patch('midvatten_utils.MessagebarAndLog') @mock.patch('stratigraphy.utils.pop_up_info', autospec=True) @mock.patch('db_utils.QgsProject.instance', utils_for_tests.MidvattenTestPostgisNotCreated.mock_instance_settings_database) @mock.patch('db_utils.get_postgis_connections', utils_for_tests.MidvattenTestPostgisNotCreated.mock_postgis_connections) def test_stratigraphy_missing_h_gs(self, mock_skippopup, mock_messagebar): """ :param mock_skippopup: :param mock_messagebar: :return: """ db_utils.sql_alter_db('''INSERT INTO obs_points (obsid, h_gs, geometry) VALUES ('1', 5, ST_GeomFromText('POINT(633466 711659)', 3006))''') db_utils.sql_alter_db('''INSERT INTO obs_points (obsid, h_gs, h_toc, geometry) VALUES ('2', NULL, 10, ST_GeomFromText('POINT(6720727 016568)', 3006))''') db_utils.sql_alter_db('''INSERT INTO obs_points (obsid, geometry) VALUES ('3', ST_GeomFromText('POINT(6720728 016569)', 3006))''') db_utils.sql_alter_db('''INSERT INTO stratigraphy (obsid, stratid, depthtop, depthbot, geology, geoshort, capacity, development) VALUES ('1', 1, 0, 1, 'sand', 'sand', '3', 'j')''') db_utils.sql_alter_db('''INSERT INTO stratigraphy (obsid, stratid, depthtop, depthbot, geology, geoshort, capacity, development) VALUES ('1', 2, 1, 4.5, 'morän', 'morän', '3', 'j')''') db_utils.sql_alter_db('''INSERT INTO stratigraphy (obsid, stratid, depthtop, depthbot, geology, geoshort, capacity, development) VALUES ('2', 1, 0, 1, 'sand', 'sand', '3', 'j')''') db_utils.sql_alter_db('''INSERT INTO stratigraphy (obsid, stratid, depthtop, depthbot, geology, geoshort, capacity, development) VALUES ('2', 2, 1, 4.5, 'morän', 'morän', '3', 'j')''') db_utils.sql_alter_db('''INSERT INTO stratigraphy (obsid, stratid, depthtop, depthbot, geology, geoshort, capacity, development) VALUES ('3', 1, 0, 2, 'sand', 'sand', '3', 'j')''') db_utils.sql_alter_db('''INSERT INTO stratigraphy (obsid, stratid, depthtop, depthbot, geology, geoshort, capacity, development) VALUES ('3', 2, 2, 6, 'morän', 'morän', '3', 'j')''') self.create_and_select_vlayer() dlg = Stratigraphy(self.iface, self.vlayer, self.ms.settingsdict) dlg.showSurvey() test = utils.anything_to_string_representation(dlg.data) test_survey = utils.anything_to_string_representation(repr(dlg.data['1'])) test_strata = utils.anything_to_string_representation(utils.returnunicode(dlg.data['1'].strata, keep_containers=True)) assert len(mock_skippopup.mock_calls) == 1 print(str(mock_skippopup.mock_calls)) print(str(mock_messagebar.mock_calls)) assert mock_skippopup.mock_calls == [mock.call('Warning, h_gs is missing. See messagebar.')] assert mock_messagebar.mock_calls == [mock.call.warning(bar_msg="Obsid 2: using h_gs '' failed, using 'h_toc' instead.", duration=90, log_msg='False'), mock.call.warning(bar_msg="Obsid 3: using h_gs '' failed, using '-1' instead.", duration=90, log_msg='False')] print("test: " + test) assert test == """{"1": SURVEY('1', 5.000000, '<QgsPointXY: POINT(633466 711659)>'), "2": SURVEY('2', 10.000000, '<QgsPointXY: POINT(6720727 16568)>'), "3": SURVEY('3', -1.000000, '<QgsPointXY: POINT(6720728 16569)>')}""" print("test_survey " + test_survey) assert test_survey == '''"SURVEY('1', 5.000000, '<QgsPointXY: POINT(633466 711659)>')"''' print("Test strata " + test_strata) assert test_strata == '''["strata(1, '3', 'sand', 'sand', 0.000000-1.000000)", "strata(2, '3', 'morän', 'moran', 1.000000-4.500000)"]''' def tearDown(self): QgsProject.instance().addMapLayer(self.vlayer) QgsProject.instance().removeMapLayer(self.vlayer.id()) super(self.__class__, self).tearDown()