mirror of
https://github.com/jdejaegh/irm-kmi-ha.git
synced 2025-06-27 03:35:56 +02:00
68 lines
2.7 KiB
Python
68 lines
2.7 KiB
Python
from unittest.mock import AsyncMock, MagicMock
|
|
|
|
from homeassistant.core import HomeAssistant
|
|
from pytest_homeassistant_custom_component.common import MockConfigEntry, load_fixture
|
|
|
|
from custom_components.irm_kmi import IrmKmiCoordinator
|
|
from custom_components.irm_kmi.irm_kmi_api.api import IrmKmiApiError
|
|
from custom_components.irm_kmi.irm_kmi_api.pollen import PollenParser
|
|
from tests.conftest import get_api_with_data
|
|
|
|
|
|
def test_svg_pollen_parsing():
|
|
with open("tests/fixtures/pollen.svg", "r") as file:
|
|
svg_data = file.read()
|
|
data = PollenParser(svg_data).get_pollen_data()
|
|
assert data == {'birch': 'none', 'oak': 'none', 'hazel': 'none', 'mugwort': 'none', 'alder': 'none',
|
|
'grasses': 'purple', 'ash': 'none'}
|
|
|
|
def test_svg_two_pollen_parsing():
|
|
with open("tests/fixtures/new_two_pollens.svg", "r") as file:
|
|
svg_data = file.read()
|
|
data = PollenParser(svg_data).get_pollen_data()
|
|
assert data == {'birch': 'none', 'oak': 'none', 'hazel': 'none', 'mugwort': 'active', 'alder': 'none',
|
|
'grasses': 'red', 'ash': 'none'}
|
|
|
|
def test_svg_two_pollen_parsing_2025_update():
|
|
with open("tests/fixtures/pollens-2025.svg", "r") as file:
|
|
svg_data = file.read()
|
|
data = PollenParser(svg_data).get_pollen_data()
|
|
assert data == {'birch': 'none', 'oak': 'none', 'hazel': 'active', 'mugwort': 'none', 'alder': 'green',
|
|
'grasses': 'none', 'ash': 'none'}
|
|
|
|
def test_pollen_options():
|
|
assert set(PollenParser.get_option_values()) == {'green', 'yellow', 'orange', 'red', 'purple', 'active', 'none'}
|
|
|
|
|
|
def test_pollen_default_values():
|
|
assert PollenParser.get_default_data() == {'birch': 'none', 'oak': 'none', 'hazel': 'none', 'mugwort': 'none',
|
|
'alder': 'none', 'grasses': 'none', 'ash': 'none'}
|
|
|
|
|
|
async def test_pollen_data_from_api() -> None:
|
|
api = get_api_with_data("be_forecast_warning.json")
|
|
|
|
# Mock get_svg function
|
|
api.get_svg = AsyncMock(return_value=load_fixture("pollen.svg"))
|
|
|
|
result = await api.get_pollen()
|
|
expected = {'mugwort': 'none', 'birch': 'none', 'alder': 'none', 'ash': 'none', 'oak': 'none',
|
|
'grasses': 'purple', 'hazel': 'none'}
|
|
assert result == expected
|
|
|
|
|
|
async def test_pollen_error_leads_to_unavailable_on_first_call(
|
|
hass: HomeAssistant,
|
|
mock_config_entry: MockConfigEntry,
|
|
) -> None:
|
|
coordinator = IrmKmiCoordinator(hass, mock_config_entry)
|
|
api = get_api_with_data("be_forecast_warning.json")
|
|
|
|
api.get_svg = AsyncMock()
|
|
api.get_svg.side_effect = IrmKmiApiError
|
|
|
|
coordinator._api = api
|
|
|
|
result = await coordinator.process_api_data()
|
|
expected = PollenParser.get_unavailable_data()
|
|
assert result['pollen'] == expected
|