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_day_extraction_default(self):
     events = ['RAIN']
     b = blind(events)
     event.apply_weather_events(b)
     result = b.events
     self.assertEqual(1, len(result))
     e = result[0]
     self.assertEqual(7, len(e._on))
 def test_override_night_mode(self):
     events = [{'CLEAR': {'night': False}}]
     b = blind(events)
     event.apply_weather_events(b)
     result = b.events
     self.assertEqual(1, len(result))
     for e in result:
         self.assertEqual(WeatherConditionEnum.CLEAR, e._main)
         self.assertEqual('CLEAR', e.type())
         self.assertFalse(e._night_mode)
 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_day_extraction(self):
     events = [{'RAIN': {'at': ['WEEKEND']}}]
     b = blind(events)
     event.apply_weather_events(b)
     result = b.events
     self.assertEqual(1, len(result))
     e = result[0]
     self.assertEqual(2, len(e._on))
     for day in e._on:
         self.assertTrue(day in ['SU', 'SA'],
                         'Day {} not in list {}'.format(day, e._on))
 def test_multi_sub(self):
     events = [{'CLOUDY': {'intensity': ['SCATTERED', 'OVERCAST']}}]
     b = blind(events)
     event.apply_weather_events(b)
     result = b.events[0]
     self.assertEqual(1, len(b._events))
     self.assertEqual(Open.type(), result._task.type())
     self.assertEqual(CloudsEvent.type(), result.type())
     self.assertEqual(WeatherConditionEnum.CLOUDS, result._main)
     self.assertEqual(2, len(result._sub))
     self.assertEqual(WeatherSubConditionEnum.SCATTERED, result._sub[0])
     self.assertEqual(WeatherSubConditionEnum.OVERCAST, result._sub[1])
 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())