def test_wlvllogg_import_from_diveroffice_files_cancel(self): files = [('Location=rb2', 'Date/time,Water head[cm],Temperature[°C]', '2016/03/15 10:30:00,1,10', '2016/03/15 11:00:00,11,101')] db_utils.sql_alter_db( '''INSERT INTO obs_points (obsid) VALUES ('Rb1')''') DiverofficeImport.charsetchoosen = 'utf-8' with utils.tempinput('\n'.join(files[0]), DiverofficeImport.charsetchoosen) as f1: filenames = [f1] utils_askuser_answer_no_obj = MockUsingReturnValue(None) utils_askuser_answer_no_obj.result = 0 utils_askuser_answer_no = MockUsingReturnValue( utils_askuser_answer_no_obj) @mock.patch('import_data_to_db.utils.NotFoundQuestion') @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) @mock.patch('import_data_to_db.utils.Askuser') @mock.patch('qgis.utils.iface', autospec=True) @mock.patch('qgis.PyQt.QtWidgets.QInputDialog.getText') @mock.patch('import_data_to_db.utils.pop_up_info', autospec=True) @mock.patch('import_data_to_db.utils.select_files') def _test_wlvllogg_import_from_diveroffice_files( self, filenames, mock_filenames, mock_skippopup, mock_encoding, mock_iface, mock_askuser, mock_notfoundquestion): mock_notfoundquestion.return_value.answer = 'cancel' mock_notfoundquestion.return_value.value = 'rb1' mock_notfoundquestion.return_value.reuse_column = 'location' mock_filenames.return_value = filenames mock_encoding.return_value = ['utf-8'] ms = MagicMock() ms.settingsdict = OrderedDict() importer = DiverofficeImport(self.iface.mainWindow(), ms) importer.select_files_and_load_gui() importer.import_all_data.checked = True importer.confirm_names.checked = False answer = importer.start_import( importer.files, importer.skip_rows.checked, importer.confirm_names.checked, importer.import_all_data.checked) return answer answer = _test_wlvllogg_import_from_diveroffice_files( self, filenames) test_string = utils_for_tests.create_test_string( db_utils.sql_load_fr_db( '''SELECT obsid, date_time, head_cm, temp_degc, cond_mscm, level_masl, comment FROM w_levels_logger''' )) reference_string = r'''(True, [])''' assert test_string == reference_string
def test_wlvllogg_import_from_diveroffice_files(self): files = [('Location=rb1', 'Date/time,Water head[cm],Temperature[°C]', '2016/03/15 10:30:00,1,10', '2016/03/15 11:00:00,11,101'), ('Location=rb2', 'Date/time,Water head[cm],Temperature[°C]', '2016/04/15 10:30:00,2,20', '2016/04/15 11:00:00,21,201'), ('Location=rb3', 'Date/time,Water head[cm],Temperature[°C],Conductivity[mS/cm]', '2016/05/15 10:30:00,3,30,5', '2016/05/15 11:00:00,31,301,6') ] db_utils.sql_alter_db('''INSERT INTO obs_points (obsid) VALUES ('rb1')''') DiverofficeImport.charsetchoosen = 'utf-8' with utils.tempinput('\n'.join(files[0]), DiverofficeImport.charsetchoosen) as f1: with utils.tempinput('\n'.join(files[1]), DiverofficeImport.charsetchoosen) as f2: with utils.tempinput('\n'.join(files[2]), DiverofficeImport.charsetchoosen) as f3: filenames = [f1, f2, f3] utils_askuser_answer_no_obj = MockUsingReturnValue(None) utils_askuser_answer_no_obj.result = 0 utils_askuser_answer_no = MockUsingReturnValue(utils_askuser_answer_no_obj) @mock.patch('import_data_to_db.utils.NotFoundQuestion') @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) @mock.patch('import_data_to_db.utils.Askuser') @mock.patch('qgis.utils.iface', autospec=True) @mock.patch('qgis.PyQt.QtWidgets.QInputDialog.getText') @mock.patch('import_data_to_db.utils.pop_up_info', autospec=True) @mock.patch('import_data_to_db.utils.select_files') def _test_wlvllogg_import_from_diveroffice_files(self, filenames, mock_filenames, mock_skippopup, mock_encoding, mock_iface, mock_askuser, mock_notfoundquestion): mock_notfoundquestion.return_value.answer = 'ok' mock_notfoundquestion.return_value.value = 'rb1' mock_notfoundquestion.return_value.reuse_column = 'location' mock_filenames.return_value = filenames mock_encoding.return_value = ['utf-8'] ms = MagicMock() ms.settingsdict = OrderedDict() importer = DiverofficeImport(self.iface.mainWindow(), ms) importer.select_files_and_load_gui() importer.start_import(importer.files, importer.skip_rows.checked, importer.confirm_names.checked, importer.import_all_data.checked) _test_wlvllogg_import_from_diveroffice_files(self, filenames) test_string = utils_for_tests.create_test_string(db_utils.sql_load_fr_db('''SELECT obsid, date_time, head_cm, temp_degc, cond_mscm, level_masl, comment FROM w_levels_logger''')) reference_string = r'''(True, [(rb1, 2016-03-15 10:30:00, 1.0, 10.0, None, None, None), (rb1, 2016-03-15 11:00:00, 11.0, 101.0, None, None, None), (rb1, 2016-04-15 10:30:00, 2.0, 20.0, None, None, None), (rb1, 2016-04-15 11:00:00, 21.0, 201.0, None, None, None), (rb1, 2016-05-15 10:30:00, 3.0, 30.0, 5.0, None, None), (rb1, 2016-05-15 11:00:00, 31.0, 301.0, 6.0, None, None)])''' assert test_string == reference_string
def test_wlvllogg_import_from_diveroffice_files_skip_obsid(self): files = [ ('Location=rb1', 'Date/time,Water head[cm],Temperature[°C]', '2016/03/15 10:30:00,1,10', '2016/03/15 11:00:00,11,101'), ('Location=rb2', 'Date/time,Water head[cm],Temperature[°C]', '2016/04/15 10:30:00,2,20', '2016/04/15 11:00:00,21,201'), ('Location=rb3', 'Date/time,Water head[cm],Temperature[°C],Conductivity[mS/cm]', '2016/05/15 10:30:00,3,30,5', '2016/05/15 11:00:00,31,301,6') ] db_utils.sql_alter_db( '''INSERT INTO obs_points (obsid) VALUES ('rb1')''') db_utils.sql_alter_db( '''INSERT INTO obs_points (obsid) VALUES ('rb2')''') DiverofficeImport.charsetchoosen = 'utf-8' with utils.tempinput('\n'.join(files[0]), DiverofficeImport.charsetchoosen) as f1: with utils.tempinput('\n'.join(files[1]), DiverofficeImport.charsetchoosen) as f2: with utils.tempinput('\n'.join(files[2]), DiverofficeImport.charsetchoosen) as f3: filenames = [f1, f2, f3] utils_askuser_answer_no_obj = MockUsingReturnValue(None) utils_askuser_answer_no_obj.result = 0 utils_askuser_answer_no = MockUsingReturnValue( utils_askuser_answer_no_obj) @mock.patch("midvatten_utils.MessagebarAndLog") @mock.patch('import_data_to_db.utils.NotFoundQuestion') @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) @mock.patch('import_data_to_db.utils.Askuser') @mock.patch('qgis.utils.iface', autospec=True) @mock.patch('qgis.PyQt.QtWidgets.QInputDialog.getText') @mock.patch('import_data_to_db.utils.pop_up_info', autospec=True) @mock.patch('import_data_to_db.utils.select_files') def _test_wlvllogg_import_from_diveroffice_files( self, filenames, mock_filenames, mock_skippopup, mock_encoding, mock_iface, mock_askuser, mock_notfoundquestion, mock_messagebarandlog): mocks_notfoundquestion = [] for answer, value in [['ok', 'rb1'], ['ok', 'rb2'], ['skip', 'rb3']]: a_mock = MagicMock() a_mock.answer = answer a_mock.value = value a_mock.reuse_column = 'location' mocks_notfoundquestion.append(a_mock) mock_notfoundquestion.side_effect = mocks_notfoundquestion mock_filenames.return_value = filenames mock_encoding.return_value = ['utf-8'] ms = MagicMock() ms.settingsdict = OrderedDict() importer = DiverofficeImport(self.iface.mainWindow(), ms) importer.select_files_and_load_gui() importer.start_import(importer.files, importer.skip_rows.checked, importer.confirm_names.checked, importer.import_all_data.checked) print('\n'.join([ str(x) for x in mock_messagebarandlog.mock_calls ])) _test_wlvllogg_import_from_diveroffice_files( self, filenames) test_string = utils_for_tests.create_test_string( db_utils.sql_load_fr_db( '''SELECT obsid, date_time, head_cm, temp_degc, cond_mscm, level_masl, comment FROM w_levels_logger''' )) reference_string = r'''(True, [(rb1, 2016-03-15 10:30:00, 1.0, 10.0, None, None, None), (rb1, 2016-03-15 11:00:00, 11.0, 101.0, None, None, None), (rb2, 2016-04-15 10:30:00, 2.0, 20.0, None, None, None), (rb2, 2016-04-15 11:00:00, 21.0, 201.0, None, None, None)])''' print(test_string) print(reference_string) assert test_string == reference_string
def test_import_w_levels(self): file = [u'obsid,date_time,meas', u'rb1,2016-03-15 10:30:00,5.0'] utils.sql_alter_db(u'''INSERT INTO obs_points ("obsid") VALUES ("rb1")''') with utils.tempinput(u'\n'.join(file), u'utf-8') as filename: utils_askuser_answer_no_obj = MockUsingReturnValue(None) utils_askuser_answer_no_obj.result = 0 utils_askuser_answer_no = MockUsingReturnValue(utils_askuser_answer_no_obj) @mock.patch('midvatten_utils.QgsProject.instance', MOCK_DBPATH.get_v) @mock.patch('import_data_to_db.utils.askuser') @mock.patch('qgis.utils.iface', autospec=True) @mock.patch('PyQt4.QtGui.QInputDialog.getText') @mock.patch('import_data_to_db.utils.pop_up_info', autospec=True) @mock.patch.object(PyQt4.QtGui.QFileDialog, 'getOpenFileName') def _test(self, filename, mock_filename, mock_skippopup, mock_encoding, mock_iface, mock_askuser): mock_filename.return_value = filename mock_encoding.return_value = [u'utf-8', True] def side_effect(*args, **kwargs): mock_result = mock.MagicMock() if u'msg' in kwargs: if kwargs[u'msg'].startswith(u'Does the file contain a header?'): mock_result.result = 1 return mock_result if len(args) > 1: if args[1].startswith(u'Do you want to confirm'): mock_result.result = 0 return mock_result #mock_askuser.return_value.result.return_value = 0 elif args[1].startswith(u'Do you want to import all'): mock_result.result = 0 return mock_result elif args[1].startswith(u'Please note!\nForeign keys'): mock_result.result = 1 return mock_result elif args[1].startswith(u'Please note!\nThere are'): mock_result.result = 1 return mock_result elif args[1].startswith(u'It is a strong recommendation'): mock_result.result = 0 return mock_result mock_askuser.side_effect = side_effect ms = MagicMock() ms.settingsdict = OrderedDict() importer = GeneralCsvImportGui(self.iface.mainWindow(), ms) importer.load_gui() importer.load_files() importer.table_chooser.import_method = u'w_levels' for column in importer.table_chooser.columns: names = {u'obsid': u'obsid', u'date_time': u'date_time', u'meas': u'meas'} if column.db_column in names: column.file_column_name = names[column.db_column] importer.start_import() _test(self, filename) test_string = utils_for_tests.create_test_string(utils.sql_load_fr_db(u'''select obsid, date_time, meas, h_toc, level_masl, comment from w_levels''')) reference_string = ur'''(True, [(rb1, 2016-03-15 10:30:00, 5.0, None, None, None)])''' assert test_string == reference_string
def test_import_w_levels_many_rows(self): file = [u'obsid,date_time,meas'] base = datestring_to_date(u'1900-01-01 00:01:01') date_list = [base + datetime.timedelta(days=x) for x in range(0, 10000)] file.extend([u'rb1,' + datetime.datetime.strftime(adate, u'%Y%M%D %H%m') + u',0.5' for adate in date_list]) utils.sql_alter_db(u'''INSERT INTO obs_points ("obsid") VALUES ("rb1")''') with utils.tempinput(u'\n'.join(file), u'utf-8') as filename: utils_askuser_answer_no_obj = MockUsingReturnValue(None) utils_askuser_answer_no_obj.result = 0 utils_askuser_answer_no = MockUsingReturnValue(utils_askuser_answer_no_obj) @mock.patch('midvatten_utils.QgsProject.instance', MOCK_DBPATH.get_v) @mock.patch('import_data_to_db.utils.askuser') @mock.patch('qgis.utils.iface', autospec=True) @mock.patch('PyQt4.QtGui.QInputDialog.getText') @mock.patch('import_data_to_db.utils.pop_up_info', autospec=True) @mock.patch.object(PyQt4.QtGui.QFileDialog, 'getOpenFileName') def _test(self, filename, mock_filename, mock_skippopup, mock_encoding, mock_iface, mock_askuser): mock_filename.return_value = filename mock_encoding.return_value = [u'utf-8', True] def side_effect(*args, **kwargs): mock_result = mock.MagicMock() if u'msg' in kwargs: if kwargs[u'msg'].startswith(u'Does the file contain a header?'): mock_result.result = 1 return mock_result if len(args) > 1: if args[1].startswith(u'Do you want to confirm'): mock_result.result = 0 return mock_result #mock_askuser.return_value.result.return_value = 0 elif args[1].startswith(u'Do you want to import all'): mock_result.result = 0 return mock_result elif args[1].startswith(u'Please note!\nForeign keys'): mock_result.result = 1 return mock_result elif args[1].startswith(u'Please note!\nThere are'): mock_result.result = 1 return mock_result elif args[1].startswith(u'It is a strong recommendation'): mock_result.result = 0 return mock_result mock_askuser.side_effect = side_effect ms = MagicMock() ms.settingsdict = OrderedDict() importer = GeneralCsvImportGui(self.iface.mainWindow(), ms) importer.load_gui() importer.load_files() importer.table_chooser.import_method = u'w_levels' for column in importer.table_chooser.columns: names = {u'obsid': u'obsid', u'date_time': u'date_time', u'meas': u'meas'} if column.db_column in names: column.file_column_name = names[column.db_column] import_time = timeit.timeit(importer.start_import, number=1) return import_time import_time = _test(self, filename) test_string = utils_for_tests.create_test_string(utils.sql_load_fr_db(u'''select count(*) from w_levels''')) reference_string = ur'''(True, [(10000)])''' assert import_time < 10 assert test_string == reference_string
def test_import_vlf_data_obsid_not_in_db(self): file = [u'obsid,length2,real_comp,imag_comp,comment', u'obsid2,500,2,10,acomment'] utils.sql_alter_db(u'INSERT INTO obs_lines ("obsid") VALUES ("obsid1")') with utils.tempinput(u'\n'.join(file), u'utf-8') as filename: utils_askuser_answer_no_obj = MockUsingReturnValue(None) utils_askuser_answer_no_obj.result = 0 utils_askuser_answer_no = MockUsingReturnValue(utils_askuser_answer_no_obj) @mock.patch('midvatten_utils.NotFoundQuestion', autospec=True) @mock.patch('midvatten_utils.QgsProject.instance', MOCK_DBPATH.get_v) @mock.patch('import_data_to_db.utils.askuser') @mock.patch('qgis.utils.iface', autospec=True) @mock.patch('PyQt4.QtGui.QInputDialog.getText') @mock.patch('import_data_to_db.utils.pop_up_info', autospec=True) @mock.patch.object(PyQt4.QtGui.QFileDialog, 'getOpenFileName') def _test(self, filename, mock_filename, mock_skippopup, mock_encoding, mock_iface, mock_askuser, mock_notfound): mock_filename.return_value = filename mock_encoding.return_value = [u'utf-8', True] mock_notfound.return_value.answer = u'ok' mock_notfound.return_value.value = u'obsid1' def side_effect(*args, **kwargs): mock_result = mock.MagicMock() if u'msg' in kwargs: if kwargs[u'msg'].startswith(u'Does the file contain a header?'): mock_result.result = 1 return mock_result if len(args) > 1: if args[1].startswith(u'Do you want to confirm'): mock_result.result = 0 return mock_result #mock_askuser.return_value.result.return_value = 0 elif args[1].startswith(u'Do you want to import all'): mock_result.result = 0 return mock_result elif args[1].startswith(u'Please note!\nForeign keys'): mock_result.result = 1 return mock_result elif args[1].startswith(u'Please note!\nThere are'): mock_result.result = 1 return mock_result elif args[1].startswith(u'It is a strong recommendation'): mock_result.result = 0 return mock_result mock_askuser.side_effect = side_effect ms = MagicMock() ms.settingsdict = OrderedDict() importer = GeneralCsvImportGui(self.iface.mainWindow(), ms) importer.load_gui() importer.load_files() importer.table_chooser.import_method = u'vlf_data' for column in importer.table_chooser.columns: names = {u'obsid': u'obsid', u'length': u'length2', u'real_comp': u'real_comp', u'imag_comp': u'imag_comp', u'comment': u'comment'} if column.db_column in names: column.file_column_name = names[column.db_column] importer.start_import() _test(self, filename) test_string = utils_for_tests.create_test_string(utils.sql_load_fr_db(u'''select * from vlf_data''')) reference_string = u'''(True, [(obsid1, 500.0, 2.0, 10.0, acomment)])''' assert test_string == reference_string
def test_wlvllogg_import_from_diveroffice_files(self): files = [ (u'Location=rb1', u'Date/time,Water head[cm],Temperature[°C]', u'2016/03/15 10:30:00,1,10', u'2016/03/15 11:00:00,11,101'), (u'Location=rb2', u'Date/time,Water head[cm],Temperature[°C]', u'2016/04/15 10:30:00,2,20', u'2016/04/15 11:00:00,21,201'), (u'Location=rb3', u'Date/time,Water head[cm],Temperature[°C],Conductivity[mS/cm]', u'2016/05/15 10:30:00,3,30,5', u'2016/05/15 11:00:00,31,301,6') ] db_utils.sql_alter_db( u'''INSERT INTO obs_points (obsid) VALUES ('rb1')''') DiverofficeImport.charsetchoosen = u'utf-8' with utils.tempinput(u'\n'.join(files[0]), DiverofficeImport.charsetchoosen) as f1: with utils.tempinput(u'\n'.join(files[1]), DiverofficeImport.charsetchoosen) as f2: with utils.tempinput(u'\n'.join(files[2]), DiverofficeImport.charsetchoosen) as f3: filenames = [f1, f2, f3] utils_askuser_answer_no_obj = MockUsingReturnValue(None) utils_askuser_answer_no_obj.result = 0 utils_askuser_answer_no = MockUsingReturnValue( utils_askuser_answer_no_obj) @mock.patch('import_data_to_db.utils.NotFoundQuestion') @mock.patch( 'db_utils.QgsProject.instance', utils_for_tests.MidvattenTestSpatialiteNotCreated. mock_instance_settings_database) @mock.patch('import_data_to_db.utils.Askuser') @mock.patch('qgis.utils.iface', autospec=True) @mock.patch('PyQt4.QtGui.QInputDialog.getText') @mock.patch('import_data_to_db.utils.pop_up_info', autospec=True) @mock.patch('import_data_to_db.utils.select_files') def _test_wlvllogg_import_from_diveroffice_files( self, filenames, mock_filenames, mock_skippopup, mock_encoding, mock_iface, mock_askuser, mock_notfoundquestion): mock_notfoundquestion.return_value.answer = u'ok' mock_notfoundquestion.return_value.value = u'rb1' mock_notfoundquestion.return_value.reuse_column = u'location' mock_filenames.return_value = filenames mock_encoding.return_value = [u'utf-8'] ms = MagicMock() ms.settingsdict = OrderedDict() importer = DiverofficeImport(self.iface.mainWindow(), ms) importer.select_files_and_load_gui() importer.start_import(importer.files, importer.skip_rows.checked, importer.confirm_names.checked, importer.import_all_data.checked) _test_wlvllogg_import_from_diveroffice_files( self, filenames) test_string = utils_for_tests.create_test_string( db_utils.sql_load_fr_db( u'''SELECT obsid, date_time, head_cm, temp_degc, cond_mscm, level_masl, comment FROM w_levels_logger''' )) reference_string = ur'''(True, [(rb1, 2016-03-15 10:30:00, 1.0, 10.0, None, None, None), (rb1, 2016-03-15 11:00:00, 11.0, 101.0, None, None, None), (rb1, 2016-04-15 10:30:00, 2.0, 20.0, None, None, None), (rb1, 2016-04-15 11:00:00, 21.0, 201.0, None, None, None), (rb1, 2016-05-15 10:30:00, 3.0, 30.0, 5.0, None, None), (rb1, 2016-05-15 11:00:00, 31.0, 301.0, 6.0, None, None)])''' assert test_string == reference_string