mirror of
https://github.com/no2chem/wideq.git
synced 2025-05-15 23:00:18 -07:00
152 lines
4.4 KiB
Python
152 lines
4.4 KiB
Python
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")
|