Add snapshot tests to webmin (#112518)

add snapshot tests to webmin
This commit is contained in:
Sid 2024-03-06 20:22:08 +01:00 committed by GitHub
parent 0f3838e7a8
commit d50e4f6645
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 417 additions and 16 deletions

View File

@ -1592,7 +1592,6 @@ omit =
homeassistant/components/weatherflow_cloud/const.py
homeassistant/components/weatherflow_cloud/coordinator.py
homeassistant/components/weatherflow_cloud/weather.py
homeassistant/components/webmin/sensor.py
homeassistant/components/wiffi/__init__.py
homeassistant/components/wiffi/binary_sensor.py
homeassistant/components/wiffi/sensor.py

View File

@ -4,7 +4,7 @@ from unittest.mock import AsyncMock, patch
import pytest
from homeassistant.components.webmin.const import DEFAULT_PORT
from homeassistant.components.webmin.const import DEFAULT_PORT, DOMAIN
from homeassistant.const import (
CONF_HOST,
CONF_PASSWORD,
@ -13,6 +13,9 @@ from homeassistant.const import (
CONF_USERNAME,
CONF_VERIFY_SSL,
)
from homeassistant.core import HomeAssistant
from tests.common import MockConfigEntry, load_json_object_fixture
TEST_USER_INPUT = {
CONF_HOST: "192.168.1.1",
@ -31,3 +34,17 @@ def mock_setup_entry() -> Generator[AsyncMock, None, None]:
"homeassistant.components.webmin.async_setup_entry", return_value=True
) as mock_setup:
yield mock_setup
async def async_init_integration(hass: HomeAssistant) -> MockConfigEntry:
"""Set up the Webmin integration in Home Assistant."""
entry = MockConfigEntry(domain=DOMAIN, options=TEST_USER_INPUT, title="name")
entry.add_to_hass(hass)
with patch(
"homeassistant.components.webmin.helpers.WebminInstance.update",
return_value=load_json_object_fixture("webmin_update.json", DOMAIN),
):
await hass.config_entries.async_setup(entry.entry_id)
await hass.async_block_till_done()
return entry

View File

@ -0,0 +1,369 @@
# serializer version: 1
# name: test_sensor[sensor.192_168_1_1_load_15m-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.192_168_1_1_load_15m',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Load (15m)',
'platform': 'webmin',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'load_15m',
'unique_id': '12:34:56:78:9a:bc_load_15m',
'unit_of_measurement': None,
})
# ---
# name: test_sensor[sensor.192_168_1_1_load_15m-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': '192.168.1.1 Load (15m)',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'context': <ANY>,
'entity_id': 'sensor.192_168_1_1_load_15m',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': '1.0',
})
# ---
# name: test_sensor[sensor.192_168_1_1_load_1m-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.192_168_1_1_load_1m',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Load (1m)',
'platform': 'webmin',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'load_1m',
'unique_id': '12:34:56:78:9a:bc_load_1m',
'unit_of_measurement': None,
})
# ---
# name: test_sensor[sensor.192_168_1_1_load_1m-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': '192.168.1.1 Load (1m)',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'context': <ANY>,
'entity_id': 'sensor.192_168_1_1_load_1m',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': '0.98',
})
# ---
# name: test_sensor[sensor.192_168_1_1_load_5m-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.192_168_1_1_load_5m',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Load (5m)',
'platform': 'webmin',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'load_5m',
'unique_id': '12:34:56:78:9a:bc_load_5m',
'unit_of_measurement': None,
})
# ---
# name: test_sensor[sensor.192_168_1_1_load_5m-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': '192.168.1.1 Load (5m)',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'context': <ANY>,
'entity_id': 'sensor.192_168_1_1_load_5m',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': '1.02',
})
# ---
# name: test_sensor[sensor.192_168_1_1_memory_free-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.192_168_1_1_memory_free',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
'sensor': dict({
'suggested_display_precision': 2,
}),
'sensor.private': dict({
'suggested_unit_of_measurement': <UnitOfInformation.GIBIBYTES: 'GiB'>,
}),
}),
'original_device_class': <SensorDeviceClass.DATA_SIZE: 'data_size'>,
'original_icon': None,
'original_name': 'Memory free',
'platform': 'webmin',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'mem_free',
'unique_id': '12:34:56:78:9a:bc_mem_free',
'unit_of_measurement': <UnitOfInformation.GIBIBYTES: 'GiB'>,
})
# ---
# name: test_sensor[sensor.192_168_1_1_memory_free-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'data_size',
'friendly_name': '192.168.1.1 Memory free',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfInformation.GIBIBYTES: 'GiB'>,
}),
'context': <ANY>,
'entity_id': 'sensor.192_168_1_1_memory_free',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': '24.9505462646484',
})
# ---
# name: test_sensor[sensor.192_168_1_1_memory_total-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.192_168_1_1_memory_total',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
'sensor': dict({
'suggested_display_precision': 2,
}),
'sensor.private': dict({
'suggested_unit_of_measurement': <UnitOfInformation.GIBIBYTES: 'GiB'>,
}),
}),
'original_device_class': <SensorDeviceClass.DATA_SIZE: 'data_size'>,
'original_icon': None,
'original_name': 'Memory total',
'platform': 'webmin',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'mem_total',
'unique_id': '12:34:56:78:9a:bc_mem_total',
'unit_of_measurement': <UnitOfInformation.GIBIBYTES: 'GiB'>,
})
# ---
# name: test_sensor[sensor.192_168_1_1_memory_total-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'data_size',
'friendly_name': '192.168.1.1 Memory total',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfInformation.GIBIBYTES: 'GiB'>,
}),
'context': <ANY>,
'entity_id': 'sensor.192_168_1_1_memory_total',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': '31.2490539550781',
})
# ---
# name: test_sensor[sensor.192_168_1_1_swap_free-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.192_168_1_1_swap_free',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
'sensor': dict({
'suggested_display_precision': 2,
}),
'sensor.private': dict({
'suggested_unit_of_measurement': <UnitOfInformation.GIBIBYTES: 'GiB'>,
}),
}),
'original_device_class': <SensorDeviceClass.DATA_SIZE: 'data_size'>,
'original_icon': None,
'original_name': 'Swap free',
'platform': 'webmin',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'swap_free',
'unique_id': '12:34:56:78:9a:bc_swap_free',
'unit_of_measurement': <UnitOfInformation.GIBIBYTES: 'GiB'>,
})
# ---
# name: test_sensor[sensor.192_168_1_1_swap_free-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'data_size',
'friendly_name': '192.168.1.1 Swap free',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfInformation.GIBIBYTES: 'GiB'>,
}),
'context': <ANY>,
'entity_id': 'sensor.192_168_1_1_swap_free',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': '1.86260986328125',
})
# ---
# name: test_sensor[sensor.192_168_1_1_swap_total-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.192_168_1_1_swap_total',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
'sensor': dict({
'suggested_display_precision': 2,
}),
'sensor.private': dict({
'suggested_unit_of_measurement': <UnitOfInformation.GIBIBYTES: 'GiB'>,
}),
}),
'original_device_class': <SensorDeviceClass.DATA_SIZE: 'data_size'>,
'original_icon': None,
'original_name': 'Swap total',
'platform': 'webmin',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'swap_total',
'unique_id': '12:34:56:78:9a:bc_swap_total',
'unit_of_measurement': <UnitOfInformation.GIBIBYTES: 'GiB'>,
})
# ---
# name: test_sensor[sensor.192_168_1_1_swap_total-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'data_size',
'friendly_name': '192.168.1.1 Swap total',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfInformation.GIBIBYTES: 'GiB'>,
}),
'context': <ANY>,
'entity_id': 'sensor.192_168_1_1_swap_total',
'last_changed': <ANY>,
'last_updated': <ANY>,
'state': '1.86260986328125',
})
# ---

