Add some tests to Freebox (#99755)

This commit is contained in:
Quentame 2023-09-13 20:22:47 +02:00 committed by GitHub
parent 9631c0ba2b
commit 8625bf7894
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 93 additions and 34 deletions

View File

@ -1,29 +1,24 @@
"""Tests for the Freebox sensors.""" """Tests for the Freebox sensors."""
from copy import deepcopy from copy import deepcopy
from datetime import timedelta
from unittest.mock import Mock from unittest.mock import Mock
from homeassistant.components.freebox.const import DOMAIN from freezegun.api import FrozenDateTimeFactory
from homeassistant.const import CONF_HOST, CONF_PORT
from homeassistant.components.binary_sensor import DOMAIN as BINARY_SENSOR_DOMAIN
from homeassistant.components.freebox import SCAN_INTERVAL
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component
import homeassistant.util.dt as dt_util
from .const import DATA_STORAGE_GET_RAIDS, MOCK_HOST, MOCK_PORT from .common import setup_platform
from .const import DATA_STORAGE_GET_RAIDS
from tests.common import MockConfigEntry, async_fire_time_changed from tests.common import async_fire_time_changed
async def test_raid_array_degraded(hass: HomeAssistant, router: Mock) -> None: async def test_raid_array_degraded(
hass: HomeAssistant, freezer: FrozenDateTimeFactory, router: Mock
) -> None:
"""Test raid array degraded binary sensor.""" """Test raid array degraded binary sensor."""
entry = MockConfigEntry( await setup_platform(hass, BINARY_SENSOR_DOMAIN)
domain=DOMAIN,
data={CONF_HOST: MOCK_HOST, CONF_PORT: MOCK_PORT},
unique_id=MOCK_HOST,
)
entry.add_to_hass(hass)
assert await async_setup_component(hass, DOMAIN, {})
await hass.async_block_till_done()
assert ( assert (
hass.states.get("binary_sensor.freebox_server_r2_raid_array_0_degraded").state hass.states.get("binary_sensor.freebox_server_r2_raid_array_0_degraded").state
@ -35,7 +30,8 @@ async def test_raid_array_degraded(hass: HomeAssistant, router: Mock) -> None:
data_storage_get_raids_degraded[0]["degraded"] = True data_storage_get_raids_degraded[0]["degraded"] = True
router().storage.get_raids.return_value = data_storage_get_raids_degraded router().storage.get_raids.return_value = data_storage_get_raids_degraded
# Simulate an update # Simulate an update
async_fire_time_changed(hass, dt_util.utcnow() + timedelta(seconds=60)) freezer.tick(SCAN_INTERVAL)
async_fire_time_changed(hass)
# To execute the save # To execute the save
await hass.async_block_till_done() await hass.async_block_till_done()
assert ( assert (

View File

@ -1,29 +1,19 @@
"""Tests for the Freebox config flow.""" """Tests for the Freebox config flow."""
from unittest.mock import ANY, Mock, patch from unittest.mock import ANY, AsyncMock, Mock, patch
from pytest_unordered import unordered from pytest_unordered import unordered
from homeassistant.components.button import DOMAIN as BUTTON_DOMAIN, SERVICE_PRESS from homeassistant.components.button import DOMAIN as BUTTON_DOMAIN, SERVICE_PRESS
from homeassistant.components.freebox.const import DOMAIN from homeassistant.const import ATTR_ENTITY_ID
from homeassistant.const import ATTR_ENTITY_ID, CONF_HOST, CONF_PORT
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component
from .const import MOCK_HOST, MOCK_PORT from .common import setup_platform
from tests.common import MockConfigEntry
async def test_reboot_button(hass: HomeAssistant, router: Mock) -> None: async def test_reboot(hass: HomeAssistant, router: Mock) -> None:
"""Test reboot button.""" """Test reboot button."""
entry = MockConfigEntry( entry = await setup_platform(hass, BUTTON_DOMAIN)
domain=DOMAIN,
data={CONF_HOST: MOCK_HOST, CONF_PORT: MOCK_PORT},
unique_id=MOCK_HOST,
)
entry.add_to_hass(hass)
assert await async_setup_component(hass, DOMAIN, {})
await hass.async_block_till_done()
assert hass.config_entries.async_entries() == unordered([entry, ANY]) assert hass.config_entries.async_entries() == unordered([entry, ANY])
assert router.call_count == 1 assert router.call_count == 1
@ -32,6 +22,7 @@ async def test_reboot_button(hass: HomeAssistant, router: Mock) -> None:
with patch( with patch(
"homeassistant.components.freebox.router.FreeboxRouter.reboot" "homeassistant.components.freebox.router.FreeboxRouter.reboot"
) as mock_service: ) as mock_service:
mock_service.assert_not_called()
await hass.services.async_call( await hass.services.async_call(
BUTTON_DOMAIN, BUTTON_DOMAIN,
SERVICE_PRESS, SERVICE_PRESS,
@ -42,3 +33,29 @@ async def test_reboot_button(hass: HomeAssistant, router: Mock) -> None:
) )
await hass.async_block_till_done() await hass.async_block_till_done()
mock_service.assert_called_once() mock_service.assert_called_once()
async def test_mark_calls_as_read(hass: HomeAssistant, router: Mock) -> None:
"""Test mark calls as read button."""
entry = await setup_platform(hass, BUTTON_DOMAIN)
assert hass.config_entries.async_entries() == unordered([entry, ANY])
assert router.call_count == 1
assert router().open.call_count == 1
with patch(
"homeassistant.components.freebox.router.FreeboxRouter.call"
) as mock_service:
mock_service.mark_calls_log_as_read = AsyncMock()
mock_service.mark_calls_log_as_read.assert_not_called()
await hass.services.async_call(
BUTTON_DOMAIN,
SERVICE_PRESS,
service_data={
ATTR_ENTITY_ID: "button.mark_calls_as_read",
},
blocking=True,
)
await hass.async_block_till_done()
mock_service.mark_calls_log_as_read.assert_called_once()

View File

@ -9,11 +9,57 @@ from homeassistant.components.sensor import DOMAIN as SENSOR_DOMAIN
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from .common import setup_platform from .common import setup_platform
from .const import DATA_HOME_GET_NODES, DATA_STORAGE_GET_DISKS from .const import (
DATA_CONNECTION_GET_STATUS,
DATA_HOME_GET_NODES,
DATA_STORAGE_GET_DISKS,
)
from tests.common import async_fire_time_changed from tests.common import async_fire_time_changed
async def test_network_speed(
hass: HomeAssistant, freezer: FrozenDateTimeFactory, router: Mock
) -> None:
"""Test missed call sensor."""
await setup_platform(hass, SENSOR_DOMAIN)
assert hass.states.get("sensor.freebox_download_speed").state == "198.9"
assert hass.states.get("sensor.freebox_upload_speed").state == "1440.0"
# Simulate a changed speed
data_connection_get_status_changed = deepcopy(DATA_CONNECTION_GET_STATUS)
data_connection_get_status_changed["rate_down"] = 123400
data_connection_get_status_changed["rate_up"] = 432100
router().connection.get_status.return_value = data_connection_get_status_changed
# Simulate an update
freezer.tick(SCAN_INTERVAL)
async_fire_time_changed(hass)
# To execute the save
await hass.async_block_till_done()
assert hass.states.get("sensor.freebox_download_speed").state == "123.4"
assert hass.states.get("sensor.freebox_upload_speed").state == "432.1"
async def test_call(
hass: HomeAssistant, freezer: FrozenDateTimeFactory, router: Mock
) -> None:
"""Test missed call sensor."""
await setup_platform(hass, SENSOR_DOMAIN)
assert hass.states.get("sensor.freebox_missed_calls").state == "3"
# Simulate we marked calls as read
data_call_get_calls_marked_as_read = []
router().call.get_calls_log.return_value = data_call_get_calls_marked_as_read
# Simulate an update
freezer.tick(SCAN_INTERVAL)
async_fire_time_changed(hass)
# To execute the save
await hass.async_block_till_done()
assert hass.states.get("sensor.freebox_missed_calls").state == "0"
async def test_disk( async def test_disk(
hass: HomeAssistant, freezer: FrozenDateTimeFactory, router: Mock hass: HomeAssistant, freezer: FrozenDateTimeFactory, router: Mock
) -> None: ) -> None: