mirror of
https://github.com/python-kasa/python-kasa.git
synced 2024-12-22 19:23:34 +00:00
Add (some) tests to the cli tool (#22)
* Add tests to the cli tool * add pytest-mock * do not ignore cli.py for coverage * read requirements_test.txt instead of redefining reqs in tox.ini * Add upload to codecov, first try! * fix name of the result file * no need to manually publish to azure devops..
This commit is contained in:
parent
7f625cd1c2
commit
852ae494af
@ -87,5 +87,9 @@ steps:
|
|||||||
displayName: 'Order of imports (isort)'
|
displayName: 'Order of imports (isort)'
|
||||||
|
|
||||||
- script: |
|
- script: |
|
||||||
pytest --cov kasa --cov-report html
|
pytest --cov kasa --cov-report xml
|
||||||
displayName: 'Tests'
|
displayName: 'Tests'
|
||||||
|
|
||||||
|
- script: |
|
||||||
|
codecov -t $(codecov.token)
|
||||||
|
displayName: Report Coverage to codecov
|
||||||
|
119
kasa/tests/test_cli.py
Normal file
119
kasa/tests/test_cli.py
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
import asyncio
|
||||||
|
|
||||||
|
from click.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
|
||||||
|
|
||||||
|
|
||||||
|
def test_sysinfo(dev):
|
||||||
|
runner = CliRunner()
|
||||||
|
res = runner.invoke(sysinfo, obj=dev)
|
||||||
|
assert "System info" in res.output
|
||||||
|
assert dev.alias in res.output
|
||||||
|
|
||||||
|
|
||||||
|
@turn_on
|
||||||
|
def test_state(dev, turn_on):
|
||||||
|
asyncio.run(handle_turn_on(dev, turn_on))
|
||||||
|
runner = CliRunner()
|
||||||
|
res = 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
|
||||||
|
|
||||||
|
|
||||||
|
def test_alias(dev):
|
||||||
|
runner = CliRunner()
|
||||||
|
|
||||||
|
res = runner.invoke(alias, obj=dev)
|
||||||
|
assert f"Alias: {dev.alias}" in res.output
|
||||||
|
|
||||||
|
new_alias = "new alias"
|
||||||
|
res = runner.invoke(alias, [new_alias], obj=dev)
|
||||||
|
assert f"Setting alias to {new_alias}" in res.output
|
||||||
|
|
||||||
|
res = runner.invoke(alias, obj=dev)
|
||||||
|
assert f"Alias: {new_alias}" in res.output
|
||||||
|
|
||||||
|
|
||||||
|
def test_raw_command(dev):
|
||||||
|
runner = CliRunner()
|
||||||
|
res = runner.invoke(raw_command, ["system", "get_sysinfo"], obj=dev)
|
||||||
|
|
||||||
|
assert res.exit_code == 0
|
||||||
|
assert dev.alias in res.output
|
||||||
|
|
||||||
|
res = runner.invoke(raw_command, obj=dev)
|
||||||
|
assert res.exit_code != 0
|
||||||
|
assert "Usage" in res.output
|
||||||
|
|
||||||
|
|
||||||
|
def test_emeter(dev: SmartDevice, mocker):
|
||||||
|
runner = CliRunner()
|
||||||
|
|
||||||
|
res = 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 = 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 = runner.invoke(emeter, ["--month", "1900-12"], obj=dev)
|
||||||
|
assert "For month" in res.output
|
||||||
|
daily.assert_called()
|
||||||
|
|
||||||
|
|
||||||
|
def test_brightness(dev):
|
||||||
|
runner = CliRunner()
|
||||||
|
res = runner.invoke(brightness, obj=dev)
|
||||||
|
if not dev.is_dimmable:
|
||||||
|
assert "This device does not support brightness." in res.output
|
||||||
|
return
|
||||||
|
|
||||||
|
res = runner.invoke(brightness, obj=dev)
|
||||||
|
assert f"Brightness: {dev.brightness}" in res.output
|
||||||
|
|
||||||
|
res = runner.invoke(brightness, ["12"], obj=dev)
|
||||||
|
assert "Setting brightness" in res.output
|
||||||
|
|
||||||
|
res = runner.invoke(brightness, obj=dev)
|
||||||
|
assert f"Brightness: 12" in res.output
|
||||||
|
|
||||||
|
|
||||||
|
def test_temperature(dev):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def test_hsv(dev):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def test_led(dev):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def test_on(dev):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def test_off(dev):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def test_reboot(dev):
|
||||||
|
pass
|
@ -2,3 +2,7 @@ pytest
|
|||||||
pytest-azurepipelines
|
pytest-azurepipelines
|
||||||
pytest-cov
|
pytest-cov
|
||||||
pytest-asyncio
|
pytest-asyncio
|
||||||
|
pytest-mock
|
||||||
|
click # needed for test_cli
|
||||||
|
voluptuous
|
||||||
|
codecov
|
||||||
|
9
tox.ini
9
tox.ini
@ -8,13 +8,7 @@ skip_missing_interpreters = True
|
|||||||
|
|
||||||
[testenv]
|
[testenv]
|
||||||
passenv = TRAVIS TRAVIS_JOB_ID TRAVIS_BRANCH
|
passenv = TRAVIS TRAVIS_JOB_ID TRAVIS_BRANCH
|
||||||
deps=
|
deps = -r{toxinidir}/requirements_test.txt
|
||||||
pytest
|
|
||||||
pytest-cov
|
|
||||||
voluptuous
|
|
||||||
typing
|
|
||||||
flake8
|
|
||||||
pytest-asyncio
|
|
||||||
commands=
|
commands=
|
||||||
py.test --cov --cov-config=tox.ini kasa
|
py.test --cov --cov-config=tox.ini kasa
|
||||||
|
|
||||||
@ -49,7 +43,6 @@ commands = pre-commit run --all-files
|
|||||||
source = kasa
|
source = kasa
|
||||||
branch = True
|
branch = True
|
||||||
omit =
|
omit =
|
||||||
kasa/cli.py
|
|
||||||
kasa/tests/*
|
kasa/tests/*
|
||||||
|
|
||||||
[coverage:report]
|
[coverage:report]
|
||||||
|
Loading…
Reference in New Issue
Block a user