"""Configuration for VeSync tests.""" from __future__ import annotations from unittest.mock import Mock, patch import pytest from pyvesync import VeSync from pyvesync.vesyncbulb import VeSyncBulb from pyvesync.vesyncfan import VeSyncAirBypass, VeSyncHumid200300S from pyvesync.vesyncoutlet import VeSyncOutlet from pyvesync.vesyncswitch import VeSyncSwitch import requests_mock from homeassistant.components.vesync import DOMAIN from homeassistant.config_entries import ConfigEntry from homeassistant.const import CONF_PASSWORD, CONF_USERNAME from homeassistant.core import HomeAssistant from homeassistant.helpers.typing import ConfigType from .common import mock_multiple_device_responses from tests.common import MockConfigEntry @pytest.fixture(name="config_entry") def config_entry_fixture(hass: HomeAssistant, config) -> ConfigEntry: """Create a mock VeSync config entry.""" entry = MockConfigEntry( title="VeSync", domain=DOMAIN, data=config[DOMAIN], ) entry.add_to_hass(hass) return entry @pytest.fixture(name="config") def config_fixture() -> ConfigType: """Create hass config fixture.""" return {DOMAIN: {CONF_USERNAME: "user", CONF_PASSWORD: "pass"}} @pytest.fixture(name="manager") def manager_fixture() -> VeSync: """Create a mock VeSync manager fixture.""" outlets = [] switches = [] fans = [] bulbs = [] mock_vesync = Mock(VeSync) mock_vesync.login = Mock(return_value=True) mock_vesync.update = Mock() mock_vesync.outlets = outlets mock_vesync.switches = switches mock_vesync.fans = fans mock_vesync.bulbs = bulbs mock_vesync._dev_list = { "fans": fans, "outlets": outlets, "switches": switches, "bulbs": bulbs, } mock_vesync.account_id = "account_id" mock_vesync.time_zone = "America/New_York" mock = Mock(return_value=mock_vesync) with patch("homeassistant.components.vesync.VeSync", new=mock): yield mock_vesync @pytest.fixture(name="fan") def fan_fixture(): """Create a mock VeSync fan fixture.""" return Mock(VeSyncAirBypass) @pytest.fixture(name="bulb") def bulb_fixture(): """Create a mock VeSync bulb fixture.""" return Mock(VeSyncBulb) @pytest.fixture(name="switch") def switch_fixture(): """Create a mock VeSync switch fixture.""" mock_fixture = Mock(VeSyncSwitch) mock_fixture.is_dimmable = Mock(return_value=False) return mock_fixture @pytest.fixture(name="dimmable_switch") def dimmable_switch_fixture(): """Create a mock VeSync switch fixture.""" mock_fixture = Mock(VeSyncSwitch) mock_fixture.is_dimmable = Mock(return_value=True) return mock_fixture @pytest.fixture(name="outlet") def outlet_fixture(): """Create a mock VeSync outlet fixture.""" return Mock(VeSyncOutlet) @pytest.fixture(name="humidifier") def humidifier_fixture(): """Create a mock VeSync humidifier fixture.""" return Mock(VeSyncHumid200300S) @pytest.fixture(name="humidifier_config_entry") async def humidifier_config_entry( hass: HomeAssistant, requests_mock: requests_mock.Mocker, config ) -> MockConfigEntry: """Create a mock VeSync config entry for Humidifier 200s.""" entry = MockConfigEntry( title="VeSync", domain=DOMAIN, data=config[DOMAIN], ) entry.add_to_hass(hass) device_name = "Humidifier 200s" mock_multiple_device_responses(requests_mock, [device_name]) await hass.config_entries.async_setup(entry.entry_id) await hass.async_block_till_done() return entry