core/tests/components/pyload/test_sensor.py

85 lines
2.4 KiB
Python
Raw Normal View History

"""Tests for the pyLoad Sensors."""
from unittest.mock import AsyncMock
from pyloadapi.exceptions import CannotConnect, InvalidAuth, ParserError
import pytest
from syrupy.assertion import SnapshotAssertion
from homeassistant.components.sensor import DOMAIN
from homeassistant.core import HomeAssistant
from homeassistant.helpers.typing import ConfigType
from homeassistant.setup import async_setup_component
@pytest.mark.usefixtures("mock_pyloadapi")
async def test_setup(
hass: HomeAssistant,
pyload_config: ConfigType,
snapshot: SnapshotAssertion,
) -> None:
"""Test setup of the pyload sensor platform."""
assert await async_setup_component(hass, DOMAIN, pyload_config)
await hass.async_block_till_done()
result = hass.states.get("sensor.pyload_speed")
assert result == snapshot
@pytest.mark.parametrize(
("exception", "expected_exception"),
[
(CannotConnect, "Unable to connect and retrieve data from pyLoad API"),
(ParserError, "Unable to parse data from pyLoad API"),
(
InvalidAuth,
"Authentication failed for username, check your login credentials",
),
],
)
async def test_setup_exceptions(
hass: HomeAssistant,
pyload_config: ConfigType,
mock_pyloadapi: AsyncMock,
exception: Exception,
expected_exception: str,
caplog: pytest.LogCaptureFixture,
) -> None:
"""Test exceptions during setup up pyLoad platform."""
mock_pyloadapi.login.side_effect = exception
assert await async_setup_component(hass, DOMAIN, pyload_config)
await hass.async_block_till_done()
assert len(hass.states.async_all(DOMAIN)) == 0
assert expected_exception in caplog.text
@pytest.mark.parametrize(
("exception", "expected_exception"),
[
(CannotConnect, "UpdateFailed"),
(ParserError, "UpdateFailed"),
(InvalidAuth, "UpdateFailed"),
],
)
async def test_sensor_update_exceptions(
hass: HomeAssistant,
pyload_config: ConfigType,
mock_pyloadapi: AsyncMock,
exception: Exception,
expected_exception: str,
caplog: pytest.LogCaptureFixture,
) -> None:
"""Test exceptions during update of pyLoad sensor."""
mock_pyloadapi.get_status.side_effect = exception
assert await async_setup_component(hass, DOMAIN, pyload_config)
await hass.async_block_till_done()
assert len(hass.states.async_all(DOMAIN)) == 0
assert expected_exception in caplog.text