Add Syncthru platform tests (#142596)

This commit is contained in:
Joost Lekkerkerker 2025-04-09 19:00:56 +02:00 committed by GitHub
parent 157c776019
commit ba629fbddb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 624 additions and 1 deletions

View File

@ -1 +1,13 @@
"""Tests for the syncthru integration."""
from homeassistant.core import HomeAssistant
from tests.common import MockConfigEntry
async def setup_integration(hass: HomeAssistant, config_entry: MockConfigEntry) -> None:
"""Fixture for setting up the component."""
config_entry.add_to_hass(hass)
await hass.config_entries.async_setup(config_entry.entry_id)
await hass.async_block_till_done()

View File

@ -3,11 +3,13 @@
from collections.abc import Generator
from unittest.mock import AsyncMock, patch
from pysyncthru import SyncthruState
import pytest
from homeassistant.components.syncthru import DOMAIN
from homeassistant.const import CONF_NAME, CONF_URL
from tests.common import load_json_object_fixture
from tests.common import MockConfigEntry, load_json_object_fixture
@pytest.fixture
@ -25,5 +27,44 @@ def mock_syncthru() -> Generator[AsyncMock]:
client = mock_syncthru.return_value
client.model.return_value = "C430W"
client.is_unknown_state.return_value = False
client.url = "http://192.168.1.2"
client.model.return_value = "C430W"
client.hostname.return_value = "SEC84251907C415"
client.serial_number.return_value = "08HRB8GJ3F019DD"
client.device_status.return_value = SyncthruState(3)
client.device_status_details.return_value = ""
client.is_online.return_value = True
client.toner_status.return_value = {
"black": {"opt": 1, "remaining": 8, "cnt": 1176, "newError": "C1-5110"},
"cyan": {"opt": 1, "remaining": 98, "cnt": 25, "newError": ""},
"magenta": {"opt": 1, "remaining": 98, "cnt": 25, "newError": ""},
"yellow": {"opt": 1, "remaining": 97, "cnt": 27, "newError": ""},
}
client.drum_status.return_value = {}
client.input_tray_status.return_value = {
"tray_1": {
"opt": 1,
"paper_size1": 4,
"paper_size2": 0,
"paper_type1": 2,
"paper_type2": 0,
"paper_level": 0,
"capa": 150,
"newError": "",
}
}
client.output_tray_status.return_value = {
1: {"name": 1, "capacity": 50, "status": ""}
}
client.raw.return_value = load_json_object_fixture("state.json", DOMAIN)
yield client
@pytest.fixture
def mock_config_entry() -> MockConfigEntry:
"""Mock a config entry."""
return MockConfigEntry(
domain=DOMAIN,
title="C430W",
data={CONF_URL: "http://192.168.1.2/", CONF_NAME: "My Printer"},
)

View File

@ -0,0 +1,97 @@
# serializer version: 1
# name: test_all_entities[binary_sensor.my_printer-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'binary_sensor',
'entity_category': None,
'entity_id': 'binary_sensor.my_printer',
'has_entity_name': False,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <BinarySensorDeviceClass.CONNECTIVITY: 'connectivity'>,
'original_icon': None,
'original_name': 'My Printer',
'platform': 'syncthru',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '08HRB8GJ3F019DD_online',
'unit_of_measurement': None,
})
# ---
# name: test_all_entities[binary_sensor.my_printer-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'connectivity',
'friendly_name': 'My Printer',
}),
'context': <ANY>,
'entity_id': 'binary_sensor.my_printer',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'on',
})
# ---
# name: test_all_entities[binary_sensor.my_printer_2-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'binary_sensor',
'entity_category': None,
'entity_id': 'binary_sensor.my_printer_2',
'has_entity_name': False,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <BinarySensorDeviceClass.PROBLEM: 'problem'>,
'original_icon': None,
'original_name': 'My Printer',
'platform': 'syncthru',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '08HRB8GJ3F019DD_problem',
'unit_of_measurement': None,
})
# ---
# name: test_all_entities[binary_sensor.my_printer_2-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'device_class': 'problem',
'friendly_name': 'My Printer',
}),
'context': <ANY>,
'entity_id': 'binary_sensor.my_printer_2',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'on',
})
# ---

View File

