|
| 1 | +from __future__ import annotations |
| 2 | + |
| 3 | +from typing import TYPE_CHECKING |
| 4 | + |
| 5 | +import pytest |
| 6 | + |
| 7 | +from deebot_client.command import CommandResult |
| 8 | +from deebot_client.commands.xml import GetBatteryInfo |
| 9 | +from deebot_client.events import BatteryEvent |
| 10 | +from deebot_client.message import HandlingState |
| 11 | +from tests.commands import assert_command |
| 12 | + |
| 13 | +from . import get_request_xml |
| 14 | + |
| 15 | +if TYPE_CHECKING: |
| 16 | + from deebot_client.events.base import Event |
| 17 | + |
| 18 | + |
| 19 | +@pytest.mark.parametrize( |
| 20 | + ("power", "expected_event"), |
| 21 | + [ |
| 22 | + (40, BatteryEvent(40)), |
| 23 | + ], |
| 24 | + ids=["40_pct_battery"], |
| 25 | +) |
| 26 | +async def test_get_battery_info(power: int, expected_event: Event) -> None: |
| 27 | + xml_message = get_request_xml(f"<ctl ret='ok'><battery power='{power}' /></ctl>") |
| 28 | + await assert_command(GetBatteryInfo(), xml_message, expected_event) |
| 29 | + |
| 30 | + |
| 31 | +@pytest.mark.parametrize( |
| 32 | + "payload", |
| 33 | + [ |
| 34 | + '<ctl ret="error"/>', |
| 35 | + '<ctl ret="ok"></ctl>', |
| 36 | + '<ctl ret="ok"><battery /></ctl>', |
| 37 | + '<ctl ret="ok"><test power="1" /></ctl>', |
| 38 | + '<ctl ret="ok"><battery power="-1" /></ctl>', |
| 39 | + '<ctl ret="ok"><battery power="test" /></ctl>', |
| 40 | + ], |
| 41 | + ids=[ |
| 42 | + "error", |
| 43 | + "no_state", |
| 44 | + "no_power", |
| 45 | + "wrong_inner_element", |
| 46 | + "negative_power", |
| 47 | + "strange_power_reading", |
| 48 | + ], |
| 49 | +) |
| 50 | +async def test_get_battery_info_error(payload: str) -> None: |
| 51 | + xml_message = get_request_xml(payload) |
| 52 | + await assert_command( |
| 53 | + GetBatteryInfo(), |
| 54 | + xml_message, |
| 55 | + None, |
| 56 | + command_result=CommandResult(HandlingState.ANALYSE_LOGGED), |
| 57 | + ) |
0 commit comments