Files

112 lines
3.3 KiB
Python

"""Tests for the AdGuard Home sensor entities."""
from collections.abc import Callable
from typing import Any
from unittest.mock import AsyncMock, patch
import pytest
from homeassistant.components.adguard.const import (
DOMAIN,
SERVICE_ADD_URL,
SERVICE_DISABLE_URL,
SERVICE_ENABLE_URL,
SERVICE_REFRESH,
SERVICE_REMOVE_URL,
)
from homeassistant.core import HomeAssistant
from . import setup_integration
from tests.common import MockConfigEntry
async def test_service_registration(
hass: HomeAssistant,
mock_adguard: AsyncMock,
mock_config_entry: MockConfigEntry,
) -> None:
"""Test the adguard services be registered."""
with patch("homeassistant.components.adguard.PLATFORMS", []):
await setup_integration(hass, mock_config_entry, mock_adguard)
services = hass.services.async_services_for_domain(DOMAIN)
assert len(services) == 5
assert SERVICE_ADD_URL in services
assert SERVICE_DISABLE_URL in services
assert SERVICE_ENABLE_URL in services
assert SERVICE_REFRESH in services
assert SERVICE_REMOVE_URL in services
async def test_service_unregistration(
hass: HomeAssistant,
mock_adguard: AsyncMock,
mock_config_entry: MockConfigEntry,
) -> None:
"""Test the adguard services be unregistered with unloading last entry."""
with patch("homeassistant.components.adguard.PLATFORMS", []):
await setup_integration(hass, mock_config_entry, mock_adguard)
services = hass.services.async_services_for_domain(DOMAIN)
assert len(services) == 5
await hass.config_entries.async_unload(mock_config_entry.entry_id)
await hass.async_block_till_done()
services = hass.services.async_services_for_domain(DOMAIN)
assert len(services) == 0
@pytest.mark.parametrize(
("service", "service_call_data", "call_assertion"),
[
(
SERVICE_ADD_URL,
{"name": "Example", "url": "https://example.com/1.txt"},
lambda mock: mock.filtering.add_url.assert_called_once(),
),
(
SERVICE_DISABLE_URL,
{"url": "https://example.com/1.txt"},
lambda mock: mock.filtering.disable_url.assert_called_once(),
),
(
SERVICE_ENABLE_URL,
{"url": "https://example.com/1.txt"},
lambda mock: mock.filtering.enable_url.assert_called_once(),
),
(
SERVICE_REFRESH,
{"force": False},
lambda mock: mock.filtering.refresh.assert_called_once(),
),
(
SERVICE_REMOVE_URL,
{"url": "https://example.com/1.txt"},
lambda mock: mock.filtering.remove_url.assert_called_once(),
),
],
)
async def test_service(
hass: HomeAssistant,
mock_adguard: AsyncMock,
mock_config_entry: MockConfigEntry,
service: str,
service_call_data: dict,
call_assertion: Callable[[AsyncMock], Any],
) -> None:
"""Test the adguard services be unregistered with unloading last entry."""
with patch("homeassistant.components.adguard.PLATFORMS", []):
await setup_integration(hass, mock_config_entry, mock_adguard)
await hass.services.async_call(
DOMAIN,
service,
service_call_data,
blocking=True,
)
call_assertion(mock_adguard)