1
0
mirror of https://github.com/home-assistant/core.git synced 2026-02-21 02:18:47 +00:00
Files
core/tests/components/fressnapf_tracker/conftest.py
2026-02-04 17:43:24 +01:00

192 lines
5.4 KiB
Python

"""Common fixtures for the Fressnapf Tracker tests."""
from collections.abc import Generator
from unittest.mock import AsyncMock, MagicMock, patch
from fressnapftracker import (
Device,
EnergySaving,
LedActivatable,
LedBrightness,
PhoneVerificationResponse,
Position,
SmsCodeResponse,
Tracker,
TrackerFeatures,
TrackerSettings,
UserToken,
)
import pytest
from homeassistant.components.fressnapf_tracker.const import (
CONF_PHONE_NUMBER,
CONF_USER_ID,
DOMAIN,
)
from homeassistant.const import CONF_ACCESS_TOKEN
from homeassistant.core import HomeAssistant
from tests.common import MockConfigEntry
MOCK_PHONE_NUMBER = "+491234567890"
MOCK_USER_ID = 12345
MOCK_ACCESS_TOKEN = "mock_access_token"
MOCK_SERIAL_NUMBER = "ABC123456"
MOCK_DEVICE_TOKEN = "mock_device_token"
def create_mock_tracker() -> Tracker:
"""Create a fresh mock Tracker instance."""
return Tracker(
name="Fluffy",
battery=85,
charging=False,
position=Position(
lat=52.520008,
lng=13.404954,
accuracy=10,
timestamp="2024-01-15T12:00:00Z",
),
tracker_settings=TrackerSettings(
generation="GPS Tracker 2.0",
features=TrackerFeatures(
flash_light=True, energy_saving_mode=True, live_tracking=True
),
),
led_brightness=LedBrightness(status="ok", value=50),
energy_saving=EnergySaving(status="ok", value=1),
deep_sleep=None,
led_activatable=LedActivatable(
has_led=True,
seen_recently=True,
nonempty_battery=True,
not_charging=True,
overall=True,
),
icon="http://res.cloudinary.com/iot-venture/image/upload/v1717594357/kyaqq7nfitrdvaoakb8s.jpg",
)
@pytest.fixture
def mock_setup_entry() -> Generator[AsyncMock]:
"""Override async_setup_entry."""
with patch(
"homeassistant.components.fressnapf_tracker.async_setup_entry",
return_value=True,
) as mock_setup_entry:
yield mock_setup_entry
@pytest.fixture
def mock_tracker_no_position() -> Tracker:
"""Create a mock Tracker object without position."""
return Tracker(
name="Fluffy",
battery=85,
charging=False,
position=None,
tracker_settings=TrackerSettings(
generation="GPS Tracker 2.0",
features=TrackerFeatures(live_tracking=True),
),
led_brightness=None,
deep_sleep=None,
led_activatable=None,
)
@pytest.fixture
def mock_device() -> Device:
"""Create a mock Device object."""
return Device(
serialnumber=MOCK_SERIAL_NUMBER,
token=MOCK_DEVICE_TOKEN,
)
@pytest.fixture
def mock_auth_client(mock_device: Device) -> Generator[MagicMock]:
"""Mock the AuthClient."""
with (
patch(
"homeassistant.components.fressnapf_tracker.config_flow.AuthClient",
autospec=True,
) as mock_auth_client,
patch(
"homeassistant.components.fressnapf_tracker.AuthClient",
new=mock_auth_client,
),
):
client = mock_auth_client.return_value
client.request_sms_code = AsyncMock(
return_value=SmsCodeResponse(id=MOCK_USER_ID)
)
client.verify_phone_number = AsyncMock(
return_value=PhoneVerificationResponse(
user_token=UserToken(
access_token=MOCK_ACCESS_TOKEN,
refresh_token=None,
)
)
)
client.get_devices = AsyncMock(return_value=[mock_device])
yield client
@pytest.fixture
def mock_api_client_init() -> Generator[MagicMock]:
"""Mock the ApiClient used by _tracker_is_valid in __init__.py."""
with patch(
"homeassistant.components.fressnapf_tracker.ApiClient",
autospec=True,
) as mock_client:
client = mock_client.return_value
client.get_tracker = AsyncMock(return_value=create_mock_tracker())
yield client
@pytest.fixture
def mock_api_client_coordinator() -> Generator[MagicMock]:
"""Mock the ApiClient used by the coordinator."""
with patch(
"homeassistant.components.fressnapf_tracker.coordinator.ApiClient",
autospec=True,
) as mock_client:
client = mock_client.return_value
client.get_tracker = AsyncMock(return_value=create_mock_tracker())
client.set_led_brightness = AsyncMock(return_value=None)
client.set_energy_saving = AsyncMock(return_value=None)
yield client
@pytest.fixture
def mock_config_entry() -> MockConfigEntry:
"""Return a mock config entry."""
return MockConfigEntry(
domain=DOMAIN,
title=MOCK_PHONE_NUMBER,
data={
CONF_PHONE_NUMBER: MOCK_PHONE_NUMBER,
CONF_USER_ID: MOCK_USER_ID,
CONF_ACCESS_TOKEN: MOCK_ACCESS_TOKEN,
},
unique_id=str(MOCK_USER_ID),
)
@pytest.fixture
async def init_integration(
hass: HomeAssistant,
mock_config_entry: MockConfigEntry,
mock_api_client_init: MagicMock,
mock_api_client_coordinator: MagicMock,
mock_auth_client: MagicMock,
) -> MockConfigEntry:
"""Set up the integration for testing."""
mock_config_entry.add_to_hass(hass)
await hass.config_entries.async_setup(mock_config_entry.entry_id)
await hass.async_block_till_done()
return mock_config_entry