Files
core/tests/components/watts/conftest.py
2026-01-07 15:07:24 +01:00

117 lines
3.6 KiB
Python

"""Fixtures for the Watts integration tests."""
from collections.abc import Generator
from unittest.mock import AsyncMock, patch
import pytest
from visionpluspython.models import create_device_from_data
from homeassistant.components.application_credentials import (
ClientCredential,
async_import_client_credential,
)
from homeassistant.components.watts.const import DOMAIN
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component
from tests.common import (
MockConfigEntry,
load_json_array_fixture,
load_json_object_fixture,
)
CLIENT_ID = "test_client_id"
CLIENT_SECRET = "test_client_secret"
TEST_USER_ID = "test-user-id"
TEST_ACCESS_TOKEN = "test-access-token"
TEST_REFRESH_TOKEN = "test-refresh-token"
TEST_ID_TOKEN = "test-id-token"
TEST_PROFILE_INFO = "test-profile-info"
TEST_EXPIRES_AT = 9999999999
@pytest.fixture(autouse=True)
async def setup_credentials(hass: HomeAssistant) -> None:
"""Ensure the application credentials are registered for each test."""
assert await async_setup_component(hass, "application_credentials", {})
await async_import_client_credential(
hass,
DOMAIN,
ClientCredential(CLIENT_ID, CLIENT_SECRET, name="Watts"),
)
@pytest.fixture
def mock_setup_entry() -> Generator[AsyncMock]:
"""Override async_setup_entry."""
with patch(
"homeassistant.components.watts.async_setup_entry",
return_value=True,
) as mock_setup_entry:
yield mock_setup_entry
@pytest.fixture
def mock_watts_client() -> Generator[AsyncMock]:
"""Mock a Watts Vision client."""
with patch(
"homeassistant.components.watts.WattsVisionClient",
autospec=True,
) as mock_client_class:
client = mock_client_class.return_value
discover_data = load_json_array_fixture("discover_devices.json", DOMAIN)
device_report_data = load_json_object_fixture("device_report.json", DOMAIN)
device_detail_data = load_json_object_fixture("device_detail.json", DOMAIN)
discovered_devices = [
create_device_from_data(device_data) # type: ignore[arg-type]
for device_data in discover_data
]
device_report = {
device_id: create_device_from_data(device_data) # type: ignore[arg-type]
for device_id, device_data in device_report_data.items()
}
device_detail = create_device_from_data(device_detail_data) # type: ignore[arg-type]
client.discover_devices.return_value = discovered_devices
client.get_devices_report.return_value = device_report
client.get_device.return_value = device_detail
yield client
@pytest.fixture
def mock_config_entry() -> MockConfigEntry:
"""Mock a config entry."""
return MockConfigEntry(
domain=DOMAIN,
title="Watts Vision",
data={
"auth_implementation": DOMAIN,
"token": {
"access_token": TEST_ACCESS_TOKEN,
"refresh_token": TEST_REFRESH_TOKEN,
"id_token": TEST_ID_TOKEN,
"profile_info": TEST_PROFILE_INFO,
"expires_at": TEST_EXPIRES_AT,
},
},
entry_id="01J0BC4QM2YBRP6H5G933CETI8",
unique_id=TEST_USER_ID,
)
@pytest.fixture(name="skip_cloud", autouse=True)
def skip_cloud_fixture():
"""Skip setting up cloud.
Cloud already has its own tests for account link.
We do not need to test it here as we only need to test our
usage of the oauth2 helpers.
"""
with patch("homeassistant.components.cloud.async_setup", return_value=True):
yield