mirror of
https://github.com/home-assistant/core.git
synced 2025-04-24 17:27:52 +00:00
Fritz tests cleanup (#65054)
This commit is contained in:
parent
16db8e0802
commit
3da33679a2
@ -1,127 +1 @@
|
||||
"""Tests for the AVM Fritz!Box integration."""
|
||||
from unittest import mock
|
||||
|
||||
from homeassistant.components.fritz.const import DOMAIN
|
||||
from homeassistant.const import (
|
||||
CONF_DEVICES,
|
||||
CONF_HOST,
|
||||
CONF_PASSWORD,
|
||||
CONF_PORT,
|
||||
CONF_USERNAME,
|
||||
)
|
||||
|
||||
MOCK_CONFIG = {
|
||||
DOMAIN: {
|
||||
CONF_DEVICES: [
|
||||
{
|
||||
CONF_HOST: "fake_host",
|
||||
CONF_PORT: "1234",
|
||||
CONF_PASSWORD: "fake_pass",
|
||||
CONF_USERNAME: "fake_user",
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class FritzConnectionMock: # pylint: disable=too-few-public-methods
|
||||
"""FritzConnection mocking."""
|
||||
|
||||
FRITZBOX_DATA = {
|
||||
("WANIPConn:1", "GetStatusInfo"): {
|
||||
"NewConnectionStatus": "Connected",
|
||||
"NewUptime": 35307,
|
||||
},
|
||||
("WANIPConnection:1", "GetStatusInfo"): {},
|
||||
("WANCommonIFC:1", "GetCommonLinkProperties"): {
|
||||
"NewLayer1DownstreamMaxBitRate": 10087000,
|
||||
"NewLayer1UpstreamMaxBitRate": 2105000,
|
||||
"NewPhysicalLinkStatus": "Up",
|
||||
},
|
||||
("WANCommonIFC:1", "GetAddonInfos"): {
|
||||
"NewByteSendRate": 3438,
|
||||
"NewByteReceiveRate": 67649,
|
||||
"NewTotalBytesSent": 1712232562,
|
||||
"NewTotalBytesReceived": 5221019883,
|
||||
},
|
||||
("LANEthernetInterfaceConfig:1", "GetStatistics"): {
|
||||
"NewBytesSent": 23004321,
|
||||
"NewBytesReceived": 12045,
|
||||
},
|
||||
("DeviceInfo:1", "GetInfo"): {
|
||||
"NewSerialNumber": "abcdefgh",
|
||||
"NewName": "TheName",
|
||||
"NewModelName": "FRITZ!Box 7490",
|
||||
},
|
||||
}
|
||||
|
||||
FRITZBOX_DATA_INDEXED = {
|
||||
("X_AVM-DE_Homeauto:1", "GetGenericDeviceInfos"): [
|
||||
{
|
||||
"NewSwitchIsValid": "VALID",
|
||||
"NewMultimeterIsValid": "VALID",
|
||||
"NewTemperatureIsValid": "VALID",
|
||||
"NewDeviceId": 16,
|
||||
"NewAIN": "08761 0114116",
|
||||
"NewDeviceName": "FRITZ!DECT 200 #1",
|
||||
"NewTemperatureOffset": "0",
|
||||
"NewSwitchLock": "0",
|
||||
"NewProductName": "FRITZ!DECT 200",
|
||||
"NewPresent": "CONNECTED",
|
||||
"NewMultimeterPower": 1673,
|
||||
"NewHkrComfortTemperature": "0",
|
||||
"NewSwitchMode": "AUTO",
|
||||
"NewManufacturer": "AVM",
|
||||
"NewMultimeterIsEnabled": "ENABLED",
|
||||
"NewHkrIsTemperature": "0",
|
||||
"NewFunctionBitMask": 2944,
|
||||
"NewTemperatureIsEnabled": "ENABLED",
|
||||
"NewSwitchState": "ON",
|
||||
"NewSwitchIsEnabled": "ENABLED",
|
||||
"NewFirmwareVersion": "03.87",
|
||||
"NewHkrSetVentilStatus": "CLOSED",
|
||||
"NewMultimeterEnergy": 5182,
|
||||
"NewHkrComfortVentilStatus": "CLOSED",
|
||||
"NewHkrReduceTemperature": "0",
|
||||
"NewHkrReduceVentilStatus": "CLOSED",
|
||||
"NewHkrIsEnabled": "DISABLED",
|
||||
"NewHkrSetTemperature": "0",
|
||||
"NewTemperatureCelsius": "225",
|
||||
"NewHkrIsValid": "INVALID",
|
||||
},
|
||||
{},
|
||||
],
|
||||
("Hosts1", "GetGenericHostEntry"): [
|
||||
{
|
||||
"NewSerialNumber": 1234,
|
||||
"NewName": "TheName",
|
||||
"NewModelName": "FRITZ!Box 7490",
|
||||
},
|
||||
{},
|
||||
],
|
||||
}
|
||||
|
||||
MODELNAME = "FRITZ!Box 7490"
|
||||
|
||||
def __init__(self):
|
||||
"""Inint Mocking class."""
|
||||
type(self).modelname = mock.PropertyMock(return_value=self.MODELNAME)
|
||||
self.call_action = mock.Mock(side_effect=self._side_effect_call_action)
|
||||
type(self).action_names = mock.PropertyMock(
|
||||
side_effect=self._side_effect_action_names
|
||||
)
|
||||
services = {
|
||||
srv: None
|
||||
for srv, _ in list(self.FRITZBOX_DATA) + list(self.FRITZBOX_DATA_INDEXED)
|
||||
}
|
||||
type(self).services = mock.PropertyMock(side_effect=[services])
|
||||
|
||||
def _side_effect_call_action(self, service, action, **kwargs):
|
||||
if kwargs:
|
||||
index = next(iter(kwargs.values()))
|
||||
return self.FRITZBOX_DATA_INDEXED[(service, action)][index]
|
||||
|
||||
return self.FRITZBOX_DATA[(service, action)]
|
||||
|
||||
def _side_effect_action_names(self):
|
||||
return list(self.FRITZBOX_DATA) + list(self.FRITZBOX_DATA_INDEXED)
|
||||
|
116
tests/components/fritz/conftest.py
Normal file
116
tests/components/fritz/conftest.py
Normal file
@ -0,0 +1,116 @@
|
||||
"""Common stuff for AVM Fritz!Box tests."""
|
||||
from unittest import mock
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
def fc_class_mock():
|
||||
"""Fixture that sets up a mocked FritzConnection class."""
|
||||
with patch("fritzconnection.FritzConnection", autospec=True) as result:
|
||||
result.return_value = FritzConnectionMock()
|
||||
yield result
|
||||
|
||||
|
||||
class FritzConnectionMock: # pylint: disable=too-few-public-methods
|
||||
"""FritzConnection mocking."""
|
||||
|
||||
FRITZBOX_DATA = {
|
||||
("WANIPConn:1", "GetStatusInfo"): {
|
||||
"NewConnectionStatus": "Connected",
|
||||
"NewUptime": 35307,
|
||||
},
|
||||
("WANIPConnection:1", "GetStatusInfo"): {},
|
||||
("WANCommonIFC:1", "GetCommonLinkProperties"): {
|
||||
"NewLayer1DownstreamMaxBitRate": 10087000,
|
||||
"NewLayer1UpstreamMaxBitRate": 2105000,
|
||||
"NewPhysicalLinkStatus": "Up",
|
||||
},
|
||||
("WANCommonIFC:1", "GetAddonInfos"): {
|
||||
"NewByteSendRate": 3438,
|
||||
"NewByteReceiveRate": 67649,
|
||||
"NewTotalBytesSent": 1712232562,
|
||||
"NewTotalBytesReceived": 5221019883,
|
||||
},
|
||||
("LANEthernetInterfaceConfig:1", "GetStatistics"): {
|
||||
"NewBytesSent": 23004321,
|
||||
"NewBytesReceived": 12045,
|
||||
},
|
||||
("DeviceInfo:1", "GetInfo"): {
|
||||
"NewSerialNumber": "abcdefgh",
|
||||
"NewName": "TheName",
|
||||
"NewModelName": "FRITZ!Box 7490",
|
||||
},
|
||||
}
|
||||
|
||||
FRITZBOX_DATA_INDEXED = {
|
||||
("X_AVM-DE_Homeauto:1", "GetGenericDeviceInfos"): [
|
||||
{
|
||||
"NewSwitchIsValid": "VALID",
|
||||
"NewMultimeterIsValid": "VALID",
|
||||
"NewTemperatureIsValid": "VALID",
|
||||
"NewDeviceId": 16,
|
||||
"NewAIN": "08761 0114116",
|
||||
"NewDeviceName": "FRITZ!DECT 200 #1",
|
||||
"NewTemperatureOffset": "0",
|
||||
"NewSwitchLock": "0",
|
||||
"NewProductName": "FRITZ!DECT 200",
|
||||
"NewPresent": "CONNECTED",
|
||||
"NewMultimeterPower": 1673,
|
||||
"NewHkrComfortTemperature": "0",
|
||||
"NewSwitchMode": "AUTO",
|
||||
"NewManufacturer": "AVM",
|
||||
"NewMultimeterIsEnabled": "ENABLED",
|
||||
"NewHkrIsTemperature": "0",
|
||||
"NewFunctionBitMask": 2944,
|
||||
"NewTemperatureIsEnabled": "ENABLED",
|
||||
"NewSwitchState": "ON",
|
||||
"NewSwitchIsEnabled": "ENABLED",
|
||||
"NewFirmwareVersion": "03.87",
|
||||
"NewHkrSetVentilStatus": "CLOSED",
|
||||
"NewMultimeterEnergy": 5182,
|
||||
"NewHkrComfortVentilStatus": "CLOSED",
|
||||
"NewHkrReduceTemperature": "0",
|
||||
"NewHkrReduceVentilStatus": "CLOSED",
|
||||
"NewHkrIsEnabled": "DISABLED",
|
||||
"NewHkrSetTemperature": "0",
|
||||
"NewTemperatureCelsius": "225",
|
||||
"NewHkrIsValid": "INVALID",
|
||||
},
|
||||
{},
|
||||
],
|
||||
("Hosts1", "GetGenericHostEntry"): [
|
||||
{
|
||||
"NewSerialNumber": 1234,
|
||||
"NewName": "TheName",
|
||||
"NewModelName": "FRITZ!Box 7490",
|
||||
},
|
||||
{},
|
||||
],
|
||||
}
|
||||
|
||||
MODELNAME = "FRITZ!Box 7490"
|
||||
|
||||
def __init__(self):
|
||||
"""Inint Mocking class."""
|
||||
type(self).modelname = mock.PropertyMock(return_value=self.MODELNAME)
|
||||
self.call_action = mock.Mock(side_effect=self._side_effect_call_action)
|
||||
type(self).action_names = mock.PropertyMock(
|
||||
side_effect=self._side_effect_action_names
|
||||
)
|
||||
services = {
|
||||
srv: None
|
||||
for srv, _ in list(self.FRITZBOX_DATA) + list(self.FRITZBOX_DATA_INDEXED)
|
||||
}
|
||||
type(self).services = mock.PropertyMock(side_effect=[services])
|
||||
|
||||
def _side_effect_call_action(self, service, action, **kwargs):
|
||||
if kwargs:
|
||||
index = next(iter(kwargs.values()))
|
||||
return self.FRITZBOX_DATA_INDEXED[(service, action)][index]
|
||||
|
||||
return self.FRITZBOX_DATA[(service, action)]
|
||||
|
||||
def _side_effect_action_names(self):
|
||||
return list(self.FRITZBOX_DATA) + list(self.FRITZBOX_DATA_INDEXED)
|
48
tests/components/fritz/const.py
Normal file
48
tests/components/fritz/const.py
Normal file
@ -0,0 +1,48 @@
|
||||
"""Common stuff for AVM Fritz!Box tests."""
|
||||
from homeassistant.components import ssdp
|
||||
from homeassistant.components.fritz.const import DOMAIN
|
||||
from homeassistant.components.ssdp import ATTR_UPNP_FRIENDLY_NAME, ATTR_UPNP_UDN
|
||||
from homeassistant.const import (
|
||||
CONF_DEVICES,
|
||||
CONF_HOST,
|
||||
CONF_PASSWORD,
|
||||
CONF_PORT,
|
||||
CONF_USERNAME,
|
||||
)
|
||||
|
||||
ATTR_HOST = "host"
|
||||
ATTR_NEW_SERIAL_NUMBER = "NewSerialNumber"
|
||||
|
||||
MOCK_CONFIG = {
|
||||
DOMAIN: {
|
||||
CONF_DEVICES: [
|
||||
{
|
||||
CONF_HOST: "fake_host",
|
||||
CONF_PORT: "1234",
|
||||
CONF_PASSWORD: "fake_pass",
|
||||
CONF_USERNAME: "fake_user",
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
MOCK_HOST = "fake_host"
|
||||
MOCK_IP = "192.168.178.1"
|
||||
MOCK_SERIAL_NUMBER = "fake_serial_number"
|
||||
MOCK_FIRMWARE_INFO = [True, "1.1.1"]
|
||||
|
||||
MOCK_USER_DATA = MOCK_CONFIG[DOMAIN][CONF_DEVICES][0]
|
||||
MOCK_DEVICE_INFO = {
|
||||
ATTR_HOST: MOCK_HOST,
|
||||
ATTR_NEW_SERIAL_NUMBER: MOCK_SERIAL_NUMBER,
|
||||
}
|
||||
MOCK_SSDP_DATA = ssdp.SsdpServiceInfo(
|
||||
ssdp_usn="mock_usn",
|
||||
ssdp_st="mock_st",
|
||||
ssdp_location=f"https://{MOCK_IP}:12345/test",
|
||||
upnp={
|
||||
ATTR_UPNP_FRIENDLY_NAME: "fake_name",
|
||||
ATTR_UPNP_UDN: "uuid:only-a-test",
|
||||
},
|
||||
)
|
||||
|
||||
MOCK_REQUEST = b'<?xml version="1.0" encoding="utf-8"?><SessionInfo><SID>xxxxxxxxxxxxxxxx</SID><Challenge>xxxxxxxx</Challenge><BlockTime>0</BlockTime><Rights><Name>Dial</Name><Access>2</Access><Name>App</Name><Access>2</Access><Name>HomeAuto</Name><Access>2</Access><Name>BoxAdmin</Name><Access>2</Access><Name>Phone</Name><Access>2</Access><Name>NAS</Name><Access>2</Access></Rights><Users><User last="1">FakeFritzUser</User></Users></SessionInfo>\n'
|
@ -3,9 +3,7 @@ import dataclasses
|
||||
from unittest.mock import patch
|
||||
|
||||
from fritzconnection.core.exceptions import FritzConnectionException, FritzSecurityError
|
||||
import pytest
|
||||
|
||||
from homeassistant.components import ssdp
|
||||
from homeassistant.components.device_tracker.const import (
|
||||
CONF_CONSIDER_HOME,
|
||||
DEFAULT_CONSIDER_HOME,
|
||||
@ -16,9 +14,9 @@ from homeassistant.components.fritz.const import (
|
||||
ERROR_CANNOT_CONNECT,
|
||||
ERROR_UNKNOWN,
|
||||
)
|
||||
from homeassistant.components.ssdp import ATTR_UPNP_FRIENDLY_NAME, ATTR_UPNP_UDN
|
||||
from homeassistant.components.ssdp import ATTR_UPNP_UDN
|
||||
from homeassistant.config_entries import SOURCE_REAUTH, SOURCE_SSDP, SOURCE_USER
|
||||
from homeassistant.const import CONF_DEVICES, CONF_HOST, CONF_PASSWORD, CONF_USERNAME
|
||||
from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.data_entry_flow import (
|
||||
RESULT_TYPE_ABORT,
|
||||
@ -26,42 +24,15 @@ from homeassistant.data_entry_flow import (
|
||||
RESULT_TYPE_FORM,
|
||||
)
|
||||
|
||||
from . import MOCK_CONFIG, FritzConnectionMock
|
||||
|
||||
from tests.common import MockConfigEntry
|
||||
|
||||
ATTR_HOST = "host"
|
||||
ATTR_NEW_SERIAL_NUMBER = "NewSerialNumber"
|
||||
|
||||
MOCK_HOST = "fake_host"
|
||||
MOCK_IP = "192.168.178.1"
|
||||
MOCK_SERIAL_NUMBER = "fake_serial_number"
|
||||
MOCK_FIRMWARE_INFO = [True, "1.1.1"]
|
||||
|
||||
MOCK_USER_DATA = MOCK_CONFIG[DOMAIN][CONF_DEVICES][0]
|
||||
MOCK_DEVICE_INFO = {
|
||||
ATTR_HOST: MOCK_HOST,
|
||||
ATTR_NEW_SERIAL_NUMBER: MOCK_SERIAL_NUMBER,
|
||||
}
|
||||
MOCK_SSDP_DATA = ssdp.SsdpServiceInfo(
|
||||
ssdp_usn="mock_usn",
|
||||
ssdp_st="mock_st",
|
||||
ssdp_location=f"https://{MOCK_IP}:12345/test",
|
||||
upnp={
|
||||
ATTR_UPNP_FRIENDLY_NAME: "fake_name",
|
||||
ATTR_UPNP_UDN: "uuid:only-a-test",
|
||||
},
|
||||
from .const import (
|
||||
MOCK_FIRMWARE_INFO,
|
||||
MOCK_IP,
|
||||
MOCK_REQUEST,
|
||||
MOCK_SSDP_DATA,
|
||||
MOCK_USER_DATA,
|
||||
)
|
||||
|
||||
MOCK_REQUEST = b'<?xml version="1.0" encoding="utf-8"?><SessionInfo><SID>xxxxxxxxxxxxxxxx</SID><Challenge>xxxxxxxx</Challenge><BlockTime>0</BlockTime><Rights><Name>Dial</Name><Access>2</Access><Name>App</Name><Access>2</Access><Name>HomeAuto</Name><Access>2</Access><Name>BoxAdmin</Name><Access>2</Access><Name>Phone</Name><Access>2</Access><Name>NAS</Name><Access>2</Access></Rights><Users><User last="1">FakeFritzUser</User></Users></SessionInfo>\n'
|
||||
|
||||
|
||||
@pytest.fixture()
|
||||
def fc_class_mock():
|
||||
"""Fixture that sets up a mocked FritzConnection class."""
|
||||
with patch("fritzconnection.FritzConnection", autospec=True) as result:
|
||||
result.return_value = FritzConnectionMock()
|
||||
yield result
|
||||
from tests.common import MockConfigEntry
|
||||
|
||||
|
||||
async def test_user(hass: HomeAssistant, fc_class_mock, mock_get_source_ip):
|
||||
|
Loading…
x
Reference in New Issue
Block a user