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.logging') 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)