mirror of
https://github.com/python-kasa/python-kasa.git
synced 2024-12-23 03:33:35 +00:00
3fe578cf26
* async++, small powerstrip improvements * use asyncclick instead of click, allows defining the commands with async def to avoid manual eventloop/asyncio.run handling * improve powerstrip support: * new powerstrip api: turn_{on,off}_by_{name,index} methods * cli: fix on/off for powerstrip using the new apis * add missing update()s for cli's hsv, led, temperature (fixes #43) * prettyprint the received payloads when debug mode in use * cli: debug mode can be activated now with '-d' * update requirements_test.txt * remove outdated click-datetime, replace click with asyncclick * debug is a flag * make smartstripplug to inherit the sysinfo from its parent, allows for simple access of general plug properties * proper bound checking for index accesses, allow controlling the plug at index 0 * remove the mess of turn_{on,off}_by_{name,index}, get_plug_by_{name,index} are enough. * adapt cli to use that * allow changing the alias per index * use f-strings consistently everywhere in the cli * add tests for get_plug_by_{index,name}
121 lines
2.9 KiB
Python
121 lines
2.9 KiB
Python
import pytest
|
|
|
|
from asyncclick.testing import CliRunner
|
|
from kasa import SmartDevice
|
|
from kasa.cli import alias, brightness, emeter, raw_command, state, sysinfo
|
|
|
|
from .conftest import handle_turn_on, turn_on
|
|
|
|
pytestmark = pytest.mark.asyncio
|
|
|
|
|
|
async def test_sysinfo(dev):
|
|
runner = CliRunner()
|
|
res = await runner.invoke(sysinfo, obj=dev)
|
|
assert "System info" in res.output
|
|
assert dev.alias in res.output
|
|
|
|
|
|
@turn_on
|
|
async def test_state(dev, turn_on):
|
|
await handle_turn_on(dev, turn_on)
|
|
runner = CliRunner()
|
|
res = await runner.invoke(state, obj=dev)
|
|
print(res.output)
|
|
|
|
if dev.is_on:
|
|
assert "Device state: ON" in res.output
|
|
else:
|
|
assert "Device state: OFF" in res.output
|
|
|
|
if not dev.has_emeter:
|
|
assert "Device has no emeter" in res.output
|
|
|
|
|
|
async def test_alias(dev):
|
|
runner = CliRunner()
|
|
|
|
res = await runner.invoke(alias, obj=dev)
|
|
assert f"Alias: {dev.alias}" in res.output
|
|
|
|
new_alias = "new alias"
|
|
res = await runner.invoke(alias, [new_alias], obj=dev)
|
|
assert f"Setting alias to {new_alias}" in res.output
|
|
|
|
res = await runner.invoke(alias, obj=dev)
|
|
assert f"Alias: {new_alias}" in res.output
|
|
|
|
|
|
async def test_raw_command(dev):
|
|
runner = CliRunner()
|
|
res = await runner.invoke(raw_command, ["system", "get_sysinfo"], obj=dev)
|
|
|
|
assert res.exit_code == 0
|
|
assert dev.alias in res.output
|
|
|
|
res = await runner.invoke(raw_command, obj=dev)
|
|
assert res.exit_code != 0
|
|
assert "Usage" in res.output
|
|
|
|
|
|
async def test_emeter(dev: SmartDevice, mocker):
|
|
runner = CliRunner()
|
|
|
|
res = await runner.invoke(emeter, obj=dev)
|
|
if not dev.has_emeter:
|
|
assert "Device has no emeter" in res.output
|
|
return
|
|
|
|
assert "Current State" in res.output
|
|
|
|
monthly = mocker.patch.object(dev, "get_emeter_monthly")
|
|
res = await runner.invoke(emeter, ["--year", "1900"], obj=dev)
|
|
assert "For year" in res.output
|
|
monthly.assert_called()
|
|
|
|
daily = mocker.patch.object(dev, "get_emeter_daily")
|
|
res = await runner.invoke(emeter, ["--month", "1900-12"], obj=dev)
|
|
assert "For month" in res.output
|
|
daily.assert_called()
|
|
|
|
|
|
async def test_brightness(dev):
|
|
runner = CliRunner()
|
|
res = await runner.invoke(brightness, obj=dev)
|
|
if not dev.is_dimmable:
|
|
assert "This device does not support brightness." in res.output
|
|
return
|
|
|
|
res = await runner.invoke(brightness, obj=dev)
|
|
assert f"Brightness: {dev.brightness}" in res.output
|
|
|
|
res = await runner.invoke(brightness, ["12"], obj=dev)
|
|
assert "Setting brightness" in res.output
|
|
|
|
res = await runner.invoke(brightness, obj=dev)
|
|
assert f"Brightness: 12" in res.output
|
|
|
|
|
|
async def test_temperature(dev):
|
|
pass
|
|
|
|
|
|
async def test_hsv(dev):
|
|
pass
|
|
|
|
|
|
async def test_led(dev):
|
|
pass
|
|
|
|
|
|
async def test_on(dev):
|
|
pass
|
|
|
|
|
|
async def test_off(dev):
|
|
pass
|
|
|
|
|
|
async def test_reboot(dev):
|
|
pass
|