diff --git a/tests/test_database/__init__.py b/tests/test_database/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/tests/test_database/test_extract_data.py b/tests/test_database/test_extract_data.py new file mode 100644 index 0000000000000000000000000000000000000000..735c0548359f2444cbac63a65d8e8451bafdd2ac --- /dev/null +++ b/tests/test_database/test_extract_data.py @@ -0,0 +1,166 @@ +import unittest + +from sohstationviewer.database.extractData import ( + getChanPlotInfo, + getWFPlotInfo, + getChanLabel, + signatureChannels, + getColorDef, + getColorRanges, +) + + +class TestExtractData(unittest.TestCase): + def test_get_chan_plot_info_good_channel_and_data_type(self): + """ + Test basic functionality of getChanPlotInfo - channel and data type + combination exists in database table `Channels` + """ + expected_result = {'channel': 'SOH/Data Def', + 'plotType': 'upDownDots', + 'height': 2, + 'unit': '', + 'linkedChan': None, + 'convertFactor': 1, + 'label': 'SOH/Data Def', + 'fixPoint': 0, + 'valueColors': '0:W|1:C'} + self.assertDictEqual(getChanPlotInfo('SOH/Data Def', 'RT130'), + expected_result) + + def test_get_chan_plot_info_data_type_is_unknown(self): + """ + Test basic functionality of getChanPlotInfo - data type is the string + 'Unknown'. + """ + # Channel does not exist in database + expected_result = {'channel': 'DEFAULT', + 'plotType': 'linesDots', + 'height': 2, + 'unit': '', + 'linkedChan': None, + 'convertFactor': 1, + 'label': 'DEFAULT-Bad Channel ID', + 'fixPoint': '0', + 'valueColors': None} + self.assertDictEqual(getChanPlotInfo('Bad Channel ID', 'Unknown'), + expected_result) + + # Channel exist in database + expected_result = {'channel': 'LCE', + 'plotType': 'linesDots', + 'height': 3, + 'unit': 'us', + 'linkedChan': None, + 'convertFactor': 1, + 'label': 'LCE-PhaseError', + 'fixPoint': 0, + 'valueColors': 'L:W'} + self.assertDictEqual(getChanPlotInfo('LCE', 'Unknown'), + expected_result) + + def test_get_chan_plot_info_bad_channel_or_data_type(self): + """ + Test basic functionality of getChanPlotInfo - channel and data type + combination does not exist in database table Channels and data type is + not the string 'Unknown'. + """ + # noinspection PyDictCreation + expected_result = {'channel': 'DEFAULT', + 'plotType': 'linesDots', + 'height': 2, + 'unit': '', + 'linkedChan': None, + 'convertFactor': 1, + 'label': None, # Change for each test case + 'fixPoint': '0', + 'valueColors': None} + + # Data type has None value. None value comes from + # controller.processing.detectDataType. + expected_result['label'] = 'DEFAULT-SOH/Data Def' + self.assertDictEqual(getChanPlotInfo('SOH/Data Def', None), + expected_result) + + # Channel and data type are empty strings + expected_result['label'] = 'DEFAULT-' + self.assertDictEqual(getChanPlotInfo('', ''), expected_result) + + # Channel exists in database but data type does not + expected_result['label'] = 'DEFAULT-SOH/Data Def' + self.assertDictEqual(getChanPlotInfo('SOH/Data Def', 'Bad Data Type'), + expected_result) + + # Data type exists in database but channel does not + expected_result['label'] = 'DEFAULT-Bad Channel ID' + self.assertDictEqual(getChanPlotInfo('Bad Channel ID', 'RT130'), + expected_result) + + # Both channel and data type exists in database but not their + # combination + expected_result['label'] = 'DEFAULT-SOH/Data Def' + self.assertDictEqual(getChanPlotInfo('SOH/Data Def', 'Q330'), + expected_result) + + def test_get_wf_plot_info(self): + """ + Test basic functionality of getWFPlotInfo - ensures returned dictionary + contains all the needed key. Bad channel IDs cases are handled in tests + for getChanLabel. + """ + result = getWFPlotInfo('CH1') + expected_keys = ('param', 'plotType', 'valueColors', 'height', + 'label', 'unit', 'channel') + self.assertTupleEqual(tuple(result.keys()), expected_keys) + + def test_get_chan_label_good_channel_id(self): + """ + Test basic functionality of getChanLabel - channel ID ends in one + of the keys in conf.dbSettings.dbConf['seisLabel'] or starts with 'DS' + """ + # Channel ID does not start with 'DS' + self.assertEqual(getChanLabel('CH1'), 'CH1-NS') + self.assertEqual(getChanLabel('CH2'), 'CH2-EW') + + # Channel ID starts with 'DS' + self.assertEqual(getChanLabel('DS-TEST-CHANNEL'), 'DS-TEST-CHANNEL') + + def test_get_chan_label_bad_channel_id(self): + """ + Test basic functionality of getChanLabel - channel ID does not end in + one of the keys in conf.dbSettings.dbConf['seisLabel'] or is the empty + string. + """ + self.assertRaises(KeyError, getChanLabel, 'CHG') + self.assertRaises(IndexError, getChanLabel, '') + + def test_signature_channels(self): + """Test basic functionality of signatureChannels""" + self.assertIsInstance(signatureChannels(), dict) + + def test_get_color_def(self): + """Test basic functionality of getColorDef""" + colors = getColorDef() + expected_colors = ['K', 'U', 'C', 'G', 'Y', 'R', 'M', 'E'] + self.assertListEqual(colors, expected_colors) + + def test_get_color_ranges(self): + """Test basic functionality of getColorDef""" + names, all_counts, all_display_strings = getColorRanges() + num_color_def = 7 + + expected_names = ['antarctica', 'low', 'med', 'high'] + self.assertEqual(names, expected_names) + + # Check that each name correspond to a list of counts and list of + # of strings to display + self.assertEqual(len(names), len(all_counts)) + self.assertEqual(len(names), len(all_display_strings)) + + # Check that each list of counts have enough items + for counts in all_counts: + self.assertEqual(len(counts), num_color_def) + + # Check that each list of strings to display have enough items + for display_strings in all_display_strings: + self.assertEqual(len(display_strings), num_color_def + 1)