mirror of
https://github.com/python-kasa/python-kasa.git
synced 2025-11-15 22:58:42 +00:00
Move connect_single to SmartDevice.connect (#538)
This refactors `Discover.connect_single` by moving device instance construction into a separate device factory module. New `SmartDevice.connect(host, *, port, timeout, credentials, device_type)` class method replaces the functionality of `connect_single`, and also now allows constructing device instances without relying on UDP discovery for type discovery if `device_type` parameter is set. --------- Co-authored-by: Teemu R. <tpr@iki.fi>
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
import inspect
|
||||
from datetime import datetime
|
||||
from unittest.mock import patch
|
||||
from unittest.mock import Mock, patch
|
||||
|
||||
import pytest # type: ignore # https://github.com/pytest-dev/pytest/issues/3342
|
||||
|
||||
import kasa
|
||||
from kasa import Credentials, SmartDevice, SmartDeviceException
|
||||
from kasa.smartstrip import SmartStripPlug
|
||||
from kasa.smartdevice import DeviceType
|
||||
|
||||
from .conftest import handle_turn_on, has_emeter, no_emeter, turn_on
|
||||
from .newfakes import PLUG_SCHEMA, TZ_SCHEMA, FakeTransportProtocol
|
||||
@@ -215,6 +215,28 @@ async def test_create_smart_device_with_timeout():
|
||||
assert dev.protocol.timeout == 100
|
||||
|
||||
|
||||
async def test_create_thin_wrapper():
|
||||
"""Make sure thin wrapper is created with the correct device type."""
|
||||
mock = Mock()
|
||||
with patch("kasa.device_factory.connect", return_value=mock) as connect:
|
||||
dev = await SmartDevice.connect(
|
||||
host="test_host",
|
||||
port=1234,
|
||||
timeout=100,
|
||||
credentials=Credentials("username", "password"),
|
||||
device_type=DeviceType.Strip,
|
||||
)
|
||||
assert dev is mock
|
||||
|
||||
connect.assert_called_once_with(
|
||||
host="test_host",
|
||||
port=1234,
|
||||
timeout=100,
|
||||
credentials=Credentials("username", "password"),
|
||||
device_type=DeviceType.Strip,
|
||||
)
|
||||
|
||||
|
||||
async def test_modules_not_supported(dev: SmartDevice):
|
||||
"""Test that unsupported modules do not break the device."""
|
||||
for module in dev.modules.values():
|
||||
|
||||
Reference in New Issue
Block a user