core/tests/components/weatherflow/conftest.py

80 lines
2.4 KiB
Python
Raw Normal View History

Add WeatherFlow integration (#75530) * merge upstream * Update homeassistant/components/weatherflow/__init__.py Co-authored-by: G Johansson <goran.johansson@shiftit.se> * feat: Removing unused keys * feat: Addressing PR to remove DEFAULT_HOST from init * feat: Addressing PR abort case * feat: Ensure there is a default host always * feat: Addressing PR comments and fixing entity names via local testing * feat: Tested units * feat: updated variable names to hopefully add some clarity to the function * feat: added more var names for clarity * feat: Fixed abort * Update homeassistant/components/weatherflow/__init__.py Co-authored-by: G Johansson <goran.johansson@shiftit.se> * feat: Removed an unnecessary line * feat: Test updates * feat: Removed unreachable code * feat: Tons of improvements * removed debug code * feat: small tweaks * feat: Fixed density into HA Compatibility * feat: Handled the options incorrectly... now fixed * feat: Handled the options incorrectly... now fixed * Update homeassistant/components/weatherflow/manifest.json Co-authored-by: J. Nick Koston <nick@koston.org> * Cleaned up callback in __init__ Cleaning up config_flow as well * feat: Cleaned up a stupid test * feat: Simulating a timeout event * feat: Triggering timeout in mocking * feat: trying to pass tests * refactor: Moved code around so easier to test * Update homeassistant/components/weatherflow/__init__.py Co-authored-by: J. Nick Koston <nick@koston.org> * feat: Incremental changes moving along well * feat: Last fix before re-review * feat: Hopefully the tests shall pass * feat: Remove domian from unique id * feat: Fixed entity name * feat: Removed unneeded lambda - to make thread safe * Working version... * working * working * feat: Remove tuff * feat: Removed dual call * Update homeassistant/components/weatherflow/sensor.py Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> * Update homeassistant/components/weatherflow/strings.json Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> * feat: updates based on pr * feat: removed some self refrences * feat: Mod RSSI * feat: Removed the custom Air Density (will add in a later PR) * feat: Significant cleanup of config flow * feat: Reworked the configflwo with the help of Joostlek * feat: Updated test coverage * feat: Removing bakcing lib attribute * Update homeassistant/components/weatherflow/sensor.py Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> * Update homeassistant/components/weatherflow/sensor.py Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> * Update homeassistant/components/weatherflow/sensor.py Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> * Update homeassistant/components/weatherflow/sensor.py Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> * Update homeassistant/components/weatherflow/sensor.py Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> * feat: Updated translations * feat: Renamed CUSTOM to VOC * feat: Extreme simplification of config flow * feat: Pushing incremental changes * feat: Fixing test coverage * feat: Added lambda expressions for attributes and removed the custom AirDensity sensor * Update homeassistant/components/weatherflow/sensor.py Co-authored-by: J. Nick Koston <nick@koston.org> * Update homeassistant/components/weatherflow/sensor.py Co-authored-by: J. Nick Koston <nick@koston.org> * feat: Removed default lambda expression from raw_data_conv_fn * feat: Added back default variable for lambda * feat: Updated tests accordingly * feat: Updated tests * made sure to patch correct import * made sure to patch correct import * feat: Fixed up tests ... added missing asserts * feat: Dropped model * Update homeassistant/components/weatherflow/sensor.py Co-authored-by: J. Nick Koston <nick@koston.org> * Refactor: Updated code * refactor: Removed commented code * feat: close out all tests * feat: Fixing the patch * feat: Removed a bunch of stuff * feat: Cleaning up tests even more * fixed patch and paramaterized a test * feat: Addressing most recent comments * updates help of joostlek * feat: Updated coverage for const * Update homeassistant/components/weatherflow/strings.json Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> * Update homeassistant/components/weatherflow/strings.json Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> * Update homeassistant/components/weatherflow/strings.json Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> * Update homeassistant/components/weatherflow/strings.json Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> * Update homeassistant/components/weatherflow/strings.json Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> * Update homeassistant/components/weatherflow/sensor.py Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> * Update homeassistant/components/weatherflow/sensor.py Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> * Update homeassistant/components/weatherflow/strings.json Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> * Update homeassistant/components/weatherflow/sensor.py Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> * feat: Addressing more PR issues... probably still a few remain * using const logger * Update homeassistant/components/weatherflow/strings.json Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com> --------- Co-authored-by: G Johansson <goran.johansson@shiftit.se> Co-authored-by: J. Nick Koston <nick@koston.org> Co-authored-by: Joost Lekkerkerker <joostlek@outlook.com>
2023-09-27 15:28:05 +00:00
"""Fixtures for Weatherflow integration tests."""
import asyncio
from collections.abc import Generator
from unittest.mock import AsyncMock, patch
import pytest
from pyweatherflowudp.client import EVENT_DEVICE_DISCOVERED
from pyweatherflowudp.device import WeatherFlowDevice
from homeassistant.components.weatherflow.const import DOMAIN
from tests.common import MockConfigEntry, load_json_object_fixture
@pytest.fixture
def mock_setup_entry() -> Generator[AsyncMock, None, None]:
"""Mock setting up a config entry."""
with patch(
"homeassistant.components.weatherflow.async_setup_entry", return_value=True
) as mock_setup:
yield mock_setup
@pytest.fixture
def mock_config_entry() -> MockConfigEntry:
"""Return a mock config entry."""
return MockConfigEntry(domain=DOMAIN, data={})
@pytest.fixture
def mock_has_devices() -> Generator[AsyncMock, None, None]:
"""Return a mock has_devices function."""
with patch(
"homeassistant.components.weatherflow.config_flow.WeatherFlowListener.on",
return_value=True,
) as mock_has_devices:
yield mock_has_devices
@pytest.fixture
def mock_stop() -> Generator[AsyncMock, None, None]:
"""Return a fixture to handle the stop of udp."""
async def mock_stop_listening(self):
self._udp_task.cancel()
with patch(
"homeassistant.components.weatherflow.config_flow.WeatherFlowListener.stop_listening",
autospec=True,
side_effect=mock_stop_listening,
) as mock_function:
yield mock_function
@pytest.fixture
def mock_start() -> Generator[AsyncMock, None, None]:
"""Return fixture for starting upd."""
device = WeatherFlowDevice(
serial_number="HB-00000001",
data=load_json_object_fixture("weatherflow/device.json"),
)
async def device_discovery_task(self):
await asyncio.gather(
await asyncio.sleep(0.1), self.emit(EVENT_DEVICE_DISCOVERED, "HB-00000001")
)
async def mock_start_listening(self):
"""Mock listening function."""
self._devices["HB-00000001"] = device
self._udp_task = asyncio.create_task(device_discovery_task(self))
with patch(
"homeassistant.components.weatherflow.config_flow.WeatherFlowListener.start_listening",
autospec=True,
side_effect=mock_start_listening,
) as mock_function:
yield mock_function