Add tests for LitterRobot sensors (#78638)
This commit is contained in:
parent
9655f30146
commit
aa0cbf0afe
3 changed files with 191 additions and 9 deletions
|
@ -4,26 +4,35 @@ from __future__ import annotations
|
|||
from typing import Any
|
||||
from unittest.mock import AsyncMock, MagicMock, patch
|
||||
|
||||
from pylitterbot import Account, LitterRobot3, Robot
|
||||
from pylitterbot import Account, FeederRobot, LitterRobot3, LitterRobot4, Robot
|
||||
from pylitterbot.exceptions import InvalidCommandException
|
||||
import pytest
|
||||
|
||||
from homeassistant.components import litterrobot
|
||||
from homeassistant.core import HomeAssistant
|
||||
|
||||
from .common import CONFIG, ROBOT_DATA
|
||||
from .common import CONFIG, FEEDER_ROBOT_DATA, ROBOT_4_DATA, ROBOT_DATA
|
||||
|
||||
from tests.common import MockConfigEntry
|
||||
|
||||
|
||||
def create_mock_robot(
|
||||
robot_data: dict | None, account: Account, side_effect: Any | None = None
|
||||
robot_data: dict | None,
|
||||
account: Account,
|
||||
v4: bool,
|
||||
feeder: bool,
|
||||
side_effect: Any | None = None,
|
||||
) -> Robot:
|
||||
"""Create a mock Litter-Robot device."""
|
||||
if not robot_data:
|
||||
robot_data = {}
|
||||
|
||||
robot = LitterRobot3(data={**ROBOT_DATA, **robot_data}, account=account)
|
||||
if v4:
|
||||
robot = LitterRobot4(data={**ROBOT_4_DATA, **robot_data}, account=account)
|
||||
elif feeder:
|
||||
robot = FeederRobot(data={**FEEDER_ROBOT_DATA, **robot_data}, account=account)
|
||||
else:
|
||||
robot = LitterRobot3(data={**ROBOT_DATA, **robot_data}, account=account)
|
||||
robot.start_cleaning = AsyncMock(side_effect=side_effect)
|
||||
robot.set_power_status = AsyncMock(side_effect=side_effect)
|
||||
robot.reset_waste_drawer = AsyncMock(side_effect=side_effect)
|
||||
|
@ -39,13 +48,17 @@ def create_mock_account(
|
|||
robot_data: dict | None = None,
|
||||
side_effect: Any | None = None,
|
||||
skip_robots: bool = False,
|
||||
v4: bool = False,
|
||||
feeder: bool = False,
|
||||
) -> MagicMock:
|
||||
"""Create a mock Litter-Robot account."""
|
||||
account = MagicMock(spec=Account)
|
||||
account.connect = AsyncMock()
|
||||
account.refresh_robots = AsyncMock()
|
||||
account.robots = (
|
||||
[] if skip_robots else [create_mock_robot(robot_data, account, side_effect)]
|
||||
[]
|
||||
if skip_robots
|
||||
else [create_mock_robot(robot_data, account, v4, feeder, side_effect)]
|
||||
)
|
||||
return account
|
||||
|
||||
|
@ -56,6 +69,18 @@ def mock_account() -> MagicMock:
|
|||
return create_mock_account()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_account_with_litterrobot_4() -> MagicMock:
|
||||
"""Mock account with Litter-Robot 4."""
|
||||
return create_mock_account(v4=True)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_account_with_feederrobot() -> MagicMock:
|
||||
"""Mock account with Feeder-Robot."""
|
||||
return create_mock_account(feeder=True)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def mock_account_with_no_robots() -> MagicMock:
|
||||
"""Mock a Litter-Robot account."""
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue