def test_done_tilt_different_tilt_state(self):
     device = DeviceMock('TestDevice')
     blind = Blind('Test', 0, 0, device, [], [])
     Tilt(blind, 45).do()
     self.assertEqual(1, device.tilt_counter)
     self.assertEqual(State.TILT, device.stats())
     tilt = Tilt(blind)
     self.assertFalse(tilt.done())
 def test_done_tilt_open_state(self):
     device = DeviceMock('TestDevice')
     blind = Blind('Test', 0, 0, device, [], [])
     Open(blind).do()
     self.assertEqual(1, device.open_counter)
     self.assertEqual(State.OPEN, device.stats())
     tilt = Tilt(blind)
     self.assertFalse(tilt.done())
 def test_done_tilt_close_state(self):
     device = DeviceMock('TestDevice')
     blind = Blind('Test', 0, 0, device, [], [])
     Close(blind).do()
     self.assertEqual(1, device.close_counter)
     self.assertEqual(State.CLOSED, device.stats())
     tilt = Tilt(blind)
     self.assertFalse(tilt.done())
 def test_wind(self):
     events = [
         'WIND', {
             'WIND': {
                 'task': 'TILT',
                 'speed': 100,
                 'direction': {
                     'from': 100,
                     'to': 200
                 }
             }
         }
     ]
     b = blind(events)
     event.apply_weather_events(b)
     result = b.events
     self.assertEqual(2, len(result))
     for e in result:
         self.assertEqual('WIND', e.type())
     self.assertEqual(120.0, result[0].speed)
     self.assertEqual(100, result[1].speed)
     self.assertIsNone(result[0].direction[0])
     self.assertIsNone(result[0].direction[1])
     self.assertEqual((100, 200), result[1].direction)
     self.assertEqual(Tilt.type(), result[1]._task.type())
 def test_done_pretilt_tilt_state(self):
     device = DeviceMock('TestDevice')
     blind = Blind('Test', 0, 0, device, [], [])
     Tilt(blind).do()
     self.assertEqual(1, device.tilt_counter)
     self.assertEqual(State.TILT, device.stats())
     prepare = PreTilt(blind)
     self.assertTrue(prepare.done())
 def test_done_open_tilt_state(self):
     device = DeviceMock('TestDevice')
     blind = Blind('Test', 0, 0, device, [], [])
     Tilt(blind).do()
     self.assertEqual(1, device.tilt_counter)
     self.assertEqual(State.TILT, device.stats())
     task = Open(blind)
     self.assertFalse(task.done())
 def test_done_close_tilt_state(self):
     device = DeviceMock('TestDevice')
     blind = Blind('Test', 0, 0, device, [], [])
     Tilt(blind).do()
     self.assertEqual(1, device.tilt_counter)
     self.assertEqual(State.TILT, device.stats())
     close = Close(blind)
     self.assertFalse(close.done())
 def test_extract_sunout(self):
     triggers = ['SUNOUT', {'SUNOUT': {'task': 'TILT'}}]
     result = trigger.extract_triggers(blind(triggers), sundata())
     self.assertEqual(2, len(result))
     self.assertEqual(Open.type(), result[0].task().type())
     self.assertEqual(Tilt.type(), result[1].task().type())
     for item in result:
         self.assertEqual(SunOutTrigger.type(), item.type())
         self.assertEqual('2020-07-27T07:59:00+02:00', item.time().isoformat())
 def test_extract_sunin(self):
     triggers = ['SUNIN', {'SUNIN': {'task': 'CLOSE'}}]
     result = trigger.extract_triggers(blind(triggers), sundata())
     self.assertEqual(2, len(result))
     self.assertEqual(Tilt.type(), result[0].task().type())
     self.assertEqual(Close.type(), result[1].task().type())
     for item in result:
         self.assertEqual(SunInTrigger.type(), item.type())
         self.assertEqual('2020-07-27T07:59:00+02:00', item.time().isoformat())
 def test_clear(self):
     events = ['CLEAR', {'CLEAR': {'task': 'TILT'}}]
     b = blind(events)
     event.apply_weather_events(b)
     result = b.events
     self.assertEqual(2, len(result))
     for e in result:
         self.assertEqual(WeatherConditionEnum.CLEAR, e._main)
         self.assertEqual('CLEAR', e.type())
     self.assertEqual(Tilt.type(), result[1]._task.type())
 def test_rain(self):
     events = ['RAIN', {'RAIN': {'task': 'TILT', 'intensity': ['HEAVY']}}]
     b = blind(events)
     event.apply_weather_events(b)
     result = b.events
     self.assertEqual(2, len(result))
     for e in result:
         self.assertEqual(WeatherConditionEnum.RAIN, e._main)
         self.assertEqual('RAIN', e.type())
     self.assertEqual(1, len(result[1]._sub))
     self.assertEqual(WeatherSubConditionEnum.HEAVY, result[1]._sub[0])
     self.assertEqual(Tilt.type(), result[1]._task.type())
 def test_snow(self):
     events = ['SNOW', {'SNOW': {'task': 'TILT', 'intensity': ['SLEET']}}]
     b = blind(events)
     event.apply_weather_events(b)
     result = b.events
     self.assertEqual(2, len(result))
     for e in result:
         self.assertEqual(WeatherConditionEnum.SNOW, e._main)
         self.assertEqual('SNOW', e.type())
     self.assertEqual(1, len(result[1]._sub))
     self.assertEqual(WeatherSubConditionEnum.SLEET, result[1]._sub[0])
     self.assertEqual(Tilt.type(), result[1]._task.type())
 def test_clouds(self):
     events = ['CLOUDY', {'CLOUDY': {'task': 'TILT', 'coverage': 93}}]
     b = blind(events)
     event.apply_weather_events(b)
     result = b.events
     self.assertEqual(2, len(result))
     self.assertEqual(Open.type(), result[0]._task.type())
     self.assertEqual(Tilt.type(), result[1]._task.type())
     item = result[0]
     self.assertEqual(CloudsEvent.type(), item.type())
     self.assertEqual(WeatherConditionEnum.CLOUDS, item._main)
     self.assertEqual(0, len(item._sub))
     self.assertEqual(100, item.percentage)
     item = result[1]
     self.assertEqual(CloudsEvent.type(), item.type())
     self.assertEqual(WeatherConditionEnum.CLOUDS, item._main)
     self.assertEqual(0, len(item._sub))
     self.assertEqual(93, item.percentage)
 def test_drizzle(self):
     events = [
         'DRIZZLE', {
             'DRIZZLE': {
                 'task': 'TILT',
                 'intensity': ['SHOWER']
             }
         }
     ]
     b = blind(events)
     event.apply_weather_events(b)
     result = b.events
     self.assertEqual(2, len(result))
     for e in result:
         self.assertEqual(WeatherConditionEnum.DRIZZLE, e._main)
         self.assertEqual('DRIZZLE', e.type())
     self.assertEqual(1, len(result[1]._sub))
     self.assertEqual(WeatherSubConditionEnum.SHOWER, result[1]._sub[0])
     self.assertEqual(Tilt.type(), result[1]._task.type())
 def test_special_weather(self):
     events = [
         'SPECIAL', {
             'SPECIAL': {
                 'task': 'TILT',
                 'events': ['TORNADO']
             }
         }
     ]
     b = blind(events)
     event.apply_weather_events(b)
     result = b.events
     self.assertEqual(2, len(result))
     for e in result:
         self.assertEqual(WeatherConditionEnum.ATMOSPHERE, e._main)
         self.assertEqual('SPECIAL', e.type())
     self.assertEqual(1, len(result[1]._sub))
     self.assertEqual(WeatherSubConditionEnum.TORNADO, result[1]._sub[0])
     self.assertEqual(Tilt.type(), result[1]._task.type())
 def test_done_tilt_moved_state(self):
     device = DeviceMock('TestDevice')
     blind = Blind('Test', 0, 0, device, [], [])
     device.move(50)
     tilt = Tilt(blind)
     self.assertFalse(tilt.done())