mirror of
https://github.com/home-assistant/core.git
synced 2025-04-25 09:47:52 +00:00
Add tests for trafikverket_ferry (#71912)
This commit is contained in:
parent
691d49f23b
commit
046d7d2a23
@ -1301,9 +1301,6 @@ omit =
|
||||
homeassistant/components/tradfri/light.py
|
||||
homeassistant/components/tradfri/sensor.py
|
||||
homeassistant/components/tradfri/switch.py
|
||||
homeassistant/components/trafikverket_ferry/__init__.py
|
||||
homeassistant/components/trafikverket_ferry/coordinator.py
|
||||
homeassistant/components/trafikverket_ferry/sensor.py
|
||||
homeassistant/components/trafikverket_train/__init__.py
|
||||
homeassistant/components/trafikverket_train/sensor.py
|
||||
homeassistant/components/trafikverket_weatherstation/__init__.py
|
||||
|
@ -1 +1,18 @@
|
||||
"""Tests for the Trafikverket Ferry integration."""
|
||||
from __future__ import annotations
|
||||
|
||||
from homeassistant.components.trafikverket_ferry.const import (
|
||||
CONF_FROM,
|
||||
CONF_TIME,
|
||||
CONF_TO,
|
||||
)
|
||||
from homeassistant.const import CONF_API_KEY, CONF_NAME, CONF_WEEKDAY, WEEKDAYS
|
||||
|
||||
ENTRY_CONFIG = {
|
||||
CONF_API_KEY: "1234567890",
|
||||
CONF_FROM: "Harbor 1",
|
||||
CONF_TO: "Harbor 2",
|
||||
CONF_TIME: "00:00:00",
|
||||
CONF_WEEKDAY: WEEKDAYS,
|
||||
CONF_NAME: "Harbor1",
|
||||
}
|
||||
|
80
tests/components/trafikverket_ferry/conftest.py
Normal file
80
tests/components/trafikverket_ferry/conftest.py
Normal file
@ -0,0 +1,80 @@
|
||||
"""Fixtures for Trafikverket Ferry integration tests."""
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime, timedelta
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
from pytrafikverket.trafikverket_ferry import FerryStop
|
||||
|
||||
from homeassistant.components.trafikverket_ferry.const import DOMAIN
|
||||
from homeassistant.config_entries import SOURCE_USER
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.util import dt
|
||||
|
||||
from . import ENTRY_CONFIG
|
||||
|
||||
from tests.common import MockConfigEntry
|
||||
|
||||
|
||||
@pytest.fixture(name="load_int")
|
||||
async def load_integration_from_entry(
|
||||
hass: HomeAssistant, get_ferries: list[FerryStop]
|
||||
) -> MockConfigEntry:
|
||||
"""Set up the Trafikverket Ferry integration in Home Assistant."""
|
||||
config_entry = MockConfigEntry(
|
||||
domain=DOMAIN,
|
||||
source=SOURCE_USER,
|
||||
data=ENTRY_CONFIG,
|
||||
entry_id="1",
|
||||
unique_id="123",
|
||||
)
|
||||
|
||||
config_entry.add_to_hass(hass)
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.trafikverket_ferry.coordinator.TrafikverketFerry.async_get_next_ferry_stops",
|
||||
return_value=get_ferries,
|
||||
):
|
||||
await hass.config_entries.async_setup(config_entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
return config_entry
|
||||
|
||||
|
||||
@pytest.fixture(name="get_ferries")
|
||||
def fixture_get_ferries() -> list[FerryStop]:
|
||||
"""Construct FerryStop Mock."""
|
||||
|
||||
depart1 = FerryStop(
|
||||
"13",
|
||||
False,
|
||||
datetime(dt.now().year + 1, 5, 1, 12, 0, tzinfo=dt.UTC),
|
||||
[""],
|
||||
"0",
|
||||
datetime(dt.now().year, 5, 1, 12, 0, tzinfo=dt.UTC),
|
||||
"Harbor 1",
|
||||
"Harbor 2",
|
||||
)
|
||||
depart2 = FerryStop(
|
||||
"14",
|
||||
False,
|
||||
datetime(dt.now().year + 1, 5, 1, 12, 0, tzinfo=dt.UTC) + timedelta(minutes=15),
|
||||
[""],
|
||||
"0",
|
||||
datetime(dt.now().year, 5, 1, 12, 0, tzinfo=dt.UTC),
|
||||
"Harbor 1",
|
||||
"Harbor 2",
|
||||
)
|
||||
depart3 = FerryStop(
|
||||
"15",
|
||||
False,
|
||||
datetime(dt.now().year + 1, 5, 1, 12, 0, tzinfo=dt.UTC) + timedelta(minutes=30),
|
||||
[""],
|
||||
"0",
|
||||
datetime(dt.now().year, 5, 1, 12, 0, tzinfo=dt.UTC),
|
||||
"Harbor 1",
|
||||
"Harbor 2",
|
||||
)
|
||||
|
||||
return [depart1, depart2, depart3]
|
107
tests/components/trafikverket_ferry/test_coordinator.py
Normal file
107
tests/components/trafikverket_ferry/test_coordinator.py
Normal file
@ -0,0 +1,107 @@
|
||||
"""The test for the Trafikverket Ferry coordinator."""
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import date, datetime, timedelta
|
||||
from unittest.mock import AsyncMock, patch
|
||||
|
||||
from freezegun.api import FrozenDateTimeFactory
|
||||
import pytest
|
||||
from pytrafikverket.trafikverket_ferry import FerryStop
|
||||
|
||||
from homeassistant.components.trafikverket_ferry.const import DOMAIN
|
||||
from homeassistant.components.trafikverket_ferry.coordinator import next_departuredate
|
||||
from homeassistant.config_entries import SOURCE_USER
|
||||
from homeassistant.const import STATE_UNAVAILABLE, WEEKDAYS
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.util import dt
|
||||
|
||||
from . import ENTRY_CONFIG
|
||||
|
||||
from tests.common import MockConfigEntry, async_fire_time_changed
|
||||
|
||||
|
||||
async def test_coordinator(
|
||||
hass: HomeAssistant,
|
||||
entity_registry_enabled_by_default: AsyncMock,
|
||||
monkeypatch: pytest.MonkeyPatch,
|
||||
get_ferries: list[FerryStop],
|
||||
) -> None:
|
||||
"""Test the Trafikverket Ferry coordinator."""
|
||||
entry = MockConfigEntry(
|
||||
domain=DOMAIN,
|
||||
source=SOURCE_USER,
|
||||
data=ENTRY_CONFIG,
|
||||
entry_id="1",
|
||||
unique_id="123",
|
||||
)
|
||||
entry.add_to_hass(hass)
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.trafikverket_ferry.coordinator.TrafikverketFerry.async_get_next_ferry_stops",
|
||||
return_value=get_ferries,
|
||||
) as mock_data:
|
||||
await hass.config_entries.async_setup(entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
mock_data.assert_called_once()
|
||||
state1 = hass.states.get("sensor.harbor1_departure_from")
|
||||
state2 = hass.states.get("sensor.harbor1_departure_to")
|
||||
state3 = hass.states.get("sensor.harbor1_departure_time")
|
||||
assert state1.state == "Harbor 1"
|
||||
assert state2.state == "Harbor 2"
|
||||
assert state3.state == str(dt.now().year + 1) + "-05-01T12:00:00+00:00"
|
||||
mock_data.reset_mock()
|
||||
|
||||
monkeypatch.setattr(
|
||||
get_ferries[0],
|
||||
"departure_time",
|
||||
datetime(dt.now().year + 2, 5, 1, 12, 0, tzinfo=dt.UTC),
|
||||
)
|
||||
|
||||
async_fire_time_changed(hass, dt.utcnow() + timedelta(minutes=6))
|
||||
await hass.async_block_till_done()
|
||||
mock_data.assert_called_once()
|
||||
state1 = hass.states.get("sensor.harbor1_departure_from")
|
||||
state2 = hass.states.get("sensor.harbor1_departure_to")
|
||||
state3 = hass.states.get("sensor.harbor1_departure_time")
|
||||
assert state1.state == "Harbor 1"
|
||||
assert state2.state == "Harbor 2"
|
||||
assert state3.state == str(dt.now().year + 2) + "-05-01T12:00:00+00:00"
|
||||
mock_data.reset_mock()
|
||||
|
||||
mock_data.side_effect = ValueError("info")
|
||||
async_fire_time_changed(hass, dt.utcnow() + timedelta(minutes=6))
|
||||
await hass.async_block_till_done()
|
||||
mock_data.assert_called_once()
|
||||
state1 = hass.states.get("sensor.harbor1_departure_from")
|
||||
assert state1.state == STATE_UNAVAILABLE
|
||||
mock_data.reset_mock()
|
||||
|
||||
mock_data.return_value = get_ferries
|
||||
mock_data.side_effect = None
|
||||
async_fire_time_changed(hass, dt.utcnow() + timedelta(minutes=6))
|
||||
await hass.async_block_till_done()
|
||||
mock_data.assert_called_once()
|
||||
state1 = hass.states.get("sensor.harbor1_departure_from")
|
||||
assert state1.state == "Harbor 1"
|
||||
mock_data.reset_mock()
|
||||
|
||||
|
||||
async def test_coordinator_next_departuredate(freezer: FrozenDateTimeFactory) -> None:
|
||||
"""Test the Trafikverket Ferry next_departuredate calculation."""
|
||||
freezer.move_to("2022-05-15")
|
||||
today = date.today()
|
||||
day_list = ["wed", "thu", "fri", "sat"]
|
||||
test = next_departuredate(day_list)
|
||||
assert test == today + timedelta(days=3)
|
||||
day_list = WEEKDAYS
|
||||
test = next_departuredate(day_list)
|
||||
assert test == today + timedelta(days=0)
|
||||
day_list = ["sun"]
|
||||
test = next_departuredate(day_list)
|
||||
assert test == today + timedelta(days=0)
|
||||
freezer.move_to("2022-05-16")
|
||||
today = date.today()
|
||||
day_list = ["wed", "thu", "fri", "sat", "sun"]
|
||||
test = next_departuredate(day_list)
|
||||
assert test == today + timedelta(days=2)
|
61
tests/components/trafikverket_ferry/test_init.py
Normal file
61
tests/components/trafikverket_ferry/test_init.py
Normal file
@ -0,0 +1,61 @@
|
||||
"""Test for Trafikverket Ferry component Init."""
|
||||
from __future__ import annotations
|
||||
|
||||
from unittest.mock import patch
|
||||
|
||||
from pytrafikverket.trafikverket_ferry import FerryStop
|
||||
|
||||
from homeassistant import config_entries
|
||||
from homeassistant.components.trafikverket_ferry.const import DOMAIN
|
||||
from homeassistant.config_entries import SOURCE_USER
|
||||
from homeassistant.core import HomeAssistant
|
||||
|
||||
from . import ENTRY_CONFIG
|
||||
|
||||
from tests.common import MockConfigEntry
|
||||
|
||||
|
||||
async def test_setup_entry(hass: HomeAssistant, get_ferries: list[FerryStop]) -> None:
|
||||
"""Test setup entry."""
|
||||
entry = MockConfigEntry(
|
||||
domain=DOMAIN,
|
||||
source=SOURCE_USER,
|
||||
data=ENTRY_CONFIG,
|
||||
entry_id="1",
|
||||
unique_id="123",
|
||||
)
|
||||
entry.add_to_hass(hass)
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.trafikverket_ferry.coordinator.TrafikverketFerry.async_get_next_ferry_stops",
|
||||
return_value=get_ferries,
|
||||
) as mock_tvt_ferry:
|
||||
await hass.config_entries.async_setup(entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert entry.state is config_entries.ConfigEntryState.LOADED
|
||||
assert len(mock_tvt_ferry.mock_calls) == 1
|
||||
|
||||
|
||||
async def test_unload_entry(hass: HomeAssistant, get_ferries: list[FerryStop]) -> None:
|
||||
"""Test unload an entry."""
|
||||
entry = MockConfigEntry(
|
||||
domain=DOMAIN,
|
||||
source=SOURCE_USER,
|
||||
data=ENTRY_CONFIG,
|
||||
entry_id="1",
|
||||
unique_id="321",
|
||||
)
|
||||
entry.add_to_hass(hass)
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.trafikverket_ferry.coordinator.TrafikverketFerry.async_get_next_ferry_stops",
|
||||
return_value=get_ferries,
|
||||
):
|
||||
await hass.config_entries.async_setup(entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
assert entry.state is config_entries.ConfigEntryState.LOADED
|
||||
assert await hass.config_entries.async_unload(entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
assert entry.state is config_entries.ConfigEntryState.NOT_LOADED
|
48
tests/components/trafikverket_ferry/test_sensor.py
Normal file
48
tests/components/trafikverket_ferry/test_sensor.py
Normal file
@ -0,0 +1,48 @@
|
||||
"""The test for the Trafikverket sensor platform."""
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import timedelta
|
||||
from unittest.mock import patch
|
||||
|
||||
from pytest import MonkeyPatch
|
||||
from pytrafikverket.trafikverket_ferry import FerryStop
|
||||
|
||||
from homeassistant.config_entries import ConfigEntry
|
||||
from homeassistant.core import HomeAssistant
|
||||
from homeassistant.util import dt
|
||||
|
||||
from tests.common import async_fire_time_changed
|
||||
|
||||
|
||||
async def test_sensor(
|
||||
hass: HomeAssistant,
|
||||
load_int: ConfigEntry,
|
||||
monkeypatch: MonkeyPatch,
|
||||
get_ferries: list[FerryStop],
|
||||
) -> None:
|
||||
"""Test the Trafikverket Ferry sensor."""
|
||||
state1 = hass.states.get("sensor.harbor1_departure_from")
|
||||
state2 = hass.states.get("sensor.harbor1_departure_to")
|
||||
state3 = hass.states.get("sensor.harbor1_departure_time")
|
||||
assert state1.state == "Harbor 1"
|
||||
assert state2.state == "Harbor 2"
|
||||
assert state3.state == str(dt.now().year + 1) + "-05-01T12:00:00+00:00"
|
||||
assert state1.attributes["icon"] == "mdi:ferry"
|
||||
assert state1.attributes["other_information"] == [""]
|
||||
assert state2.attributes["icon"] == "mdi:ferry"
|
||||
|
||||
monkeypatch.setattr(get_ferries[0], "other_information", ["Nothing exiting"])
|
||||
|
||||
with patch(
|
||||
"homeassistant.components.trafikverket_ferry.coordinator.TrafikverketFerry.async_get_next_ferry_stops",
|
||||
return_value=get_ferries,
|
||||
):
|
||||
async_fire_time_changed(
|
||||
hass,
|
||||
dt.utcnow() + timedelta(minutes=6),
|
||||
)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
state1 = hass.states.get("sensor.harbor1_departure_from")
|
||||
assert state1.state == "Harbor 1"
|
||||
assert state1.attributes["other_information"] == ["Nothing exiting"]
|
Loading…
x
Reference in New Issue
Block a user