1
0
mirror of https://github.com/no2chem/wideq.git synced 2025-05-16 07:10:09 -07:00
wideq/tests/test_client.py
Frederik Gladhorn be05e1b33e Allow strings in ModelInfo
The only instance where this is used is a comment,
see issue #62. For now it will just be ignored. The comment seems to
contain several times.

Fixes #62
2020-01-27 11:45:51 +01:00

149 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')