View File

@ -1,28 +1,16 @@
"""Tests for the Webmin integration."""
from unittest.mock import patch
from homeassistant.components.webmin.const import DOMAIN
from homeassistant.config_entries import ConfigEntryState
from homeassistant.core import HomeAssistant
from .conftest import TEST_USER_INPUT
from tests.common import MockConfigEntry, load_json_object_fixture
from .conftest import async_init_integration
async def test_unload_entry(hass: HomeAssistant) -> None:
"""Test successful unload of entry."""
entry = MockConfigEntry(domain=DOMAIN, options=TEST_USER_INPUT, title="name")
entry.add_to_hass(hass)
entry = await async_init_integration(hass)
with patch(
"homeassistant.components.webmin.helpers.WebminInstance.update",
return_value=load_json_object_fixture("webmin_update.json", DOMAIN),
):
await hass.config_entries.async_setup(entry.entry_id)
await hass.async_block_till_done()
assert entry.state is ConfigEntryState.LOADED
assert await hass.config_entries.async_unload(entry.entry_id)

View File

@ -0,0 +1,28 @@
"""Test cases for the Webmin sensors."""
import pytest
from syrupy.assertion import SnapshotAssertion
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from .conftest import async_init_integration
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
async def test_sensor(
hass: HomeAssistant,
entity_registry: er.EntityRegistry,
snapshot: SnapshotAssertion,
) -> None:
"""Test the sensor entities and states."""
entry = await async_init_integration(hass)
entity_entries = er.async_entries_for_config_entry(entity_registry, entry.entry_id)
assert entity_entries
for entity_entry in entity_entries:
assert entity_entry == snapshot(name=f"{entity_entry.entity_id}-entry")
assert (state := hass.states.get(entity_entry.entity_id))
assert state == snapshot(name=f"{entity_entry.entity_id}-state")