Add sensor test to sabnzbd (#130988)

This commit is contained in:
Jan-Philipp Benecke 2024-11-19 21:17:38 +01:00 committed by GitHub
parent 3cb8dedacc
commit e53d97db6f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 680 additions and 0 deletions

View File

@ -5,6 +5,13 @@ from unittest.mock import AsyncMock, patch
import pytest
from homeassistant.components.sabnzbd import DOMAIN
from homeassistant.const import CONF_API_KEY, CONF_NAME, CONF_URL
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component
from tests.common import MockConfigEntry, load_json_object_fixture
@pytest.fixture
def mock_setup_entry() -> Generator[AsyncMock]:
@ -13,3 +20,41 @@ def mock_setup_entry() -> Generator[AsyncMock]:
"homeassistant.components.sabnzbd.async_setup_entry", return_value=True
) as mock_setup_entry:
yield mock_setup_entry
@pytest.fixture(name="sabnzbd")
def mock_sabnzbd() -> Generator[AsyncMock]:
"""Mock the Sabnzbd API."""
with patch(
"homeassistant.components.sabnzbd.sab.SabnzbdApi", autospec=True
) as mock_sabnzbd:
mock = mock_sabnzbd.return_value
mock.return_value.check_available = True
mock.queue = load_json_object_fixture("queue.json", DOMAIN)
yield mock
@pytest.fixture(name="config_entry")
async def mock_config_entry(hass: HomeAssistant) -> MockConfigEntry:
"""Return a MockConfigEntry for testing."""
return MockConfigEntry(
domain=DOMAIN,
title="Sabnzbd",
entry_id="01JD2YVVPBC62D620DGYNG2R8H",
data={
CONF_NAME: "Sabnzbd",
CONF_API_KEY: "edc3eee7330e4fdda04489e3fbc283d0",
CONF_URL: "http://localhost:8080",
},
)
@pytest.fixture(name="setup_integration")
async def mock_setup_integration(
hass: HomeAssistant, config_entry: MockConfigEntry, sabnzbd: AsyncMock
) -> None:
"""Fixture for setting up the component."""
config_entry.add_to_hass(hass)
assert await async_setup_component(hass, DOMAIN, {})
await hass.async_block_till_done()

View File

@ -0,0 +1,39 @@
{
"total_size": 1638.4,
"month_size": 38.8,
"week_size": 9.4,
"day_size": 9.4,
"version": "4.3.3",
"paused": true,
"pause_int": "0",
"paused_all": false,
"diskspace1": "444.95",
"diskspace2": "3127.88",
"diskspace1_norm": "445.0 G",
"diskspace2_norm": "3.1 T",
"diskspacetotal1": "465.76",
"diskspacetotal2": "7448.42",
"speedlimit": "85",
"speedlimit_abs": "22282240",
"have_warnings": "0",
"finishaction": null,
"quota": "0 ",
"have_quota": false,
"left_quota": "0 ",
"cache_art": "0",
"cache_size": "0 B",
"kbpersec": "0.00",
"speed": "0 ",
"mbleft": "0.00",
"mb": "0.00",
"sizeleft": "0 B",
"size": "0 B",
"noofslots_total": 0,
"noofslots": 0,
"start": 0,
"limit": 10,
"finish": 10,
"status": "Paused",
"timeleft": "0:00:00",
"slots": []
}

View File

