1
0
mirror of https://github.com/home-assistant/core.git synced 2026-02-21 02:18:47 +00:00
Files
core/tests/components/switchbot/test_select.py
2026-02-16 22:58:09 +01:00

126 lines
3.5 KiB
Python

"""Tests for the switchbot select platform."""
from collections.abc import Callable
from unittest.mock import AsyncMock, patch
import pytest
from homeassistant.components.select import (
ATTR_OPTION,
DOMAIN as SELECT_DOMAIN,
SERVICE_SELECT_OPTION,
)
from homeassistant.const import ATTR_ENTITY_ID
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component
from . import DOMAIN, WOMETERTHPC_SERVICE_INFO
from tests.common import MockConfigEntry
from tests.components.bluetooth import inject_bluetooth_service_info
@pytest.mark.parametrize(
("mode", "expected_state"),
[
(False, "24h"),
(True, "12h"),
],
)
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
async def test_time_format_select_initial_state(
hass: HomeAssistant,
mock_entry_factory: Callable[[str], MockConfigEntry],
mode: bool,
expected_state: str,
) -> None:
"""Test the time format select entity initial state."""
await async_setup_component(hass, DOMAIN, {})
inject_bluetooth_service_info(hass, WOMETERTHPC_SERVICE_INFO)
entry = mock_entry_factory("hygrometer_co2")
entry.add_to_hass(hass)
with patch(
"switchbot.SwitchbotMeterProCO2.get_datetime",
return_value={
"12h_mode": mode,
"year": 2025,
"month": 1,
"day": 9,
"hour": 12,
"minute": 0,
"second": 0,
},
):
assert await hass.config_entries.async_setup(entry.entry_id)
await hass.async_block_till_done()
state = hass.states.get("select.test_name_time_format")
assert state is not None
assert state.state == expected_state
@pytest.mark.usefixtures("entity_registry_enabled_by_default")
@pytest.mark.parametrize(
("origin_mode", "expected_state"),
[
(False, "24h"),
(True, "12h"),
],
)
async def test_set_time_format(
hass: HomeAssistant,
mock_entry_factory: Callable[[str], MockConfigEntry],
origin_mode: bool,
expected_state: str,
) -> None:
"""Test changing time format to 12h."""
await async_setup_component(hass, DOMAIN, {})
inject_bluetooth_service_info(hass, WOMETERTHPC_SERVICE_INFO)
entry = mock_entry_factory("hygrometer_co2")
entry.add_to_hass(hass)
mock_get_datetime = AsyncMock(
return_value={
"12h_mode": origin_mode,
"year": 2025,
"month": 1,
"day": 9,
"hour": 12,
"minute": 0,
"second": 0,
}
)
mock_set_time_display_format = AsyncMock(return_value=True)
with (
patch(
"switchbot.SwitchbotMeterProCO2.get_datetime",
mock_get_datetime,
),
patch(
"switchbot.SwitchbotMeterProCO2.set_time_display_format",
mock_set_time_display_format,
),
):
assert await hass.config_entries.async_setup(entry.entry_id)
await hass.async_block_till_done()
await hass.services.async_call(
SELECT_DOMAIN,
SERVICE_SELECT_OPTION,
{
ATTR_ENTITY_ID: "select.test_name_time_format",
ATTR_OPTION: expected_state,
},
blocking=True,
)
mock_set_time_display_format.assert_awaited_once_with(origin_mode)
state = hass.states.get("select.test_name_time_format")
assert state is not None
assert state.state == expected_state