Add Poolsense platform tests (#117579)

This commit is contained in:
Joost Lekkerkerker 2024-05-16 21:35:00 +02:00 committed by GitHub
parent 9aa7d3057b
commit 68b7302cdc
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 606 additions and 5 deletions

View file

@ -1055,11 +1055,6 @@ omit =
homeassistant/components/point/alarm_control_panel.py homeassistant/components/point/alarm_control_panel.py
homeassistant/components/point/binary_sensor.py homeassistant/components/point/binary_sensor.py
homeassistant/components/point/sensor.py homeassistant/components/point/sensor.py
homeassistant/components/poolsense/__init__.py
homeassistant/components/poolsense/binary_sensor.py
homeassistant/components/poolsense/coordinator.py
homeassistant/components/poolsense/entity.py
homeassistant/components/poolsense/sensor.py
homeassistant/components/powerwall/__init__.py homeassistant/components/powerwall/__init__.py
homeassistant/components/progettihwsw/__init__.py homeassistant/components/progettihwsw/__init__.py
homeassistant/components/progettihwsw/binary_sensor.py homeassistant/components/progettihwsw/binary_sensor.py

View file

@ -1,6 +1,7 @@
"""Common fixtures for the Poolsense tests.""" """Common fixtures for the Poolsense tests."""
from collections.abc import Generator from collections.abc import Generator
from datetime import UTC, datetime
from unittest.mock import AsyncMock, patch from unittest.mock import AsyncMock, patch
import pytest import pytest
@ -36,6 +37,19 @@ def mock_poolsense_client() -> Generator[AsyncMock, None, None]:
): ):
client = mock_client.return_value client = mock_client.return_value
client.test_poolsense_credentials.return_value = True client.test_poolsense_credentials.return_value = True
client.get_poolsense_data.return_value = {
"Chlorine": 20,
"pH": 5,
"Water Temp": 6,
"Battery": 80,
"Last Seen": datetime(2021, 1, 1, 0, 0, 0, tzinfo=UTC),
"Chlorine High": 30,
"Chlorine Low": 20,
"pH High": 7,
"pH Low": 4,
"pH Status": "red",
"Chlorine Status": "red",
}
yield client yield client

View file

@ -0,0 +1,97 @@
# serializer version: 1
# name: test_all_entities[binary_sensor.test_test_com_chlorine_status-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'binary_sensor',
'entity_category': None,
'entity_id': 'binary_sensor.test_test_com_chlorine_status',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <BinarySensorDeviceClass.PROBLEM: 'problem'>,
'original_icon': None,
'original_name': 'Chlorine status',
'platform': 'poolsense',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'chlorine_status',
'unique_id': 'test@test.com-Chlorine Status',
'unit_of_measurement': None,
})
# ---
# name: test_all_entities[binary_sensor.test_test_com_chlorine_status-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'PoolSense Data',
'device_class': 'problem',
'friendly_name': 'test@test.com Chlorine status',
}),
'context': <ANY>,
'entity_id': 'binary_sensor.test_test_com_chlorine_status',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'on',
})
# ---
# name: test_all_entities[binary_sensor.test_test_com_ph_status-entry]
EntityRegistryEntrySnapshot({
'aliases': set({
}),
'area_id': None,
'capabilities': None,
'config_entry_id': <ANY>,
'device_class': None,
'device_id': <ANY>,
'disabled_by': None,
'domain': 'binary_sensor',
'entity_category': None,
'entity_id': 'binary_sensor.test_test_com_ph_status',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <BinarySensorDeviceClass.PROBLEM: 'problem'>,
'original_icon': None,
'original_name': 'pH status',
'platform': 'poolsense',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'ph_status',
'unique_id': 'test@test.com-pH Status',
'unit_of_measurement': None,
})
# ---
# name: test_all_entities[binary_sensor.test_test_com_ph_status-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'PoolSense Data',
'device_class': 'problem',
'friendly_name': 'test@test.com pH status',
}),
'context': <ANY>,
'entity_id': 'binary_sensor.test_test_com_ph_status',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': 'on',
})
# ---

View file

