"""HomeKit session fixtures."""
from unittest.mock import patch

import pytest

from homeassistant.components.homekit.const import EVENT_HOMEKIT_CHANGED
from homeassistant.core import callback

from pyhap.accessory_driver import AccessoryDriver


@pytest.fixture(scope='session')
def hk_driver():
    """Return a custom AccessoryDriver instance for HomeKit accessory init."""
    with patch('pyhap.accessory_driver.Zeroconf'), \
        patch('pyhap.accessory_driver.AccessoryEncoder'), \
        patch('pyhap.accessory_driver.HAPServer'), \
            patch('pyhap.accessory_driver.AccessoryDriver.publish'):
        return AccessoryDriver(pincode=b'123-45-678', address='127.0.0.1')


@pytest.fixture
def events(hass):
    """Yield caught homekit_changed events."""
    events = []
    hass.bus.async_listen(
        EVENT_HOMEKIT_CHANGED,
        callback(lambda e: events.append(e)))
    yield events