1
0
mirror of https://github.com/home-assistant/core.git synced 2026-05-19 15:00:27 +01:00
Files
core/tests/components/overseerr/test_event.py
T

174 lines
5.1 KiB
Python

"""Tests for the Overseerr event platform."""
from datetime import UTC, datetime, timedelta
from unittest.mock import AsyncMock, patch
from freezegun.api import FrozenDateTimeFactory
import pytest
from python_overseerr import OverseerrConnectionError
from syrupy.assertion import SnapshotAssertion
from homeassistant.components.overseerr import DOMAIN
from homeassistant.const import STATE_UNAVAILABLE, Platform
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er
from . import call_webhook, setup_integration
from tests.common import (
MockConfigEntry,
async_fire_time_changed,
async_load_json_object_fixture,
snapshot_platform,
)
from tests.typing import ClientSessionGenerator
@pytest.mark.freeze_time("2023-10-21")
async def test_entities(
hass: HomeAssistant,
mock_overseerr_client: AsyncMock,
mock_config_entry: MockConfigEntry,
hass_client_no_auth: ClientSessionGenerator,
snapshot: SnapshotAssertion,
entity_registry: er.EntityRegistry,
) -> None:
"""Test all entities."""
with patch("homeassistant.components.overseerr.PLATFORMS", [Platform.EVENT]):
await setup_integration(hass, mock_config_entry)
client = await hass_client_no_auth()
await call_webhook(
hass,
await async_load_json_object_fixture(
hass, "webhook_request_automatically_approved.json", DOMAIN
),
client,
)
await hass.async_block_till_done()
await snapshot_platform(hass, entity_registry, snapshot, mock_config_entry.entry_id)
@pytest.mark.freeze_time("2023-10-21")
async def test_event_does_not_write_state(
hass: HomeAssistant,
mock_overseerr_client: AsyncMock,
mock_config_entry: MockConfigEntry,
hass_client_no_auth: ClientSessionGenerator,
freezer: FrozenDateTimeFactory,
) -> None:
"""Test event entities don't write state on coordinator update."""
await setup_integration(hass, mock_config_entry)
client = await hass_client_no_auth()
await call_webhook(
hass,
await async_load_json_object_fixture(
hass, "webhook_request_automatically_approved.json", DOMAIN
),
client,
)
await hass.async_block_till_done()
assert hass.states.get(
"event.overseerr_last_media_event"
).last_reported == datetime(2023, 10, 21, 0, 0, 0, tzinfo=UTC)
freezer.tick(timedelta(minutes=5))
async_fire_time_changed(hass)
await hass.async_block_till_done()
assert hass.states.get(
"event.overseerr_last_media_event"
).last_reported == datetime(2023, 10, 21, 0, 0, 0, tzinfo=UTC)
async def test_event_goes_unavailable(
hass: HomeAssistant,
mock_overseerr_client: AsyncMock,
mock_config_entry: MockConfigEntry,
freezer: FrozenDateTimeFactory,
) -> None:
"""Test event entities go unavailable when we can't fetch data."""
await setup_integration(hass, mock_config_entry)
assert (
hass.states.get("event.overseerr_last_media_event").state != STATE_UNAVAILABLE
)
mock_overseerr_client.get_request_count.side_effect = OverseerrConnectionError(
"Boom"
)
freezer.tick(timedelta(minutes=5))
async_fire_time_changed(hass)
await hass.async_block_till_done()
assert (
hass.states.get("event.overseerr_last_media_event").state == STATE_UNAVAILABLE
)
async def test_not_push_based(
hass: HomeAssistant,
mock_config_entry: MockConfigEntry,
mock_overseerr_client_needs_change: AsyncMock,
) -> None:
"""Test event entities aren't created if not push based."""
mock_overseerr_client_needs_change.test_webhook_notification_config.return_value = (
False
)
await setup_integration(hass, mock_config_entry)
assert hass.states.get("event.overseerr_last_media_event") is None
async def test_cant_fetch_webhook_config(
hass: HomeAssistant,
mock_config_entry: MockConfigEntry,
mock_overseerr_client: AsyncMock,
) -> None:
"""Test event entities aren't created if not push based."""
mock_overseerr_client.get_webhook_notification_config.side_effect = (
OverseerrConnectionError("Boom")
)
await setup_integration(hass, mock_config_entry)
assert hass.states.get("event.overseerr_last_media_event") is None
async def test_not_push_based_but_was_before(
hass: HomeAssistant,
mock_config_entry: MockConfigEntry,
mock_overseerr_client_needs_change: AsyncMock,
entity_registry: er.EntityRegistry,
) -> None:
"""Test event entities are created if push based in the past."""
entity_registry.async_get_or_create(
Platform.EVENT,
DOMAIN,
f"{mock_config_entry.entry_id}-media",
suggested_object_id="overseerr_last_media_event",
disabled_by=None,
)
mock_overseerr_client_needs_change.test_webhook_notification_config.return_value = (
False
)
await setup_integration(hass, mock_config_entry)
assert hass.states.get("event.overseerr_last_media_event") is not None
assert (
hass.states.get("event.overseerr_last_media_event").state == STATE_UNAVAILABLE
)