mirror of
https://github.com/python-kasa/python-kasa.git
synced 2024-12-22 19:23:34 +00:00
223f3318ea
Some checks are pending
CI / Perform linting checks (3.13) (push) Waiting to run
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (false, macos-latest, 3.11) (push) Blocked by required conditions
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (false, macos-latest, 3.12) (push) Blocked by required conditions
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (false, macos-latest, 3.13) (push) Blocked by required conditions
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (false, ubuntu-latest, 3.11) (push) Blocked by required conditions
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (false, ubuntu-latest, 3.12) (push) Blocked by required conditions
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (false, ubuntu-latest, 3.13) (push) Blocked by required conditions
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (false, windows-latest, 3.11) (push) Blocked by required conditions
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (false, windows-latest, 3.12) (push) Blocked by required conditions
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (false, windows-latest, 3.13) (push) Blocked by required conditions
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (true, ubuntu-latest, 3.11) (push) Blocked by required conditions
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (true, ubuntu-latest, 3.12) (push) Blocked by required conditions
CI / Python ${{ matrix.python-version}} on ${{ matrix.os }}${{ fromJSON('[" (extras)", ""]')[matrix.extras == ''] }} (true, ubuntu-latest, 3.13) (push) Blocked by required conditions
CodeQL checks / Analyze (python) (push) Waiting to run
- Make model exclude region for `iot` devices. This is consistent with `smart` and `smartcam` devices. - Make region it's own attribute on `Device`. - Ensure that devices consistently use `_get_device_info` static methods for all information relating to device models. - Fix issue with firmware and hardware being the wrong way round for `smartcam` devices.
180 lines
5.9 KiB
Python
180 lines
5.9 KiB
Python
import asyncio
|
|
|
|
import pytest
|
|
import xdoctest
|
|
|
|
from .conftest import (
|
|
get_device_for_fixture_protocol,
|
|
get_fixture_info,
|
|
patch_discovery,
|
|
)
|
|
|
|
|
|
def test_bulb_examples(mocker):
|
|
"""Use KL130 (bulb with all features) to test the doctests."""
|
|
p = asyncio.run(get_device_for_fixture_protocol("KL130(US)_1.0_1.8.11.json", "IOT"))
|
|
mocker.patch("kasa.iot.iotbulb.IotBulb", return_value=p)
|
|
mocker.patch("kasa.iot.iotbulb.IotBulb.update")
|
|
res = xdoctest.doctest_module("kasa.iot.iotbulb", "all")
|
|
assert not res["failed"]
|
|
|
|
|
|
def test_iotdevice_examples(mocker):
|
|
"""Use HS110 for emeter examples."""
|
|
p = asyncio.run(get_device_for_fixture_protocol("HS110(EU)_1.0_1.2.5.json", "IOT"))
|
|
asyncio.run(p.set_alias("Bedroom Lamp Plug"))
|
|
asyncio.run(p.update())
|
|
|
|
mocker.patch("kasa.iot.iotdevice.IotDevice", return_value=p)
|
|
mocker.patch("kasa.iot.iotdevice.IotDevice.update")
|
|
res = xdoctest.doctest_module("kasa.iot.iotdevice", "all")
|
|
assert not res["failed"]
|
|
|
|
|
|
def test_plug_examples(mocker):
|
|
"""Test plug examples."""
|
|
p = asyncio.run(get_device_for_fixture_protocol("HS110(EU)_1.0_1.2.5.json", "IOT"))
|
|
asyncio.run(p.set_alias("Bedroom Lamp Plug"))
|
|
asyncio.run(p.update())
|
|
mocker.patch("kasa.iot.iotplug.IotPlug", return_value=p)
|
|
mocker.patch("kasa.iot.iotplug.IotPlug.update")
|
|
res = xdoctest.doctest_module("kasa.iot.iotplug", "all")
|
|
assert not res["failed"]
|
|
|
|
|
|
def test_strip_examples(readmes_mock):
|
|
"""Test strip examples."""
|
|
res = xdoctest.doctest_module("kasa.iot.iotstrip", "all")
|
|
assert not res["failed"]
|
|
|
|
|
|
def test_dimmer_examples(mocker):
|
|
"""Test dimmer examples."""
|
|
p = asyncio.run(get_device_for_fixture_protocol("HS220(US)_1.0_1.5.7.json", "IOT"))
|
|
mocker.patch("kasa.iot.iotdimmer.IotDimmer", return_value=p)
|
|
mocker.patch("kasa.iot.iotdimmer.IotDimmer.update")
|
|
res = xdoctest.doctest_module("kasa.iot.iotdimmer", "all")
|
|
assert not res["failed"]
|
|
|
|
|
|
def test_lightstrip_examples(mocker):
|
|
"""Test lightstrip examples."""
|
|
p = asyncio.run(get_device_for_fixture_protocol("KL430(US)_1.0_1.0.10.json", "IOT"))
|
|
asyncio.run(p.set_alias("Bedroom Lightstrip"))
|
|
asyncio.run(p.update())
|
|
mocker.patch("kasa.iot.iotlightstrip.IotLightStrip", return_value=p)
|
|
mocker.patch("kasa.iot.iotlightstrip.IotLightStrip.update")
|
|
res = xdoctest.doctest_module("kasa.iot.iotlightstrip", "all")
|
|
assert not res["failed"]
|
|
|
|
|
|
def test_discovery_examples(readmes_mock):
|
|
"""Test discovery examples."""
|
|
res = xdoctest.doctest_module("kasa.discover", "all")
|
|
assert res["n_passed"] > 0
|
|
assert res["n_warned"] == 0
|
|
assert not res["failed"]
|
|
|
|
|
|
def test_deviceconfig_examples(readmes_mock):
|
|
"""Test discovery examples."""
|
|
res = xdoctest.doctest_module("kasa.deviceconfig", "all")
|
|
assert res["n_passed"] > 0
|
|
assert res["n_warned"] == 0
|
|
assert not res["failed"]
|
|
|
|
|
|
def test_device_examples(readmes_mock):
|
|
"""Test device examples."""
|
|
res = xdoctest.doctest_module("kasa.device", "all")
|
|
assert res["n_passed"] > 0
|
|
assert res["n_warned"] == 0
|
|
assert not res["failed"]
|
|
|
|
|
|
def test_light_examples(readmes_mock):
|
|
"""Test device examples."""
|
|
res = xdoctest.doctest_module("kasa.interfaces.light", "all")
|
|
assert res["n_passed"] > 0
|
|
assert res["n_warned"] == 0
|
|
assert not res["failed"]
|
|
|
|
|
|
def test_light_preset_examples(readmes_mock):
|
|
"""Test device examples."""
|
|
res = xdoctest.doctest_module("kasa.interfaces.lightpreset", "all")
|
|
assert res["n_passed"] > 0
|
|
assert res["n_warned"] == 0
|
|
assert not res["failed"]
|
|
|
|
|
|
def test_light_effect_examples(readmes_mock):
|
|
"""Test device examples."""
|
|
res = xdoctest.doctest_module("kasa.interfaces.lighteffect", "all")
|
|
assert res["n_passed"] > 0
|
|
assert res["n_warned"] == 0
|
|
assert not res["failed"]
|
|
|
|
|
|
def test_child_examples(readmes_mock):
|
|
"""Test device examples."""
|
|
res = xdoctest.doctest_module("kasa.smart.modules.childdevice", "all")
|
|
assert res["n_passed"] > 0
|
|
assert res["n_warned"] == 0
|
|
assert not res["failed"]
|
|
|
|
|
|
def test_module_examples(readmes_mock):
|
|
"""Test device examples."""
|
|
res = xdoctest.doctest_module("kasa.module", "all")
|
|
assert res["n_passed"] > 0
|
|
assert res["n_warned"] == 0
|
|
assert not res["failed"]
|
|
|
|
|
|
def test_feature_examples(readmes_mock):
|
|
"""Test device examples."""
|
|
res = xdoctest.doctest_module("kasa.feature", "all")
|
|
assert res["n_passed"] > 0
|
|
assert res["n_warned"] == 0
|
|
assert not res["failed"]
|
|
|
|
|
|
def test_tutorial_examples(readmes_mock):
|
|
"""Test discovery examples."""
|
|
res = xdoctest.doctest_module("docs/tutorial.py", "all")
|
|
assert res["n_passed"] > 0
|
|
assert res["n_warned"] == 0
|
|
assert not res["failed"]
|
|
|
|
|
|
@pytest.fixture
|
|
async def readmes_mock(mocker):
|
|
fixture_infos = {
|
|
"127.0.0.1": get_fixture_info("KP303(UK)_1.0_1.0.3.json", "IOT"), # Strip
|
|
"127.0.0.2": get_fixture_info("HS110(EU)_1.0_1.2.5.json", "IOT"), # Plug
|
|
"127.0.0.3": get_fixture_info("L530E(EU)_3.0_1.1.6.json", "SMART"), # Bulb
|
|
"127.0.0.4": get_fixture_info("KL430(US)_1.0_1.0.10.json", "IOT"), # Lightstrip
|
|
"127.0.0.5": get_fixture_info("HS220(US)_1.0_1.5.7.json", "IOT"), # Dimmer
|
|
}
|
|
fixture_infos["127.0.0.1"].data["system"]["get_sysinfo"]["alias"] = (
|
|
"Bedroom Power Strip"
|
|
)
|
|
for index, child in enumerate(
|
|
fixture_infos["127.0.0.1"].data["system"]["get_sysinfo"]["children"]
|
|
):
|
|
child["alias"] = f"Plug {index + 1}"
|
|
fixture_infos["127.0.0.2"].data["system"]["get_sysinfo"]["alias"] = (
|
|
"Bedroom Lamp Plug"
|
|
)
|
|
fixture_infos["127.0.0.3"].data["get_device_info"]["nickname"] = (
|
|
"TGl2aW5nIFJvb20gQnVsYg==" # Living Room Bulb
|
|
)
|
|
fixture_infos["127.0.0.4"].data["system"]["get_sysinfo"]["alias"] = (
|
|
"Bedroom Lightstrip"
|
|
)
|
|
fixture_infos["127.0.0.5"].data["system"]["get_sysinfo"]["alias"] = (
|
|
"Living Room Dimmer Switch"
|
|
)
|
|
return patch_discovery(fixture_infos, mocker)
|