def test_wlvllogg_import_from_diveroffice_files_skip_missing_water_level(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,,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')''') db_utils.sql_alter_db('''INSERT INTO obs_points (obsid) VALUES ('rb3')''') db_utils.sql_alter_db('''INSERT INTO w_levels_logger (obsid, date_time, head_cm) VALUES ('rb1', '2016-03-15 10:31', '5.0')''') 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] @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.import_all_data.checked = True importer.confirm_names.checked = False importer.skip_rows.checked = True 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:31, 5.0, None, None, None, None), (rb1, 2016-03-15 10:30:00, 1.0, 10.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), (rb3, 2016-05-15 10:30:00, 3.0, 30.0, 5.0, None, None), (rb3, 2016-05-15 11:00:00, 31.0, 301.0, 6.0, None, None)])''' assert test_string == reference_string
def test_load_default_file(self): default_file = '''{'Axes_set_ylabel': {'fontsize': 10}, 'wlevels_Axes_plot': {'DEFAULT': {'marker': 'v', 'markersize': 6, 'linewidth': 1, 'linestyle': '-'}}, 'geology_Axes_bar': {'edgecolor': 'black'}, 'obsid_Axes_bar': {'edgecolor': 'black', 'linewidth': 0.5, 'fill': False}, 'dems_Axes_plot': {'DEFAULT': {'marker': 'None', 'linewidth': 1, 'linestyle': '-'}}, 'Axes_set_xlabel': {'fontsize': 10}, 'Axes_set_ylim': None, 'plot_width': None, 'grid_Axes_grid': {'color': '0.65', 'b': True, 'linestyle': '-', 'which': 'both'}, 'legend_Axes_legend': {'loc': 0, 'framealpha': 1, 'fontsize': 10}, 'legend_Frame_set_fill': False, 'plot_height': None, 'layer_Axes_annotate': {'va': 'center', 'xytext': (5, 0), 'fontsize': 9, 'bbox': {'alpha': 0.6, 'fc': 'white', 'boxstyle': 'square,pad=0.05', 'edgecolor': 'white'}, 'ha': 'left', 'textcoords': 'offset points'}, 'ticklabels_Text_set_fontsize': {'fontsize': 10}, 'legend_Text_set_fontsize': 10, 'Figure_subplots_adjust': {}, 'Axes_set_xlim': None, 'obsid_Axes_annotate': {'va': 'top', 'xytext': (0, 10), 'fontsize': 9, 'bbox': {'alpha': 0.4, 'fc': 'white', 'boxstyle': 'square,pad=0.05', 'edgecolor': 'white'}, 'rotation': 0, 'ha': 'center', 'textcoords': 'offset points'}, 'drillstop_Axes_plot': {'color': 'black', 'marker': '^', 'markersize': 8, 'linestyle': ''}, 'legend_Frame_set_facecolor': '1'}''' as_dict = ast.literal_eval(default_file) self.midvatten.ms.settingsdict['secplot_loaded_template'] = '' with utils.tempinput(default_file, 'utf-8') as f1: @mock.patch('midvatten_utils.MessagebarAndLog') @mock.patch('os.path.join') def _test(self, filename, mock_join, mock_messagebar): mock_join.return_value = filename self.midvatten.ms.settingsdict['secplot_templates'] = filename secplottemplates = PlotTemplates( self.sectionplot, self.template_list, self.edit_button, self.load_button, self.save_as_button, self.import_button, self.remove_button, self.template_folder, 'secplot_templates', 'secplot_loaded_template', defs.secplot_default_template(), self.midvatten.ms) return secplottemplates, mock_messagebar secplottemplates, mock_messagebar = _test(self, f1) assert call.info(log_msg='Loaded template from default template file.' ) in mock_messagebar.mock_calls assert utils.anything_to_string_representation( secplottemplates.loaded_template ) == utils.anything_to_string_representation(as_dict)
def test_load_file(self): f = [ "LOCATION;DATE;TIME;VALUE;TYPE\n", "Rb1202.sample;30-03-2016;15:31:30;hej2;s.comment\n", "Rb1608.level;30-03-2016;15:34:40;testc;l.comment\n", "Rb1615.flow;30-03-2016;15:30:09;357;f.Accvol.m3\n", "Rb1615.flow;30-03-2016;15:30:09;gick bra;f.comment\n", "Rb1608.level;30-03-2016;15:34:13;ergv;l.comment\n", "Rb1608.level;30-03-2016;15:34:13;555;l.meas.m\n", "Rb1512.sample;30-03-2016;15:31:30;899;s.turbiditet.FNU\n", "Rb1505.quality;30-03-2016;15:29:26;hej;q.comment\n", "Rb1505.quality;30-03-2016;15:29:26;863;q.konduktivitet.µS/cm\n", "Rb1512.quality;30-03-2016;15:30:39;test;q.comment\n", "Rb1512.quality;30-03-2016;15:30:39;67;q.syre.mg/L\n", "Rb1512.quality;30-03-2016;15:30:39;8;q.temperatur.grC\n", "Rb1512.quality;30-03-2016;15:30:40;58;q.syre.%\n", ] with utils.tempinput(''.join(f)) as filename: @mock.patch('import_fieldlogger.utils.QtWidgets.QFileDialog.getOpenFileNames') @mock.patch('import_fieldlogger.utils.QtWidgets.QInputDialog.getText') @mock.patch('import_fieldlogger.utils.MessagebarAndLog') def _test(self, filename, mock_MessagebarAndLog, mock_charset, mock_savefilename ): mock_charset.return_value = ('utf-8', True) mock_savefilename.return_value = [[filename]] test_string = create_test_string(sorted(FieldloggerImport.select_file_and_parse_rows(FieldloggerImport.parse_rows), key=itemgetter('date_time', 'parametername', 'sublocation'))) return test_string test_string = _test(self, filename) reference = utils_for_tests.create_test_string(sorted([{'date_time': '2016-03-30 15:29:26', 'parametername': 'q.comment', 'sublocation': 'Rb1505.quality', 'value': 'hej'}, {'date_time': '2016-03-30 15:30:39', 'parametername': 'q.syre.mg/L', 'sublocation': 'Rb1512.quality', 'value': '67'}, {'date_time': '2016-03-30 15:31:30', 'parametername': 's.turbiditet.FNU', 'sublocation': 'Rb1512.sample', 'value': '899'}, {'date_time': '2016-03-30 15:29:26', 'parametername': 'q.konduktivitet.µS/cm', 'sublocation': 'Rb1505.quality', 'value': '863'}, {'date_time': '2016-03-30 15:30:09', 'parametername': 'f.comment', 'sublocation': 'Rb1615.flow', 'value': 'gick bra'}, {'date_time': '2016-03-30 15:30:40', 'parametername': 'q.syre.%', 'sublocation': 'Rb1512.quality', 'value': '58'}, {'date_time': '2016-03-30 15:34:13', 'parametername': 'l.meas.m', 'sublocation': 'Rb1608.level', 'value': '555'}, {'date_time': '2016-03-30 15:30:39', 'parametername': 'q.comment', 'sublocation': 'Rb1512.quality', 'value': 'test'}, {'date_time': '2016-03-30 15:31:30', 'parametername': 's.comment', 'sublocation': 'Rb1202.sample', 'value': 'hej2'}, {'date_time': '2016-03-30 15:34:40', 'parametername': 'l.comment', 'sublocation': 'Rb1608.level', 'value': 'testc'}, {'date_time': '2016-03-30 15:30:09', 'parametername': 'f.Accvol.m3', 'sublocation': 'Rb1615.flow', 'value': '357'}, {'date_time': '2016-03-30 15:34:13', 'parametername': 'l.comment', 'sublocation': 'Rb1608.level', 'value': 'ergv'}, {'date_time': '2016-03-30 15:30:39', 'parametername': 'q.temperatur.grC', 'sublocation': 'Rb1512.quality', 'value': '8'}], key=itemgetter('date_time', 'parametername', 'sublocation'))) assert test_string == reference
def test_load_file(self): f = [ u"Location;date_time;value;comment\n", u"Rb1202.sample;30-03-2016;15:31:30;hej2;s.comment\n", u"Rb1608.level;30-03-2016;15:34:40;testc;l.comment\n", u"Rb1615.flow;30-03-2016;15:30:09;357;f.Accvol.m3\n", u"Rb1615.flow;30-03-2016;15:30:09;gick bra;f.comment\n", u"Rb1608.level;30-03-2016;15:34:13;ergv;l.comment\n", u"Rb1608.level;30-03-2016;15:34:13;555;l.meas.m\n", u"Rb1512.sample;30-03-2016;15:31:30;899;s.turbiditet.FNU\n", u"Rb1505.quality;30-03-2016;15:29:26;hej;q.comment\n", u"Rb1505.quality;30-03-2016;15:29:26;863;q.konduktivitet.µS/cm\n", u"Rb1512.quality;30-03-2016;15:30:39;test;q.comment\n", u"Rb1512.quality;30-03-2016;15:30:39;67;q.syre.mg/L\n", u"Rb1512.quality;30-03-2016;15:30:39;8;q.temperatur.grC\n", u"Rb1512.quality;30-03-2016;15:30:40;58;q.syre.%\n", ] with utils.tempinput(''.join(f)) as filename: @mock.patch('import_fieldlogger.utils.QtGui.QFileDialog.getOpenFileNames') @mock.patch('import_fieldlogger.utils.QtGui.QInputDialog.getText') @mock.patch('import_fieldlogger.utils.MessagebarAndLog') def _test(self, filename, mock_MessagebarAndLog, mock_charset, mock_savefilename ): mock_charset.return_value = ('utf-8', True) mock_savefilename.return_value = [filename] test_string = create_test_string(FieldloggerImport.select_file_and_parse_rows(FieldloggerImport.parse_rows)) return test_string test_string = _test(self, filename) reference = u'[{date_time: 2016-03-30 15:29:26, parametername: q.comment, sublocation: Rb1505.quality, value: hej}, {date_time: 2016-03-30 15:30:39, parametername: q.syre.mg/L, sublocation: Rb1512.quality, value: 67}, {date_time: 2016-03-30 15:31:30, parametername: s.turbiditet.FNU, sublocation: Rb1512.sample, value: 899}, {date_time: 2016-03-30 15:29:26, parametername: q.konduktivitet.µS/cm, sublocation: Rb1505.quality, value: 863}, {date_time: 2016-03-30 15:30:09, parametername: f.comment, sublocation: Rb1615.flow, value: gick bra}, {date_time: 2016-03-30 15:30:40, parametername: q.syre.%, sublocation: Rb1512.quality, value: 58}, {date_time: 2016-03-30 15:34:13, parametername: l.meas.m, sublocation: Rb1608.level, value: 555}, {date_time: 2016-03-30 15:30:39, parametername: q.comment, sublocation: Rb1512.quality, value: test}, {date_time: 2016-03-30 15:31:30, parametername: s.comment, sublocation: Rb1202.sample, value: hej2}, {date_time: 2016-03-30 15:34:40, parametername: l.comment, sublocation: Rb1608.level, value: testc}, {date_time: 2016-03-30 15:30:09, parametername: f.Accvol.m3, sublocation: Rb1615.flow, value: 357}, {date_time: 2016-03-30 15:34:13, parametername: l.comment, sublocation: Rb1608.level, value: ergv}, {date_time: 2016-03-30 15:30:39, parametername: q.temperatur.grC, sublocation: Rb1512.quality, value: 8}]' assert test_string == reference
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_load_file_comma_separated(self): f = [ "LOCATION,DATE,TIME,VALUE,TYPE\n", "Rb1202.sample,30-03-2016,15:31:30,hej2,s.comment\n", "Rb1608.level,30-03-2016,15:34:40,testc,l.comment\n", "Rb1615.flow,30-03-2016,15:30:09,357,f.Accvol.m3\n", "Rb1615.flow,30-03-2016,15:30:09,gick bra,f.comment\n", "Rb1608.level,30-03-2016,15:34:13,ergv,l.comment\n", "Rb1608.level,30-03-2016,15:34:13,555,l.meas.m\n", "Rb1512.sample,30-03-2016,15:31:30,899,s.turbiditet.FNU\n", "Rb1505.quality,30-03-2016,15:29:26,hej,q.comment\n", "Rb1505.quality,30-03-2016,15:29:26,863,q.konduktivitet.µS/cm\n", "Rb1512.quality,30-03-2016,15:30:39,test,q.comment\n", "Rb1512.quality,30-03-2016,15:30:39,67,q.syre.mg/L\n", "Rb1512.quality,30-03-2016,15:30:39,8,q.temperatur.grC\n", "Rb1512.quality,30-03-2016,15:30:40,58,q.syre.%\n", ] with utils.tempinput(''.join(f)) as filename: @mock.patch('import_fieldlogger.utils.QtWidgets.QFileDialog.getOpenFileNames') @mock.patch('import_fieldlogger.utils.QtWidgets.QInputDialog.getText') @mock.patch('import_fieldlogger.utils.MessagebarAndLog') def _test(self, filename, mock_MessagebarAndLog, mock_charset, mock_savefilename ): mock_charset.return_value = ('utf-8', True) mock_savefilename.return_value = [[filename]] test_string = create_test_string(sorted(FieldloggerImport.select_file_and_parse_rows(FieldloggerImport.parse_rows), key=itemgetter('date_time', 'parametername', 'sublocation'))) return test_string test_string = _test(self, filename) reference = utils_for_tests.create_test_string(sorted([{'date_time': '2016-03-30 15:29:26', 'parametername': 'q.comment', 'sublocation': 'Rb1505.quality', 'value': 'hej'}, {'date_time': '2016-03-30 15:30:39', 'parametername': 'q.syre.mg/L', 'sublocation': 'Rb1512.quality', 'value': '67'}, {'date_time': '2016-03-30 15:31:30', 'parametername': 's.turbiditet.FNU', 'sublocation': 'Rb1512.sample', 'value': '899'}, {'date_time': '2016-03-30 15:29:26', 'parametername': 'q.konduktivitet.µS/cm', 'sublocation': 'Rb1505.quality', 'value': '863'}, {'date_time': '2016-03-30 15:30:09', 'parametername': 'f.comment', 'sublocation': 'Rb1615.flow', 'value': 'gick bra'}, {'date_time': '2016-03-30 15:30:40', 'parametername': 'q.syre.%', 'sublocation': 'Rb1512.quality', 'value': '58'}, {'date_time': '2016-03-30 15:34:13', 'parametername': 'l.meas.m', 'sublocation': 'Rb1608.level', 'value': '555'}, {'date_time': '2016-03-30 15:30:39', 'parametername': 'q.comment', 'sublocation': 'Rb1512.quality', 'value': 'test'}, {'date_time': '2016-03-30 15:31:30', 'parametername': 's.comment', 'sublocation': 'Rb1202.sample', 'value': 'hej2'}, {'date_time': '2016-03-30 15:34:40', 'parametername': 'l.comment', 'sublocation': 'Rb1608.level', 'value': 'testc'}, {'date_time': '2016-03-30 15:30:09', 'parametername': 'f.Accvol.m3', 'sublocation': 'Rb1615.flow', 'value': '357'}, {'date_time': '2016-03-30 15:34:13', 'parametername': 'l.comment', 'sublocation': 'Rb1608.level', 'value': 'ergv'}, {'date_time': '2016-03-30 15:30:39', 'parametername': 'q.temperatur.grC', 'sublocation': 'Rb1512.quality', 'value': '8'}], key=itemgetter('date_time', 'parametername', 'sublocation'))) assert test_string == reference
def test_load_default_file(self): default_file = '''{'Axes_set_ylabel': {'fontsize': 10}, 'wlevels_Axes_plot': {'DEFAULT': {'marker': 'v', 'markersize': 6, 'linewidth': 1, 'linestyle': '-'}}, 'geology_Axes_bar': {'edgecolor': 'black'}, 'obsid_Axes_bar': {'edgecolor': 'black', 'linewidth': 0.5, 'fill': False}, 'dems_Axes_plot': {'DEFAULT': {'marker': 'None', 'linewidth': 1, 'linestyle': '-'}}, 'Axes_set_xlabel': {'fontsize': 10}, 'Axes_set_ylim': None, 'plot_width': None, 'grid_Axes_grid': {'color': '0.65', 'b': True, 'linestyle': '-', 'which': 'both'}, 'legend_Axes_legend': {'loc': 0, 'framealpha': 1, 'fontsize': 10}, 'legend_Frame_set_fill': False, 'plot_height': None, 'layer_Axes_annotate': {'va': 'center', 'xytext': (5, 0), 'fontsize': 9, 'bbox': {'alpha': 0.6, 'fc': 'white', 'boxstyle': 'square,pad=0.05', 'edgecolor': 'white'}, 'ha': 'left', 'textcoords': 'offset points'}, 'ticklabels_Text_set_fontsize': {'fontsize': 10}, 'legend_Text_set_fontsize': 10, 'Figure_subplots_adjust': {}, 'Axes_set_xlim': None, 'obsid_Axes_annotate': {'va': 'top', 'xytext': (0, 10), 'fontsize': 9, 'bbox': {'alpha': 0.4, 'fc': 'white', 'boxstyle': 'square,pad=0.05', 'edgecolor': 'white'}, 'rotation': 0, 'ha': 'center', 'textcoords': 'offset points'}, 'drillstop_Axes_plot': {'color': 'black', 'marker': '^', 'markersize': 8, 'linestyle': ''}, 'legend_Frame_set_facecolor': '1'}''' as_dict = ast.literal_eval(default_file) self.midvatten.ms.settingsdict['secplot_loaded_template'] = '' with utils.tempinput(default_file, 'utf-8') as f1: @mock.patch('midvatten_utils.MessagebarAndLog') @mock.patch('os.path.join') def _test(self, filename, mock_join, mock_messagebar): mock_join.return_value = filename self.midvatten.ms.settingsdict['secplot_templates'] = filename secplottemplates = PlotTemplates(self.sectionplot, self.template_list, self.edit_button, self.load_button, self.save_as_button, self.import_button, self.remove_button, self.template_folder, 'secplot_templates', 'secplot_loaded_template', defs.secplot_default_template(), self.midvatten.ms) return secplottemplates, mock_messagebar secplottemplates, mock_messagebar = _test(self, f1) assert call.info(log_msg='Loaded template from default template file.') in mock_messagebar.mock_calls assert utils.anything_to_string_representation(secplottemplates.loaded_template) == utils.anything_to_string_representation(as_dict)
def test_parse_interlab4_utf16(self): interlab4_lines = ( u"#Interlab", u"#Version=4.0", u"#Tecken=UTF-16", u"#Textavgränsare=Nej", u"#Decimaltecken=,", u"#Provadm", u"Lablittera;Namn;Adress;Postnr;Ort;Kommunkod;Projekt;Laboratorium;Provtyp;Provtagare;Registertyp;ProvplatsID;Provplatsnamn;Specifik provplats;Provtagningsorsak;Provtyp;Provtypspecifikation;Bedömning;Kemisk bedömning;Mikrobiologisk bedömning;Kommentar;År;Provtagningsdatum;Provtagningstid;Inlämningsdatum;Inlämningstid;", u"DM-990908-2773;MFR;PG Vejdes väg 15;351 96;Växjö;0780;Demoproj;Demo-Laboratoriet;NSG;DV;;Demo1 vattenverk;;Föreskriven regelbunden undersökning enligt SLVFS 2001:30;Dricksvatten enligt SLVFS 2001:30;Utgående;Nej;Tjänligt;;;;2010;2010-09-07;10:15;2010-09-07;14:15;", u"#Provdat", u"Lablittera;Metodbeteckning;Parameter;Mätvärdetext;Mätvärdetal;Mätvärdetalanm;Enhet;Rapporteringsgräns;Detektionsgräns;Mätosäkerhet;Mätvärdespår;Parameterbedömning;Kommentar;", u"DM-990908-2773;SS-EN ISO 7887-1/4;Färgtal;;5;;mg/l Pt;;;;;;;", u"DM-990908-2773;ISO 17294-2;Järn;;0,06;;mg/l;;;;;;;", u"DM-990908-2773;Saknas;Temperatur vid provtagning;;14,5;;grader C;;;;;;;", u"DM-990908-2773;SLV METOD1990-01-01 TA;Temperatur vid ankomst;;16,8;;grader C;;;;;;Ej kylt;", u"DM-990908-2773;ISO 17294-2;Mangan;;0,001;<;mg/l;;;;;;;", u"#Provadm ", u"Lablittera;Namn;Adress;Postnr;Ort;Kommunkod;Projekt;Laboratorium;Provtyp;Provtagare;Registertyp;ProvplatsID;Provplatsnamn;Specifik provplats;Provtagningsorsak;Provtyp;Provtypspecifikation;Bedömning;Kemisk bedömning;Mikrobiologisk bedömning;Kommentar;År;Provtagningsdatum;Provtagningstid;Inlämningsdatum;Inlämningstid;", u"DM-990908-2774;MFR;;;;;;Demo-Laboratoriet;NSG;DV;VV1784;Demo2 vattenverk;;Föreskriven regelbunden undersökning enligt SLVFS 2001:30;Dricksvatten enligt SLVFS 2001:30;Utgående;Nej;Tjänligt;;;;2010;2010-09-07;11:30;2010-09-07;14:15;", u"#Provdat", u"Lablittera;Metodbeteckning;Parameter;Mätvärdetext;Mätvärdetal;Mätvärdetalanm;Enhet;Rapporteringsgräns;Detektionsgräns;Mätosäkerhet;Mätvärdespår;Parameterbedömning;Kommentar;", u"DM-990908-2774;SS-EN ISO 7887-1/4;Färgtal;;6,5;;mg/l Pt;;;;;;;", u"DM-990908-2774;ISO 17294-2;Järn;;0,05;<;mg/l;;;;;;;", u"DM-990908-2774;Saknas;Temperatur vid provtagning;;14,8;;grader C;;;;;;;", u"DM-990908-2774;Saknas;Temperatur vid ankomst;;17,3;;grader C;;;;;;Ej kylt;", u"DM-990908-2774;ISO 17294-2;Mangan;;0,004;;mg/l;;;;;;; ", u"#S**t") with utils.tempinput(u'\n'.join(interlab4_lines), 'utf-16') as testfile: result = self.importinstance.parse([testfile]) result_string = ';'.join( utils_for_tests.dict_to_sorted_list( self.importinstance.parse([testfile]))) reference_string = 'DM-990908-2773;Färgtal;enhet;mg/l Pt;lablittera;DM-990908-2773;metodbeteckning;SS-EN ISO 7887-1/4;mätvärdetal;5;parameter;Färgtal;Järn;enhet;mg/l;lablittera;DM-990908-2773;metodbeteckning;ISO 17294-2;mätvärdetal;0.06;parameter;Järn;Mangan;enhet;mg/l;lablittera;DM-990908-2773;metodbeteckning;ISO 17294-2;mätvärdetal;0.001;mätvärdetalanm;<;parameter;Mangan;Temperatur vid ankomst;enhet;grader C;kommentar;Ej kylt;lablittera;DM-990908-2773;metodbeteckning;SLV METOD1990-01-01 TA;mätvärdetal;16.8;parameter;Temperatur vid ankomst;Temperatur vid provtagning;enhet;grader C;lablittera;DM-990908-2773;metodbeteckning;Saknas;mätvärdetal;14.5;parameter;Temperatur vid provtagning;metadata;adress;PG Vejdes väg 15;bedömning;Tjänligt;inlämningsdatum;2010-09-07;inlämningstid;14:15;kommunkod;0780;lablittera;DM-990908-2773;laboratorium;Demo-Laboratoriet;namn;MFR;ort;Växjö;postnr;351 96;projekt;Demoproj;provplatsid;Demo1 vattenverk;provtagare;DV;provtagningsdatum;2010-09-07;provtagningsorsak;Dricksvatten enligt SLVFS 2001:30;provtagningstid;10:15;provtyp;Utgående;provtypspecifikation;Nej;specifik provplats;Föreskriven regelbunden undersökning enligt SLVFS 2001:30;år;2010;DM-990908-2774;Färgtal;enhet;mg/l Pt;lablittera;DM-990908-2774;metodbeteckning;SS-EN ISO 7887-1/4;mätvärdetal;6.5;parameter;Färgtal;Järn;enhet;mg/l;lablittera;DM-990908-2774;metodbeteckning;ISO 17294-2;mätvärdetal;0.05;mätvärdetalanm;<;parameter;Järn;Mangan;enhet;mg/l;lablittera;DM-990908-2774;metodbeteckning;ISO 17294-2;mätvärdetal;0.004;parameter;Mangan;Temperatur vid ankomst;enhet;grader C;kommentar;Ej kylt;lablittera;DM-990908-2774;metodbeteckning;Saknas;mätvärdetal;17.3;parameter;Temperatur vid ankomst;Temperatur vid provtagning;enhet;grader C;lablittera;DM-990908-2774;metodbeteckning;Saknas;mätvärdetal;14.8;parameter;Temperatur vid provtagning;metadata;bedömning;Tjänligt;inlämningsdatum;2010-09-07;inlämningstid;14:15;lablittera;DM-990908-2774;laboratorium;Demo-Laboratoriet;namn;MFR;provplatsid;Demo2 vattenverk;provtagare;DV;provtagningsdatum;2010-09-07;provtagningsorsak;Dricksvatten enligt SLVFS 2001:30;provtagningstid;11:30;provtyp;Utgående;provtypspecifikation;Nej;registertyp;VV1784;specifik provplats;Föreskriven regelbunden undersökning enligt SLVFS 2001:30;år;2010' assert result_string == reference_string
def test_tempinput(self): rows = u'543\n21' with utils.tempinput(rows) as filename: with io.open(filename, 'r', encoding=u'utf-8') as f: res = f.readlines() reference_list = [u'543\n', u'21'] assert res == reference_list
def test_parse_hobologger_file_convert_tz(self, mock_messagelog): f = ('"Plot Title: temp"', '"#","Date Time, GMT+03:00","Temp, °C (LGR S/N: 1234, SEN S/N: 1234, LBL: Rb1)","Coupler Detached (LGR S/N: 1234)","Coupler Attached (LGR S/N: 1234)","Stopped (LGR S/N: 1234)","End Of File (LGR S/N: 1234)"', '1,07/19/18 10:00:00 fm,4.558,Logged,,,', '2,07/19/18 11:00:00 fm,4.402,,,,', '3,07/19/18 12:00:00 em,4.402,,,,', '4,07/19/18 01:00:00 em,4.402,,,,') charset_of_hobologgerfile = 'utf-8' #tz_string = get_tz_string('Date Time, GMT+02:00') tzconverter = TzConverter() tzconverter.target_tz = 'GMT+01:00' #tzconverter.source_tz = tz_string with utils.tempinput('\n'.join(f), charset_of_hobologgerfile) as path: file_data = HobologgerImport.parse_hobologger_file(path, charset_of_hobologgerfile, tz_converter=tzconverter) test_string = utils_for_tests.create_test_string(file_data[0]) reference_string = '[[date_time, head_cm, temp_degc, cond_mscm], [2018-07-19 08:00:00, , 4.558, ], [2018-07-19 09:00:00, , 4.402, ], [2018-07-19 10:00:00, , 4.402, ], [2018-07-19 11:00:00, , 4.402, ]]' #print(str(test_string)) #print(str(reference_string)) #print(str(mock_messagelog.mock_calls)) assert test_string == reference_string assert os.path.basename(path) == file_data[1] assert file_data[2] == 'Rb1'
def test_tempinput(self): rows = '543\n21' with utils.tempinput(rows) as filename: with io.open(filename, 'r', encoding='utf-8') as f: res = f.readlines() reference_list = ['543\n', '21'] assert res == reference_list
def test_save_as(self): afile = '''{ "file_to_save": 3}''' self.midvatten.ms.settingsdict['secplot_loaded_template'] = '' with utils.tempinput('', 'utf-8') as save_file: with utils.tempinput(afile, 'utf-8') as f1: @mock.patch('qgis.PyQt.QtWidgets.QFileDialog.getSaveFileName') @mock.patch('midvatten_utils.select_files') @mock.patch('midvatten_utils.MessagebarAndLog') @mock.patch('os.path.join') def _test(self, filename, save_file, mock_join, mock_messagebar, mock_select_files, mock_save_filename): mock_join.return_value = '' mock_select_files.return_value = [filename] mock_save_filename.return_value = (save_file, 0) self.midvatten.ms.settingsdict['secplot_templates'] = '' secplottemplates = PlotTemplates( self.sectionplot, self.template_list, self.edit_button, self.load_button, self.save_as_button, self.import_button, self.remove_button, self.template_folder, 'secplot_templates', 'secplot_loaded_template', defs.secplot_default_template(), self.midvatten.ms) secplottemplates.import_templates() item = [ self.template_list.item(idx) for idx in range(self.template_list.count()) ][0] item.setSelected(True) secplottemplates.load() secplottemplates.save_as() return secplottemplates, mock_messagebar, filename secplottemplates, mock_messagebar, reference_filename = _test( self, f1, save_file) with io.open(save_file, encoding='utf-8') as f: lines = ''.join(f.readlines()) assert lines == afile assert self.template_list.count() == 2
def test_interlab4_connection_table_only_1(self): db_utils.sql_alter_db('''INSERT INTO zz_staff (staff) VALUES ('DV')''') db_utils.sql_alter_db('''INSERT INTO obs_points (obsid) VALUES ('obsid1')''') db_utils.sql_alter_db('''INSERT INTO obs_points (obsid) VALUES ('obsid2')''') db_utils.sql_alter_db('''INSERT INTO obs_points (obsid) VALUES ('anobsid')''') db_utils.sql_alter_db('''INSERT INTO zz_interlab4_obsid_assignment (specifik_provplats, provplatsnamn, obsid) VALUES ('Demo', 'Demo1 vattenverk', 'obsid1')''') interlab4_lines = ( '#Interlab', '#Version=4.0', '#Tecken=UTF-8', '#Textavgränsare=Nej', '#Decimaltecken=,', '#Provadm', 'Lablittera;Namn;Adress;Postnr;Ort;Kommunkod;Projekt;Laboratorium;Provtyp;Provtagare;Registertyp;ProvplatsID;Provplatsnamn;Specifik provplats;Provtagningsorsak;Provtyp;Provtypspecifikation;Bedömning;Kemisk bedömning;Mikrobiologisk bedömning;Kommentar;År;Provtagningsdatum;Provtagningstid;Inlämningsdatum;Inlämningstid;', 'DM-990908-2773;MFR;PG Vejdes väg 15;351 96;Växjö;0780;Demoproj;Demo-Laboratoriet;NSG;DV;;;Demo1 vattenverk;Demo;;Dricksvatten enligt SLVFS 2001:30;Utgående;Nej;Tjänligt;;;2010;2010-09-07;10:15;2010-09-07;14:15;', 'DM-990908-2774;MFR;PG Vejdes väg 15;351 96;Växjö;0780;Demoproj;Demo-Laboratoriet;NSG;DV;;;Demo2 vattenverk;Demo;;Dricksvatten enligt SLVFS 2001:30;Utgående;Nej;Tjänligt;;;2010;2010-09-07;10:15;2010-09-07;14:15;', '#Provdat', 'Lablittera;Metodbeteckning;Parameter;Mätvärdetext;Mätvärdetal;Mätvärdetalanm;Enhet;Rapporteringsgräns;Detektionsgräns;Mätosäkerhet;Mätvärdespår;Parameterbedömning;Kommentar;', 'DM-990908-2773;SS-EN ISO 7887-1/4;Kalium;<2,5;2,5;;mg/l Pt;;;;;;;', 'DM-990908-2773;SS-EN ISO 7887-1/4;Kalium;<1;1;;mg/l Pt;;;;;;;', 'DM-990908-2774;SS-EN ISO 7887-1/4;Kalium;<15;15;;mg/l Pt;;;;;;;', '#S**t' ) with utils.tempinput('\n'.join(interlab4_lines), 'utf-8') as filename: @mock.patch('midvatten_utils.NotFoundQuestion') @mock.patch('import_data_to_db.utils.Askuser', mocks_for_tests.mock_askuser.get_v) @mock.patch('qgis.utils.iface', autospec=True) @mock.patch('import_data_to_db.utils.pop_up_info', autospec=True) @mock.patch('import_data_to_db.qgis.PyQt.QtWidgets.QFileDialog.getOpenFileNames') def _test(self, filename, mock_filenames, mock_skippopup, mock_iface, mock_not_found_question): mock_not_found_question.return_value.answer = 'ok' mock_not_found_question.return_value.value = 'anobsid' mock_not_found_question.return_value.reuse_column = 'obsid' mock_filenames.return_value = [[filename]] importer = Interlab4Import(self.iface.mainWindow(), self.midvatten.ms) importer.init_gui() importer.select_files_button.click() importer.use_obsid_assignment_table.setChecked(True) importer.start_import_button.click() _test(self, filename) test_string = utils_for_tests.create_test_string(db_utils.sql_load_fr_db('''SELECT * FROM w_qual_lab''')) reference_string = r'''(True, [(obsid1, None, DM-990908-2773, Demoproj, DV, 2010-09-07 10:15:00, SS-EN ISO 7887-1/4, Kalium, 2.5, <2,5, mg/l Pt, provtyp: Dricksvatten enligt SLVFS 2001:30. provtypspecifikation: Utgående. bedömning: Nej. kemisk bedömning: Tjänligt. provplatsnamn: Demo1 vattenverk. specifik provplats: Demo), (obsid1, None, DM-990908-2773, Demoproj, DV, 2010-09-07 10:15:00, SS-EN ISO 7887-1/4, Kalium (dubblett 1), 1.0, <1, mg/l Pt, provtyp: Dricksvatten enligt SLVFS 2001:30. provtypspecifikation: Utgående. bedömning: Nej. kemisk bedömning: Tjänligt. provplatsnamn: Demo1 vattenverk. specifik provplats: Demo), (anobsid, None, DM-990908-2774, Demoproj, DV, 2010-09-07 10:15:00, SS-EN ISO 7887-1/4, Kalium, 15.0, <15, mg/l Pt, provtyp: Dricksvatten enligt SLVFS 2001:30. provtypspecifikation: Utgående. bedömning: Nej. kemisk bedömning: Tjänligt. provplatsnamn: Demo2 vattenverk. specifik provplats: Demo)])''' print(reference_string) print(test_string) assert test_string == reference_string test_string = utils_for_tests.create_test_string(db_utils.sql_load_fr_db('''SELECT * FROM zz_interlab4_obsid_assignment''')) reference_string = '(True, [(Demo, Demo1 vattenverk, obsid1), (Demo, Demo2 vattenverk, anobsid)])' assert test_string == reference_string
def test_interlab4_filter_many_filters(self, mock_messagebar): admheader = 'Lablittera;Namn;Adress;Postnr;Ort;Kommunkod;Projekt;Laboratorium;Provtyp;Provtagare;Registertyp;ProvplatsID;Provplatsnamn;Specifik provplats;Provtagningsorsak;Provtyp;Provtypspecifikation;Bedömning;Kemisk bedömning;Mikrobiologisk bedömning;Kommentar;År;Provtagningsdatum;Provtagningstid;Inlämningsdatum;Inlämningstid;' datheader = 'Lablittera;Metodbeteckning;Parameter;Mätvärdetext;Mätvärdetal;Mätvärdetalanm;Enhet;Rapporteringsgräns;Detektionsgräns;Mätosäkerhet;Mätvärdespår;Parameterbedömning;Kommentar;' interlab4_lines = [ '#Interlab', '#Version=4.0', '#Tecken=UTF-8', '#Textavgränsare=Nej', '#Decimaltecken=,', '#Provadm', ] uuids = [str(uuid.uuid1()) for _ in range(5000)] print(str(uuids[:6])) _admheader = ';'.join((['']*len(admheader.split(';')))[:-1]) adm_rows = [';'.join([x, _admheader]) for x in uuids] _datheader = ';'.join((['']*len(datheader.split(';')))[:-1]) dat_rows = [';'.join([x, _datheader]) for x in uuids] interlab4_lines.append(admheader) interlab4_lines.extend(adm_rows) interlab4_lines.append('#Provdat') interlab4_lines.append(datheader) interlab4_lines.extend(dat_rows) interlab4_lines.append('#S**t') patterns = uuids[:1000] #print(str(patterns)) with utils.tempinput('\n'.join(interlab4_lines), 'utf-8') as filename: @mock.patch('midvatten_utils.NotFoundQuestion') @mock.patch('import_data_to_db.utils.Askuser', mocks_for_tests.mock_askuser.get_v) @mock.patch('qgis.utils.iface', autospec=True) @mock.patch('import_data_to_db.utils.pop_up_info', autospec=True) @mock.patch('import_data_to_db.qgis.PyQt.QtWidgets.QFileDialog.getOpenFileNames') def _test(self, filename, mock_filenames, mock_skippopup, mock_iface, mock_not_found_question): mock_not_found_question.return_value.answer = 'ok' mock_filenames.return_value = [[filename]] importer = Interlab4Import(self.iface.mainWindow(), self.midvatten.ms) importer.init_gui() importer.select_files_button.click() gui_utils.set_combobox(importer.specific_meta_filter.combobox, 'lablittera', False) importer.specific_meta_filter.items.paste_data(patterns) #print(str(importer.specific_meta_filter.items.toPlainText())) importer.metadata_filter.show_only_selected_checkbox.setChecked(True) importer.metadata_filter.update_selection_button.click() return importer.metadata_filter.get_selected_lablitteras() lablitteras = _test(self, filename) #print(str(lablitteras)) #print(str(mock_messagebar.mock_calls)) assert lablitteras == patterns #assert False
def test_get_delimiter_delimiter_not_found(self): file = [u'obsid;acol,acol2', u'rb1;1,2'] with utils.tempinput(u'\n'.join(file), u'utf-8') as filename: @mock.patch('qgis.utils.iface', autospec=True) def _test(filename, mock_iface): delimiter = GeneralCsvImportGui.get_delimiter(filename, u'utf-8') assert call.messageBar().createMessage(u'File error, delimiter not found, see log message panel') in mock_iface.mock_calls _test(filename)
def test_interlab4_full_test_to_db_staff_0(self): db_utils.sql_alter_db( u'''INSERT INTO obs_points (obsid) VALUES ('anobsid')''') interlab4_lines = ( '#Interlab', '#Version=4.0', '#Tecken=UTF-8', '#Textavgränsare=Nej', '#Decimaltecken=,', '#Provadm', 'Lablittera;Namn;Adress;Postnr;Ort;Kommunkod;Projekt;Laboratorium;Provtyp;Provtagare;Registertyp;ProvplatsID;Provplatsnamn;Specifik provplats;Provtagningsorsak;Provtyp;Provtypspecifikation;Bedömning;Kemisk bedömning;Mikrobiologisk bedömning;Kommentar;År;Provtagningsdatum;Provtagningstid;Inlämningsdatum;Inlämningstid;', 'DM-990908-2773;MFR;PG Vejdes väg 15;351 96;Växjö;0780;Demoproj;Demo-Laboratoriet;NSG;0;;Demo1 vattenverk;;Föreskriven regelbunden undersökning enligt SLVFS 2001:30;Dricksvatten enligt SLVFS 2001:30;Utgående;Nej;Tjänligt;;;;2010;2010-09-07;10:15;2010-09-07;14:15;', '#Provdat', 'Lablittera;Metodbeteckning;Parameter;Mätvärdetext;Mätvärdetal;Mätvärdetalanm;Enhet;Rapporteringsgräns;Detektionsgräns;Mätosäkerhet;Mätvärdespår;Parameterbedömning;Kommentar;', 'DM-990908-2773;SS-EN ISO 7887-1/4;Kalium;<2,5;2,5;;mg/l Pt;;;;;;;', 'DM-990908-2773;SS-EN ISO 7887-1/4;Kalium;<1;1;;mg/l Pt;;;;;;;', '#S**t') with utils.tempinput(u'\n'.join(interlab4_lines), 'utf-8') as filename: @mock.patch('midvatten_utils.NotFoundQuestion') @mock.patch('db_utils.QgsProject.instance', utils_for_tests.MidvattenTestSpatialiteNotCreated. mock_instance_settings_database) @mock.patch('import_data_to_db.utils.Askuser', mocks_for_tests.mock_askuser.get_v) @mock.patch('qgis.utils.iface', autospec=True) @mock.patch('import_data_to_db.utils.pop_up_info', autospec=True) @mock.patch( 'import_data_to_db.qgis.PyQt.QtWidgets.QFileDialog.getOpenFileNames' ) def _test(self, filename, mock_filenames, mock_skippopup, mock_iface, mock_not_found_question): mock_not_found_question.return_value.answer = 'ok' mock_not_found_question.return_value.value = 'anobsid' mock_not_found_question.return_value.reuse_column = 'obsid' mock_filenames.return_value = [[filename]] importer = Interlab4Import(self.iface.mainWindow(), self.ms) importer.parse_observations_and_populate_gui() importer.start_import( importer.all_lab_results, importer.metadata_filter.get_selected_lablitteras()) _test(self, filename) test_string = utils_for_tests.create_test_string( db_utils.sql_load_fr_db(u'''SELECT * FROM w_qual_lab''')) reference_string = '''(True, [(anobsid, None, DM-990908-2773, Demoproj, 0, 2010-09-07 10:15:00, SS-EN ISO 7887-1/4, Kalium, 2.5, <2,5, mg/l Pt, provtagningsorsak: Dricksvatten enligt SLVFS 2001:30. provtyp: Utgående. provtypspecifikation: Nej. bedömning: Tjänligt. provplatsid: Demo1 vattenverk. specifik provplats: Föreskriven regelbunden undersökning enligt SLVFS 2001:30), (anobsid, None, DM-990908-2773, Demoproj, 0, 2010-09-07 10:15:00, SS-EN ISO 7887-1/4, Kalium (dubblett 1), 1.0, <1, mg/l Pt, provtagningsorsak: Dricksvatten enligt SLVFS 2001:30. provtyp: Utgående. provtypspecifikation: Nej. bedömning: Tjänligt. provplatsid: Demo1 vattenverk. specifik provplats: Föreskriven regelbunden undersökning enligt SLVFS 2001:30)])''' print(reference_string) print(test_string) assert test_string == reference_string test_string = utils_for_tests.create_test_string( db_utils.sql_load_fr_db(u'''SELECT * FROM zz_staff''')) reference_string = '(True, [(0, None)])' assert test_string == reference_string
def test_get_delimiter_comma(self): file = ['obsid,acol,acol2', 'rb1,1,2'] with utils.tempinput('\n'.join(file), 'utf-8') as filename: @mock.patch('midvatten_utils.ask_for_delimiter') @mock.patch('qgis.utils.iface', autospec=True) def _test(filename, mock_iface, mock_delimiter_question): mock_delimiter_question.return_value = (',', True) delimiter = utils.get_delimiter(filename, 'utf-8') assert delimiter == ',' _test(filename)
def test_parse_diveroffice_warning_missing_date_time( self, mock_messagebarandlog): f = (u'Location=rb1', u'Temperature[°C];2:Spec.cond.[mS/cm];dada', u'5.18;2;2016/03/15 10:30:00', u'0.6;3;2016/03/15 11:00:00') charset_of_diverofficefile = u'cp1252' with utils.tempinput(u'\n'.join(f), charset_of_diverofficefile) as path: file_data = DiverofficeImport.parse_diveroffice_file( path, charset_of_diverofficefile) assert file_data == u'skip' assert len(mock_messagebarandlog.mock_calls) == 1
def test_get_delimiter_semicolon(self): file = [u'obsid;acol;acol2', u'rb1;1;2'] with utils.tempinput(u'\n'.join(file), u'utf-8') as filename: @mock.patch('midvatten_utils.ask_for_delimiter') @mock.patch('qgis.utils.iface', autospec=True) def _test(filename, mock_iface, mock_delimiter_question): mock_delimiter_question.return_value = (u';', True) delimiter = utils.get_delimiter(filename, u'utf-8') assert delimiter == u';' _test(filename)
def test_save_as(self): afile = '''{ "file_to_save": 3}''' self.midvatten.ms.settingsdict['secplot_loaded_template'] = '' with utils.tempinput('', 'utf-8') as save_file: with utils.tempinput(afile, 'utf-8') as f1: @mock.patch('qgis.PyQt.QtWidgets.QFileDialog.getSaveFileName') @mock.patch('midvatten_utils.select_files') @mock.patch('midvatten_utils.MessagebarAndLog') @mock.patch('os.path.join') def _test(self, filename, save_file, mock_join, mock_messagebar, mock_select_files, mock_save_filename): mock_join.return_value = '' mock_select_files.return_value = [filename] mock_save_filename.return_value = (save_file, 0) self.midvatten.ms.settingsdict['secplot_templates'] = '' secplottemplates = PlotTemplates(self.sectionplot, self.template_list, self.edit_button, self.load_button, self.save_as_button, self.import_button, self.remove_button, self.template_folder, 'secplot_templates', 'secplot_loaded_template', defs.secplot_default_template(), self.midvatten.ms) secplottemplates.import_templates() item = [self.template_list.item(idx) for idx in range(self.template_list.count())][0] item.setSelected(True) secplottemplates.load() secplottemplates.save_as() return secplottemplates, mock_messagebar, filename secplottemplates, mock_messagebar, reference_filename = _test(self, f1, save_file) with io.open(save_file, encoding='utf-8') as f: lines = ''.join(f.readlines()) assert lines == afile assert self.template_list.count() == 2
def test_parse_diveroffice_file_comma_sep_comma_dec_failed(self): f = ('Location=rb1', 'Date/time,Water head[cm],Temperature[°C]', '2016/03/15 10:30:00,26,9,5,18', '2016/03/15 11:00:00,157,7,0,6' ) charset_of_diverofficefile = 'cp1252' with utils.tempinput('\n'.join(f), charset_of_diverofficefile) as path: file_data = DiverofficeImport.parse_diveroffice_file(path, charset_of_diverofficefile) test_string = utils_for_tests.create_test_string(file_data) reference_string = 'cancel' assert test_string == reference_string
def test_parse_diveroffice_warning_missing_date_time(self, mock_messagebarandlog): f = ('Location=rb1', 'Temperature[°C];2:Spec.cond.[mS/cm];dada', '5.18;2;2016/03/15 10:30:00', '0.6;3;2016/03/15 11:00:00' ) charset_of_diverofficefile = 'cp1252' with utils.tempinput('\n'.join(f), charset_of_diverofficefile) as path: file_data = DiverofficeImport.parse_diveroffice_file(path, charset_of_diverofficefile) assert file_data == 'skip' assert len(mock_messagebarandlog.mock_calls) == 1
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.MidvattenTestSpatialiteNotCreated.mock_instance_settings_database) @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_parse_diveroffice_file_changed_order(self): f = ('Location=rb1', 'Temperature[°C];2:Spec.cond.[mS/cm];Date/time;Water head[cm]', '5.18;2;2016/03/15 10:30:00;26.9', '0.6;3;2016/03/15 11:00:00;157.7' ) charset_of_diverofficefile = 'cp1252' with utils.tempinput('\n'.join(f), charset_of_diverofficefile) as path: file_data = DiverofficeImport.parse_diveroffice_file(path, charset_of_diverofficefile) test_string = utils_for_tests.create_test_string(file_data[0]) reference_string = '[[date_time, head_cm, temp_degc, cond_mscm], [2016-03-15 10:30:00, 26.9, 5.18, 2.0], [2016-03-15 11:00:00, 157.7, 0.6, 3.0]]' assert test_string == reference_string assert os.path.basename(path) == file_data[1] assert file_data[2] == 'rb1'
def test_interlab4_full_test_to_db_staff_0(self): db_utils.sql_alter_db(u'''INSERT INTO obs_points (obsid) VALUES ('anobsid')''') interlab4_lines = ( '#Interlab', '#Version=4.0', '#Tecken=UTF-8', '#Textavgränsare=Nej', '#Decimaltecken=,', '#Provadm', 'Lablittera;Namn;Adress;Postnr;Ort;Kommunkod;Projekt;Laboratorium;Provtyp;Provtagare;Registertyp;ProvplatsID;Provplatsnamn;Specifik provplats;Provtagningsorsak;Provtyp;Provtypspecifikation;Bedömning;Kemisk bedömning;Mikrobiologisk bedömning;Kommentar;År;Provtagningsdatum;Provtagningstid;Inlämningsdatum;Inlämningstid;', 'DM-990908-2773;MFR;PG Vejdes väg 15;351 96;Växjö;0780;Demoproj;Demo-Laboratoriet;NSG;0;;Demo1 vattenverk;;Föreskriven regelbunden undersökning enligt SLVFS 2001:30;Dricksvatten enligt SLVFS 2001:30;Utgående;Nej;Tjänligt;;;;2010;2010-09-07;10:15;2010-09-07;14:15;', '#Provdat', 'Lablittera;Metodbeteckning;Parameter;Mätvärdetext;Mätvärdetal;Mätvärdetalanm;Enhet;Rapporteringsgräns;Detektionsgräns;Mätosäkerhet;Mätvärdespår;Parameterbedömning;Kommentar;', 'DM-990908-2773;SS-EN ISO 7887-1/4;Kalium;<2,5;2,5;;mg/l Pt;;;;;;;', 'DM-990908-2773;SS-EN ISO 7887-1/4;Kalium;<1;1;;mg/l Pt;;;;;;;', '#S**t' ) with utils.tempinput(u'\n'.join(interlab4_lines), 'utf-8') as filename: @mock.patch('midvatten_utils.NotFoundQuestion') @mock.patch('db_utils.QgsProject.instance', utils_for_tests.MidvattenTestSpatialiteNotCreated.mock_instance_settings_database) @mock.patch('import_data_to_db.utils.Askuser', mocks_for_tests.mock_askuser.get_v) @mock.patch('qgis.utils.iface', autospec=True) @mock.patch('import_data_to_db.utils.pop_up_info', autospec=True) @mock.patch('import_data_to_db.qgis.PyQt.QtWidgets.QFileDialog.getOpenFileNames') def _test(self, filename, mock_filenames, mock_skippopup, mock_iface, mock_not_found_question): mock_not_found_question.return_value.answer = 'ok' mock_not_found_question.return_value.value = 'anobsid' mock_not_found_question.return_value.reuse_column = 'obsid' mock_filenames.return_value = [[filename]] importer = Interlab4Import(self.iface.mainWindow(), self.ms) importer.parse_observations_and_populate_gui() importer.start_import(importer.all_lab_results, importer.metadata_filter.get_selected_lablitteras()) _test(self, filename) test_string = utils_for_tests.create_test_string(db_utils.sql_load_fr_db(u'''SELECT * FROM w_qual_lab''')) reference_string = '''(True, [(anobsid, None, DM-990908-2773, Demoproj, 0, 2010-09-07 10:15:00, SS-EN ISO 7887-1/4, Kalium, 2.5, <2,5, mg/l Pt, provtagningsorsak: Dricksvatten enligt SLVFS 2001:30. provtyp: Utgående. provtypspecifikation: Nej. bedömning: Tjänligt. provplatsid: Demo1 vattenverk. specifik provplats: Föreskriven regelbunden undersökning enligt SLVFS 2001:30), (anobsid, None, DM-990908-2773, Demoproj, 0, 2010-09-07 10:15:00, SS-EN ISO 7887-1/4, Kalium (dubblett 1), 1.0, <1, mg/l Pt, provtagningsorsak: Dricksvatten enligt SLVFS 2001:30. provtyp: Utgående. provtypspecifikation: Nej. bedömning: Tjänligt. provplatsid: Demo1 vattenverk. specifik provplats: Föreskriven regelbunden undersökning enligt SLVFS 2001:30)])''' print(reference_string) print(test_string) assert test_string == reference_string test_string = utils_for_tests.create_test_string(db_utils.sql_load_fr_db(u'''SELECT * FROM zz_staff''')) reference_string = '(True, [(0, None)])' assert test_string == reference_string
def test_interlab4_filter_two_patterns(self): interlab4_lines = ( '#Interlab', '#Version=4.0', '#Tecken=UTF-8', '#Textavgränsare=Nej', '#Decimaltecken=,', '#Provadm', 'Lablittera;Namn;Adress;Postnr;Ort;Kommunkod;Projekt;Laboratorium;Provtyp;Provtagare;Registertyp;ProvplatsID;Provplatsnamn;Specifik provplats;Provtagningsorsak;Provtyp;Provtypspecifikation;Bedömning;Kemisk bedömning;Mikrobiologisk bedömning;Kommentar;År;Provtagningsdatum;Provtagningstid;Inlämningsdatum;Inlämningstid;', 'DM-990908-2773;MFR;PG Vejdes väg 15;351 96;Växjö;0780;Demoproj;Demo-Laboratoriet;NSG;DV;;Demo1 vattenverk;;Föreskriven regelbunden undersökning enligt SLVFS 2001:30;Dricksvatten enligt SLVFS 2001:30;Utgående;Nej;Tjänligt;;;;2010;2010-09-07;10:15;2010-09-07;14:15;', 'DM-990908-1000;MFR;PG Vejdes väg 15;351 96;Växjö;0780;Demoproj;Demo-Laboratoriet;NSG;DV;;Demo1 vattenverk;;Föreskriven regelbunden undersökning enligt SLVFS 2001:30;Dricksvatten enligt SLVFS 2001:30;Utgående;Nej;Tjänligt;;;;2010;2010-09-07;10:15;2010-09-07;14:15;', '#Provdat', 'Lablittera;Metodbeteckning;Parameter;Mätvärdetext;Mätvärdetal;Mätvärdetalanm;Enhet;Rapporteringsgräns;Detektionsgräns;Mätosäkerhet;Mätvärdespår;Parameterbedömning;Kommentar;', 'DM-990908-2773;SS-EN ISO 7887-1/4;Kalium;<2,5;2,5;;mg/l Pt;;;;;;;', 'DM-990908-2773;SS-EN ISO 7887-1/4;Kalium;<1;1;;mg/l Pt;;;;;;;', 'DM-990908-1000;SS-EN ISO 7887-1/4;Kalium;<1;1;;mg/l Pt;;;;;;;', '#S**t') patterns = ['DM-990908-2773', 'DM-990908-1000'] with utils.tempinput('\n'.join(interlab4_lines), 'utf-8') as filename: @mock.patch('midvatten_utils.NotFoundQuestion') @mock.patch('import_data_to_db.utils.Askuser', mocks_for_tests.mock_askuser.get_v) @mock.patch('qgis.utils.iface', autospec=True) @mock.patch('import_data_to_db.utils.pop_up_info', autospec=True) @mock.patch( 'import_data_to_db.qgis.PyQt.QtWidgets.QFileDialog.getOpenFileNames' ) def _test(self, filename, mock_filenames, mock_skippopup, mock_iface, mock_not_found_question): mock_not_found_question.return_value.answer = 'ok' mock_filenames.return_value = [[filename]] importer = Interlab4Import(self.iface.mainWindow(), self.midvatten.ms) importer.init_gui() importer.select_files_button.click() gui_utils.set_combobox(importer.specific_meta_filter.combobox, 'lablittera', False) importer.specific_meta_filter.items.paste_data(patterns) importer.metadata_filter.show_only_selected_checkbox.setChecked( True) importer.metadata_filter.update_selection_button.click() return importer.metadata_filter.get_selected_lablitteras() lablitteras = _test(self, filename) print(str(lablitteras)) assert set(lablitteras) == set(patterns)
def test_parse_interlab4_quotechar(self): interlab4_lines = ( u'#Interlab', u'#Version=4.0', u'#Tecken=UTF-8', u'#Textavgränsare=Ja', u'#Decimaltecken=,', u'#Provadm', u'"Lablittera";"Namn";"Adress";"Postnr";"Ort";', u'"DM-990908-2773";"MFR";"PG Vejdes väg 15";"351 96";"Växjö";', u'#Provdat', u'"Lablittera";"Metodbeteckning";"Parameter";"Mätvärdetext";"Mätvärdetal";', u'"DM-990908-2773";"SS-EN ISO 7887-1/4";"Färgtal";;"5";', u'#S**t') with utils.tempinput(u'\n'.join(interlab4_lines), 'utf-8') as testfile: result = self.importinstance.parse([testfile]) result_string = ';'.join( utils_for_tests.dict_to_sorted_list( self.importinstance.parse([testfile]))) reference_string = 'DM-990908-2773;Färgtal;lablittera;DM-990908-2773;metodbeteckning;SS-EN ISO 7887-1/4;mätvärdetal;5;parameter;Färgtal;metadata;adress;PG Vejdes väg 15;lablittera;DM-990908-2773;namn;MFR;ort;Växjö;postnr;351 96' assert result_string == reference_string
def test_parse_diveroffice_file_semicolon_sep(self): f = ('Location=rb1', 'Date/time;Water head[cm];Temperature[°C]', '2016/03/15 10:30:00;26.9;5.18', '2016/03/15 11:00:00;157.7;0.6' ) charset_of_diverofficefile = 'cp1252' with utils.tempinput('\n'.join(f), charset_of_diverofficefile) as path: file_data = DiverofficeImport.parse_diveroffice_file(path, charset_of_diverofficefile) test_string = utils_for_tests.create_test_string(file_data[0]) reference_string = '[[date_time, head_cm, temp_degc, cond_mscm], [2016-03-15 10:30:00, 26.9, 5.18, ], [2016-03-15 11:00:00, 157.7, 0.6, ]]' assert test_string == reference_string assert os.path.basename(path) == file_data[1] assert file_data[2] == 'rb1'
def test_import_files_load(self): afile = '''{"loaded_file": 2}''' as_dict = ast.literal_eval(afile) self.midvatten.ms.settingsdict['secplot_loaded_template'] = '' with utils.tempinput(afile, 'utf-8') as f1: @mock.patch('midvatten_utils.select_files') @mock.patch('midvatten_utils.MessagebarAndLog') @mock.patch('os.path.join') def _test(self, filename, mock_join, mock_messagebar, mock_select_files): mock_join.return_value = '' mock_select_files.return_value = [filename] self.midvatten.ms.settingsdict['secplot_templates'] = '' secplottemplates = PlotTemplates( self.sectionplot, self.template_list, self.edit_button, self.load_button, self.save_as_button, self.import_button, self.remove_button, self.template_folder, 'secplot_templates', 'secplot_loaded_template', defs.secplot_default_template(), self.midvatten.ms) secplottemplates.import_templates() item = [ self.template_list.item(idx) for idx in range(self.template_list.count()) ][0] item.setSelected(True) secplottemplates.load() return secplottemplates, mock_messagebar, filename secplottemplates, mock_messagebar, reference_filename = _test( self, f1) items = [ self.template_list.item(idx) for idx in range(self.template_list.count()) ] filename = items[0].filename assert filename == reference_filename test = utils.anything_to_string_representation( secplottemplates.loaded_template) reference = utils.anything_to_string_representation(as_dict) assert test == reference
def test_parse_interlab4_quotechar_semicolon(self): interlab4_lines = ( u'#Interlab', u'#Version=4.0', u'#Tecken=UTF-8', u'#Textavgränsare=Ja', u'#Decimaltecken=,', u'#Provadm', u'"Lablittera";"Namn";"Adress";"Postnr";"Ort";', u'"DM-990908-2773";"MFR";"PG ;Vejdes väg 15";"351 96";"Växjö";', u'#Provdat', u'"Lablittera";"Metodbeteckning";"Parameter";"Mätvärdetext";"Mätvärdetal";', u'"DM-990908-2773";"SS-EN ISO 7887-1/4";"Färgtal";;"5";', u'#S**t') with utils.tempinput(u'\n'.join(interlab4_lines), 'utf-8') as testfile: result = self.importinstance.parse([testfile]) result_string = '|'.join( utils_for_tests.dict_to_sorted_list( self.importinstance.parse([testfile]))) reference_string = 'DM-990908-2773|Färgtal|lablittera|DM-990908-2773|metodbeteckning|SS-EN ISO 7887-1/4|mätvärdetal|5|parameter|Färgtal|metadata|adress|PG ;Vejdes väg 15|lablittera|DM-990908-2773|namn|MFR|ort|Växjö|postnr|351 96' assert result_string == reference_string
def test_interlab4_parse_filesettings_utf8(self): interlab4_lines = ( u"#Interlab", u"#Version=4.0", u"#Tecken=UTF-8", u"#Textavgränsare=Nej", u"#Decimaltecken=,", u"#Provadm", u"Lablittera;Namn;Adress;Postnr;Ort;Kommunkod;Projekt;Laboratorium;Provtyp;Provtagare;Registertyp;ProvplatsID;Provplatsn", ) with utils.tempinput(u'\n'.join(interlab4_lines), 'utf-8') as testfile: result_string = str( utils_for_tests.dict_to_sorted_list( self.importinstance.parse_filesettings(testfile))) reference_string = "['False', '4.0', 'utf-8', ',', 'False']" assert result_string == reference_string
def test_parse_diveroffice_warning_missing_head_cm(self, mock_messagebarandlog): f = (u'Location=rb1', u'Temperature[°C];2:Spec.cond.[mS/cm];Date/time', u'5.18;2;2016/03/15 10:30:00', u'0.6;3;2016/03/15 11:00:00') charset_of_diverofficefile = u'cp1252' with utils.tempinput(u'\n'.join(f), charset_of_diverofficefile) as path: file_data = DiverofficeImport.parse_diveroffice_file( path, charset_of_diverofficefile) test_string = utils_for_tests.create_test_string(file_data[0]) reference_string = u'[[date_time, head_cm, temp_degc, cond_mscm], [2016-03-15 10:30:00, , 5.18, 2.0], [2016-03-15 11:00:00, , 0.6, 3.0]]' assert len(mock_messagebarandlog.mock_calls) == 1 assert test_string == reference_string assert os.path.basename(path) == file_data[1] assert file_data[2] == u'rb1'
def test_parse_diveroffice_warning_missing_head_cm(self, mock_messagebarandlog): f = ('Location=rb1', 'Temperature[°C];2:Spec.cond.[mS/cm];Date/time', '5.18;2;2016/03/15 10:30:00', '0.6;3;2016/03/15 11:00:00' ) charset_of_diverofficefile = 'cp1252' with utils.tempinput('\n'.join(f), charset_of_diverofficefile) as path: file_data = DiverofficeImport.parse_diveroffice_file(path, charset_of_diverofficefile) test_string = utils_for_tests.create_test_string(file_data[0]) reference_string = '[[date_time, head_cm, temp_degc, cond_mscm], [2016-03-15 10:30:00, , 5.18, 2.0], [2016-03-15 11:00:00, , 0.6, 3.0]]' assert len(mock_messagebarandlog.mock_calls) == 1 assert test_string == reference_string assert os.path.basename(path) == file_data[1] assert file_data[2] == 'rb1'
def test_interlab4_to_table_matvardetalanm(self): interlab4_lines = ( u'#Interlab', u'#Version=4.0', u'#Tecken=UTF-8', u'#Textavgränsare=Nej', u'#Decimaltecken=,', u'#Provadm', u'Lablittera;Namn;Adress;Postnr;Ort;Kommunkod;Projekt;Laboratorium;Provtyp;Provtagare;Registertyp;ProvplatsID;Provplatsnamn;Specifik provplats;Provtagningsorsak;Provtyp;Provtypspecifikation;Bedömning;Kemisk bedömning;Mikrobiologisk bedömning;Kommentar;År;Provtagningsdatum;Provtagningstid;Inlämningsdatum;Inlämningstid;obsid', u'DM-990908-2773;MFR;PG Vejdes väg 15;351 96;Växjö;0780;Demoproj;Demo-Laboratoriet;NSG;DV;;Demo1 vattenverk;;Föreskriven regelbunden undersökning enligt SLVFS 2001:30;Dricksvatten enligt SLVFS 2001:30;Utgående;Nej;Tjänligt;;;;2010;2010-09-07;10:15;2010-09-07;14:15;anobsid', u'#Provdat', u'Lablittera;Metodbeteckning;Parameter;Mätvärdetext;Mätvärdetal;Mätvärdetalanm;Enhet;Rapporteringsgräns;Detektionsgräns;Mätosäkerhet;Mätvärdespår;Parameterbedömning;Kommentar;', u'DM-990908-2773;SS-EN ISO 7887-1/4;Färgtal;;5;<;mg/l Pt;;;±1;;;;', u'#S**t') with utils.tempinput(u'\n'.join(interlab4_lines), 'utf-8') as testfile: parsed_result = self.importinstance.parse([testfile]) result_string = utils_for_tests.create_test_string( self.importinstance.to_table(parsed_result)) # "obsid, depth, report, project, staff, date_time, anameth, parameter, reading_num, reading_txt, unit, comment" reference_string = u'[[obsid, depth, report, project, staff, date_time, anameth, parameter, reading_num, reading_txt, unit, comment], [anobsid, None, DM-990908-2773, Demoproj, DV, 2010-09-07 10:15:00, SS-EN ISO 7887-1/4, Färgtal, 5, <5, mg/l Pt, provtagningsorsak: Dricksvatten enligt SLVFS 2001:30. provtyp: Utgående. provtypspecifikation: Nej. bedömning: Tjänligt. provplatsid: Demo1 vattenverk. specifik provplats: Föreskriven regelbunden undersökning enligt SLVFS 2001:30. mätosäkerhet: ±1]]' assert result_string == reference_string
def test_write_printlist_to_file(mock_MessagebarAndLog, mock_get_save_file_name_no_extension): lines = ( "NAME;INPUTTYPE;HINT", "Value;numberDecimal|numberSigned;in m to top of tube", "Comment;text;make comment...", "NAME;SUBNAME;LAT;LON;INPUTFIELD", "Location1;Location1_1;60.56309363068154;15.494655445218088;Value|Comment", "Location2;Location2_1;60.532112200075446;15.509033761918545;Value|Comment") with utils.tempinput('', 'utf-8') as testfile: mock_get_save_file_name_no_extension.return_value = testfile export_fieldlogger.ExportToFieldLogger.write_printlist_to_file(lines) with open(testfile, 'r') as f: result_lines = [row.rstrip('\n') for row in f] assert tuple(lines) == tuple(result_lines)
def test_staff_not_given(self): utils.sql_alter_db(u'''INSERT INTO obs_points ("obsid") VALUES ("Rb1")''') f = [ u"Location;date_time;value;comment\n", u"Rb1202.sample;30-03-2016;15:31:30;hej2;s.comment\n", u"Rb1608.level;30-03-2016;15:34:40;testc;l.comment\n", u"Rb1615.flow;30-03-2016;15:30:09;357;f.Accvol.m3\n", u"Rb1615.flow;30-03-2016;15:30:09;gick bra;f.comment\n", u"Rb1608.level;30-03-2016;15:34:13;ergv;l.comment\n", u"Rb1608.level;30-03-2016;15:34:13;555;l.meas.m\n", u"Rb1512.sample;30-03-2016;15:31:30;899;s.turbiditet.FNU\n", u"Rb1505.quality;30-03-2016;15:29:26;hej;q.comment\n", u"Rb1505.quality;30-03-2016;15:29:26;863;q.konduktivitet.µS/cm\n", u"Rb1512.quality;30-03-2016;15:30:39;test;q.comment\n", u"Rb1512.quality;30-03-2016;15:30:39;67;q.syre.mg/L\n", u"Rb1512.quality;30-03-2016;15:30:39;8;q.temperatur.grC\n", u"Rb1512.quality;30-03-2016;15:30:40;58;q.syre.%\n", ] with utils.tempinput(''.join(f)) as filename: @mock.patch('midvatten_utils.QgsProject.instance', MOCK_DBPATH.get_v) @mock.patch('import_fieldlogger.utils.QtGui.QFileDialog.getOpenFileNames') @mock.patch('import_fieldlogger.utils.QtGui.QInputDialog.getText') @mock.patch('import_fieldlogger.utils.MessagebarAndLog') @mock.patch('midvatten_utils.QgsProject.instance', MOCK_DBPATH.get_v) def _test_staff_not_given(self, filename, mock_MessagebarAndLog, mock_charset, mock_savefilename ): mock_charset.return_value = ('utf-8', True) mock_savefilename.return_value = [filename] ms = MagicMock() ms.settingsdict = OrderedDict() importer = FieldloggerImport(self.iface.mainWindow(), ms) importer.parse_observations_and_populate_gui() importer.start_import(importer.observations) mock_MessagebarAndLog.critical.assert_called_with(bar_msg=u'Import error, staff not given')
def test_import_files_load(self): afile = '''{"loaded_file": 2}''' as_dict = ast.literal_eval(afile) self.midvatten.ms.settingsdict['secplot_loaded_template'] = '' with utils.tempinput(afile, 'utf-8') as f1: @mock.patch('midvatten_utils.select_files') @mock.patch('midvatten_utils.MessagebarAndLog') @mock.patch('os.path.join') def _test(self, filename, mock_join, mock_messagebar, mock_select_files): mock_join.return_value = '' mock_select_files.return_value = [filename] self.midvatten.ms.settingsdict['secplot_templates'] = '' secplottemplates = PlotTemplates(self.sectionplot, self.template_list, self.edit_button, self.load_button, self.save_as_button, self.import_button, self.remove_button, self.template_folder, 'secplot_templates', 'secplot_loaded_template', defs.secplot_default_template(), self.midvatten.ms) secplottemplates.import_templates() item = [self.template_list.item(idx) for idx in range(self.template_list.count())][0] item.setSelected(True) secplottemplates.load() return secplottemplates, mock_messagebar, filename secplottemplates, mock_messagebar, reference_filename = _test(self, f1) items = [self.template_list.item(idx) for idx in range(self.template_list.count())] filename = items[0].filename assert filename == reference_filename test = utils.anything_to_string_representation(secplottemplates.loaded_template) reference = utils.anything_to_string_representation(as_dict) assert test == reference
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_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.MidvattenTestSpatialiteNotCreated.mock_instance_settings_database) @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_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_wlvllogg_import_from_diveroffice_files_not_skip_missing_water_level( 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,,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')''') db_utils.sql_alter_db( '''INSERT INTO obs_points (obsid) VALUES ('rb3')''') db_utils.sql_alter_db( '''INSERT INTO w_levels_logger (obsid, date_time, head_cm) VALUES ('rb1', '2016-03-15 10:31', '5.0')''' ) 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] @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.import_all_data.checked = True importer.confirm_names.checked = False importer.skip_rows.checked = False 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_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:31, 5.0, None, None, None, None), (rb1, 2016-03-15 10:30:00, 1.0, 10.0, None, None, None), (rb1, 2016-03-15 11:00:00, None, 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), (rb3, 2016-05-15 10:30:00, 3.0, 30.0, 5.0, None, None), (rb3, 2016-05-15 11:00:00, 31.0, 301.0, 6.0, None, None)])''' assert test_string == reference_string
def test_full_integration_test_to_db(self): utils.sql_alter_db(u'''INSERT INTO obs_points ("obsid") VALUES ("Rb1202")''') utils.sql_alter_db(u'''INSERT INTO obs_points ("obsid") VALUES ("Rb1608")''') utils.sql_alter_db(u'''INSERT INTO obs_points ("obsid") VALUES ("Rb1615")''') utils.sql_alter_db(u'''INSERT INTO obs_points ("obsid") VALUES ("Rb1505")''') utils.sql_alter_db(u'''INSERT INTO obs_points ("obsid") VALUES ("Rb1512")''') utils.sql_alter_db(u'''INSERT INTO zz_staff ("staff") VALUES ("teststaff")''') utils.sql_alter_db(u'''INSERT or ignore INTO zz_flowtype ("type") VALUES ("Accvol")''') f = [ u"Location;date_time;value;comment\n", u"Rb1202.sample;30-03-2016;15:31:30;hej2;s.comment\n", u"Rb1608.level;30-03-2016;15:34:40;testc;l.comment\n", u"Rb1615.flow;30-03-2016;15:30:09;357;f.Accvol.m3\n", u"Rb1615.flow;30-03-2016;15:30:09;gick bra;f.comment\n", u"Rb1608.level;30-03-2016;15:34:13;ergv;l.comment\n", u"Rb1608.level;30-03-2016;15:34:13;555;l.meas.m\n", u"Rb1512.sample;30-03-2016;15:31:30;899;s.turbiditet.FNU\n", u"Rb1505.quality;30-03-2016;15:29:26;hej;q.comment\n", u"Rb1505.quality;30-03-2016;15:29:26;863;q.konduktivitet.µS/cm\n", u"Rb1512.quality;30-03-2016;15:30:39;test;q.comment\n", u"Rb1512.quality;30-03-2016;15:30:39;67;q.syre.mg/L\n", u"Rb1512.quality;30-03-2016;15:30:39;8;q.temperatur.grC\n", u"Rb1512.quality;30-03-2016;15:30:40;58;q.syre.%\n", ] with utils.tempinput(''.join(f)) as filename: @mock.patch('midvatten_utils.QgsProject.instance', MOCK_DBPATH.get_v) @mock.patch('import_fieldlogger.utils.askuser') @mock.patch('import_fieldlogger.utils.NotFoundQuestion') @mock.patch('import_fieldlogger.utils.QtGui.QFileDialog.getOpenFileNames') @mock.patch('import_fieldlogger.utils.QtGui.QInputDialog.getText') @mock.patch('import_fieldlogger.utils.MessagebarAndLog') @mock.patch('midvatten_utils.QgsProject.instance', MOCK_DBPATH.get_v) def _full_integration_test_to_db(self, filename, mock_MessagebarAndLog, mock_charset, mock_savefilename, mock_ask_instrument, mock_vacuum): mock_vacuum.return_value.result = 1 mock_charset.return_value = ('utf-8', True) mock_savefilename.return_value = [filename] mock_ask_instrument.return_value.value = u'testid' ms = MagicMock() ms.settingsdict = OrderedDict() importer = FieldloggerImport(self.iface.mainWindow(), ms) importer.parse_observations_and_populate_gui() #Set settings: for setting in importer.settings: if isinstance(setting, import_fieldlogger.StaffQuestion): setting.staff = u'teststaff' stored_settings = [[u's.comment', [[u'import_method', u'comments']]], [u'l.comment', [[u'import_method', u'comments']]], [u'f.comment', [[u'import_method', u'comments']]], [u'q.comment', [[u'import_method', u'comments']]], [u'l.meas.m', [[u'import_method', u'w_levels']]], [u'f.Accvol.m3', [[u'import_method', u'w_flow'], [u'flowtype', u'Accvol'], [u'unit', u'm3']]], [u's.turbiditet.FNU', [[u'import_method', u'w_qual_field'], [u'parameter', u'turbiditet'], [u'unit', u'FNU'], [u'depth', u''], [u'instrument', u'testid']]], [u'q.konduktivitet.µS/cm', [[u'import_method', u'w_qual_field'], [u'parameter', u'konduktivitet'], [u'unit', u'µS/cm'], [u'depth', u''], [u'instrument', u'testid']]], [u'q.syre.mg/L', [[u'import_method', u'w_qual_field'], [u'parameter', u'syre'], [u'unit', u'mg/L'], [u'depth', u''], [u'instrument', u'testid']]], [u'q.syre.%', [[u'import_method', u'w_qual_field'], [u'parameter', u'syre'], [u'unit', u'%'], [u'depth', u''], [u'instrument', u'testid']]], [u'q.temperatur.grC', [[u'import_method', u'w_qual_field'], [u'parameter', u'temperatur'], [u'unit', u'grC'], [u'depth', u''], [u'instrument', u'testid']]]] importer.set_parameters_using_stored_settings(stored_settings, importer.parameter_imports) importer.start_import(importer.observations) _full_integration_test_to_db(self, filename) test_string = create_test_string(dict([(k, utils.sql_load_fr_db(u'select * from %s'%k)) for k in (u'w_levels', u'w_qual_field', u'w_flow', u'zz_staff', u'comments')])) reference_string = u'{comments: (True, [(Rb1202, 2016-03-30 15:31:30, hej2, teststaff), (Rb1608, 2016-03-30 15:34:40, testc, teststaff)]), w_flow: (True, [(Rb1615, testid, Accvol, 2016-03-30 15:30:09, 357.0, m3, gick bra)]), w_levels: (True, [(Rb1608, 2016-03-30 15:34:13, 555.0, None, None, ergv)]), w_qual_field: (True, [(Rb1512, teststaff, 2016-03-30 15:30:39, testid, syre, 67.0, 67, mg/L, None, test), (Rb1512, teststaff, 2016-03-30 15:31:30, testid, turbiditet, 899.0, 899, FNU, None, None), (Rb1505, teststaff, 2016-03-30 15:29:26, testid, konduktivitet, 863.0, 863, µS/cm, None, hej), (Rb1512, teststaff, 2016-03-30 15:30:40, testid, syre, 58.0, 58, %, None, None), (Rb1512, teststaff, 2016-03-30 15:30:39, testid, temperatur, 8.0, 8, grC, None, test)]), zz_staff: (True, [(teststaff, None)])}' 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_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_full_into_zz_flowtype(self): utils.sql_alter_db(u'''INSERT INTO obs_points ("obsid") VALUES ("2")''') #utils.sql_alter_db(u'''INSERT INTO obs_points ("obsid") VALUES ("5")''') f = [u'LOCATION;DATE;TIME;VALUE;TYPE\n', u'5.2892.level;12-12-2016;10:02:49;comment;l.comment\n', u'5.2892.level;12-12-2016;10:02:49;123;meas.m\n', u'5.2892.level;12-12-2016;10:02:57;onlycomment;l.comment\n', u'2.2892.flow;12-12-2016;10:03:07;123;Aveflow.m3/s\n', u'2.2892.flow;12-12-2016;10:03:15;onlycomment;f.comment\n', u'2.2892.comment;12-12-2016;10:03:24;onlycomment;comment\n'] with utils.tempinput(''.join(f)) as filename: @mock.patch('midvatten_utils.QgsProject.instance', MOCK_DBPATH.get_v) @mock.patch('import_fieldlogger.utils.askuser') @mock.patch('import_fieldlogger.utils.NotFoundQuestion') @mock.patch('import_fieldlogger.utils.QtGui.QFileDialog.getOpenFileNames') @mock.patch('import_fieldlogger.utils.QtGui.QInputDialog.getText') @mock.patch('import_fieldlogger.utils.MessagebarAndLog') @mock.patch('midvatten_utils.QgsProject.instance', MOCK_DBPATH.get_v) def _test(self, filename, mock_MessagebarAndLog, mock_charset, mock_savefilename, mock_ask_instrument, mock_askuser): mock_charset.return_value = ('utf-8', True) mock_savefilename.return_value = [filename] mock_ask_instrument.return_value.value = u'testid' def side_effect(*args, **kwargs): mock_result = mock.MagicMock() if len(args) > 1: if args[1].startswith(u'Do you want to confirm'): mock_result.result = 0 return mock_result 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 = FieldloggerImport(self.iface.mainWindow(), ms) importer.parse_observations_and_populate_gui() #Set settings: for setting in importer.settings: if isinstance(setting, import_fieldlogger.StaffQuestion): setting.staff = u'teststaff' stored_settings = [[u'f.comment', [[u'import_method', u'comments']]], [u'Aveflow.m3/s', [[u'import_method', u'w_flow'], [u'flowtype', u'Momflow2'], [u'unit', u'aunit']]]] importer.set_parameters_using_stored_settings(stored_settings, importer.parameter_imports) importer.start_import(importer.observations) _test(self, filename) test_string = create_test_string(dict([(k, utils.sql_load_fr_db(u'select * from %s'%k)) for k in (u'w_flow', u'zz_staff', u'comments', u'zz_flowtype')])) reference_string = u'{comments: (True, [(2, 2016-12-12 10:03:15, onlycomment, teststaff)]), w_flow: (True, [(2, testid, Momflow2, 2016-12-12 10:03:07, 123.0, aunit, None)]), zz_flowtype: (True, [(Accvol, Accumulated volume), (Momflow, Momentary flow rate), (Aveflow, Average flow since last reading), (Momflow2, None)]), zz_staff: (True, [(teststaff, None)])}' assert test_string == reference_string