mirror of
https://github.com/home-assistant/core.git
synced 2026-05-18 14:29:57 +01:00
103 lines
3.3 KiB
Python
103 lines
3.3 KiB
Python
"""Tests for the Transmission event platform."""
|
|
|
|
from datetime import timedelta
|
|
from types import SimpleNamespace
|
|
from unittest.mock import AsyncMock, patch
|
|
|
|
from freezegun.api import FrozenDateTimeFactory
|
|
import pytest
|
|
|
|
from homeassistant.components.event import ATTR_EVENT_TYPE, ATTR_EVENT_TYPES
|
|
from homeassistant.components.transmission.const import (
|
|
DEFAULT_SCAN_INTERVAL,
|
|
EVENT_TYPE_DOWNLOADED,
|
|
EVENT_TYPE_REMOVED,
|
|
EVENT_TYPE_STARTED,
|
|
)
|
|
from homeassistant.const import Platform
|
|
from homeassistant.core import HomeAssistant
|
|
from homeassistant.util import dt as dt_util
|
|
|
|
from . import setup_integration
|
|
|
|
from tests.common import MockConfigEntry, async_fire_time_changed
|
|
|
|
|
|
async def test_event_entity_setup(
|
|
hass: HomeAssistant,
|
|
mock_transmission_client: AsyncMock,
|
|
mock_config_entry: MockConfigEntry,
|
|
) -> None:
|
|
"""Test the event entity is created with expected capabilities."""
|
|
with patch("homeassistant.components.transmission.PLATFORMS", [Platform.EVENT]):
|
|
await setup_integration(hass, mock_config_entry)
|
|
await hass.async_block_till_done()
|
|
|
|
state = hass.states.get("event.transmission_torrent")
|
|
assert state is not None
|
|
assert state.state == "unknown"
|
|
assert state.attributes[ATTR_EVENT_TYPE] is None
|
|
assert state.attributes[ATTR_EVENT_TYPES] == [
|
|
EVENT_TYPE_STARTED,
|
|
EVENT_TYPE_DOWNLOADED,
|
|
EVENT_TYPE_REMOVED,
|
|
]
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("hass_event", "expected_event_type"),
|
|
[
|
|
(EVENT_TYPE_STARTED, EVENT_TYPE_STARTED),
|
|
(EVENT_TYPE_DOWNLOADED, EVENT_TYPE_DOWNLOADED),
|
|
(EVENT_TYPE_REMOVED, EVENT_TYPE_REMOVED),
|
|
],
|
|
)
|
|
async def test_event_updates_state(
|
|
hass: HomeAssistant,
|
|
mock_transmission_client: AsyncMock,
|
|
mock_config_entry: MockConfigEntry,
|
|
freezer: FrozenDateTimeFactory,
|
|
hass_event: str,
|
|
expected_event_type: str,
|
|
) -> None:
|
|
"""Test Transmission events update the entity state and attributes."""
|
|
with patch("homeassistant.components.transmission.PLATFORMS", [Platform.EVENT]):
|
|
await setup_integration(hass, mock_config_entry)
|
|
await hass.async_block_till_done()
|
|
|
|
client = mock_transmission_client.return_value
|
|
torrent_status = {
|
|
EVENT_TYPE_STARTED: "downloading",
|
|
EVENT_TYPE_DOWNLOADED: "seeding",
|
|
EVENT_TYPE_REMOVED: "stopped",
|
|
}[hass_event]
|
|
torrent = SimpleNamespace(
|
|
id=1,
|
|
name="Test",
|
|
status=torrent_status,
|
|
download_dir="/downloads",
|
|
labels=[],
|
|
)
|
|
|
|
torrents_sequence = {
|
|
EVENT_TYPE_STARTED: [[torrent]],
|
|
EVENT_TYPE_DOWNLOADED: [[torrent]],
|
|
EVENT_TYPE_REMOVED: [[torrent], []],
|
|
}[hass_event]
|
|
|
|
client.get_torrents.side_effect = torrents_sequence
|
|
|
|
for _ in torrents_sequence:
|
|
freezer.tick(timedelta(seconds=DEFAULT_SCAN_INTERVAL + 1))
|
|
async_fire_time_changed(hass)
|
|
await hass.async_block_till_done(wait_background_tasks=True)
|
|
|
|
state = hass.states.get("event.transmission_torrent")
|
|
assert state is not None
|
|
assert state.attributes[ATTR_EVENT_TYPE] == expected_event_type
|
|
assert state.attributes["id"] == 1
|
|
assert state.attributes["name"] == "Test"
|
|
assert state.attributes["download_path"] == "/downloads"
|
|
assert state.attributes["labels"] == []
|
|
assert dt_util.parse_datetime(state.state) is not None
|