mirror of
https://github.com/no2chem/wideq.git
synced 2025-05-16 07:10:09 -07:00
Instead of using print, let's use Python's logging framework. That allows switching verbosity easily and filtering out unwanted messages. Some of the setup code is inspired by what Home Assistant does.
79 lines
2.7 KiB
Python
79 lines
2.7 KiB
Python
import json
|
|
import unittest
|
|
from unittest import mock
|
|
|
|
from wideq.client import Client, DeviceInfo
|
|
from wideq.dryer import (
|
|
DryerDevice, DryLevel, DryerState, DryerStatus, TempControl, TimeDry)
|
|
|
|
|
|
POLL_DATA = {
|
|
'Course': '2',
|
|
'CurrentDownloadCourse': '100',
|
|
'DryLevel': '3',
|
|
'Error': '0',
|
|
'Initial_Time_H': '1',
|
|
'Initial_Time_M': '11',
|
|
'LoadItem': '0',
|
|
'MoreLessTime': '0',
|
|
'Option1': '0',
|
|
'Option2': '168',
|
|
'PreState': '1',
|
|
'Remain_Time_H': '0',
|
|
'Remain_Time_M': '54',
|
|
'SmartCourse': '0',
|
|
'State': '50',
|
|
'TempControl': '4',
|
|
'TimeDry': '0',
|
|
}
|
|
|
|
|
|
class DryerStatusTest(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
super().setUp()
|
|
with open('./tests/fixtures/client.json') as fp:
|
|
state = json.load(fp)
|
|
self.client = Client.load(state)
|
|
self.device_info = DeviceInfo({
|
|
'alias': 'DRYER',
|
|
'deviceId': '33330ba80-107d-11e9-96c8-0051ede85d3f',
|
|
'deviceType': 202,
|
|
'modelJsonUrl': (
|
|
'https://aic.lgthinq.com:46030/api/webContents/modelJSON?'
|
|
'modelName=RV13B6ES_D_US_WIFI&countryCode=WW&contentsId='
|
|
'JS11260025236447318&authKey=thinq'),
|
|
'modelNm': 'RV13B6ES_D_US_WIFI',
|
|
})
|
|
self.dryer = DryerDevice(self.client, self.device_info)
|
|
|
|
def test_properties(self):
|
|
status = DryerStatus(self.dryer, POLL_DATA)
|
|
self.assertEqual(self.dryer, status.dryer)
|
|
self.assertEqual(POLL_DATA, status.data)
|
|
self.assertEqual(DryerState.DRYING, status.state)
|
|
self.assertEqual(DryerState.INITIAL, status.previous_state)
|
|
self.assertEqual(DryLevel.NORMAL, status.dry_level)
|
|
self.assertTrue(status.is_on)
|
|
self.assertEqual(54, status.remaining_time)
|
|
self.assertEqual(71, status.initial_time)
|
|
self.assertEqual('Towels', status.course)
|
|
self.assertEqual('Off', status.smart_course)
|
|
self.assertEqual('No Error', status.error)
|
|
self.assertEqual(TempControl.MID_HIGH, status.temperature_control)
|
|
self.assertEqual(TimeDry.OFF, status.time_dry)
|
|
|
|
@mock.patch('wideq.client.LOGGER')
|
|
def test_properties_unknown_enum_value(self, mock_logging):
|
|
"""
|
|
This should not raise an error for an invalid enum value and instead
|
|
use the `UNKNOWN` enum value.
|
|
"""
|
|
data = dict(POLL_DATA, State='5000')
|
|
status = DryerStatus(self.dryer, data)
|
|
self.assertEqual(DryerState.UNKNOWN, status.state)
|
|
expected_call = mock.call(
|
|
'Value `%s` for key `%s` not in options: %s. Values from API: %s',
|
|
'5000', 'State', mock.ANY, mock.ANY)
|
|
self.assertEqual(expected_call, mock_logging.warning.call_args)
|