core/tests/components/whois/conftest.py

124 lines
3.9 KiB
Python

"""Fixtures for Whois integration tests."""
from __future__ import annotations
from collections.abc import Generator
from datetime import datetime
from typing import Any
from unittest.mock import AsyncMock, MagicMock, Mock, patch
import pytest
from homeassistant.components.whois.const import DOMAIN
from homeassistant.const import CONF_DOMAIN
from homeassistant.core import HomeAssistant
from homeassistant.util import dt as dt_util
from tests.common import MockConfigEntry
@pytest.fixture
def mock_config_entry() -> MockConfigEntry:
"""Return the default mocked config entry."""
return MockConfigEntry(
title="Home Assistant",
domain=DOMAIN,
data={
CONF_DOMAIN: "home-assistant.io",
},
unique_id="home-assistant.io",
)
@pytest.fixture
def mock_setup_entry() -> Generator[AsyncMock]:
"""Mock setting up a config entry."""
with patch(
"homeassistant.components.whois.async_setup_entry", return_value=True
) as mock_setup:
yield mock_setup
@pytest.fixture
def mock_whois() -> Generator[MagicMock]:
"""Return a mocked query."""
with (
patch(
"homeassistant.components.whois.whois_query",
) as whois_mock,
patch("homeassistant.components.whois.config_flow.whois.query", new=whois_mock),
):
domain = whois_mock.return_value
domain.abuse_contact = "abuse@example.com"
domain.admin = "admin@example.com"
domain.creation_date = datetime(2019, 1, 1, 0, 0, 0)
domain.dnssec = True
domain.expiration_date = datetime(2023, 1, 1, 0, 0, 0)
domain.last_updated = datetime(
2022, 1, 1, 0, 0, 0, tzinfo=dt_util.get_time_zone("Europe/Amsterdam")
)
domain.name = "home-assistant.io"
domain.name_servers = ["ns1.example.com", "ns2.example.com"]
domain.owner = "owner@example.com"
domain.registrant = "registrant@example.com"
domain.registrar = "My Registrar"
domain.reseller = "Top Domains, Low Prices"
domain.status = "OK"
domain.statuses = ["OK"]
yield whois_mock
@pytest.fixture
def mock_whois_missing_some_attrs() -> Generator[Mock]:
"""Return a mocked query that only sets admin."""
class LimitedWhoisMock:
"""A limited mock of whois_query."""
def __init__(self, *args: Any, **kwargs: Any) -> None:
"""Mock only attributes the library always sets being available."""
self.creation_date = datetime(2019, 1, 1, 0, 0, 0)
self.dnssec = True
self.expiration_date = datetime(2023, 1, 1, 0, 0, 0)
self.last_updated = datetime(
2022, 1, 1, 0, 0, 0, tzinfo=dt_util.get_time_zone("Europe/Amsterdam")
)
self.name = "home-assistant.io"
self.name_servers = ["ns1.example.com", "ns2.example.com"]
self.registrar = "My Registrar"
self.status = "OK"
self.statuses = ["OK"]
with patch(
"homeassistant.components.whois.whois_query", LimitedWhoisMock
) as whois_mock:
yield whois_mock
@pytest.fixture
async def init_integration(
hass: HomeAssistant, mock_config_entry: MockConfigEntry, mock_whois: MagicMock
) -> MockConfigEntry:
"""Set up thewhois 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
@pytest.fixture
async def init_integration_missing_some_attrs(
hass: HomeAssistant,
mock_config_entry: MockConfigEntry,
mock_whois_missing_some_attrs: MagicMock,
) -> MockConfigEntry:
"""Set up thewhois 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