@ -0,0 +1,417 @@
# serializer version: 1
# name: test_all_entities[sensor.my_printer-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.my_printer',
'has_entity_name': False,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': 'mdi:printer',
'original_name': 'My Printer',
'platform': 'syncthru',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '08HRB8GJ3F019DD_main',
'unit_of_measurement': None,
})
# ---
# name: test_all_entities[sensor.my_printer-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'display_text': '',
'friendly_name': 'My Printer',
'icon': 'mdi:printer',
}),
'context': <ANY>,
'entity_id': 'sensor.my_printer',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'warning',
})
# ---
# name: test_all_entities[sensor.my_printer_active_alerts-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.my_printer_active_alerts',
'has_entity_name': False,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': 'mdi:printer',
'original_name': 'My Printer Active Alerts',
'platform': 'syncthru',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '08HRB8GJ3F019DD_active_alerts',
'unit_of_measurement': None,
})
# ---
# name: test_all_entities[sensor.my_printer_active_alerts-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'friendly_name': 'My Printer Active Alerts',
'icon': 'mdi:printer',
}),
'context': <ANY>,
'entity_id': 'sensor.my_printer_active_alerts',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '2',
})
# ---
# name: test_all_entities[sensor.my_printer_output_tray_1-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.my_printer_output_tray_1',
'has_entity_name': False,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': 'mdi:printer',
'original_name': 'My Printer Output Tray 1',
'platform': 'syncthru',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '08HRB8GJ3F019DD_output_tray_1',
'unit_of_measurement': None,
})
# ---
# name: test_all_entities[sensor.my_printer_output_tray_1-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'capacity': 50,
'friendly_name': 'My Printer Output Tray 1',
'icon': 'mdi:printer',
'name': 1,
'status': '',
}),
'context': <ANY>,
'entity_id': 'sensor.my_printer_output_tray_1',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'Ready',
})
# ---
# name: test_all_entities[sensor.my_printer_toner_black-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.my_printer_toner_black',
'has_entity_name': False,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': 'mdi:printer',
'original_name': 'My Printer Toner black',
'platform': 'syncthru',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '08HRB8GJ3F019DD_toner_black',
'unit_of_measurement': '%',
})
# ---
# name: test_all_entities[sensor.my_printer_toner_black-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'cnt': 1176,
'friendly_name': 'My Printer Toner black',
'icon': 'mdi:printer',
'newError': 'C1-5110',
'opt': 1,
'remaining': 8,
'unit_of_measurement': '%',
}),
'context': <ANY>,
'entity_id': 'sensor.my_printer_toner_black',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '8',
})
# ---
# name: test_all_entities[sensor.my_printer_toner_cyan-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.my_printer_toner_cyan',
'has_entity_name': False,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': 'mdi:printer',
'original_name': 'My Printer Toner cyan',
'platform': 'syncthru',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '08HRB8GJ3F019DD_toner_cyan',
'unit_of_measurement': '%',
})
# ---
# name: test_all_entities[sensor.my_printer_toner_cyan-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'cnt': 25,
'friendly_name': 'My Printer Toner cyan',
'icon': 'mdi:printer',
'newError': '',
'opt': 1,
'remaining': 98,
'unit_of_measurement': '%',
}),
'context': <ANY>,
'entity_id': 'sensor.my_printer_toner_cyan',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '98',
})
# ---
# name: test_all_entities[sensor.my_printer_toner_magenta-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.my_printer_toner_magenta',
'has_entity_name': False,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': 'mdi:printer',
'original_name': 'My Printer Toner magenta',
'platform': 'syncthru',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '08HRB8GJ3F019DD_toner_magenta',
'unit_of_measurement': '%',
})
# ---
# name: test_all_entities[sensor.my_printer_toner_magenta-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'cnt': 25,
'friendly_name': 'My Printer Toner magenta',
'icon': 'mdi:printer',
'newError': '',
'opt': 1,
'remaining': 98,
'unit_of_measurement': '%',
}),
'context': <ANY>,
'entity_id': 'sensor.my_printer_toner_magenta',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '98',
})
# ---
# name: test_all_entities[sensor.my_printer_toner_yellow-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.my_printer_toner_yellow',
'has_entity_name': False,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': 'mdi:printer',
'original_name': 'My Printer Toner yellow',
'platform': 'syncthru',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '08HRB8GJ3F019DD_toner_yellow',
'unit_of_measurement': '%',
})
# ---
# name: test_all_entities[sensor.my_printer_toner_yellow-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'cnt': 27,
'friendly_name': 'My Printer Toner yellow',
'icon': 'mdi:printer',
'newError': '',
'opt': 1,
'remaining': 97,
'unit_of_measurement': '%',
}),
'context': <ANY>,
'entity_id': 'sensor.my_printer_toner_yellow',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '97',
})
# ---
# name: test_all_entities[sensor.my_printer_tray_tray_1-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'config_subentry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'sensor',
'entity_category': None,
'entity_id': 'sensor.my_printer_tray_tray_1',
'has_entity_name': False,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': None,
'original_icon': 'mdi:printer',
'original_name': 'My Printer Tray tray_1',
'platform': 'syncthru',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': '08HRB8GJ3F019DD_tray_tray_1',
'unit_of_measurement': None,
})
# ---
# name: test_all_entities[sensor.my_printer_tray_tray_1-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'capa': 150,
'friendly_name': 'My Printer Tray tray_1',
'icon': 'mdi:printer',
'newError': '',
'opt': 1,
'paper_level': 0,
'paper_size1': 4,
'paper_size2': 0,
'paper_type1': 2,
'paper_type2': 0,
}),
'context': <ANY>,
'entity_id': 'sensor.my_printer_tray_tray_1',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'Ready',
})
# ---

View File

@ -0,0 +1,27 @@
"""Tests for the Syncthru binary sensor platform."""
from unittest.mock import AsyncMock, patch
from syrupy import SnapshotAssertion
from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from . import setup_integration
from tests.common import MockConfigEntry, snapshot_platform
async def test_all_entities(
hass: HomeAssistant,
snapshot: SnapshotAssertion,
mock_syncthru: AsyncMock,
mock_config_entry: MockConfigEntry,
entity_registry: er.EntityRegistry,
) -> None:
"""Test all entities."""
with patch("homeassistant.components.syncthru.PLATFORMS", [Platform.BINARY_SENSOR]):
await setup_integration(hass, mock_config_entry)
await snapshot_platform(hass, entity_registry, snapshot, mock_config_entry.entry_id)

View File

@ -0,0 +1,29 @@
"""Tests for the Syncthru sensor platform."""
from unittest.mock import AsyncMock, patch
import pytest
from syrupy import SnapshotAssertion
from homeassistant.const import Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from . import setup_integration
from tests.common import MockConfigEntry, snapshot_platform
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
async def test_all_entities(
hass: HomeAssistant,
snapshot: SnapshotAssertion,
mock_syncthru: AsyncMock,
mock_config_entry: MockConfigEntry,
entity_registry: er.EntityRegistry,
) -> None:
"""Test all entities."""
with patch("homeassistant.components.syncthru.PLATFORMS", [Platform.SENSOR]):
await setup_integration(hass, mock_config_entry)
await snapshot_platform(hass, entity_registry, snapshot, mock_config_entry.entry_id)