"""Common fixtures for the Hikvision tests.""" from collections.abc import Generator from unittest.mock import AsyncMock, MagicMock, patch import pytest from homeassistant.components.hikvision.const import DOMAIN from homeassistant.const import ( CONF_HOST, CONF_PASSWORD, CONF_PORT, CONF_SSL, CONF_USERNAME, ) from homeassistant.core import HomeAssistant from . import setup_integration from tests.common import MockConfigEntry TEST_HOST = "192.168.1.100" TEST_PORT = 80 TEST_USERNAME = "admin" TEST_PASSWORD = "password123" TEST_DEVICE_ID = "DS-2CD2142FWD-I20170101AAAA" TEST_DEVICE_NAME = "Front Camera" @pytest.fixture def mock_setup_entry() -> Generator[AsyncMock]: """Override async_setup_entry.""" with patch( "homeassistant.components.hikvision.async_setup_entry", return_value=True ) as mock_setup_entry: yield mock_setup_entry @pytest.fixture def mock_config_entry() -> MockConfigEntry: """Return the default mocked config entry.""" return MockConfigEntry( title=TEST_DEVICE_NAME, domain=DOMAIN, version=1, minor_version=1, data={ CONF_HOST: TEST_HOST, CONF_PORT: TEST_PORT, CONF_USERNAME: TEST_USERNAME, CONF_PASSWORD: TEST_PASSWORD, CONF_SSL: False, }, unique_id=TEST_DEVICE_ID, ) @pytest.fixture def mock_hikcamera() -> Generator[MagicMock]: """Return a mocked HikCamera.""" with ( patch( "homeassistant.components.hikvision.HikCamera", autospec=True, ) as hikcamera_mock, patch( "homeassistant.components.hikvision.config_flow.HikCamera", new=hikcamera_mock, ), ): camera = hikcamera_mock.return_value camera.get_id = TEST_DEVICE_ID camera.get_name = TEST_DEVICE_NAME camera.get_type = "Camera" camera.current_event_states = { "Motion": [(True, 1)], "Line Crossing": [(False, 1)], } camera.fetch_attributes.return_value = ( False, None, None, "2024-01-01T00:00:00Z", ) yield hikcamera_mock @pytest.fixture async def init_integration( hass: HomeAssistant, mock_config_entry: MockConfigEntry, mock_hikcamera: MagicMock ) -> MockConfigEntry: """Set up the Hikvision integration for testing.""" await setup_integration(hass, mock_config_entry) return mock_config_entry