def test_set_short_down(self): """Test moving cover to 'down' position.""" xknx = XKNX(loop=self.loop) cover = Cover( xknx, 'TestCover', group_address_long='1/2/1', group_address_short='1/2/2', group_address_position='1/2/3', group_address_position_state='1/2/4') self.loop.run_until_complete(asyncio.Task(cover.set_down())) self.assertEqual(xknx.telegrams.qsize(), 1) telegram = xknx.telegrams.get_nowait() self.assertEqual(telegram, Telegram(GroupAddress('1/2/1'), payload=DPTBinary(1)))
def test_set_short_down(self): """Test moving cover to 'down' position.""" xknx = XKNX() cover = Cover( xknx, "TestCover", group_address_long="1/2/1", group_address_short="1/2/2", group_address_position="1/2/3", group_address_position_state="1/2/4", ) self.loop.run_until_complete(cover.set_down()) self.assertEqual(xknx.telegrams.qsize(), 1) telegram = xknx.telegrams.get_nowait() self.assertEqual(telegram, Telegram(GroupAddress("1/2/1"), payload=DPTBinary(1)))
def test_process_short_stop(self): """Test process / reading telegrams from telegram queue. Test if stop is processed correctly.""" xknx = XKNX() cover = Cover( xknx, "TestCover", group_address_long="1/2/1", group_address_short="1/2/2", ) cover.travelcalculator.set_position(50) self.loop.run_until_complete(cover.set_down()) self.assertTrue(cover.is_traveling()) telegram = Telegram( GroupAddress("1/2/2"), payload=GroupValueWrite(DPTBinary(1)) ) self.loop.run_until_complete(cover.process(telegram)) self.assertFalse(cover.is_traveling())
def test_process_callback(self): """Test process / reading telegrams from telegram queue. Test if callback is executed.""" # pylint: disable=no-self-use xknx = XKNX() cover = Cover( xknx, "TestCover", group_address_long="1/2/1", group_address_short="1/2/2", group_address_stop="1/2/3", group_address_position="1/2/4", group_address_position_state="1/2/5", group_address_angle="1/2/6", group_address_angle_state="1/2/7", ) after_update_callback = Mock() async def async_after_update_callback(device): """Async callback.""" after_update_callback(device) cover.register_device_updated_cb(async_after_update_callback) for address, payload, feature in [ ("1/2/1", DPTBinary(1), "long"), ("1/2/2", DPTBinary(1), "short"), ("1/2/4", DPTArray(42), "position"), ("1/2/5", DPTArray(42), "position state"), ("1/2/6", DPTArray(42), "angle"), ("1/2/7", DPTArray(51), "angle state"), ]: with self.subTest(address=address, feature=feature): telegram = Telegram(GroupAddress(address), payload=payload) self.loop.run_until_complete(cover.process(telegram)) after_update_callback.assert_called_with(cover) after_update_callback.reset_mock() # Stop only when cover is travelling telegram = Telegram(GroupAddress("1/2/3"), payload=DPTBinary(1)) self.loop.run_until_complete(cover.process(telegram)) after_update_callback.assert_not_called() self.loop.run_until_complete(cover.set_down()) self.loop.run_until_complete(cover.process(telegram)) after_update_callback.assert_called_with(cover)
def test_is_traveling(self): """Test moving cover to absolute position.""" xknx = XKNX() cover = Cover( xknx, "TestCover", group_address_long="1/2/1", group_address_stop="1/2/2", group_address_position="1/2/3", group_address_position_state="1/2/4", travel_time_down=10, travel_time_up=10, ) with patch("time.time") as mock_time: mock_time.return_value = 1517000000.0 self.assertFalse(cover.is_traveling()) self.assertFalse(cover.is_opening()) self.assertFalse(cover.is_closing()) self.assertTrue(cover.position_reached()) # we start with state open covers (up) cover.travelcalculator.set_position(0) self.loop.run_until_complete(cover.set_down()) self.assertTrue(cover.is_traveling()) self.assertTrue(cover.is_open()) self.assertFalse(cover.is_closed()) self.assertFalse(cover.is_opening()) self.assertTrue(cover.is_closing()) mock_time.return_value = 1517000005.0 # 5 Seconds, half way self.assertFalse(cover.position_reached()) self.assertTrue(cover.is_traveling()) self.assertFalse(cover.is_open()) self.assertFalse(cover.is_closed()) self.assertFalse(cover.is_opening()) self.assertTrue(cover.is_closing()) mock_time.return_value = 1517000010.0 # 10 Seconds, fully closed self.assertTrue(cover.position_reached()) self.assertFalse(cover.is_traveling()) self.assertFalse(cover.is_open()) self.assertTrue(cover.is_closed()) self.assertFalse(cover.is_opening()) self.assertFalse(cover.is_closing()) # up again self.loop.run_until_complete(cover.set_up()) self.assertFalse(cover.position_reached()) self.assertTrue(cover.is_traveling()) self.assertFalse(cover.is_open()) self.assertTrue(cover.is_closed()) self.assertTrue(cover.is_opening()) self.assertFalse(cover.is_closing()) mock_time.return_value = 1517000015.0 # 15 Seconds, half way self.assertFalse(cover.position_reached()) self.assertTrue(cover.is_traveling()) self.assertFalse(cover.is_open()) self.assertFalse(cover.is_closed()) self.assertTrue(cover.is_opening()) self.assertFalse(cover.is_closing()) mock_time.return_value = 1517000016.0 # 16 Seconds, manual stop self.loop.run_until_complete(cover.stop()) self.assertTrue(cover.position_reached()) self.assertFalse(cover.is_traveling()) self.assertFalse(cover.is_open()) self.assertFalse(cover.is_closed()) self.assertFalse(cover.is_opening()) self.assertFalse(cover.is_closing())