@ -0,0 +1,576 @@
# serializer version: 1
# name: test_sensor[sensor.sabnzbd_daily_total-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.sabnzbd_daily_total',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
'sensor': dict({
'suggested_display_precision': 2,
}),
}),
'original_device_class': <SensorDeviceClass.DATA_SIZE: 'data_size'>,
'original_icon': None,
'original_name': 'Daily total',
'platform': 'sabnzbd',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'daily_total',
'unique_id': '01JD2YVVPBC62D620DGYNG2R8H_day_size',
'unit_of_measurement': <UnitOfInformation.GIGABYTES: 'GB'>,
})
# ---
# name: test_sensor[sensor.sabnzbd_daily_total-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'data_size',
'friendly_name': 'SABnzbd Daily total',
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
'unit_of_measurement': <UnitOfInformation.GIGABYTES: 'GB'>,
}),
'context': <ANY>,
'entity_id': 'sensor.sabnzbd_daily_total',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '9.4',
})
# ---
# name: test_sensor[sensor.sabnzbd_free_disk_space-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.sabnzbd_free_disk_space',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.DATA_SIZE: 'data_size'>,
'original_icon': None,
'original_name': 'Free disk space',
'platform': 'sabnzbd',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'free_disk_space',
'unique_id': '01JD2YVVPBC62D620DGYNG2R8H_diskspace1',
'unit_of_measurement': <UnitOfInformation.GIGABYTES: 'GB'>,
})
# ---
# name: test_sensor[sensor.sabnzbd_free_disk_space-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'data_size',
'friendly_name': 'SABnzbd Free disk space',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfInformation.GIGABYTES: 'GB'>,
}),
'context': <ANY>,
'entity_id': 'sensor.sabnzbd_free_disk_space',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '444.95',
})
# ---
# name: test_sensor[sensor.sabnzbd_left_to_download-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.sabnzbd_left_to_download',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.DATA_SIZE: 'data_size'>,
'original_icon': None,
'original_name': 'Left to download',
'platform': 'sabnzbd',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'left',
'unique_id': '01JD2YVVPBC62D620DGYNG2R8H_mbleft',
'unit_of_measurement': <UnitOfInformation.MEGABYTES: 'MB'>,
})
# ---
# name: test_sensor[sensor.sabnzbd_left_to_download-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'data_size',
'friendly_name': 'SABnzbd Left to download',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfInformation.MEGABYTES: 'MB'>,
}),
'context': <ANY>,
'entity_id': 'sensor.sabnzbd_left_to_download',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '0.00',
})
# ---
# name: test_sensor[sensor.sabnzbd_monthly_total-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.sabnzbd_monthly_total',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
'sensor': dict({
'suggested_display_precision': 2,
}),
}),
'original_device_class': <SensorDeviceClass.DATA_SIZE: 'data_size'>,
'original_icon': None,
'original_name': 'Monthly total',
'platform': 'sabnzbd',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'monthly_total',
'unique_id': '01JD2YVVPBC62D620DGYNG2R8H_month_size',
'unit_of_measurement': <UnitOfInformation.GIGABYTES: 'GB'>,
})
# ---
# name: test_sensor[sensor.sabnzbd_monthly_total-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'data_size',
'friendly_name': 'SABnzbd Monthly total',
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
'unit_of_measurement': <UnitOfInformation.GIGABYTES: 'GB'>,
}),
'context': <ANY>,
'entity_id': 'sensor.sabnzbd_monthly_total',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '38.8',
})
# ---
# name: test_sensor[sensor.sabnzbd_overall_total-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.sabnzbd_overall_total',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
'sensor': dict({
'suggested_display_precision': 2,
}),
}),
'original_device_class': <SensorDeviceClass.DATA_SIZE: 'data_size'>,
'original_icon': None,
'original_name': 'Overall total',
'platform': 'sabnzbd',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'overall_total',
'unique_id': '01JD2YVVPBC62D620DGYNG2R8H_total_size',
'unit_of_measurement': <UnitOfInformation.GIGABYTES: 'GB'>,
})
# ---
# name: test_sensor[sensor.sabnzbd_overall_total-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'data_size',
'friendly_name': 'SABnzbd Overall total',
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
'unit_of_measurement': <UnitOfInformation.GIGABYTES: 'GB'>,
}),
'context': <ANY>,
'entity_id': 'sensor.sabnzbd_overall_total',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '1638.4',
})
# ---
# name: test_sensor[sensor.sabnzbd_queue-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.sabnzbd_queue',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.DATA_SIZE: 'data_size'>,
'original_icon': None,
'original_name': 'Queue',
'platform': 'sabnzbd',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'queue',
'unique_id': '01JD2YVVPBC62D620DGYNG2R8H_mb',
'unit_of_measurement': <UnitOfInformation.MEGABYTES: 'MB'>,
})
# ---
# name: test_sensor[sensor.sabnzbd_queue-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'data_size',
'friendly_name': 'SABnzbd Queue',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfInformation.MEGABYTES: 'MB'>,
}),
'context': <ANY>,
'entity_id': 'sensor.sabnzbd_queue',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '0.00',
})
# ---
# name: test_sensor[sensor.sabnzbd_queue_count-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.TOTAL: 'total'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.sabnzbd_queue_count',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
'sensor': dict({
'suggested_display_precision': 2,
}),
}),
'original_device_class': None,
'original_icon': None,
'original_name': 'Queue count',
'platform': 'sabnzbd',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'queue_count',
'unique_id': '01JD2YVVPBC62D620DGYNG2R8H_noofslots_total',
'unit_of_measurement': None,
})
# ---
# name: test_sensor[sensor.sabnzbd_queue_count-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'SABnzbd Queue count',
'state_class': <SensorStateClass.TOTAL: 'total'>,
}),
'context': <ANY>,
'entity_id': 'sensor.sabnzbd_queue_count',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '0',
})
# ---
# name: test_sensor[sensor.sabnzbd_speed-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.sabnzbd_speed',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
'sensor': dict({
'suggested_display_precision': 1,
}),
'sensor.private': dict({
'suggested_unit_of_measurement': <UnitOfDataRate.MEGABYTES_PER_SECOND: 'MB/s'>,
}),
}),
'original_device_class': <SensorDeviceClass.DATA_RATE: 'data_rate'>,
'original_icon': None,
'original_name': 'Speed',
'platform': 'sabnzbd',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'speed',
'unique_id': '01JD2YVVPBC62D620DGYNG2R8H_kbpersec',
'unit_of_measurement': <UnitOfDataRate.MEGABYTES_PER_SECOND: 'MB/s'>,
})
# ---
# name: test_sensor[sensor.sabnzbd_speed-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'data_rate',
'friendly_name': 'SABnzbd Speed',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfDataRate.MEGABYTES_PER_SECOND: 'MB/s'>,
}),
'context': <ANY>,
'entity_id': 'sensor.sabnzbd_speed',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '0.0',
})
# ---
# name: test_sensor[sensor.sabnzbd_status-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.sabnzbd_status',
'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': 'Status',
'platform': 'sabnzbd',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'status',
'unique_id': '01JD2YVVPBC62D620DGYNG2R8H_status',
'unit_of_measurement': None,
})
# ---
# name: test_sensor[sensor.sabnzbd_status-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'SABnzbd Status',
}),
'context': <ANY>,
'entity_id': 'sensor.sabnzbd_status',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'Paused',
})
# ---
# name: test_sensor[sensor.sabnzbd_total_disk_space-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.sabnzbd_total_disk_space',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.DATA_SIZE: 'data_size'>,
'original_icon': None,
'original_name': 'Total disk space',
'platform': 'sabnzbd',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'total_disk_space',
'unique_id': '01JD2YVVPBC62D620DGYNG2R8H_diskspacetotal1',
'unit_of_measurement': <UnitOfInformation.GIGABYTES: 'GB'>,
})
# ---
# name: test_sensor[sensor.sabnzbd_total_disk_space-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'data_size',
'friendly_name': 'SABnzbd Total disk space',
'state_class': <SensorStateClass.MEASUREMENT: 'measurement'>,
'unit_of_measurement': <UnitOfInformation.GIGABYTES: 'GB'>,
}),
'context': <ANY>,
'entity_id': 'sensor.sabnzbd_total_disk_space',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '465.76',
})
# ---
# name: test_sensor[sensor.sabnzbd_weekly_total-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': dict({
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
}),
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.sabnzbd_weekly_total',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
'sensor': dict({
'suggested_display_precision': 2,
}),
}),
'original_device_class': <SensorDeviceClass.DATA_SIZE: 'data_size'>,
'original_icon': None,
'original_name': 'Weekly total',
'platform': 'sabnzbd',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'weekly_total',
'unique_id': '01JD2YVVPBC62D620DGYNG2R8H_week_size',
'unit_of_measurement': <UnitOfInformation.GIGABYTES: 'GB'>,
})
# ---
# name: test_sensor[sensor.sabnzbd_weekly_total-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'data_size',
'friendly_name': 'SABnzbd Weekly total',
'state_class': <SensorStateClass.TOTAL_INCREASING: 'total_increasing'>,
'unit_of_measurement': <UnitOfInformation.GIGABYTES: 'GB'>,
}),
'context': <ANY>,
'entity_id': 'sensor.sabnzbd_weekly_total',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '9.4',
})
# ---

View File

@ -0,0 +1,20 @@
"""Sensor tests for the Sabnzbd component."""
import pytest
from syrupy import SnapshotAssertion
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from tests.common import MockConfigEntry, snapshot_platform
@pytest.mark.usefixtures("entity_registry_enabled_by_default", "setup_integration")
async def test_sensor(
hass: HomeAssistant,
entity_registry: er.EntityRegistry,
config_entry: MockConfigEntry,
snapshot: SnapshotAssertion,
) -> None:
"""Test sensor setup."""
await snapshot_platform(hass, entity_registry, snapshot, config_entry.entry_id)