Fix Rituals Perfume Genie sw_version dict passed to device registry (#173552)

This commit is contained in:
Franck Nijhof
2026-06-12 18:31:57 +00:00
parent d273350db1
commit a5c193931f
2 changed files with 37 additions and 2 deletions
@@ -1,5 +1,7 @@
"""Base class for Rituals Perfume Genie diffuser entity."""
from typing import Any
from homeassistant.helpers.device_registry import DeviceInfo
from homeassistant.helpers.entity import EntityDescription
from homeassistant.helpers.update_coordinator import CoordinatorEntity
@@ -12,6 +14,12 @@ MODEL = "The Perfume Genie"
MODEL2 = "The Perfume Genie 2.0"
def _version_string(version: Any) -> str:
if isinstance(version, dict):
return str(version.get("title", version))
return str(version)
class DiffuserEntity(CoordinatorEntity[RitualsDataUpdateCoordinator]):
"""Representation of a diffuser entity."""
@@ -31,7 +39,7 @@ class DiffuserEntity(CoordinatorEntity[RitualsDataUpdateCoordinator]):
manufacturer=MANUFACTURER,
model=MODEL if coordinator.diffuser.has_battery else MODEL2,
name=coordinator.diffuser.name,
sw_version=coordinator.diffuser.version,
sw_version=_version_string(coordinator.diffuser.version),
)
@property
@@ -1,5 +1,9 @@
"""Tests for the Rituals Perfume Genie switch platform."""
import logging
import pytest
from homeassistant.components.homeassistant import (
DOMAIN as HOMEASSISTANT_DOMAIN,
SERVICE_UPDATE_ENTITY,
@@ -13,12 +17,13 @@ from homeassistant.const import (
STATE_ON,
)
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from homeassistant.helpers import device_registry as dr, entity_registry as er
from homeassistant.setup import async_setup_component
from .common import (
init_integration,
mock_config_entry,
mock_diffuser,
mock_diffuser_v1_battery_cartridge,
)
@@ -71,6 +76,28 @@ async def test_switch_handle_coordinator_update(hass: HomeAssistant) -> None:
assert diffuser.update_data.call_count == call_count_before_update + 1
async def test_device_info_sw_version_dict(
hass: HomeAssistant,
device_registry: dr.DeviceRegistry,
caplog: pytest.LogCaptureFixture,
) -> None:
"""Test that sw_version is a string even when the library returns a dict."""
diffuser = mock_diffuser(
hublot="lot123dict",
version={"id": 1, "title": "5.2-rc15", "icon": ""},
)
config_entry = mock_config_entry(unique_id="id_123_version_dict_test")
with caplog.at_level(logging.WARNING, logger="homeassistant.helpers.frame"):
await init_integration(hass, config_entry, [diffuser])
device_entry = device_registry.async_get_device(
identifiers={("rituals_perfume_genie", "lot123dict")}
)
assert device_entry
assert device_entry.sw_version == "5.2-rc15"
assert "non-string value" not in caplog.text
async def test_set_switch_state(hass: HomeAssistant) -> None:
"""Test changing the diffuser switch entity state."""
config_entry = mock_config_entry(unique_id="id_123_switch_set_state_test")