Refactor away deprecated homekit_controller test helpers (#32177)
This commit is contained in:
parent
7d8da47309
commit
1ddc1ebc6b
4 changed files with 27 additions and 91 deletions
|
@ -4,10 +4,10 @@ import json
|
|||
import os
|
||||
from unittest import mock
|
||||
|
||||
from aiohomekit.exceptions import AccessoryNotFoundError
|
||||
from aiohomekit.model import Accessory
|
||||
from aiohomekit.model import Accessories, Accessory
|
||||
from aiohomekit.model.characteristics import CharacteristicsTypes
|
||||
from aiohomekit.model.services import ServicesTypes
|
||||
from aiohomekit.testing import FakeController
|
||||
|
||||
from homeassistant import config_entries
|
||||
from homeassistant.components.homekit_controller import config_flow
|
||||
|
@ -22,77 +22,6 @@ import homeassistant.util.dt as dt_util
|
|||
from tests.common import MockConfigEntry, async_fire_time_changed, load_fixture
|
||||
|
||||
|
||||
class FakePairing:
|
||||
"""
|
||||
A test fake that pretends to be a paired HomeKit accessory.
|
||||
|
||||
This only contains methods and values that exist on the upstream Pairing
|
||||
class.
|
||||
"""
|
||||
|
||||
def __init__(self, accessories):
|
||||
"""Create a fake pairing from an accessory model."""
|
||||
self.accessories = accessories
|
||||
self.pairing_data = {}
|
||||
self.available = True
|
||||
|
||||
async def list_accessories_and_characteristics(self):
|
||||
"""Fake implementation of list_accessories_and_characteristics."""
|
||||
accessories = [a.to_accessory_and_service_list() for a in self.accessories]
|
||||
# replicate what happens upstream right now
|
||||
self.pairing_data["accessories"] = accessories
|
||||
return accessories
|
||||
|
||||
async def get_characteristics(self, characteristics):
|
||||
"""Fake implementation of get_characteristics."""
|
||||
if not self.available:
|
||||
raise AccessoryNotFoundError("Accessory not found")
|
||||
|
||||
results = {}
|
||||
for aid, cid in characteristics:
|
||||
for accessory in self.accessories:
|
||||
if aid != accessory.aid:
|
||||
continue
|
||||
for service in accessory.services:
|
||||
for char in service.characteristics:
|
||||
if char.iid != cid:
|
||||
continue
|
||||
results[(aid, cid)] = {"value": char.get_value()}
|
||||
return results
|
||||
|
||||
async def put_characteristics(self, characteristics):
|
||||
"""Fake implementation of put_characteristics."""
|
||||
for aid, cid, new_val in characteristics:
|
||||
for accessory in self.accessories:
|
||||
if aid != accessory.aid:
|
||||
continue
|
||||
for service in accessory.services:
|
||||
for char in service.characteristics:
|
||||
if char.iid != cid:
|
||||
continue
|
||||
char.set_value(new_val)
|
||||
return {}
|
||||
|
||||
|
||||
class FakeController:
|
||||
"""
|
||||
A test fake that pretends to be a paired HomeKit accessory.
|
||||
|
||||
This only contains methods and values that exist on the upstream Controller
|
||||
class.
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
"""Create a Fake controller with no pairings."""
|
||||
self.pairings = {}
|
||||
|
||||
def add(self, accessories):
|
||||
"""Create and register a fake pairing for a simulated accessory."""
|
||||
pairing = FakePairing(accessories)
|
||||
self.pairings["00:00:00:00:00:00"] = pairing
|
||||
return pairing
|
||||
|
||||
|
||||
class Helper:
|
||||
"""Helper methods for interacting with HomeKit fakes."""
|
||||
|
||||
|
@ -151,28 +80,22 @@ async def setup_platform(hass):
|
|||
async def setup_test_accessories(hass, accessories):
|
||||
"""Load a fake homekit device based on captured JSON profile."""
|
||||
fake_controller = await setup_platform(hass)
|
||||
pairing = fake_controller.add(accessories)
|
||||
|
||||
discovery_info = {
|
||||
"name": "TestDevice",
|
||||
"host": "127.0.0.1",
|
||||
"port": 8080,
|
||||
"properties": {"md": "TestDevice", "id": "00:00:00:00:00:00", "c#": 1},
|
||||
}
|
||||
pairing_id = "00:00:00:00:00:00"
|
||||
|
||||
pairing.pairing_data.update(
|
||||
{"AccessoryPairingID": discovery_info["properties"]["id"]}
|
||||
)
|
||||
accessories_obj = Accessories()
|
||||
for accessory in accessories:
|
||||
accessories_obj.add_accessory(accessory)
|
||||
pairing = await fake_controller.add_paired_device(accessories_obj, pairing_id)
|
||||
|
||||
config_entry = MockConfigEntry(
|
||||
version=1,
|
||||
domain="homekit_controller",
|
||||
entry_id="TestData",
|
||||
data=pairing.pairing_data,
|
||||
data={"AccessoryPairingID": pairing_id},
|
||||
title="test",
|
||||
connection_class=config_entries.CONN_CLASS_LOCAL_PUSH,
|
||||
)
|
||||
|
||||
config_entry.add_to_hass(hass)
|
||||
|
||||
pairing_cls_loc = "homeassistant.components.homekit_controller.connection.IpPairing"
|
||||
|
@ -189,7 +112,11 @@ async def device_config_changed(hass, accessories):
|
|||
# Update the accessories our FakePairing knows about
|
||||
controller = hass.data[CONTROLLER]
|
||||
pairing = controller.pairings["00:00:00:00:00:00"]
|
||||
pairing.accessories = accessories
|
||||
|
||||
accessories_obj = Accessories()
|
||||
for accessory in accessories:
|
||||
accessories_obj.add_accessory(accessory)
|
||||
pairing.accessories = accessories_obj
|
||||
|
||||
discovery_info = {
|
||||
"name": "TestDevice",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue