diff --git a/.coveragerc b/.coveragerc index 3b44334249d..56a93b586a4 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1259,9 +1259,6 @@ omit = homeassistant/components/solaredge/__init__.py homeassistant/components/solaredge/coordinator.py homeassistant/components/solaredge_local/sensor.py - homeassistant/components/solarlog/__init__.py - homeassistant/components/solarlog/coordinator.py - homeassistant/components/solarlog/sensor.py homeassistant/components/solax/__init__.py homeassistant/components/solax/sensor.py homeassistant/components/soma/__init__.py diff --git a/tests/components/solarlog/__init__.py b/tests/components/solarlog/__init__.py index 9074cab8416..74b19bd297e 100644 --- a/tests/components/solarlog/__init__.py +++ b/tests/components/solarlog/__init__.py @@ -1 +1,19 @@ """Tests for the solarlog integration.""" + +from unittest.mock import patch + +from homeassistant.const import Platform +from homeassistant.core import HomeAssistant + +from tests.common import MockConfigEntry + + +async def setup_platform( + hass: HomeAssistant, config_entry: MockConfigEntry, platforms: list[Platform] +) -> MockConfigEntry: + """Set up the SolarLog platform.""" + config_entry.add_to_hass(hass) + + with patch("homeassistant.components.solarlog.PLATFORMS", platforms): + await hass.config_entries.async_setup(config_entry.entry_id) + await hass.async_block_till_done() diff --git a/tests/components/solarlog/conftest.py b/tests/components/solarlog/conftest.py index 71034828025..08340487d99 100644 --- a/tests/components/solarlog/conftest.py +++ b/tests/components/solarlog/conftest.py @@ -5,21 +5,57 @@ from unittest.mock import AsyncMock, patch import pytest +from homeassistant.components.solarlog.const import DOMAIN as SOLARLOG_DOMAIN +from homeassistant.const import CONF_HOST, CONF_NAME from homeassistant.core import HomeAssistant -from tests.common import mock_device_registry, mock_registry +from .const import HOST, NAME + +from tests.common import ( + MockConfigEntry, + load_json_object_fixture, + mock_device_registry, + mock_registry, +) @pytest.fixture -def mock_solarlog(): +def mock_config_entry() -> MockConfigEntry: + """Mock a config entry.""" + return MockConfigEntry( + domain=SOLARLOG_DOMAIN, + title="solarlog", + data={ + CONF_HOST: HOST, + CONF_NAME: NAME, + "extended_data": True, + }, + minor_version=2, + entry_id="ce5f5431554d101905d31797e1232da8", + ) + + +@pytest.fixture +def mock_solarlog_connector(): """Build a fixture for the SolarLog API that connects successfully and returns one device.""" mock_solarlog_api = AsyncMock() - with patch( - "homeassistant.components.solarlog.config_flow.SolarLogConnector", - return_value=mock_solarlog_api, - ) as mock_solarlog_api: - mock_solarlog_api.return_value.test_connection.return_value = True + mock_solarlog_api.test_connection = AsyncMock(return_value=True) + mock_solarlog_api.update_data.return_value = load_json_object_fixture( + "solarlog_data.json", SOLARLOG_DOMAIN + ) + with ( + patch( + "homeassistant.components.solarlog.coordinator.SolarLogConnector", + autospec=True, + return_value=mock_solarlog_api, + ), + patch( + "homeassistant.components.solarlog.config_flow.SolarLogConnector", + autospec=True, + return_value=mock_solarlog_api, + ), + ): yield mock_solarlog_api diff --git a/tests/components/solarlog/const.py b/tests/components/solarlog/const.py new file mode 100644 index 00000000000..e23633c80ae --- /dev/null +++ b/tests/components/solarlog/const.py @@ -0,0 +1,4 @@ +"""Common const used across tests for SolarLog.""" + +NAME = "Solarlog test 1 2 3" +HOST = "http://1.1.1.1" diff --git a/tests/components/solarlog/fixtures/solarlog_data.json b/tests/components/solarlog/fixtures/solarlog_data.json new file mode 100644 index 00000000000..4976f4fa8b7 --- /dev/null +++ b/tests/components/solarlog/fixtures/solarlog_data.json @@ -0,0 +1,24 @@ +{ + "power_ac": 100, + "power_dc": 102, + "voltage_ac": 100, + "voltage_dc": 100, + "yield_day": 4.21, + "yield_yesterday": 5.21, + "yield_month": 515, + "yield_year": 1023, + "yield_total": 56513, + "consumption_ac": 54.87, + "consumption_day": 5.31, + "consumption_yesterday": 7.34, + "consumption_month": 758, + "consumption_year": 4587, + "consumption_total": 354687, + "total_power": 120, + "self_consumption_year": 545, + "alternator_loss": 2, + "efficiency": 0.9804, + "usage": 0.5487, + "power_available": 45.13, + "capacity": 0.85 +} diff --git a/tests/components/solarlog/snapshots/test_sensor.ambr b/tests/components/solarlog/snapshots/test_sensor.ambr new file mode 100644 index 00000000000..5080a001b84 --- /dev/null +++ b/tests/components/solarlog/snapshots/test_sensor.ambr @@ -0,0 +1,2183 @@ +# serializer version: 1 +# name: test_all_entities[sensor.solarlog_alternator_loss-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_alternator_loss', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Alternator loss', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'alternator_loss', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_alternator_loss', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_alternator_loss-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'power', + 'friendly_name': 'solarlog Alternator loss', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_alternator_loss', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '2', + }) +# --- +# name: test_all_entities[sensor.solarlog_capacity-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_capacity', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Capacity', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'capacity', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_capacity', + 'unit_of_measurement': '%', + }) +# --- +# name: test_all_entities[sensor.solarlog_capacity-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'power_factor', + 'friendly_name': 'solarlog Capacity', + 'state_class': , + 'unit_of_measurement': '%', + }), + 'context': , + 'entity_id': 'sensor.solarlog_capacity', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '85.0', + }) +# --- +# name: test_all_entities[sensor.solarlog_consumption_ac-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_consumption_ac', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Consumption AC', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'consumption_ac', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_consumption_ac', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_consumption_ac-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'power', + 'friendly_name': 'solarlog Consumption AC', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_consumption_ac', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '54.87', + }) +# --- +# name: test_all_entities[sensor.solarlog_consumption_day-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_consumption_day', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Consumption day', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'consumption_day', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_consumption_day', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_consumption_day-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'energy', + 'friendly_name': 'solarlog Consumption day', + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_consumption_day', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '0.005', + }) +# --- +# name: test_all_entities[sensor.solarlog_consumption_month-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_consumption_month', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Consumption month', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'consumption_month', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_consumption_month', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_consumption_month-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'energy', + 'friendly_name': 'solarlog Consumption month', + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_consumption_month', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '0.758', + }) +# --- +# name: test_all_entities[sensor.solarlog_consumption_total-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_consumption_total', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Consumption total', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'consumption_total', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_consumption_total', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_consumption_total-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'energy', + 'friendly_name': 'solarlog Consumption total', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_consumption_total', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '354.687', + }) +# --- +# name: test_all_entities[sensor.solarlog_consumption_year-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_consumption_year', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Consumption year', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'consumption_year', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_consumption_year', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_consumption_year-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'energy', + 'friendly_name': 'solarlog Consumption year', + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_consumption_year', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '4.587', + }) +# --- +# name: test_all_entities[sensor.solarlog_consumption_yesterday-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_consumption_yesterday', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Consumption yesterday', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'consumption_yesterday', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_consumption_yesterday', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_consumption_yesterday-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'energy', + 'friendly_name': 'solarlog Consumption yesterday', + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_consumption_yesterday', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '0.007', + }) +# --- +# name: test_all_entities[sensor.solarlog_efficiency-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_efficiency', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Efficiency', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'efficiency', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_efficiency', + 'unit_of_measurement': '%', + }) +# --- +# name: test_all_entities[sensor.solarlog_efficiency-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'power_factor', + 'friendly_name': 'solarlog Efficiency', + 'state_class': , + 'unit_of_measurement': '%', + }), + 'context': , + 'entity_id': 'sensor.solarlog_efficiency', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '98.0', + }) +# --- +# name: test_all_entities[sensor.solarlog_installed_peak_power-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_installed_peak_power', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Installed peak power', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'total_power', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_total_power', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_installed_peak_power-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'power', + 'friendly_name': 'solarlog Installed peak power', + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_installed_peak_power', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '120', + }) +# --- +# name: test_all_entities[sensor.solarlog_last_update-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_last_update', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Last update', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'last_update', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_last_updated', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[sensor.solarlog_last_update-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'timestamp', + 'friendly_name': 'solarlog Last update', + }), + 'context': , + 'entity_id': 'sensor.solarlog_last_update', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_all_entities[sensor.solarlog_power_ac-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_power_ac', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Power AC', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'power_ac', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_power_ac', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_power_ac-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'power', + 'friendly_name': 'solarlog Power AC', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_power_ac', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '100', + }) +# --- +# name: test_all_entities[sensor.solarlog_power_available-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_power_available', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Power available', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'power_available', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_power_available', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_power_available-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'power', + 'friendly_name': 'solarlog Power available', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_power_available', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '45.13', + }) +# --- +# name: test_all_entities[sensor.solarlog_power_dc-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_power_dc', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Power DC', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'power_dc', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_power_dc', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_power_dc-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'power', + 'friendly_name': 'solarlog Power DC', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_power_dc', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '102', + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_alternator_loss-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_test_1_2_3_alternator_loss', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Alternator loss', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'alternator_loss', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_alternator_loss', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_alternator_loss-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'power', + 'friendly_name': 'solarlog_test_1_2_3 Alternator loss', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_test_1_2_3_alternator_loss', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '2', + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_capacity-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_test_1_2_3_capacity', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Capacity', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'capacity', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_capacity', + 'unit_of_measurement': '%', + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_capacity-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'power_factor', + 'friendly_name': 'solarlog_test_1_2_3 Capacity', + 'state_class': , + 'unit_of_measurement': '%', + }), + 'context': , + 'entity_id': 'sensor.solarlog_test_1_2_3_capacity', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '85.0', + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_consumption_ac-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_test_1_2_3_consumption_ac', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Consumption AC', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'consumption_ac', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_consumption_ac', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_consumption_ac-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'power', + 'friendly_name': 'solarlog_test_1_2_3 Consumption AC', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_test_1_2_3_consumption_ac', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '54.87', + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_consumption_day-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_test_1_2_3_consumption_day', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Consumption day', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'consumption_day', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_consumption_day', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_consumption_day-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'energy', + 'friendly_name': 'solarlog_test_1_2_3 Consumption day', + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_test_1_2_3_consumption_day', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '0.005', + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_consumption_month-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_test_1_2_3_consumption_month', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Consumption month', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'consumption_month', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_consumption_month', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_consumption_month-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'energy', + 'friendly_name': 'solarlog_test_1_2_3 Consumption month', + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_test_1_2_3_consumption_month', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '0.758', + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_consumption_total-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_test_1_2_3_consumption_total', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Consumption total', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'consumption_total', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_consumption_total', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_consumption_total-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'energy', + 'friendly_name': 'solarlog_test_1_2_3 Consumption total', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_test_1_2_3_consumption_total', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '354.687', + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_consumption_year-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_test_1_2_3_consumption_year', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Consumption year', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'consumption_year', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_consumption_year', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_consumption_year-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'energy', + 'friendly_name': 'solarlog_test_1_2_3 Consumption year', + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_test_1_2_3_consumption_year', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '4.587', + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_consumption_yesterday-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_test_1_2_3_consumption_yesterday', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Consumption yesterday', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'consumption_yesterday', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_consumption_yesterday', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_consumption_yesterday-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'energy', + 'friendly_name': 'solarlog_test_1_2_3 Consumption yesterday', + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_test_1_2_3_consumption_yesterday', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '0.007', + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_efficiency-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_test_1_2_3_efficiency', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Efficiency', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'efficiency', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_efficiency', + 'unit_of_measurement': '%', + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_efficiency-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'power_factor', + 'friendly_name': 'solarlog_test_1_2_3 Efficiency', + 'state_class': , + 'unit_of_measurement': '%', + }), + 'context': , + 'entity_id': 'sensor.solarlog_test_1_2_3_efficiency', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '98.0', + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_installed_peak_power-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_test_1_2_3_installed_peak_power', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Installed peak power', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'total_power', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_total_power', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_installed_peak_power-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'power', + 'friendly_name': 'solarlog_test_1_2_3 Installed peak power', + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_test_1_2_3_installed_peak_power', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '120', + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_last_update-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_test_1_2_3_last_update', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Last update', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'last_update', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_last_updated', + 'unit_of_measurement': None, + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_last_update-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'timestamp', + 'friendly_name': 'solarlog_test_1_2_3 Last update', + }), + 'context': , + 'entity_id': 'sensor.solarlog_test_1_2_3_last_update', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': 'unknown', + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_power_ac-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_test_1_2_3_power_ac', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Power AC', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'power_ac', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_power_ac', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_power_ac-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'power', + 'friendly_name': 'solarlog_test_1_2_3 Power AC', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_test_1_2_3_power_ac', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '100', + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_power_available-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_test_1_2_3_power_available', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Power available', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'power_available', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_power_available', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_power_available-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'power', + 'friendly_name': 'solarlog_test_1_2_3 Power available', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_test_1_2_3_power_available', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '45.13', + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_power_dc-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_test_1_2_3_power_dc', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Power DC', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'power_dc', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_power_dc', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_power_dc-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'power', + 'friendly_name': 'solarlog_test_1_2_3 Power DC', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_test_1_2_3_power_dc', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '102', + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_usage-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_test_1_2_3_usage', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Usage', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'usage', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_usage', + 'unit_of_measurement': '%', + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_usage-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'power_factor', + 'friendly_name': 'solarlog_test_1_2_3 Usage', + 'state_class': , + 'unit_of_measurement': '%', + }), + 'context': , + 'entity_id': 'sensor.solarlog_test_1_2_3_usage', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '54.9', + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_voltage_ac-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_test_1_2_3_voltage_ac', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Voltage AC', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'voltage_ac', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_voltage_ac', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_voltage_ac-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'voltage', + 'friendly_name': 'solarlog_test_1_2_3 Voltage AC', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_test_1_2_3_voltage_ac', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '100', + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_voltage_dc-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_test_1_2_3_voltage_dc', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Voltage DC', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'voltage_dc', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_voltage_dc', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_voltage_dc-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'voltage', + 'friendly_name': 'solarlog_test_1_2_3 Voltage DC', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_test_1_2_3_voltage_dc', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '100', + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_yield_day-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_test_1_2_3_yield_day', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Yield day', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'yield_day', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_yield_day', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_yield_day-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'energy', + 'friendly_name': 'solarlog_test_1_2_3 Yield day', + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_test_1_2_3_yield_day', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '0.004', + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_yield_month-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_test_1_2_3_yield_month', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Yield month', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'yield_month', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_yield_month', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_yield_month-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'energy', + 'friendly_name': 'solarlog_test_1_2_3 Yield month', + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_test_1_2_3_yield_month', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '0.515', + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_yield_total-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_test_1_2_3_yield_total', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Yield total', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'yield_total', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_yield_total', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_yield_total-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'energy', + 'friendly_name': 'solarlog_test_1_2_3 Yield total', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_test_1_2_3_yield_total', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '56.513', + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_yield_year-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_test_1_2_3_yield_year', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Yield year', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'yield_year', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_yield_year', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_yield_year-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'energy', + 'friendly_name': 'solarlog_test_1_2_3 Yield year', + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_test_1_2_3_yield_year', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '1.023', + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_yield_yesterday-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_test_1_2_3_yield_yesterday', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Yield yesterday', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'yield_yesterday', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_yield_yesterday', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_test_1_2_3_yield_yesterday-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'energy', + 'friendly_name': 'solarlog_test_1_2_3 Yield yesterday', + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_test_1_2_3_yield_yesterday', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '0.005', + }) +# --- +# name: test_all_entities[sensor.solarlog_usage-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_usage', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Usage', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'usage', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_usage', + 'unit_of_measurement': '%', + }) +# --- +# name: test_all_entities[sensor.solarlog_usage-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'power_factor', + 'friendly_name': 'solarlog Usage', + 'state_class': , + 'unit_of_measurement': '%', + }), + 'context': , + 'entity_id': 'sensor.solarlog_usage', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '54.9', + }) +# --- +# name: test_all_entities[sensor.solarlog_voltage_ac-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_voltage_ac', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Voltage AC', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'voltage_ac', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_voltage_ac', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_voltage_ac-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'voltage', + 'friendly_name': 'solarlog Voltage AC', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_voltage_ac', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '100', + }) +# --- +# name: test_all_entities[sensor.solarlog_voltage_dc-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_voltage_dc', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Voltage DC', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'voltage_dc', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_voltage_dc', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_voltage_dc-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'voltage', + 'friendly_name': 'solarlog Voltage DC', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_voltage_dc', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '100', + }) +# --- +# name: test_all_entities[sensor.solarlog_yield_day-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_yield_day', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Yield day', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'yield_day', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_yield_day', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_yield_day-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'energy', + 'friendly_name': 'solarlog Yield day', + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_yield_day', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '0.004', + }) +# --- +# name: test_all_entities[sensor.solarlog_yield_month-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_yield_month', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Yield month', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'yield_month', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_yield_month', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_yield_month-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'energy', + 'friendly_name': 'solarlog Yield month', + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_yield_month', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '0.515', + }) +# --- +# name: test_all_entities[sensor.solarlog_yield_total-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': dict({ + 'state_class': , + }), + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_yield_total', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Yield total', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'yield_total', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_yield_total', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_yield_total-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'energy', + 'friendly_name': 'solarlog Yield total', + 'state_class': , + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_yield_total', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '56.513', + }) +# --- +# name: test_all_entities[sensor.solarlog_yield_year-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_yield_year', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Yield year', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'yield_year', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_yield_year', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_yield_year-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'energy', + 'friendly_name': 'solarlog Yield year', + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_yield_year', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '1.023', + }) +# --- +# name: test_all_entities[sensor.solarlog_yield_yesterday-entry] + EntityRegistryEntrySnapshot({ + 'aliases': set({ + }), + 'area_id': None, + 'capabilities': None, + 'config_entry_id': , + 'device_class': None, + 'device_id': , + 'disabled_by': None, + 'domain': 'sensor', + 'entity_category': None, + 'entity_id': 'sensor.solarlog_yield_yesterday', + 'has_entity_name': True, + 'hidden_by': None, + 'icon': None, + 'id': , + 'labels': set({ + }), + 'name': None, + 'options': dict({ + }), + 'original_device_class': , + 'original_icon': None, + 'original_name': 'Yield yesterday', + 'platform': 'solarlog', + 'previous_unique_id': None, + 'supported_features': 0, + 'translation_key': 'yield_yesterday', + 'unique_id': 'ce5f5431554d101905d31797e1232da8_yield_yesterday', + 'unit_of_measurement': , + }) +# --- +# name: test_all_entities[sensor.solarlog_yield_yesterday-state] + StateSnapshot({ + 'attributes': ReadOnlyDict({ + 'device_class': 'energy', + 'friendly_name': 'solarlog Yield yesterday', + 'unit_of_measurement': , + }), + 'context': , + 'entity_id': 'sensor.solarlog_yield_yesterday', + 'last_changed': , + 'last_reported': , + 'last_updated': , + 'state': '0.005', + }) +# --- diff --git a/tests/components/solarlog/test_config_flow.py b/tests/components/solarlog/test_config_flow.py index 63df582b0e1..cb1092a73e3 100644 --- a/tests/components/solarlog/test_config_flow.py +++ b/tests/components/solarlog/test_config_flow.py @@ -12,10 +12,9 @@ from homeassistant.const import CONF_HOST, CONF_NAME from homeassistant.core import HomeAssistant from homeassistant.data_entry_flow import FlowResultType -from tests.common import MockConfigEntry +from .const import HOST, NAME -NAME = "Solarlog test 1 2 3" -HOST = "http://1.1.1.1" +from tests.common import MockConfigEntry async def test_form(hass: HomeAssistant, mock_setup_entry: AsyncMock) -> None: @@ -56,7 +55,7 @@ def init_config_flow(hass): @pytest.mark.usefixtures("test_connect") async def test_user( hass: HomeAssistant, - mock_solarlog: AsyncMock, + mock_solarlog_connector: AsyncMock, mock_setup_entry: AsyncMock, ) -> None: """Test user config.""" @@ -89,7 +88,7 @@ async def test_form_exceptions( hass: HomeAssistant, exception: Exception, error: dict[str, str], - mock_solarlog: AsyncMock, + mock_solarlog_connector: AsyncMock, ) -> None: """Test we can handle Form exceptions.""" flow = init_config_flow(hass) @@ -98,7 +97,7 @@ async def test_form_exceptions( assert result["type"] is FlowResultType.FORM assert result["step_id"] == "user" - mock_solarlog.return_value.test_connection.side_effect = exception + mock_solarlog_connector.test_connection.side_effect = exception # tests with connection error result = await flow.async_step_user( @@ -110,7 +109,7 @@ async def test_form_exceptions( assert result["step_id"] == "user" assert result["errors"] == error - mock_solarlog.return_value.test_connection.side_effect = None + mock_solarlog_connector.test_connection.side_effect = None # tests with all provided result = await flow.async_step_user( diff --git a/tests/components/solarlog/test_init.py b/tests/components/solarlog/test_init.py index 9a8d6cb5bec..f9f00ef601b 100644 --- a/tests/components/solarlog/test_init.py +++ b/tests/components/solarlog/test_init.py @@ -1,16 +1,54 @@ """Test the initialization.""" +from unittest.mock import AsyncMock + +from solarlog_cli.solarlog_exceptions import SolarLogConnectionError + from homeassistant.components.solarlog.const import DOMAIN +from homeassistant.config_entries import ConfigEntryState from homeassistant.const import CONF_HOST, Platform from homeassistant.core import HomeAssistant from homeassistant.helpers.device_registry import DeviceRegistry from homeassistant.helpers.entity_registry import EntityRegistry -from .test_config_flow import HOST, NAME +from . import setup_platform +from .const import HOST, NAME from tests.common import MockConfigEntry +async def test_load_unload( + hass: HomeAssistant, + mock_config_entry: MockConfigEntry, + mock_solarlog_connector: AsyncMock, +) -> None: + """Test load and unload.""" + + await setup_platform(hass, mock_config_entry, [Platform.SENSOR]) + assert mock_config_entry.state is ConfigEntryState.LOADED + + assert await hass.config_entries.async_unload(mock_config_entry.entry_id) + await hass.async_block_till_done() + assert mock_config_entry.state is ConfigEntryState.NOT_LOADED + + +async def test_raise_config_entry_not_ready_when_offline( + hass: HomeAssistant, + mock_config_entry: MockConfigEntry, + mock_solarlog_connector: AsyncMock, +) -> None: + """Config entry state is SETUP_RETRY when Solarlog is offline.""" + + mock_solarlog_connector.update_data.side_effect = SolarLogConnectionError + + await setup_platform(hass, mock_config_entry, [Platform.SENSOR]) + await hass.async_block_till_done() + + assert mock_config_entry.state is ConfigEntryState.SETUP_RETRY + + assert len(hass.config_entries.flow.async_progress()) == 0 + + async def test_migrate_config_entry( hass: HomeAssistant, device_reg: DeviceRegistry, entity_reg: EntityRegistry ) -> None: diff --git a/tests/components/solarlog/test_sensor.py b/tests/components/solarlog/test_sensor.py new file mode 100644 index 00000000000..bc90e8b25c0 --- /dev/null +++ b/tests/components/solarlog/test_sensor.py @@ -0,0 +1,59 @@ +"""Test the Home Assistant solarlog sensor module.""" + +from datetime import timedelta +from unittest.mock import AsyncMock + +from freezegun.api import FrozenDateTimeFactory +import pytest +from solarlog_cli.solarlog_exceptions import ( + SolarLogConnectionError, + SolarLogUpdateError, +) +from syrupy import SnapshotAssertion + +from homeassistant.const import STATE_UNAVAILABLE, Platform +from homeassistant.core import HomeAssistant +from homeassistant.helpers import entity_registry as er + +from . import setup_platform + +from tests.common import MockConfigEntry, async_fire_time_changed, snapshot_platform + + +async def test_all_entities( + hass: HomeAssistant, + snapshot: SnapshotAssertion, + mock_solarlog_connector: AsyncMock, + mock_config_entry: MockConfigEntry, + entity_registry: er.EntityRegistry, +) -> None: + """Test all entities.""" + + await setup_platform(hass, mock_config_entry, [Platform.SENSOR]) + await snapshot_platform(hass, entity_registry, snapshot, mock_config_entry.entry_id) + + +@pytest.mark.parametrize( + "exception", + [ + SolarLogConnectionError, + SolarLogUpdateError, + ], +) +async def test_connection_error( + hass: HomeAssistant, + exception: Exception, + mock_solarlog_connector: AsyncMock, + mock_config_entry: MockConfigEntry, + freezer: FrozenDateTimeFactory, +) -> None: + """Test connection error.""" + await setup_platform(hass, mock_config_entry, [Platform.SENSOR]) + + mock_solarlog_connector.update_data.side_effect = exception + + freezer.tick(delta=timedelta(hours=12)) + async_fire_time_changed(hass) + await hass.async_block_till_done() + + assert hass.states.get("sensor.solarlog_power_ac").state == STATE_UNAVAILABLE