mirror of
https://github.com/home-assistant/core.git
synced 2026-09-14 04:30:02 +01:00
Co-authored-by: Prakash Prajapati <115608116+paxprz-tekkon@users.noreply.github.com>
106 lines
3.1 KiB
Python
106 lines
3.1 KiB
Python
"""Fixtures for the Willow integration tests."""
|
|
|
|
from collections.abc import Generator
|
|
import time
|
|
from unittest.mock import AsyncMock, MagicMock, patch
|
|
|
|
import pytest
|
|
|
|
from homeassistant.components.application_credentials import (
|
|
DOMAIN as APPLICATION_CREDENTIALS_DOMAIN,
|
|
ClientCredential,
|
|
async_import_client_credential,
|
|
)
|
|
from homeassistant.components.willow.const import (
|
|
DOMAIN,
|
|
OAUTH2_CLIENT_ID,
|
|
OAUTH2_CLIENT_SECRET,
|
|
)
|
|
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,
|
|
)
|
|
|
|
USER_ID = 42
|
|
ACCESS_TOKEN = "mock-access-token"
|
|
REFRESH_TOKEN = "mock-refresh-token"
|
|
|
|
# Willow imports its own client credential (in async_step_user) without an
|
|
# explicit auth_domain, so application_credentials defaults the auth_domain
|
|
# to the integration domain. That value is the auth_implementation stored on
|
|
# entries created by the flow.
|
|
IMPL_DOMAIN = DOMAIN
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_setup_entry() -> Generator[AsyncMock]:
|
|
"""Bypass the integration setup so the config flow can be tested in isolation."""
|
|
with patch(
|
|
"homeassistant.components.willow.async_setup_entry", return_value=True
|
|
) as mock_setup:
|
|
yield mock_setup
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_willow_client() -> Generator[MagicMock]:
|
|
"""Patch WillowClient wherever it is instantiated."""
|
|
with (
|
|
patch(
|
|
"homeassistant.components.willow.WillowClient", autospec=True
|
|
) as client_class,
|
|
patch(
|
|
"homeassistant.components.willow.config_flow.WillowClient",
|
|
new=client_class,
|
|
),
|
|
):
|
|
client = client_class.return_value
|
|
client.get_profile.return_value = load_json_object_fixture(
|
|
"profile.json", DOMAIN
|
|
)
|
|
client.get_devices.return_value = load_json_array_fixture(
|
|
"devices.json", DOMAIN
|
|
)
|
|
yield client
|
|
|
|
|
|
@pytest.fixture(name="expires_at")
|
|
def mock_expires_at() -> float:
|
|
"""Fixture to set the OAuth token expiration time in the future."""
|
|
return time.time() + 3600
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_config_entry(expires_at: float) -> MockConfigEntry:
|
|
"""Return a Willow OAuth2 config entry."""
|
|
return MockConfigEntry(
|
|
domain=DOMAIN,
|
|
title="garden@example.com",
|
|
unique_id=str(USER_ID),
|
|
data={
|
|
"auth_implementation": IMPL_DOMAIN,
|
|
"token": {
|
|
"access_token": ACCESS_TOKEN,
|
|
"refresh_token": REFRESH_TOKEN,
|
|
"expires_at": expires_at,
|
|
"expires_in": 3600,
|
|
"token_type": "Bearer",
|
|
},
|
|
},
|
|
entry_id="01J5TX5A0FF6G5V0QJX6HBC94T",
|
|
)
|
|
|
|
|
|
@pytest.fixture
|
|
async def setup_credentials(hass: HomeAssistant) -> None:
|
|
"""Fixture to setup credentials."""
|
|
assert await async_setup_component(hass, APPLICATION_CREDENTIALS_DOMAIN, {})
|
|
await async_import_client_credential(
|
|
hass,
|
|
DOMAIN,
|
|
ClientCredential(OAUTH2_CLIENT_ID, OAUTH2_CLIENT_SECRET, name="Willow"),
|
|
)
|