async def _async_test_service(service, data, method, payload=None, domain=DOMAIN): err_count = len( [x for x in caplog.records if x.levelno == logging.ERROR]) # success mocked_method = MagicMock() setattr(type(mocked_bulb), method, mocked_method) await hass.services.async_call(domain, service, data, blocking=True) if payload is None: mocked_method.assert_called_once() elif type(payload) == list: mocked_method.assert_called_once_with(*payload) else: mocked_method.assert_called_once_with(**payload) assert (len([x for x in caplog.records if x.levelno == logging.ERROR]) == err_count) # failure mocked_method = MagicMock(side_effect=BulbException) setattr(type(mocked_bulb), method, mocked_method) await hass.services.async_call(domain, service, data, blocking=True) assert (len([x for x in caplog.records if x.levelno == logging.ERROR]) == err_count + 1)
async def _async_test_effect(name, target=None, called=True): mocked_start_flow = MagicMock() type(mocked_bulb).start_flow = mocked_start_flow await hass.services.async_call( "light", SERVICE_TURN_ON, {ATTR_ENTITY_ID: ENTITY_LIGHT, ATTR_EFFECT: name}, blocking=True, ) if not called: return mocked_start_flow.assert_called_once() if target is None: return args, _ = mocked_start_flow.call_args flow = args[0] assert flow.count == target.count assert flow.action == target.action assert str(flow.transitions) == str(target.transitions)
async def test_data_sync(event_loop): """Test data and subscription with sync handlers.""" async with aiohttp.ClientSession(loop=event_loop) as session: client = Client(TEST_API_KEY, TEST_APP_KEY, session=session) client.websocket._sio.eio._trigger_event = AsyncMock() client.websocket._sio.eio.connect = AsyncMock() client.websocket._sio.eio.disconnect = AsyncMock() on_connect = MagicMock() on_data = MagicMock() on_disconnect = MagicMock() on_subscribed = MagicMock() client.websocket.on_connect(on_connect) client.websocket.on_data(on_data) client.websocket.on_disconnect(on_disconnect) client.websocket.on_subscribed(on_subscribed) await client.websocket.connect() client.websocket._sio.eio.connect.assert_called_once_with( f"https://api.ambientweather.net/?api=1&applicationKey={TEST_APP_KEY}", engineio_path="socket.io", headers={}, transports=["websocket"], ) await client.websocket._sio._trigger_event("connect", "/") on_connect.assert_called_once() await client.websocket._sio._trigger_event("data", "/", {"foo": "bar"}) on_data.assert_called_once() await client.websocket._sio._trigger_event("subscribed", "/", {"foo": "bar"}) on_subscribed.assert_called() await client.websocket.disconnect() await client.websocket._sio._trigger_event("disconnect", "/") on_disconnect.assert_called_once() client.websocket._sio.eio.disconnect.assert_called_once_with(abort=True)
async def test_data_sync(): """Test data and subscription with sync handlers.""" websocket = Websocket(TEST_API_KEY, TEST_APP_KEY) websocket._sio.connect = AsyncMock() websocket._sio.disconnect = AsyncMock() websocket._sio.eio._trigger_event = AsyncMock() websocket._sio.namespaces = {"/": 1} on_connect = MagicMock() on_data = MagicMock() on_disconnect = MagicMock() on_subscribed = MagicMock() websocket.on_connect(on_connect) websocket.on_data(on_data) websocket.on_disconnect(on_disconnect) websocket.on_subscribed(on_subscribed) await websocket.connect() websocket._sio.connect.assert_called_once_with( f"https://rt2.ambientweather.net/?api=1&applicationKey={TEST_APP_KEY}", transports=["websocket"], ) await websocket._sio._trigger_event("connect", "/") on_connect.assert_called_once() await websocket._sio._trigger_event("data", "/", {"foo": "bar"}) on_data.assert_called_once() await websocket._sio._trigger_event("subscribed", "/", {"foo": "bar"}) on_subscribed.assert_called() await websocket.disconnect() await websocket._sio._trigger_event("disconnect", "/") on_disconnect.assert_called_once() websocket._sio.disconnect.assert_called_once()