diff --git a/tests/test_model/test_handling_data.py b/tests/test_model/test_handling_data.py
index 653c1c7344d10879c946e3c70b17f31045869904..a91e2f28d0bb90cf8af01270bcd07a9adaa5572a 100644
--- a/tests/test_model/test_handling_data.py
+++ b/tests/test_model/test_handling_data.py
@@ -195,7 +195,7 @@ class TestReadWaveformMSeed(TestCase):
         self.channel_id = self.mseed_waveform_trace.stats['channel']
         # This list is only ever written to, so we can keep it empty
         self.traces_info = []
-        self.data_time = [12512512, 12215125121]
+        self.data_time = [0, 0]
         self.temp_dir = tempfile.TemporaryDirectory()
 
         patcher = patch(
@@ -271,5 +271,108 @@ class TestReadWaveformMSeed(TestCase):
         self.assertEqual(self.data_time, expected_updated_data_time)
 
 
-    # Test that dataTime is updated correctly
+class TestReadWaveformReftek(TestCase):
+    @classmethod
+    def setUpClass(cls) -> None:
+        rt130_dir = TEST_DATA_DIR.joinpath(
+            'RT130-sample/2017149.92EB/2017150/92EB')
+        cls.rt130_waveform_file = rt130_dir.joinpath('1/000000015_0036EE80')
+        cls.rt130_waveform = Reftek130.from_file(cls.rt130_waveform_file)
+        cls.rt130_waveform_stream = Reftek130.to_stream(cls.rt130_waveform)
+        cls.rt130_waveform_trace = cls.rt130_waveform_stream[0]
+
+    def setUp(self) -> None:
+        # The first element of the key, the unit ID, should be a character
+        # string. However, the unit ID is stored as a byte string in the data
+        # stream. While having the unit ID as a byte string should not cause
+        # any problem with the test, we convert it to a character string anyway
+        # to be consistent with how readWaveformReftek is called.
+        self.key = (
+            self.rt130_waveform_trace.stats['unit_id'].decode('utf-8'),
+            self.rt130_waveform_trace.stats['experiment_number']
+        )
+        self.read_data = {}
+        self.data_time = [0, 0]
+        self.temp_dir = tempfile.TemporaryDirectory()
+
+        patcher = patch(
+            'sohstationviewer.model.handling_data.readWaveformTrace')
+        self.addCleanup(patcher.stop)
+        self.mock_readWaveformTrace = patcher.start()
+        self.mock_readWaveformTrace.return_value = {
+            'startTmEpoch': 0,
+            'endTmEpoch': 0,
+        }
+
+    def tearDown(self) -> None:
+        self.temp_dir.cleanup()
+
+    def test_all_traces_are_processed(self):
+        readWaveformReftek(self.rt130_waveform, self.key, self.read_data,
+                           self.data_time, self.temp_dir.name)
+        num_traces_read = 0
+        for channel_data in self.read_data.values():
+            num_traces_read += len(channel_data['tracesInfo'])
+        self.assertTrue(num_traces_read, len(self.rt130_waveform_stream))
+
+    def test_read_data_updated_with_all_channels(self):
+        readWaveformReftek(self.rt130_waveform, self.key, self.read_data,
+                           self.data_time, self.temp_dir.name)
+        self.assertTupleEqual(tuple(self.read_data.keys()),
+                              ('DS1-1', 'DS1-2', 'DS1-3'))
+
+    def test_read_data_existing_channel_appended_to(self):
+        self.read_data = {
+            'DS1-1':
+                {'tracesInfo':
+                     [{'startTmEpoch': 0, 'endTmEpoch': 0}],
+                 'samplerate': 40.0}
+        }
+        readWaveformReftek(self.rt130_waveform, self.key, self.read_data,
+                           self.data_time, self.temp_dir.name)
+        self.assertEqual(len(self.read_data['DS1-1']['tracesInfo']), 2)
+
+    def test_readWaveformTrace_called(self):
+        readWaveformReftek(self.rt130_waveform, self.key, self.read_data,
+                           self.data_time, self.temp_dir.name)
+        self.assertTrue(self.mock_readWaveformTrace.called)
+
+    def test_start_data_time_earlier_than_earliest_start_time(self):
+        self.mock_readWaveformTrace.return_value = {
+            'startTmEpoch': 51251,
+            'endTmEpoch': 2623623,
+        }
+        start_time = 0
+        self.data_time = [start_time, 1625532949]
+
+        readWaveformReftek(self.rt130_waveform, self.key, self.read_data,
+                           self.data_time, self.temp_dir.name)
+        self.assertEqual(self.data_time[0], start_time)
+
+    def test_end_data_time_later_than_latest_start_time(self):
+        # End time set to be the last second of 9999 so as to be later than the
+        # end time of any test data.
+        self.mock_readWaveformTrace.return_value = {
+            'startTmEpoch': 51251,
+            'endTmEpoch': 2623623,
+        }
+        end_time = 253402326000
+        self.data_time = [1625443222, end_time]
+
+        readWaveformReftek(self.rt130_waveform, self.key, self.read_data,
+                           self.data_time, self.temp_dir.name)
+        self.assertEqual(self.data_time[1], end_time)
 
+    def test_data_time_is_between_earliest_start_and_latest_end_time(self):
+        self.mock_readWaveformTrace.return_value = {
+            'startTmEpoch': 51251,
+            'endTmEpoch': 2623623,
+        }
+        start_time = 512579
+        end_time = 2623616
+        self.data_time = [start_time, end_time]
+
+        expected_updated_data_time = [51251, 2623623]
+        readWaveformReftek(self.rt130_waveform, self.key, self.read_data,
+                           self.data_time, self.temp_dir.name)
+        self.assertEqual(self.data_time, expected_updated_data_time)