From 50ef46a224e099bebca7722193d3fd95a8336ed1 Mon Sep 17 00:00:00 2001
From: kienle <kienle@passcal.nmt.edu>
Date: Tue, 27 Sep 2022 15:16:10 -0600
Subject: [PATCH] Add tests for checkSOHChan

---
 tests/test_model/test_handling_data.py | 56 +++++++++++++++++++++++---
 1 file changed, 50 insertions(+), 6 deletions(-)

diff --git a/tests/test_model/test_handling_data.py b/tests/test_model/test_handling_data.py
index d5762c67c..e2ed926fd 100644
--- a/tests/test_model/test_handling_data.py
+++ b/tests/test_model/test_handling_data.py
@@ -559,7 +559,7 @@ class TestSaveData2File(TestCase):
 
 class TestCheckChan(TestCase):
     def setUp(self) -> None:
-        self.req_soh_chans = ['LCE', 'LCQ', 'VM1']
+        self.req_soh_chans = ['LCE', 'LCQ']
         self.req_wf_chans = ['LHE', 'HHE']
 
         check_soh_chan_patcher = patch(
@@ -591,13 +591,57 @@ class TestCheckChan(TestCase):
         self.assertTrue(self.mock_check_wf_chan.called)
 
     def test_channel_is_soh_and_is_requested(self):
-        soh_channel = 'LCE'
-        ret = checkChan(soh_channel, self.req_soh_chans, self.req_wf_chans)
-        self.assertEqual(ret, 'SOH')
-        self.assertTrue(self.mock_check_soh_chan.called)
+        with self.subTest('test_normal_channel'):
+            soh_channel = 'LCE'
+            ret = checkChan(soh_channel, self.req_soh_chans, self.req_wf_chans)
+            self.assertEqual(ret, 'SOH')
+            self.assertTrue(self.mock_check_soh_chan.called)
+        self.mock_check_soh_chan.reset_mock()
+        with self.subTest('test_mass_position_channel'):
+            soh_channel = 'VM1'
+            ret = checkChan(soh_channel, self.req_soh_chans, self.req_wf_chans)
+            self.assertEqual(ret, 'SOH')
+            self.assertTrue(self.mock_check_soh_chan.called)
 
     def test_channel_is_soh_but_not_requested(self):
         soh_channel = 'VKI'
         ret = checkChan(soh_channel, self.req_soh_chans, self.req_wf_chans)
         self.assertFalse(ret)
-        self.assertTrue(self.mock_check_soh_chan.called)
\ No newline at end of file
+        self.assertTrue(self.mock_check_soh_chan.called)
+
+
+class TestCheckSohChan(TestCase):
+    def setUp(self) -> None:
+        self.req_soh_chans = ['LCE', 'LCQ', 'EX?']
+        # Generated using the builtin random library with a seed of
+        # 22589824271860044. This seed is obtained by converting the string
+        # PASSCAL to bytes and converting the resulting bytes to an integer
+        # with big endian ordering.
+        self.sample_channel_ids = ['ODV', 'QGA', 'NF4', 'OLY', 'UZM']
+
+    def test_all_channels_requested(self):
+        self.req_soh_chans = []
+
+        for channel_id in self.sample_channel_ids:
+            self.assertTrue(checkSOHChan(channel_id, self.req_soh_chans))
+
+    def test_channel_is_requested(self):
+        with self.subTest('test_normal_channels'):
+            channel_id = 'LCE'
+            self.assertTrue(checkSOHChan(channel_id, self.req_soh_chans))
+        with self.subTest('test_mass_position_channels'):
+            base_channel_id = 'VM'
+            channel_suffixes = ['0', '1', '2', '3', '4', '5', '6']
+            for suffix in channel_suffixes:
+                channel_id = base_channel_id + suffix
+                self.assertTrue(checkSOHChan(channel_id, self.req_soh_chans))
+        with self.subTest('test_external_soh_channels'):
+            base_channel_id = 'EX'
+            channel_suffixes = ['1', '2', '3']
+            for suffix in channel_suffixes:
+                channel_id = base_channel_id + suffix
+                self.assertTrue(checkSOHChan(channel_id, self.req_soh_chans))
+
+    def test_channel_not_requested(self):
+        for channel_id in self.sample_channel_ids:
+            self.assertFalse(checkSOHChan(channel_id, self.req_soh_chans))
\ No newline at end of file
-- 
GitLab