* New binary sensor for connectivity * Add binary_sensor * New binary sensor for connectivity * Add binary_sensor * Handle values returned as None * Small text update for Uptime * Update homeassistant/components/upnp/binary_sensor.py Co-authored-by: Joakim Sørensen <hi@ludeeus.dev> * Update homeassistant/components/upnp/binary_sensor.py Co-authored-by: Joakim Sørensen <hi@ludeeus.dev> * Update homeassistant/components/upnp/binary_sensor.py Co-authored-by: Joakim Sørensen <hi@ludeeus.dev> * Update homeassistant/components/upnp/binary_sensor.py Co-authored-by: Joakim Sørensen <hi@ludeeus.dev> * Update homeassistant/components/upnp/binary_sensor.py Co-authored-by: Joakim Sørensen <hi@ludeeus.dev> * Update homeassistant/components/upnp/binary_sensor.py Co-authored-by: Joakim Sørensen <hi@ludeeus.dev> * Update homeassistant/components/upnp/binary_sensor.py Co-authored-by: Joakim Sørensen <hi@ludeeus.dev> * Update homeassistant/components/upnp/binary_sensor.py Co-authored-by: Joakim Sørensen <hi@ludeeus.dev> * Updates based on review * Update homeassistant/components/upnp/binary_sensor.py Co-authored-by: Joakim Sørensen <hi@ludeeus.dev> * Further updates based on review * Set device_class as a class atribute * Create 1 combined data coordinator and UpnpEntity class * Updates on coordinator * Update comment * Fix in async_step_init for coordinator * Add async_get_status to mocked device and set times polled for each call seperately * Updated to get device through coordinator Check polling for each status call seperately * Use collections.abc instead of Typing for Mapping * Remove adding device to hass.data as coordinator is now saved * Removed setting _coordinator * Added myself as codeowner * Update type in __init__ * Removed attributes from binary sensor * Fix async_unload_entry * Add expected return value to is_on Co-authored-by: Joakim Sørensen <hi@ludeeus.dev>
104 lines
2.6 KiB
Python
104 lines
2.6 KiB
Python
"""Mock device for testing purposes."""
|
|
|
|
from typing import Any, Mapping
|
|
from unittest.mock import AsyncMock, patch
|
|
|
|
import pytest
|
|
|
|
from homeassistant.components.upnp.const import (
|
|
BYTES_RECEIVED,
|
|
BYTES_SENT,
|
|
PACKETS_RECEIVED,
|
|
PACKETS_SENT,
|
|
TIMESTAMP,
|
|
UPTIME,
|
|
WANIP,
|
|
WANSTATUS,
|
|
)
|
|
from homeassistant.components.upnp.device import Device
|
|
from homeassistant.util import dt
|
|
|
|
from .common import TEST_UDN
|
|
|
|
|
|
class MockDevice(Device):
|
|
"""Mock device for Device."""
|
|
|
|
def __init__(self, udn: str) -> None:
|
|
"""Initialize mock device."""
|
|
igd_device = object()
|
|
mock_device_updater = AsyncMock()
|
|
super().__init__(igd_device, mock_device_updater)
|
|
self._udn = udn
|
|
self.traffic_times_polled = 0
|
|
self.status_times_polled = 0
|
|
|
|
@classmethod
|
|
async def async_create_device(cls, hass, ssdp_location) -> "MockDevice":
|
|
"""Return self."""
|
|
return cls(TEST_UDN)
|
|
|
|
@property
|
|
def udn(self) -> str:
|
|
"""Get the UDN."""
|
|
return self._udn
|
|
|
|
@property
|
|
def manufacturer(self) -> str:
|
|
"""Get manufacturer."""
|
|
return "mock-manufacturer"
|
|
|
|
@property
|
|
def name(self) -> str:
|
|
"""Get name."""
|
|
return "mock-name"
|
|
|
|
@property
|
|
def model_name(self) -> str:
|
|
"""Get the model name."""
|
|
return "mock-model-name"
|
|
|
|
@property
|
|
def device_type(self) -> str:
|
|
"""Get the device type."""
|
|
return "urn:schemas-upnp-org:device:InternetGatewayDevice:1"
|
|
|
|
@property
|
|
def hostname(self) -> str:
|
|
"""Get the hostname."""
|
|
return "mock-hostname"
|
|
|
|
async def async_get_traffic_data(self) -> Mapping[str, Any]:
|
|
"""Get traffic data."""
|
|
self.traffic_times_polled += 1
|
|
return {
|
|
TIMESTAMP: dt.utcnow(),
|
|
BYTES_RECEIVED: 0,
|
|
BYTES_SENT: 0,
|
|
PACKETS_RECEIVED: 0,
|
|
PACKETS_SENT: 0,
|
|
}
|
|
|
|
async def async_get_status(self) -> Mapping[str, Any]:
|
|
"""Get connection status, uptime, and external IP."""
|
|
self.status_times_polled += 1
|
|
return {
|
|
WANSTATUS: "Connected",
|
|
UPTIME: 0,
|
|
WANIP: "192.168.0.1",
|
|
}
|
|
|
|
async def async_start(self) -> None:
|
|
"""Start the device updater."""
|
|
|
|
async def async_stop(self) -> None:
|
|
"""Stop the device updater."""
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_upnp_device():
|
|
"""Mock upnp Device.async_create_device."""
|
|
with patch(
|
|
"homeassistant.components.upnp.Device", new=MockDevice
|
|
) as mock_async_create_device:
|
|
yield mock_async_create_device
|