mirror of https://github.com/home-assistant/core
132 lines
4.1 KiB
Python
132 lines
4.1 KiB
Python
"""Configure pytest for Skybell tests."""
|
|
|
|
from unittest.mock import AsyncMock, patch
|
|
|
|
from aioskybell import Skybell, SkybellDevice
|
|
from aioskybell.helpers.const import BASE_URL, USERS_ME_URL
|
|
import orjson
|
|
import pytest
|
|
|
|
from homeassistant.components.skybell.const import DOMAIN
|
|
from homeassistant.const import CONF_EMAIL, CONF_PASSWORD
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.helpers.aiohttp_client import async_get_clientsession
|
|
|
|
from tests.common import MockConfigEntry, load_fixture
|
|
from tests.test_util.aiohttp import AiohttpClientMocker
|
|
|
|
USERNAME = "user"
|
|
PASSWORD = "password"
|
|
USER_ID = "1234567890abcdef12345678"
|
|
DEVICE_ID = "012345670123456789abcdef"
|
|
|
|
CONF_DATA = {
|
|
CONF_EMAIL: USERNAME,
|
|
CONF_PASSWORD: PASSWORD,
|
|
}
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def skybell_mock():
|
|
"""Fixture for our skybell tests."""
|
|
mocked_skybell_device = AsyncMock(spec=SkybellDevice)
|
|
|
|
mocked_skybell = AsyncMock(spec=Skybell)
|
|
mocked_skybell.async_get_devices.return_value = [mocked_skybell_device]
|
|
mocked_skybell.async_send_request.return_value = {"id": USER_ID}
|
|
mocked_skybell.user_id = USER_ID
|
|
|
|
with (
|
|
patch(
|
|
"homeassistant.components.skybell.config_flow.Skybell",
|
|
return_value=mocked_skybell,
|
|
),
|
|
patch("homeassistant.components.skybell.Skybell", return_value=mocked_skybell),
|
|
):
|
|
yield mocked_skybell
|
|
|
|
|
|
def create_entry(hass: HomeAssistant) -> MockConfigEntry:
|
|
"""Create fixture for adding config entry in Home Assistant."""
|
|
entry = MockConfigEntry(domain=DOMAIN, unique_id=USER_ID, data=CONF_DATA)
|
|
entry.add_to_hass(hass)
|
|
return entry
|
|
|
|
|
|
async def set_aioclient_responses(aioclient_mock: AiohttpClientMocker) -> None:
|
|
"""Set AioClient responses."""
|
|
aioclient_mock.get(
|
|
f"{BASE_URL}devices/{DEVICE_ID}/info/",
|
|
text=load_fixture("skybell/device_info.json"),
|
|
)
|
|
aioclient_mock.get(
|
|
f"{BASE_URL}devices/{DEVICE_ID}/settings/",
|
|
text=load_fixture("skybell/device_settings.json"),
|
|
)
|
|
aioclient_mock.get(
|
|
f"{BASE_URL}devices/{DEVICE_ID}/activities/",
|
|
text=load_fixture("skybell/activities.json"),
|
|
)
|
|
aioclient_mock.get(
|
|
f"{BASE_URL}devices/",
|
|
text=load_fixture("skybell/device.json"),
|
|
)
|
|
aioclient_mock.get(
|
|
USERS_ME_URL,
|
|
text=load_fixture("skybell/me.json"),
|
|
)
|
|
aioclient_mock.post(
|
|
f"{BASE_URL}login/",
|
|
text=load_fixture("skybell/login.json"),
|
|
)
|
|
aioclient_mock.get(
|
|
f"{BASE_URL}devices/{DEVICE_ID}/activities/1234567890ab1234567890ac/video/",
|
|
text=load_fixture("skybell/video.json"),
|
|
)
|
|
aioclient_mock.get(
|
|
f"{BASE_URL}devices/{DEVICE_ID}/avatar/",
|
|
text=load_fixture("skybell/avatar.json"),
|
|
)
|
|
aioclient_mock.get(
|
|
f"https://v3-production-devices-avatar.s3.us-west-2.amazonaws.com/{DEVICE_ID}.jpg",
|
|
)
|
|
aioclient_mock.get(
|
|
f"https://skybell-thumbnails-stage.s3.amazonaws.com/{DEVICE_ID}/1646859244793-951{DEVICE_ID}_{DEVICE_ID}.jpeg",
|
|
)
|
|
|
|
|
|
@pytest.fixture
|
|
async def connection(aioclient_mock: AiohttpClientMocker) -> None:
|
|
"""Fixture for good connection responses."""
|
|
await set_aioclient_responses(aioclient_mock)
|
|
|
|
|
|
def create_skybell(hass: HomeAssistant) -> Skybell:
|
|
"""Create Skybell object."""
|
|
skybell = Skybell(
|
|
username=USERNAME,
|
|
password=PASSWORD,
|
|
get_devices=True,
|
|
session=async_get_clientsession(hass),
|
|
)
|
|
skybell._cache = orjson.loads(load_fixture("skybell/cache.json"))
|
|
return skybell
|
|
|
|
|
|
def mock_skybell(hass: HomeAssistant):
|
|
"""Mock Skybell object."""
|
|
return patch(
|
|
"homeassistant.components.skybell.Skybell", return_value=create_skybell(hass)
|
|
)
|
|
|
|
|
|
async def async_init_integration(hass: HomeAssistant) -> MockConfigEntry:
|
|
"""Set up the Skybell integration in Home Assistant."""
|
|
config_entry = create_entry(hass)
|
|
|
|
with mock_skybell(hass), patch("aioskybell.utils.async_save_cache"):
|
|
await hass.config_entries.async_setup(config_entry.entry_id)
|
|
await hass.async_block_till_done()
|
|
|
|
return config_entry
|