Пример #1
0
    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)
Пример #2
0
 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)
Пример #3
0
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)
Пример #4
0
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()