import unittest from wideq.client import ( BitValue, EnumValue, ModelInfo, RangeValue, ReferenceValue, StringValue, ) DATA = { "Value": { "AntiBacterial": { "default": "0", "label": "@WM_DRY27_BUTTON_ANTI_BACTERIAL_W", "option": {"0": "@CP_OFF_EN_W", "1": "@CP_ON_EN_W"}, "type": "Enum", }, "Course": { "option": ["Course"], "type": "Reference", }, "Initial_Time_H": { "default": 0, "option": {"max": 24, "min": 0}, "type": "Range", }, "Option1": { "default": "0", "option": [ { "default": "0", "length": 1, "startbit": 0, "value": "ChildLock", }, { "default": "0", "length": 1, "startbit": 1, "value": "ReduceStatic", }, { "default": "0", "length": 1, "startbit": 2, "value": "EasyIron", }, { "default": "0", "length": 1, "startbit": 3, "value": "DampDrySingal", }, { "default": "0", "length": 1, "startbit": 4, "value": "WrinkleCare", }, { "default": "0", "length": 1, "startbit": 7, "value": "AntiBacterial", }, ], "type": "Bit", }, "TimeBsOn": { "_comment": "오전 12시 30분은 0030, 오후12시30분은 1230 ,오후 4시30분은 1630 off는 0 ", "type": "String", }, "Unexpected": {"type": "Unexpected"}, "Unexpected2": {"type": "Unexpected", "option": "some option"}, }, "Course": { "3": { "_comment": "Normal", "courseType": "Course", "id": 3, "name": "@WM_DRY27_COURSE_NORMAL_W", "script": "", "controlEnable": True, "freshcareEnable": True, "imgIndex": 61, }, }, } class ModelInfoTest(unittest.TestCase): def setUp(self): super().setUp() self.model_info = ModelInfo(DATA) def test_value_enum(self): actual = self.model_info.value("AntiBacterial") expected = EnumValue({"0": "@CP_OFF_EN_W", "1": "@CP_ON_EN_W"}) self.assertEqual(expected, actual) def test_value_range(self): actual = self.model_info.value("Initial_Time_H") expected = RangeValue(min=0, max=24, step=1) self.assertEqual(expected, actual) def test_value_bit(self): actual = self.model_info.value("Option1") expected = BitValue( { 0: "ChildLock", 1: "ReduceStatic", 2: "EasyIron", 3: "DampDrySingal", 4: "WrinkleCare", 7: "AntiBacterial", } ) self.assertEqual(expected, actual) def test_value_reference(self): actual = self.model_info.value("Course") expected = ReferenceValue(DATA["Course"]) self.assertEqual(expected, actual) def test_string(self): actual = self.model_info.value("TimeBsOn") expected = StringValue( "오전 12시 30분은 0030, 오후12시30분은 1230 ,오후 4시30분은 1630 off는 0 " ) self.assertEqual(expected, actual) def test_value_unsupported(self): data = "{'type': 'Unexpected'}" with self.assertRaisesRegex( ValueError, f"unsupported value name: 'Unexpected' type: 'Unexpected' " f"data: '{data}'", ): self.model_info.value("Unexpected") def test_value_unsupported_but_data_available(self): data = "{'type': 'Unexpected', 'option': 'some option'}" with self.assertRaisesRegex( ValueError, f"unsupported value name: 'Unexpected2'" f" type: 'Unexpected' data: '{data}", ): self.model_info.value("Unexpected2")