Files
core/tests/components/flow_it/test_fan.py
T
2026-08-14 14:46:41 +02:00

116 lines
3.1 KiB
Python

"""Test Flow-it fan platform."""
from unittest.mock import AsyncMock
from flow_it_api.const import Speed
import pytest
from homeassistant.components.fan import (
ATTR_PERCENTAGE,
ATTR_PRESET_MODE,
DOMAIN as FAN_DOMAIN,
SERVICE_SET_PERCENTAGE,
SERVICE_SET_PRESET_MODE,
SERVICE_TURN_OFF,
SERVICE_TURN_ON,
)
from homeassistant.const import ATTR_ENTITY_ID, STATE_ON
from homeassistant.core import HomeAssistant
from tests.common import MockConfigEntry
ENTITY_ID = "fan.001122334455"
@pytest.mark.parametrize(
("service", "speed"),
[
(SERVICE_TURN_ON, Speed.LEVEL_1),
(SERVICE_TURN_OFF, Speed.OFF),
],
)
async def test_fan_turn_on_off(
hass: HomeAssistant,
mock_flow_it: AsyncMock,
mock_config_entry: MockConfigEntry,
service: str,
speed: Speed,
) -> None:
"""Test turning on and off the fan."""
assert await hass.config_entries.async_setup(mock_config_entry.entry_id)
await hass.async_block_till_done()
state = hass.states.get(ENTITY_ID)
assert state
assert state.state == STATE_ON
await hass.services.async_call(
FAN_DOMAIN,
service,
{ATTR_ENTITY_ID: ENTITY_ID},
blocking=True,
)
mock_flow_it.return_value.send_command.assert_awaited_once_with(
speed, flow_in=True, flow_out=True
)
async def test_fan_set_percentage(
hass: HomeAssistant, mock_flow_it: AsyncMock, mock_config_entry: MockConfigEntry
) -> None:
"""Test setting percentage."""
assert await hass.config_entries.async_setup(mock_config_entry.entry_id)
await hass.async_block_till_done()
entity_id = ENTITY_ID
await hass.services.async_call(
FAN_DOMAIN,
SERVICE_SET_PERCENTAGE,
{ATTR_ENTITY_ID: entity_id, ATTR_PERCENTAGE: 60},
blocking=True,
)
mock_flow_it.return_value.send_command.assert_awaited_once_with(
Speed.LEVEL_3, flow_in=True, flow_out=True
)
async def test_fan_set_percentage_zero(
hass: HomeAssistant, mock_flow_it: AsyncMock, mock_config_entry: MockConfigEntry
) -> None:
"""Test setting percentage to 0 turns off fan."""
assert await hass.config_entries.async_setup(mock_config_entry.entry_id)
await hass.async_block_till_done()
entity_id = ENTITY_ID
await hass.services.async_call(
FAN_DOMAIN,
SERVICE_SET_PERCENTAGE,
{ATTR_ENTITY_ID: entity_id, ATTR_PERCENTAGE: 0},
blocking=True,
)
mock_flow_it.return_value.send_command.assert_awaited_once_with(
Speed.OFF, flow_in=True, flow_out=True
)
async def test_fan_set_preset_mode(
hass: HomeAssistant, mock_flow_it: AsyncMock, mock_config_entry: MockConfigEntry
) -> None:
"""Test setting preset mode."""
assert await hass.config_entries.async_setup(mock_config_entry.entry_id)
await hass.async_block_till_done()
entity_id = ENTITY_ID
await hass.services.async_call(
FAN_DOMAIN,
SERVICE_SET_PRESET_MODE,
{ATTR_ENTITY_ID: entity_id, ATTR_PRESET_MODE: "boost"},
blocking=True,
)
mock_flow_it.return_value.send_command.assert_awaited_once_with(
Speed.BOOST, flow_in=True, flow_out=True
)