diff --git a/homeassistant/components/proxmoxve/sensor.py b/homeassistant/components/proxmoxve/sensor.py index cb7977745cef..3cd8b3717fa7 100644 --- a/homeassistant/components/proxmoxve/sensor.py +++ b/homeassistant/components/proxmoxve/sensor.py @@ -426,7 +426,11 @@ STORAGE_SENSORS: tuple[ProxmoxStorageSensorEntityDescription, ...] = ( ProxmoxStorageSensorEntityDescription( key="storage_used_percentage", translation_key="storage_used_percentage", - value_fn=lambda data: round(data["used_fraction"] * 100, 1), + value_fn=lambda data: ( + round(value * 100, 1) + if (value := data.get("used_fraction")) is not None + else None + ), native_unit_of_measurement=PERCENTAGE, entity_category=EntityCategory.DIAGNOSTIC, state_class=SensorStateClass.MEASUREMENT, diff --git a/tests/components/proxmoxve/test_sensor.py b/tests/components/proxmoxve/test_sensor.py index 72b71685a7ec..f4fc55cb97e5 100644 --- a/tests/components/proxmoxve/test_sensor.py +++ b/tests/components/proxmoxve/test_sensor.py @@ -5,13 +5,17 @@ from unittest.mock import MagicMock, patch import pytest from syrupy.assertion import SnapshotAssertion -from homeassistant.const import Platform +from homeassistant.const import STATE_UNKNOWN, 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 +from tests.common import ( + MockConfigEntry, + async_load_json_array_fixture, + snapshot_platform, +) @pytest.fixture(autouse=True) @@ -38,3 +42,29 @@ async def test_all_entities( snapshot, mock_config_entry.entry_id, ) + + +async def test_storage_missing_used_fraction( + hass: HomeAssistant, + mock_proxmox_client: MagicMock, + mock_config_entry: MockConfigEntry, +) -> None: + """Test storage usage percentage sensor when used_fraction is missing.""" + storage_data = await async_load_json_array_fixture( + hass, "nodes/storage.json", "proxmoxve" + ) + # Remove used_fraction from all storage entries + storage_without_fraction = [ + {key: value for key, value in storage.items() if key != "used_fraction"} + for storage in storage_data + ] + mock_proxmox_client._node_mock.storage.get.return_value = storage_without_fraction + + with patch( + "homeassistant.components.proxmoxve.PLATFORMS", + [Platform.SENSOR], + ): + await setup_integration(hass, mock_config_entry) + + state = hass.states.get("sensor.storage_local_storage_usage_percentage") + assert state.state == STATE_UNKNOWN