Skip to content

Fix incorrect state updates in FakeTestProtocols #861

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Apr 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions kasa/iot/iotbulb.py
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,7 @@ class IotBulb(IotDevice, Bulb):
50
>>> preset.brightness = 100
>>> asyncio.run(bulb.save_preset(preset))
>>> asyncio.run(bulb.update())
>>> bulb.presets[0].brightness
100

Expand Down
1 change: 1 addition & 0 deletions kasa/iot/iotstrip.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ class IotStrip(IotDevice):
>>> strip.is_on
True
>>> asyncio.run(strip.turn_off())
>>> asyncio.run(strip.update())

Accessing individual plugs can be done using the `children` property:

Expand Down
2 changes: 1 addition & 1 deletion kasa/tests/fakeprotocol_iot.py
Original file line number Diff line number Diff line change
Expand Up @@ -413,4 +413,4 @@ def get_response_for_command(cmd):
for target in request:
response.update(get_response_for_module(target))

return response
return copy.deepcopy(response)
6 changes: 4 additions & 2 deletions kasa/tests/fakeprotocol_smart.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,13 +157,15 @@ def _send_request(self, request_dict: dict):
return self._handle_control_child(params)
elif method == "component_nego" or method[:4] == "get_":
if method in info:
return {"result": info[method], "error_code": 0}
result = copy.deepcopy(info[method])
return {"result": result, "error_code": 0}
if (
# FIXTURE_MISSING is for service calls not in place when
# SMART fixtures started to be generated
missing_result := self.FIXTURE_MISSING_MAP.get(method)
) and missing_result[0] in self.components:
retval = {"result": missing_result[1], "error_code": 0}
result = copy.deepcopy(missing_result[1])
retval = {"result": result, "error_code": 0}
else:
# PARAMS error returned for KS240 when get_device_usage called
# on parent device. Could be any error code though.
Expand Down
2 changes: 2 additions & 0 deletions kasa/tests/smart/features/test_brightness.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ async def test_brightness_component(dev: SmartDevice):

# Test setting the value
await feature.set_value(10)
await dev.update()
assert feature.value == 10

with pytest.raises(ValueError):
Expand All @@ -42,6 +43,7 @@ async def test_brightness_dimmable(dev: SmartDevice):

# Test setting the value
await feature.set_value(10)
await dev.update()
assert feature.value == 10

with pytest.raises(ValueError):
Expand Down
1 change: 1 addition & 0 deletions kasa/tests/smart/features/test_colortemp.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ async def test_colortemp_component(dev: SmartDevice):
# We need to take the min here, as L9xx reports a range [9000, 9000].
new_value = min(feature.minimum_value + 1, feature.maximum_value)
await feature.set_value(new_value)
await dev.update()
assert feature.value == new_value

with pytest.raises(ValueError):
Expand Down
1 change: 1 addition & 0 deletions kasa/tests/test_bulb.py
Original file line number Diff line number Diff line change
Expand Up @@ -295,6 +295,7 @@ async def test_modify_preset(dev: IotBulb, mocker):
assert preset.color_temp == 0

await dev.save_preset(preset)
await dev.update()
assert dev.presets[0].brightness == 10

with pytest.raises(KasaException):
Expand Down
14 changes: 8 additions & 6 deletions kasa/tests/test_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,8 @@ async def test_sysinfo(dev, runner):
@turn_on
async def test_state(dev, turn_on, runner):
await handle_turn_on(dev, turn_on)
res = await runner.invoke(state, obj=dev)
await dev.update()
res = await runner.invoke(state, obj=dev)

if dev.is_on:
assert "Device state: True" in res.output
Expand All @@ -100,12 +100,12 @@ async def test_state(dev, turn_on, runner):
@turn_on
async def test_toggle(dev, turn_on, runner):
await handle_turn_on(dev, turn_on)
await runner.invoke(toggle, obj=dev)
await dev.update()
assert dev.is_on == turn_on

if turn_on:
assert not dev.is_on
else:
assert dev.is_on
await runner.invoke(toggle, obj=dev)
await dev.update()
assert dev.is_on != turn_on


@device_iot
Expand All @@ -118,6 +118,7 @@ async def test_alias(dev, runner):
new_alias = "new alias"
res = await runner.invoke(alias, [new_alias], obj=dev)
assert f"Setting alias to {new_alias}" in res.output
await dev.update()

res = await runner.invoke(alias, obj=dev)
assert f"Alias: {new_alias}" in res.output
Expand Down Expand Up @@ -319,6 +320,7 @@ async def test_brightness(dev, runner):

res = await runner.invoke(brightness, ["12"], obj=dev)
assert "Setting brightness" in res.output
await dev.update()

res = await runner.invoke(brightness, obj=dev)
assert "Brightness: 12" in res.output
Expand Down
21 changes: 12 additions & 9 deletions kasa/tests/test_dimmer.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,12 @@ async def test_set_brightness(dev, turn_on):
await handle_turn_on(dev, turn_on)

await dev.set_brightness(99)
await dev.update()
assert dev.brightness == 99
assert dev.is_on == turn_on

await dev.set_brightness(0)
await dev.update()
assert dev.brightness == 1
assert dev.is_on == turn_on

Expand All @@ -27,17 +29,18 @@ async def test_set_brightness_transition(dev, turn_on, mocker):
query_helper = mocker.spy(IotDimmer, "_query_helper")

await dev.set_brightness(99, transition=1000)

assert dev.brightness == 99
assert dev.is_on
query_helper.assert_called_with(
mocker.ANY,
"smartlife.iot.dimmer",
"set_dimmer_transition",
{"brightness": 99, "duration": 1000},
)
await dev.update()
assert dev.brightness == 99
assert dev.is_on

await dev.set_brightness(0, transition=1000)
await dev.update()
assert dev.brightness == 1


Expand All @@ -58,15 +61,15 @@ async def test_turn_on_transition(dev, mocker):
original_brightness = dev.brightness

await dev.turn_on(transition=1000)

assert dev.is_on
assert dev.brightness == original_brightness
query_helper.assert_called_with(
mocker.ANY,
"smartlife.iot.dimmer",
"set_dimmer_transition",
{"brightness": original_brightness, "duration": 1000},
)
await dev.update()
assert dev.is_on
assert dev.brightness == original_brightness


@dimmer
Expand Down Expand Up @@ -94,15 +97,15 @@ async def test_set_dimmer_transition(dev, turn_on, mocker):
query_helper = mocker.spy(IotDimmer, "_query_helper")

await dev.set_dimmer_transition(99, 1000)

assert dev.is_on
assert dev.brightness == 99
query_helper.assert_called_with(
mocker.ANY,
"smartlife.iot.dimmer",
"set_dimmer_transition",
{"brightness": 99, "duration": 1000},
)
await dev.update()
assert dev.is_on
assert dev.brightness == 99


@dimmer
Expand Down
1 change: 1 addition & 0 deletions kasa/tests/test_lightstrip.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ async def test_effects_lightstrip_set_effect(dev: IotLightStrip):
await dev.set_effect("Not real")

await dev.set_effect("Candy Cane")
await dev.update()
assert dev.effect["name"] == "Candy Cane"


Expand Down