@ -0,0 +1,433 @@
# serializer version: 1
# name: test_all_entities[sensor.test_test_com_battery-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.test_test_com_battery',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.BATTERY: 'battery'>,
'original_icon': None,
'original_name': 'Battery',
'platform': 'poolsense',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': 'test@test.com-Battery',
'unit_of_measurement': '%',
})
# ---
# name: test_all_entities[sensor.test_test_com_battery-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'PoolSense Data',
'device_class': 'battery',
'friendly_name': 'test@test.com Battery',
'unit_of_measurement': '%',
}),
'context': <ANY>,
'entity_id': 'sensor.test_test_com_battery',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '80',
})
# ---
# name: test_all_entities[sensor.test_test_com_chlorine-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.test_test_com_chlorine',
'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': 'Chlorine',
'platform': 'poolsense',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'chlorine',
'unique_id': 'test@test.com-Chlorine',
'unit_of_measurement': <UnitOfElectricPotential.MILLIVOLT: 'mV'>,
})
# ---
# name: test_all_entities[sensor.test_test_com_chlorine-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'PoolSense Data',
'friendly_name': 'test@test.com Chlorine',
'unit_of_measurement': <UnitOfElectricPotential.MILLIVOLT: 'mV'>,
}),
'context': <ANY>,
'entity_id': 'sensor.test_test_com_chlorine',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '20',
})
# ---
# name: test_all_entities[sensor.test_test_com_chlorine_high-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.test_test_com_chlorine_high',
'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': 'Chlorine high',
'platform': 'poolsense',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'chlorine_high',
'unique_id': 'test@test.com-Chlorine High',
'unit_of_measurement': <UnitOfElectricPotential.MILLIVOLT: 'mV'>,
})
# ---
# name: test_all_entities[sensor.test_test_com_chlorine_high-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'PoolSense Data',
'friendly_name': 'test@test.com Chlorine high',
'unit_of_measurement': <UnitOfElectricPotential.MILLIVOLT: 'mV'>,
}),
'context': <ANY>,
'entity_id': 'sensor.test_test_com_chlorine_high',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '30',
})
# ---
# name: test_all_entities[sensor.test_test_com_chlorine_low-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.test_test_com_chlorine_low',
'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': 'Chlorine low',
'platform': 'poolsense',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'chlorine_low',
'unique_id': 'test@test.com-Chlorine Low',
'unit_of_measurement': <UnitOfElectricPotential.MILLIVOLT: 'mV'>,
})
# ---
# name: test_all_entities[sensor.test_test_com_chlorine_low-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'PoolSense Data',
'friendly_name': 'test@test.com Chlorine low',
'unit_of_measurement': <UnitOfElectricPotential.MILLIVOLT: 'mV'>,
}),
'context': <ANY>,
'entity_id': 'sensor.test_test_com_chlorine_low',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '20',
})
# ---
# name: test_all_entities[sensor.test_test_com_last_seen-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.test_test_com_last_seen',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.TIMESTAMP: 'timestamp'>,
'original_icon': None,
'original_name': 'Last seen',
'platform': 'poolsense',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'last_seen',
'unique_id': 'test@test.com-Last Seen',
'unit_of_measurement': None,
})
# ---
# name: test_all_entities[sensor.test_test_com_last_seen-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'PoolSense Data',
'device_class': 'timestamp',
'friendly_name': 'test@test.com Last seen',
}),
'context': <ANY>,
'entity_id': 'sensor.test_test_com_last_seen',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '2021-01-01T00:00:00+00:00',
})
# ---
# name: test_all_entities[sensor.test_test_com_ph-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.test_test_com_ph',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.PH: 'ph'>,
'original_icon': None,
'original_name': 'pH',
'platform': 'poolsense',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': None,
'unique_id': 'test@test.com-pH',
'unit_of_measurement': None,
})
# ---
# name: test_all_entities[sensor.test_test_com_ph-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'PoolSense Data',
'device_class': 'ph',
'friendly_name': 'test@test.com pH',
}),
'context': <ANY>,
'entity_id': 'sensor.test_test_com_ph',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '5',
})
# ---
# name: test_all_entities[sensor.test_test_com_ph_high-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.test_test_com_ph_high',
'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': 'pH high',
'platform': 'poolsense',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'ph_high',
'unique_id': 'test@test.com-pH High',
'unit_of_measurement': None,
})
# ---
# name: test_all_entities[sensor.test_test_com_ph_high-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'PoolSense Data',
'friendly_name': 'test@test.com pH high',
}),
'context': <ANY>,
'entity_id': 'sensor.test_test_com_ph_high',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '7',
})
# ---
# name: test_all_entities[sensor.test_test_com_ph_low-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.test_test_com_ph_low',
'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': 'pH low',
'platform': 'poolsense',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'ph_low',
'unique_id': 'test@test.com-pH Low',
'unit_of_measurement': None,
})
# ---
# name: test_all_entities[sensor.test_test_com_ph_low-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'PoolSense Data',
'friendly_name': 'test@test.com pH low',
}),
'context': <ANY>,
'entity_id': 'sensor.test_test_com_ph_low',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '4',
})
# ---
# name: test_all_entities[sensor.test_test_com_temperature-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.test_test_com_temperature',
'has_entity_name': True,
'hidden_by': None,
'icon': None,
'id': <ANY>,
'labels': set({
}),
'name': None,
'options': dict({
}),
'original_device_class': <SensorDeviceClass.TEMPERATURE: 'temperature'>,
'original_icon': None,
'original_name': 'Temperature',
'platform': 'poolsense',
'previous_unique_id': None,
'supported_features': 0,
'translation_key': 'water_temp',
'unique_id': 'test@test.com-Water Temp',
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
})
# ---
# name: test_all_entities[sensor.test_test_com_temperature-state]
StateSnapshot({
'attributes': ReadOnlyDict({
'attribution': 'PoolSense Data',
'device_class': 'temperature',
'friendly_name': 'test@test.com Temperature',
'unit_of_measurement': <UnitOfTemperature.CELSIUS: '°C'>,
}),
'context': <ANY>,
'entity_id': 'sensor.test_test_com_temperature',
'last_changed': <ANY>,
'last_reported': <ANY>,
'last_updated': <ANY>,
'state': '6',
})
# ---

View file

@ -0,0 +1,31 @@
"""Test the PoolSense binary sensor module."""
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_poolsense_client: AsyncMock,
mock_config_entry: MockConfigEntry,
entity_registry: er.EntityRegistry,
) -> None:
"""Test all entities."""
with patch(
"homeassistant.components.poolsense.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,31 @@
"""Test the PoolSense sensor module."""
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_poolsense_client: AsyncMock,
mock_config_entry: MockConfigEntry,
entity_registry: er.EntityRegistry,
) -> None:
"""Test all entities."""
with patch(
"homeassistant.components.poolsense.PLATFORMS",
[Platform.SENSOR],
):
await setup_integration(hass, mock_config_entry)
await snapshot_platform(
hass, entity_registry, snapshot, mock_config_entry.entry_id
)