1
0
mirror of https://github.com/no2chem/wideq.git synced 2025-05-15 23:00:18 -07:00
wideq/tests/test_client.py
2020-11-21 19:46:57 +00:00

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")