mirror of https://github.com/home-assistant/core
89 lines
2.9 KiB
Python
89 lines
2.9 KiB
Python
"""Test helpers for VoIP integration."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from unittest.mock import AsyncMock, Mock, patch
|
|
|
|
import pytest
|
|
from voip_utils import CallInfo
|
|
|
|
from homeassistant.components.voip import DOMAIN
|
|
from homeassistant.components.voip.devices import VoIPDevice, VoIPDevices
|
|
from homeassistant.config_entries import ConfigEntryState
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.setup import async_setup_component
|
|
|
|
from tests.common import MockConfigEntry
|
|
from tests.components.tts.conftest import (
|
|
mock_tts_cache_dir_fixture_autouse, # noqa: F401
|
|
)
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
async def load_homeassistant(hass: HomeAssistant) -> None:
|
|
"""Load the homeassistant integration."""
|
|
assert await async_setup_component(hass, "homeassistant", {})
|
|
|
|
|
|
@pytest.fixture
|
|
def config_entry(hass: HomeAssistant) -> MockConfigEntry:
|
|
"""Create a config entry."""
|
|
entry = MockConfigEntry(domain=DOMAIN, data={})
|
|
entry.add_to_hass(hass)
|
|
return entry
|
|
|
|
|
|
@pytest.fixture
|
|
async def setup_voip(hass: HomeAssistant, config_entry: MockConfigEntry) -> None:
|
|
"""Set up VoIP integration."""
|
|
with patch(
|
|
"homeassistant.components.voip._create_sip_server",
|
|
return_value=(Mock(), AsyncMock()),
|
|
):
|
|
assert await async_setup_component(hass, DOMAIN, {})
|
|
assert config_entry.state is ConfigEntryState.LOADED
|
|
yield
|
|
|
|
|
|
@pytest.fixture
|
|
async def voip_devices(hass: HomeAssistant, setup_voip: None) -> VoIPDevices:
|
|
"""Get VoIP devices object from a configured instance."""
|
|
return hass.data[DOMAIN].devices
|
|
|
|
|
|
@pytest.fixture
|
|
def call_info() -> CallInfo:
|
|
"""Fake call info."""
|
|
return CallInfo(
|
|
caller_ip="192.168.1.210",
|
|
caller_sip_port=5060,
|
|
caller_rtp_port=5004,
|
|
server_ip="192.168.1.10",
|
|
headers={
|
|
"via": "SIP/2.0/UDP 192.168.1.210:5060;branch=z9hG4bK912387041;rport",
|
|
"from": "<sip:IPCall@192.168.1.210:5060>;tag=1836983217",
|
|
"to": "<sip:192.168.1.10:5060>",
|
|
"call-id": "860888843-5060-9@BJC.BGI.B.CBA",
|
|
"cseq": "80 INVITE",
|
|
"contact": "<sip:IPCall@192.168.1.210:5060>",
|
|
"max-forwards": "70",
|
|
"user-agent": "Grandstream HT801 1.0.17.5",
|
|
"supported": "replaces, path, timer, eventlist",
|
|
"allow": "INVITE, ACK, OPTIONS, CANCEL, BYE, SUBSCRIBE, NOTIFY, INFO, REFER, UPDATE",
|
|
"content-type": "application/sdp",
|
|
"accept": "application/sdp, application/dtmf-relay",
|
|
"content-length": "480",
|
|
},
|
|
)
|
|
|
|
|
|
@pytest.fixture
|
|
async def voip_device(
|
|
hass: HomeAssistant, voip_devices: VoIPDevices, call_info: CallInfo
|
|
) -> VoIPDevice:
|
|
"""Get a VoIP device fixture."""
|
|
device = voip_devices.async_get_or_create(call_info)
|
|
# to make sure all platforms are set up
|
|
await hass.async_block_till_done()
|
|
return device
|