mirror of
https://github.com/python-kasa/python-kasa.git
synced 2025-08-06 10:44:04 +00:00
Disallow non-targeted device commands (#982)
Prevent the cli from allowing sub commands unless host or alias is specified. It is unwise to allow commands to be run on an arbitrary set of discovered devices so this PR shows an error if attempted. Also consolidates other invalid cli operations to use a single error function to display the error to the user.
This commit is contained in:
@@ -461,12 +461,12 @@ async def test_led(dev: Device, runner: CliRunner):
|
||||
|
||||
async def test_json_output(dev: Device, mocker, runner):
|
||||
"""Test that the json output produces correct output."""
|
||||
mocker.patch("kasa.Discover.discover", return_value={"127.0.0.1": dev})
|
||||
# These will mock the features to avoid accessing non-existing
|
||||
mocker.patch("kasa.Discover.discover_single", return_value=dev)
|
||||
# These will mock the features to avoid accessing non-existing ones
|
||||
mocker.patch("kasa.device.Device.features", return_value={})
|
||||
mocker.patch("kasa.iot.iotdevice.IotDevice.features", return_value={})
|
||||
|
||||
res = await runner.invoke(cli, ["--json", "state"], obj=dev)
|
||||
res = await runner.invoke(cli, ["--host", "127.0.0.1", "--json", "state"], obj=dev)
|
||||
assert res.exit_code == 0
|
||||
assert json.loads(res.output) == dev.internal_state
|
||||
|
||||
@@ -789,7 +789,7 @@ async def test_errors(mocker, runner):
|
||||
)
|
||||
assert res.exit_code == 1
|
||||
assert (
|
||||
"Raised error: Managed to invoke callback without a context object of type 'Device' existing."
|
||||
"Only discover is available without --host or --alias"
|
||||
in res.output.replace("\n", "") # Remove newlines from rich formatting
|
||||
)
|
||||
assert isinstance(res.exception, SystemExit)
|
||||
@@ -860,7 +860,7 @@ async def test_feature_missing(mocker, runner):
|
||||
)
|
||||
assert "No feature by name 'missing'" in res.output
|
||||
assert "== Features ==" not in res.output
|
||||
assert res.exit_code == 0
|
||||
assert res.exit_code == 1
|
||||
|
||||
|
||||
async def test_feature_set(mocker, runner):
|
||||
|
Reference in New Issue
Block a user