from unittest import TestCase

from sohstationviewer.view.util.functions import (
    get_soh_messages_for_view, log_str)

from sohstationviewer.view.util.enums import LogType


class TestGetSOHMessageForView(TestCase):

    def test_no_or_empty_textlog(self):
        soh_msg_channels = {"ACE": ["test1\ntest2", "test3"],
                            "LOG": ["test4"]}
        soh_msg_for_view = {'ACE': ['test1', 'test2', 'test3'],
                            'LOG': ['test4']}

        with self.subTest('test_no_TEXT_str_dataset_key'):
            soh_messages = {"key1": soh_msg_channels}
            ret = get_soh_messages_for_view("key1", soh_messages)
            self.assertNotIn('TEXT', list(ret.keys()))
            self.assertEqual(ret, soh_msg_for_view)

        with self.subTest('test_empty_TEXT_tupple_dataset_key'):
            soh_messages = {"TEXT": [], ("key1", "key2"):  soh_msg_channels}
            ret = get_soh_messages_for_view(("key1", "key2"), soh_messages)
            self.assertNotIn('TEXT', list(ret.keys()))
            self.assertEqual(ret, soh_msg_for_view)

        # no key "TEXT", dataset has no channels
        with self.subTest('test_no_TEXT_no_SOH_channels_for_dataset'):
            soh_messages = {"key1": {}}
            ret = get_soh_messages_for_view("key1", soh_messages)
            self.assertEqual(ret, {})

    def test_some_empty_soh_message(self):
        soh_messages = {"TEXT": ['text1', 'text2\ntext3'],
                        "key1": {"ACE": ["test1\ntest2", "test3"],
                                 "LOG": []}}
        # channel LOG is empty
        ret = get_soh_messages_for_view("key1", soh_messages)
        self.assertEqual(ret,
                         {'TEXT': ['text1', 'text2', 'text3'],
                          'ACE': ['test1', 'test2', 'test3'],
                          'LOG': []})


class TestLogStr(TestCase):
    def test_log_str(self):
        log = ('info line 1', LogType.INFO)
        ret = log_str(log)
        self.assertEqual(ret, 'INFO: info line 1')