1
0
mirror of https://github.com/home-assistant/core.git synced 2026-08-06 13:26:29 +01:00
Files
core/tests/components/nextdns/conftest.py
T
2026-07-21 16:22:08 +02:00

126 lines
3.9 KiB
Python

"""Common fixtures for the NextDNS tests."""
from collections.abc import Generator
from unittest.mock import AsyncMock, Mock, patch
from nextdns import (
AnalyticsDnssec,
AnalyticsEncryption,
AnalyticsIpVersions,
AnalyticsProtocols,
AnalyticsStatus,
ConnectionStatus,
ProfileInfo,
Settings,
)
import pytest
from homeassistant.components.nextdns.const import (
CONF_PROFILE_ID,
DOMAIN,
SUBENTRY_TYPE_PROFILE,
)
from homeassistant.config_entries import ConfigSubentryData
from homeassistant.const import CONF_API_KEY
from tests.common import (
MockConfigEntry,
load_json_array_fixture,
load_json_object_fixture,
)
ANALYTICS = load_json_object_fixture("analytics.json", DOMAIN)
ANALYTICS_DNSSEC = AnalyticsDnssec(**ANALYTICS["dnssec"])
ANALYTICS_ENCRYPTION = AnalyticsEncryption(**ANALYTICS["encryption"])
ANALYTICS_IP_VERSIONS = AnalyticsIpVersions(**ANALYTICS["ip_versions"])
ANALYTICS_PROTOCOLS = AnalyticsProtocols(**ANALYTICS["protocols"])
ANALYTICS_STATUS = AnalyticsStatus(**ANALYTICS["status"])
CONNECTION_STATUS = ConnectionStatus(
**load_json_object_fixture("connection_status.json", DOMAIN)
)
PROFILES = load_json_array_fixture("profiles.json", DOMAIN)
SETTINGS = Settings(**load_json_object_fixture("settings.json", DOMAIN))
@pytest.fixture
def mock_setup_entry() -> Generator[AsyncMock]:
"""Override async_setup_entry."""
with patch(
"homeassistant.components.nextdns.async_setup_entry", return_value=True
) as mock_setup_entry:
yield mock_setup_entry
@pytest.fixture
def mock_subentries() -> list[ConfigSubentryData]:
"""Return a list of mock subentries."""
return [
ConfigSubentryData(
data={CONF_PROFILE_ID: "xyz12"},
subentry_type=SUBENTRY_TYPE_PROFILE,
title="Fake Profile",
unique_id="xyz12",
)
]
@pytest.fixture
def mock_config_entry(mock_subentries: list[ConfigSubentryData]) -> MockConfigEntry:
"""Return the default mocked config entry."""
return MockConfigEntry(
domain=DOMAIN,
title="NextDNS",
data={CONF_API_KEY: "fake_api_key"},
entry_id="d9aa37407ddac7b964a99e86312288d6",
version=2,
subentries_data=mock_subentries,
)
@pytest.fixture
def mock_config_entry_v1() -> MockConfigEntry:
"""Return a v1 mocked config entry for migration testing."""
return MockConfigEntry(
domain=DOMAIN,
title="Fake Profile",
unique_id="xyz12",
data={CONF_API_KEY: "fake_api_key", CONF_PROFILE_ID: "xyz12"},
entry_id="d9aa37407ddac7b964a99e86312288d6",
version=1,
)
@pytest.fixture
def mock_nextdns() -> Generator[AsyncMock]:
"""Mock the NextDns class."""
with (
patch("homeassistant.components.nextdns.NextDns", autospec=True) as mock_class,
patch("homeassistant.components.nextdns.config_flow.NextDns", new=mock_class),
):
yield mock_class
@pytest.fixture
def mock_nextdns_client(mock_nextdns: AsyncMock) -> AsyncMock:
"""Mock a NextDNS client instance."""
client = mock_nextdns.create.return_value
client.clear_logs.return_value = True
client.connection_status.return_value = CONNECTION_STATUS
client.get_analytics_dnssec.return_value = ANALYTICS_DNSSEC
client.get_analytics_encryption.return_value = ANALYTICS_ENCRYPTION
client.get_analytics_ip_versions.return_value = ANALYTICS_IP_VERSIONS
client.get_analytics_protocols.return_value = ANALYTICS_PROTOCOLS
client.get_analytics_status.return_value = ANALYTICS_STATUS
client.get_profile_id = Mock(return_value="xyz12")
client.get_profile_name = Mock(
side_effect=lambda profile_id: next(
profile.name for profile in client.profiles if profile.id == profile_id
)
)
client.get_profiles.return_value = PROFILES
client.get_settings.return_value = SETTINGS
client.set_setting.return_value = True
client.profiles = [ProfileInfo(**PROFILES[0])]
return client