mirror of
https://github.com/home-assistant/core.git
synced 2025-04-28 03:07:50 +00:00
Bump pytrafikverket to 1.0.0 (#121210)
* Update all related files and tests to new version * Fix missed modal * Bump requirements
This commit is contained in:
parent
10d3c3d341
commit
ebe7a4747d
@ -6,7 +6,8 @@ from collections.abc import Mapping
|
|||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from pytrafikverket.exceptions import InvalidAuthentication, NoCameraFound, UnknownError
|
from pytrafikverket.exceptions import InvalidAuthentication, NoCameraFound, UnknownError
|
||||||
from pytrafikverket.trafikverket_camera import CameraInfo, TrafikverketCamera
|
from pytrafikverket.models import CameraInfoModel
|
||||||
|
from pytrafikverket.trafikverket_camera import TrafikverketCamera
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.config_entries import ConfigEntry, ConfigFlow, ConfigFlowResult
|
from homeassistant.config_entries import ConfigEntry, ConfigFlow, ConfigFlowResult
|
||||||
@ -29,15 +30,15 @@ class TVCameraConfigFlow(ConfigFlow, domain=DOMAIN):
|
|||||||
VERSION = 3
|
VERSION = 3
|
||||||
|
|
||||||
entry: ConfigEntry | None
|
entry: ConfigEntry | None
|
||||||
cameras: list[CameraInfo]
|
cameras: list[CameraInfoModel]
|
||||||
api_key: str
|
api_key: str
|
||||||
|
|
||||||
async def validate_input(
|
async def validate_input(
|
||||||
self, sensor_api: str, location: str
|
self, sensor_api: str, location: str
|
||||||
) -> tuple[dict[str, str], list[CameraInfo] | None]:
|
) -> tuple[dict[str, str], list[CameraInfoModel] | None]:
|
||||||
"""Validate input from user input."""
|
"""Validate input from user input."""
|
||||||
errors: dict[str, str] = {}
|
errors: dict[str, str] = {}
|
||||||
cameras: list[CameraInfo] | None = None
|
cameras: list[CameraInfoModel] | None = None
|
||||||
|
|
||||||
web_session = async_get_clientsession(self.hass)
|
web_session = async_get_clientsession(self.hass)
|
||||||
camera_api = TrafikverketCamera(web_session, sensor_api)
|
camera_api = TrafikverketCamera(web_session, sensor_api)
|
||||||
|
@ -14,7 +14,8 @@ from pytrafikverket.exceptions import (
|
|||||||
NoCameraFound,
|
NoCameraFound,
|
||||||
UnknownError,
|
UnknownError,
|
||||||
)
|
)
|
||||||
from pytrafikverket.trafikverket_camera import CameraInfo, TrafikverketCamera
|
from pytrafikverket.models import CameraInfoModel
|
||||||
|
from pytrafikverket.trafikverket_camera import TrafikverketCamera
|
||||||
|
|
||||||
from homeassistant.const import CONF_API_KEY, CONF_ID
|
from homeassistant.const import CONF_API_KEY, CONF_ID
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
@ -35,7 +36,7 @@ TIME_BETWEEN_UPDATES = timedelta(minutes=5)
|
|||||||
class CameraData:
|
class CameraData:
|
||||||
"""Dataclass for Camera data."""
|
"""Dataclass for Camera data."""
|
||||||
|
|
||||||
data: CameraInfo
|
data: CameraInfoModel
|
||||||
image: bytes | None
|
image: bytes | None
|
||||||
|
|
||||||
|
|
||||||
@ -60,7 +61,7 @@ class TVDataUpdateCoordinator(DataUpdateCoordinator[CameraData]):
|
|||||||
|
|
||||||
async def _async_update_data(self) -> CameraData:
|
async def _async_update_data(self) -> CameraData:
|
||||||
"""Fetch data from Trafikverket."""
|
"""Fetch data from Trafikverket."""
|
||||||
camera_data: CameraInfo
|
camera_data: CameraInfoModel
|
||||||
image: bytes | None = None
|
image: bytes | None = None
|
||||||
try:
|
try:
|
||||||
camera_data = await self._camera_api.async_get_camera(self._id)
|
camera_data = await self._camera_api.async_get_camera(self._id)
|
||||||
|
@ -6,5 +6,5 @@
|
|||||||
"documentation": "https://www.home-assistant.io/integrations/trafikverket_camera",
|
"documentation": "https://www.home-assistant.io/integrations/trafikverket_camera",
|
||||||
"iot_class": "cloud_polling",
|
"iot_class": "cloud_polling",
|
||||||
"loggers": ["pytrafikverket"],
|
"loggers": ["pytrafikverket"],
|
||||||
"requirements": ["pytrafikverket==0.3.10"]
|
"requirements": ["pytrafikverket==1.0.0"]
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,7 @@ from typing import TYPE_CHECKING, Any
|
|||||||
|
|
||||||
from pytrafikverket import TrafikverketFerry
|
from pytrafikverket import TrafikverketFerry
|
||||||
from pytrafikverket.exceptions import InvalidAuthentication, NoFerryFound
|
from pytrafikverket.exceptions import InvalidAuthentication, NoFerryFound
|
||||||
from pytrafikverket.trafikverket_ferry import FerryStop
|
from pytrafikverket.models import FerryStopModel
|
||||||
|
|
||||||
from homeassistant.const import CONF_API_KEY, CONF_WEEKDAY, WEEKDAYS
|
from homeassistant.const import CONF_API_KEY, CONF_WEEKDAY, WEEKDAYS
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
@ -86,7 +86,7 @@ class TVDataUpdateCoordinator(DataUpdateCoordinator):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
routedata: list[
|
routedata: list[
|
||||||
FerryStop
|
FerryStopModel
|
||||||
] = await self._ferry_api.async_get_next_ferry_stops(
|
] = await self._ferry_api.async_get_next_ferry_stops(
|
||||||
self._from, self._to, when, 3
|
self._from, self._to, when, 3
|
||||||
)
|
)
|
||||||
|
@ -6,5 +6,5 @@
|
|||||||
"documentation": "https://www.home-assistant.io/integrations/trafikverket_ferry",
|
"documentation": "https://www.home-assistant.io/integrations/trafikverket_ferry",
|
||||||
"iot_class": "cloud_polling",
|
"iot_class": "cloud_polling",
|
||||||
"loggers": ["pytrafikverket"],
|
"loggers": ["pytrafikverket"],
|
||||||
"requirements": ["pytrafikverket==0.3.10"]
|
"requirements": ["pytrafikverket==1.0.0"]
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ from pytrafikverket.exceptions import (
|
|||||||
NoTrainAnnouncementFound,
|
NoTrainAnnouncementFound,
|
||||||
UnknownError,
|
UnknownError,
|
||||||
)
|
)
|
||||||
from pytrafikverket.trafikverket_train import StationInfo, TrainStop
|
from pytrafikverket.models import StationInfoModel, TrainStopModel
|
||||||
|
|
||||||
from homeassistant.const import CONF_API_KEY, CONF_WEEKDAY
|
from homeassistant.const import CONF_API_KEY, CONF_WEEKDAY
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
@ -35,7 +35,7 @@ class TrainData:
|
|||||||
|
|
||||||
departure_time: datetime | None
|
departure_time: datetime | None
|
||||||
departure_state: str
|
departure_state: str
|
||||||
cancelled: bool
|
cancelled: bool | None
|
||||||
delayed_time: int | None
|
delayed_time: int | None
|
||||||
planned_time: datetime | None
|
planned_time: datetime | None
|
||||||
estimated_time: datetime | None
|
estimated_time: datetime | None
|
||||||
@ -73,8 +73,8 @@ class TVDataUpdateCoordinator(DataUpdateCoordinator[TrainData]):
|
|||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
to_station: StationInfo,
|
to_station: StationInfoModel,
|
||||||
from_station: StationInfo,
|
from_station: StationInfoModel,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Initialize the Trafikverket coordinator."""
|
"""Initialize the Trafikverket coordinator."""
|
||||||
super().__init__(
|
super().__init__(
|
||||||
@ -86,8 +86,8 @@ class TVDataUpdateCoordinator(DataUpdateCoordinator[TrainData]):
|
|||||||
self._train_api = TrafikverketTrain(
|
self._train_api = TrafikverketTrain(
|
||||||
async_get_clientsession(hass), self.config_entry.data[CONF_API_KEY]
|
async_get_clientsession(hass), self.config_entry.data[CONF_API_KEY]
|
||||||
)
|
)
|
||||||
self.from_station: StationInfo = from_station
|
self.from_station: StationInfoModel = from_station
|
||||||
self.to_station: StationInfo = to_station
|
self.to_station: StationInfoModel = to_station
|
||||||
self._time: time | None = dt_util.parse_time(self.config_entry.data[CONF_TIME])
|
self._time: time | None = dt_util.parse_time(self.config_entry.data[CONF_TIME])
|
||||||
self._weekdays: list[str] = self.config_entry.data[CONF_WEEKDAY]
|
self._weekdays: list[str] = self.config_entry.data[CONF_WEEKDAY]
|
||||||
self._filter_product: str | None = self.config_entry.options.get(
|
self._filter_product: str | None = self.config_entry.options.get(
|
||||||
@ -98,8 +98,8 @@ class TVDataUpdateCoordinator(DataUpdateCoordinator[TrainData]):
|
|||||||
"""Fetch data from Trafikverket."""
|
"""Fetch data from Trafikverket."""
|
||||||
|
|
||||||
when = dt_util.now()
|
when = dt_util.now()
|
||||||
state: TrainStop | None = None
|
state: TrainStopModel | None = None
|
||||||
states: list[TrainStop] | None = None
|
states: list[TrainStopModel] | None = None
|
||||||
if self._time:
|
if self._time:
|
||||||
departure_day = next_departuredate(self._weekdays)
|
departure_day = next_departuredate(self._weekdays)
|
||||||
when = datetime.combine(
|
when = datetime.combine(
|
||||||
|
@ -6,5 +6,5 @@
|
|||||||
"documentation": "https://www.home-assistant.io/integrations/trafikverket_train",
|
"documentation": "https://www.home-assistant.io/integrations/trafikverket_train",
|
||||||
"iot_class": "cloud_polling",
|
"iot_class": "cloud_polling",
|
||||||
"loggers": ["pytrafikverket"],
|
"loggers": ["pytrafikverket"],
|
||||||
"requirements": ["pytrafikverket==0.3.10"]
|
"requirements": ["pytrafikverket==1.0.0"]
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,8 @@ from pytrafikverket.exceptions import (
|
|||||||
MultipleWeatherStationsFound,
|
MultipleWeatherStationsFound,
|
||||||
NoWeatherStationFound,
|
NoWeatherStationFound,
|
||||||
)
|
)
|
||||||
from pytrafikverket.trafikverket_weather import TrafikverketWeather, WeatherStationInfo
|
from pytrafikverket.models import WeatherStationInfoModel
|
||||||
|
from pytrafikverket.trafikverket_weather import TrafikverketWeather
|
||||||
|
|
||||||
from homeassistant.const import CONF_API_KEY
|
from homeassistant.const import CONF_API_KEY
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
@ -28,7 +29,7 @@ _LOGGER = logging.getLogger(__name__)
|
|||||||
TIME_BETWEEN_UPDATES = timedelta(minutes=10)
|
TIME_BETWEEN_UPDATES = timedelta(minutes=10)
|
||||||
|
|
||||||
|
|
||||||
class TVDataUpdateCoordinator(DataUpdateCoordinator[WeatherStationInfo]):
|
class TVDataUpdateCoordinator(DataUpdateCoordinator[WeatherStationInfoModel]):
|
||||||
"""A Sensibo Data Update Coordinator."""
|
"""A Sensibo Data Update Coordinator."""
|
||||||
|
|
||||||
config_entry: TVWeatherConfigEntry
|
config_entry: TVWeatherConfigEntry
|
||||||
@ -46,7 +47,7 @@ class TVDataUpdateCoordinator(DataUpdateCoordinator[WeatherStationInfo]):
|
|||||||
)
|
)
|
||||||
self._station = self.config_entry.data[CONF_STATION]
|
self._station = self.config_entry.data[CONF_STATION]
|
||||||
|
|
||||||
async def _async_update_data(self) -> WeatherStationInfo:
|
async def _async_update_data(self) -> WeatherStationInfoModel:
|
||||||
"""Fetch data from Trafikverket."""
|
"""Fetch data from Trafikverket."""
|
||||||
try:
|
try:
|
||||||
weatherdata = await self._weather_api.async_get_weather(self._station)
|
weatherdata = await self._weather_api.async_get_weather(self._station)
|
||||||
|
@ -6,5 +6,5 @@
|
|||||||
"documentation": "https://www.home-assistant.io/integrations/trafikverket_weatherstation",
|
"documentation": "https://www.home-assistant.io/integrations/trafikverket_weatherstation",
|
||||||
"iot_class": "cloud_polling",
|
"iot_class": "cloud_polling",
|
||||||
"loggers": ["pytrafikverket"],
|
"loggers": ["pytrafikverket"],
|
||||||
"requirements": ["pytrafikverket==0.3.10"]
|
"requirements": ["pytrafikverket==1.0.0"]
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@ from collections.abc import Callable
|
|||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
from pytrafikverket.trafikverket_weather import WeatherStationInfo
|
from pytrafikverket.models import WeatherStationInfoModel
|
||||||
|
|
||||||
from homeassistant.components.sensor import (
|
from homeassistant.components.sensor import (
|
||||||
SensorDeviceClass,
|
SensorDeviceClass,
|
||||||
@ -47,7 +47,7 @@ PRECIPITATION_TYPE = [
|
|||||||
class TrafikverketSensorEntityDescription(SensorEntityDescription):
|
class TrafikverketSensorEntityDescription(SensorEntityDescription):
|
||||||
"""Describes Trafikverket sensor entity."""
|
"""Describes Trafikverket sensor entity."""
|
||||||
|
|
||||||
value_fn: Callable[[WeatherStationInfo], StateType | datetime]
|
value_fn: Callable[[WeatherStationInfoModel], StateType | datetime]
|
||||||
|
|
||||||
|
|
||||||
def add_utc_timezone(date_time: datetime | None) -> datetime | None:
|
def add_utc_timezone(date_time: datetime | None) -> datetime | None:
|
||||||
|
@ -2358,7 +2358,7 @@ pytradfri[async]==9.0.1
|
|||||||
# homeassistant.components.trafikverket_ferry
|
# homeassistant.components.trafikverket_ferry
|
||||||
# homeassistant.components.trafikverket_train
|
# homeassistant.components.trafikverket_train
|
||||||
# homeassistant.components.trafikverket_weatherstation
|
# homeassistant.components.trafikverket_weatherstation
|
||||||
pytrafikverket==0.3.10
|
pytrafikverket==1.0.0
|
||||||
|
|
||||||
# homeassistant.components.v2c
|
# homeassistant.components.v2c
|
||||||
pytrydan==0.7.0
|
pytrydan==0.7.0
|
||||||
|
@ -1843,7 +1843,7 @@ pytradfri[async]==9.0.1
|
|||||||
# homeassistant.components.trafikverket_ferry
|
# homeassistant.components.trafikverket_ferry
|
||||||
# homeassistant.components.trafikverket_train
|
# homeassistant.components.trafikverket_train
|
||||||
# homeassistant.components.trafikverket_weatherstation
|
# homeassistant.components.trafikverket_weatherstation
|
||||||
pytrafikverket==0.3.10
|
pytrafikverket==1.0.0
|
||||||
|
|
||||||
# homeassistant.components.v2c
|
# homeassistant.components.v2c
|
||||||
pytrydan==0.7.0
|
pytrydan==0.7.0
|
||||||
|
@ -6,7 +6,7 @@ from datetime import datetime
|
|||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from pytrafikverket.trafikverket_camera import CameraInfo
|
from pytrafikverket.models import CameraInfoModel
|
||||||
|
|
||||||
from homeassistant.components.trafikverket_camera.const import DOMAIN
|
from homeassistant.components.trafikverket_camera.const import DOMAIN
|
||||||
from homeassistant.config_entries import SOURCE_USER
|
from homeassistant.config_entries import SOURCE_USER
|
||||||
@ -21,7 +21,9 @@ from tests.test_util.aiohttp import AiohttpClientMocker
|
|||||||
|
|
||||||
@pytest.fixture(name="load_int")
|
@pytest.fixture(name="load_int")
|
||||||
async def load_integration_from_entry(
|
async def load_integration_from_entry(
|
||||||
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker, get_camera: CameraInfo
|
hass: HomeAssistant,
|
||||||
|
aioclient_mock: AiohttpClientMocker,
|
||||||
|
get_camera: CameraInfoModel,
|
||||||
) -> MockConfigEntry:
|
) -> MockConfigEntry:
|
||||||
"""Set up the Trafikverket Camera integration in Home Assistant."""
|
"""Set up the Trafikverket Camera integration in Home Assistant."""
|
||||||
aioclient_mock.get(
|
aioclient_mock.get(
|
||||||
@ -51,10 +53,10 @@ async def load_integration_from_entry(
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture(name="get_camera")
|
@pytest.fixture(name="get_camera")
|
||||||
def fixture_get_camera() -> CameraInfo:
|
def fixture_get_camera() -> CameraInfoModel:
|
||||||
"""Construct Camera Mock."""
|
"""Construct Camera Mock."""
|
||||||
|
|
||||||
return CameraInfo(
|
return CameraInfoModel(
|
||||||
camera_name="Test Camera",
|
camera_name="Test Camera",
|
||||||
camera_id="1234",
|
camera_id="1234",
|
||||||
active=True,
|
active=True,
|
||||||
@ -72,10 +74,10 @@ def fixture_get_camera() -> CameraInfo:
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture(name="get_camera2")
|
@pytest.fixture(name="get_camera2")
|
||||||
def fixture_get_camera2() -> CameraInfo:
|
def fixture_get_camera2() -> CameraInfoModel:
|
||||||
"""Construct Camera Mock 2."""
|
"""Construct Camera Mock 2."""
|
||||||
|
|
||||||
return CameraInfo(
|
return CameraInfoModel(
|
||||||
camera_name="Test Camera2",
|
camera_name="Test Camera2",
|
||||||
camera_id="5678",
|
camera_id="5678",
|
||||||
active=True,
|
active=True,
|
||||||
@ -93,11 +95,11 @@ def fixture_get_camera2() -> CameraInfo:
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture(name="get_cameras")
|
@pytest.fixture(name="get_cameras")
|
||||||
def fixture_get_cameras() -> CameraInfo:
|
def fixture_get_cameras() -> CameraInfoModel:
|
||||||
"""Construct Camera Mock with multiple cameras."""
|
"""Construct Camera Mock with multiple cameras."""
|
||||||
|
|
||||||
return [
|
return [
|
||||||
CameraInfo(
|
CameraInfoModel(
|
||||||
camera_name="Test Camera",
|
camera_name="Test Camera",
|
||||||
camera_id="1234",
|
camera_id="1234",
|
||||||
active=True,
|
active=True,
|
||||||
@ -112,7 +114,7 @@ def fixture_get_cameras() -> CameraInfo:
|
|||||||
status="Running",
|
status="Running",
|
||||||
camera_type="Road",
|
camera_type="Road",
|
||||||
),
|
),
|
||||||
CameraInfo(
|
CameraInfoModel(
|
||||||
camera_name="Test Camera2",
|
camera_name="Test Camera2",
|
||||||
camera_id="5678",
|
camera_id="5678",
|
||||||
active=True,
|
active=True,
|
||||||
@ -131,10 +133,10 @@ def fixture_get_cameras() -> CameraInfo:
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture(name="get_camera_no_location")
|
@pytest.fixture(name="get_camera_no_location")
|
||||||
def fixture_get_camera_no_location() -> CameraInfo:
|
def fixture_get_camera_no_location() -> CameraInfoModel:
|
||||||
"""Construct Camera Mock."""
|
"""Construct Camera Mock."""
|
||||||
|
|
||||||
return CameraInfo(
|
return CameraInfoModel(
|
||||||
camera_name="Test Camera",
|
camera_name="Test Camera",
|
||||||
camera_id="1234",
|
camera_id="1234",
|
||||||
active=True,
|
active=True,
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from pytrafikverket.trafikverket_camera import CameraInfo
|
from pytrafikverket.models import CameraInfoModel
|
||||||
|
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.const import STATE_ON
|
from homeassistant.const import STATE_ON
|
||||||
@ -14,7 +14,7 @@ from homeassistant.core import HomeAssistant
|
|||||||
async def test_sensor(
|
async def test_sensor(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
load_int: ConfigEntry,
|
load_int: ConfigEntry,
|
||||||
get_camera: CameraInfo,
|
get_camera: CameraInfoModel,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test the Trafikverket Camera binary sensor."""
|
"""Test the Trafikverket Camera binary sensor."""
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ from unittest.mock import patch
|
|||||||
|
|
||||||
from freezegun.api import FrozenDateTimeFactory
|
from freezegun.api import FrozenDateTimeFactory
|
||||||
import pytest
|
import pytest
|
||||||
from pytrafikverket.trafikverket_camera import CameraInfo
|
from pytrafikverket.models import CameraInfoModel
|
||||||
|
|
||||||
from homeassistant.components.camera import async_get_image
|
from homeassistant.components.camera import async_get_image
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
@ -24,7 +24,7 @@ async def test_camera(
|
|||||||
freezer: FrozenDateTimeFactory,
|
freezer: FrozenDateTimeFactory,
|
||||||
monkeypatch: pytest.MonkeyPatch,
|
monkeypatch: pytest.MonkeyPatch,
|
||||||
aioclient_mock: AiohttpClientMocker,
|
aioclient_mock: AiohttpClientMocker,
|
||||||
get_camera: CameraInfo,
|
get_camera: CameraInfoModel,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test the Trafikverket Camera sensor."""
|
"""Test the Trafikverket Camera sensor."""
|
||||||
state1 = hass.states.get("camera.test_camera")
|
state1 = hass.states.get("camera.test_camera")
|
||||||
|
@ -6,7 +6,7 @@ from unittest.mock import patch
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from pytrafikverket.exceptions import InvalidAuthentication, NoCameraFound, UnknownError
|
from pytrafikverket.exceptions import InvalidAuthentication, NoCameraFound, UnknownError
|
||||||
from pytrafikverket.trafikverket_camera import CameraInfo
|
from pytrafikverket.models import CameraInfoModel
|
||||||
|
|
||||||
from homeassistant import config_entries
|
from homeassistant import config_entries
|
||||||
from homeassistant.components.trafikverket_camera.const import DOMAIN
|
from homeassistant.components.trafikverket_camera.const import DOMAIN
|
||||||
@ -17,7 +17,7 @@ from homeassistant.data_entry_flow import FlowResultType
|
|||||||
from tests.common import MockConfigEntry
|
from tests.common import MockConfigEntry
|
||||||
|
|
||||||
|
|
||||||
async def test_form(hass: HomeAssistant, get_camera: CameraInfo) -> None:
|
async def test_form(hass: HomeAssistant, get_camera: CameraInfoModel) -> None:
|
||||||
"""Test we get the form."""
|
"""Test we get the form."""
|
||||||
|
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
@ -56,7 +56,9 @@ async def test_form(hass: HomeAssistant, get_camera: CameraInfo) -> None:
|
|||||||
|
|
||||||
|
|
||||||
async def test_form_multiple_cameras(
|
async def test_form_multiple_cameras(
|
||||||
hass: HomeAssistant, get_cameras: list[CameraInfo], get_camera2: CameraInfo
|
hass: HomeAssistant,
|
||||||
|
get_cameras: list[CameraInfoModel],
|
||||||
|
get_camera2: CameraInfoModel,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test we get the form with multiple cameras."""
|
"""Test we get the form with multiple cameras."""
|
||||||
|
|
||||||
@ -108,7 +110,7 @@ async def test_form_multiple_cameras(
|
|||||||
|
|
||||||
|
|
||||||
async def test_form_no_location_data(
|
async def test_form_no_location_data(
|
||||||
hass: HomeAssistant, get_camera_no_location: CameraInfo
|
hass: HomeAssistant, get_camera_no_location: CameraInfoModel
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test we get the form."""
|
"""Test we get the form."""
|
||||||
|
|
||||||
|
@ -11,9 +11,9 @@ from pytrafikverket.exceptions import (
|
|||||||
NoCameraFound,
|
NoCameraFound,
|
||||||
UnknownError,
|
UnknownError,
|
||||||
)
|
)
|
||||||
|
from pytrafikverket.models import CameraInfoModel
|
||||||
|
|
||||||
from homeassistant.components.trafikverket_camera.const import DOMAIN
|
from homeassistant.components.trafikverket_camera.const import DOMAIN
|
||||||
from homeassistant.components.trafikverket_camera.coordinator import CameraData
|
|
||||||
from homeassistant.config_entries import SOURCE_USER, ConfigEntryState
|
from homeassistant.config_entries import SOURCE_USER, ConfigEntryState
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.exceptions import ConfigEntryAuthFailed
|
from homeassistant.exceptions import ConfigEntryAuthFailed
|
||||||
@ -28,7 +28,7 @@ from tests.test_util.aiohttp import AiohttpClientMocker
|
|||||||
async def test_coordinator(
|
async def test_coordinator(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
aioclient_mock: AiohttpClientMocker,
|
aioclient_mock: AiohttpClientMocker,
|
||||||
get_camera: CameraData,
|
get_camera: CameraInfoModel,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test the Trafikverket Camera coordinator."""
|
"""Test the Trafikverket Camera coordinator."""
|
||||||
aioclient_mock.get(
|
aioclient_mock.get(
|
||||||
@ -86,7 +86,7 @@ async def test_coordinator(
|
|||||||
async def test_coordinator_failed_update(
|
async def test_coordinator_failed_update(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
aioclient_mock: AiohttpClientMocker,
|
aioclient_mock: AiohttpClientMocker,
|
||||||
get_camera: CameraData,
|
get_camera: CameraInfoModel,
|
||||||
sideeffect: str,
|
sideeffect: str,
|
||||||
p_error: Exception,
|
p_error: Exception,
|
||||||
entry_state: str,
|
entry_state: str,
|
||||||
@ -123,7 +123,7 @@ async def test_coordinator_failed_update(
|
|||||||
async def test_coordinator_failed_get_image(
|
async def test_coordinator_failed_get_image(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
aioclient_mock: AiohttpClientMocker,
|
aioclient_mock: AiohttpClientMocker,
|
||||||
get_camera: CameraData,
|
get_camera: CameraInfoModel,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test the Trafikverket Camera coordinator."""
|
"""Test the Trafikverket Camera coordinator."""
|
||||||
aioclient_mock.get(
|
aioclient_mock.get(
|
||||||
|
@ -7,7 +7,7 @@ from unittest.mock import patch
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from pytrafikverket.exceptions import UnknownError
|
from pytrafikverket.exceptions import UnknownError
|
||||||
from pytrafikverket.trafikverket_camera import CameraInfo
|
from pytrafikverket.models import CameraInfoModel
|
||||||
|
|
||||||
from homeassistant.components.trafikverket_camera import async_migrate_entry
|
from homeassistant.components.trafikverket_camera import async_migrate_entry
|
||||||
from homeassistant.components.trafikverket_camera.const import DOMAIN
|
from homeassistant.components.trafikverket_camera.const import DOMAIN
|
||||||
@ -23,7 +23,7 @@ from tests.test_util.aiohttp import AiohttpClientMocker
|
|||||||
|
|
||||||
async def test_setup_entry(
|
async def test_setup_entry(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
get_camera: CameraInfo,
|
get_camera: CameraInfoModel,
|
||||||
aioclient_mock: AiohttpClientMocker,
|
aioclient_mock: AiohttpClientMocker,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test setup entry."""
|
"""Test setup entry."""
|
||||||
@ -55,7 +55,7 @@ async def test_setup_entry(
|
|||||||
|
|
||||||
async def test_unload_entry(
|
async def test_unload_entry(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
get_camera: CameraInfo,
|
get_camera: CameraInfoModel,
|
||||||
aioclient_mock: AiohttpClientMocker,
|
aioclient_mock: AiohttpClientMocker,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test unload an entry."""
|
"""Test unload an entry."""
|
||||||
@ -89,7 +89,7 @@ async def test_unload_entry(
|
|||||||
|
|
||||||
async def test_migrate_entry(
|
async def test_migrate_entry(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
get_camera: CameraInfo,
|
get_camera: CameraInfoModel,
|
||||||
aioclient_mock: AiohttpClientMocker,
|
aioclient_mock: AiohttpClientMocker,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test migrate entry to version 2."""
|
"""Test migrate entry to version 2."""
|
||||||
@ -136,7 +136,7 @@ async def test_migrate_entry(
|
|||||||
)
|
)
|
||||||
async def test_migrate_entry_fails_with_error(
|
async def test_migrate_entry_fails_with_error(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
get_camera: CameraInfo,
|
get_camera: CameraInfoModel,
|
||||||
aioclient_mock: AiohttpClientMocker,
|
aioclient_mock: AiohttpClientMocker,
|
||||||
version: int,
|
version: int,
|
||||||
unique_id: str,
|
unique_id: str,
|
||||||
@ -205,7 +205,7 @@ async def test_migrate_entry_fails_no_id(
|
|||||||
)
|
)
|
||||||
entry.add_to_hass(hass)
|
entry.add_to_hass(hass)
|
||||||
|
|
||||||
_camera = CameraInfo(
|
_camera = CameraInfoModel(
|
||||||
camera_name="Test_camera",
|
camera_name="Test_camera",
|
||||||
camera_id=None,
|
camera_id=None,
|
||||||
active=True,
|
active=True,
|
||||||
@ -236,7 +236,7 @@ async def test_migrate_entry_fails_no_id(
|
|||||||
|
|
||||||
async def test_no_migration_needed(
|
async def test_no_migration_needed(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
get_camera: CameraInfo,
|
get_camera: CameraInfoModel,
|
||||||
aioclient_mock: AiohttpClientMocker,
|
aioclient_mock: AiohttpClientMocker,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test migrate entry fails, camera returns no id."""
|
"""Test migrate entry fails, camera returns no id."""
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from pytrafikverket.trafikverket_camera import CameraInfo
|
from pytrafikverket.models import CameraInfoModel
|
||||||
|
|
||||||
from homeassistant.components.recorder import Recorder
|
from homeassistant.components.recorder import Recorder
|
||||||
from homeassistant.components.recorder.history import get_significant_states
|
from homeassistant.components.recorder.history import get_significant_states
|
||||||
@ -22,7 +22,7 @@ async def test_exclude_attributes(
|
|||||||
load_int: ConfigEntry,
|
load_int: ConfigEntry,
|
||||||
monkeypatch: pytest.MonkeyPatch,
|
monkeypatch: pytest.MonkeyPatch,
|
||||||
aioclient_mock: AiohttpClientMocker,
|
aioclient_mock: AiohttpClientMocker,
|
||||||
get_camera: CameraInfo,
|
get_camera: CameraInfoModel,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test camera has description and location excluded from recording."""
|
"""Test camera has description and location excluded from recording."""
|
||||||
state1 = hass.states.get("camera.test_camera")
|
state1 = hass.states.get("camera.test_camera")
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from pytrafikverket.trafikverket_camera import CameraInfo
|
from pytrafikverket.models import CameraInfoModel
|
||||||
|
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
@ -13,7 +13,7 @@ from homeassistant.core import HomeAssistant
|
|||||||
async def test_sensor(
|
async def test_sensor(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
load_int: ConfigEntry,
|
load_int: ConfigEntry,
|
||||||
get_camera: CameraInfo,
|
get_camera: CameraInfoModel,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test the Trafikverket Camera sensor."""
|
"""Test the Trafikverket Camera sensor."""
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ from datetime import datetime, timedelta
|
|||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from pytrafikverket.trafikverket_ferry import FerryStop
|
from pytrafikverket.models import FerryStopModel
|
||||||
|
|
||||||
from homeassistant.components.trafikverket_ferry.const import DOMAIN
|
from homeassistant.components.trafikverket_ferry.const import DOMAIN
|
||||||
from homeassistant.config_entries import SOURCE_USER
|
from homeassistant.config_entries import SOURCE_USER
|
||||||
@ -20,7 +20,7 @@ from tests.common import MockConfigEntry
|
|||||||
|
|
||||||
@pytest.fixture(name="load_int")
|
@pytest.fixture(name="load_int")
|
||||||
async def load_integration_from_entry(
|
async def load_integration_from_entry(
|
||||||
hass: HomeAssistant, get_ferries: list[FerryStop]
|
hass: HomeAssistant, get_ferries: list[FerryStopModel]
|
||||||
) -> MockConfigEntry:
|
) -> MockConfigEntry:
|
||||||
"""Set up the Trafikverket Ferry integration in Home Assistant."""
|
"""Set up the Trafikverket Ferry integration in Home Assistant."""
|
||||||
config_entry = MockConfigEntry(
|
config_entry = MockConfigEntry(
|
||||||
@ -44,40 +44,51 @@ async def load_integration_from_entry(
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture(name="get_ferries")
|
@pytest.fixture(name="get_ferries")
|
||||||
def fixture_get_ferries() -> list[FerryStop]:
|
def fixture_get_ferries() -> list[FerryStopModel]:
|
||||||
"""Construct FerryStop Mock."""
|
"""Construct FerryStop Mock."""
|
||||||
|
|
||||||
depart1 = FerryStop(
|
depart1 = FerryStopModel(
|
||||||
"13",
|
ferry_stop_id="13",
|
||||||
False,
|
ferry_stop_name="Harbor1lane",
|
||||||
datetime(dt_util.now().year + 1, 5, 1, 12, 0, tzinfo=dt_util.UTC),
|
short_name="Harle",
|
||||||
[""],
|
deleted=False,
|
||||||
"0",
|
departure_time=datetime(
|
||||||
datetime(dt_util.now().year, 5, 1, 12, 0, tzinfo=dt_util.UTC),
|
dt_util.now().year + 1, 5, 1, 12, 0, tzinfo=dt_util.UTC
|
||||||
"Harbor 1",
|
),
|
||||||
"Harbor 2",
|
other_information=[""],
|
||||||
|
deviation_id="0",
|
||||||
|
modified_time=datetime(dt_util.now().year, 5, 1, 12, 0, tzinfo=dt_util.UTC),
|
||||||
|
from_harbor_name="Harbor 1",
|
||||||
|
to_harbor_name="Harbor 2",
|
||||||
|
type_name="Turnaround",
|
||||||
)
|
)
|
||||||
depart2 = FerryStop(
|
depart2 = FerryStopModel(
|
||||||
"14",
|
ferry_stop_id="14",
|
||||||
False,
|
ferry_stop_name="Harbor1lane",
|
||||||
datetime(dt_util.now().year + 1, 5, 1, 12, 0, tzinfo=dt_util.UTC)
|
short_name="Harle",
|
||||||
|
deleted=False,
|
||||||
|
departure_time=datetime(dt_util.now().year + 1, 5, 1, 12, 0, tzinfo=dt_util.UTC)
|
||||||
+ timedelta(minutes=15),
|
+ timedelta(minutes=15),
|
||||||
[""],
|
other_information=[""],
|
||||||
"0",
|
deviation_id="0",
|
||||||
datetime(dt_util.now().year, 5, 1, 12, 0, tzinfo=dt_util.UTC),
|
modified_time=datetime(dt_util.now().year, 5, 1, 12, 0, tzinfo=dt_util.UTC),
|
||||||
"Harbor 1",
|
from_harbor_name="Harbor 1",
|
||||||
"Harbor 2",
|
to_harbor_name="Harbor 2",
|
||||||
|
type_name="Turnaround",
|
||||||
)
|
)
|
||||||
depart3 = FerryStop(
|
depart3 = FerryStopModel(
|
||||||
"15",
|
ferry_stop_id="15",
|
||||||
False,
|
ferry_stop_name="Harbor1lane",
|
||||||
datetime(dt_util.now().year + 1, 5, 1, 12, 0, tzinfo=dt_util.UTC)
|
short_name="Harle",
|
||||||
|
deleted=False,
|
||||||
|
departure_time=datetime(dt_util.now().year + 1, 5, 1, 12, 0, tzinfo=dt_util.UTC)
|
||||||
+ timedelta(minutes=30),
|
+ timedelta(minutes=30),
|
||||||
[""],
|
other_information=[""],
|
||||||
"0",
|
deviation_id="0",
|
||||||
datetime(dt_util.now().year, 5, 1, 12, 0, tzinfo=dt_util.UTC),
|
modified_time=datetime(dt_util.now().year, 5, 1, 12, 0, tzinfo=dt_util.UTC),
|
||||||
"Harbor 1",
|
from_harbor_name="Harbor 1",
|
||||||
"Harbor 2",
|
to_harbor_name="Harbor 2",
|
||||||
|
type_name="Turnaround",
|
||||||
)
|
)
|
||||||
|
|
||||||
return [depart1, depart2, depart3]
|
return [depart1, depart2, depart3]
|
||||||
|
@ -8,7 +8,7 @@ from unittest.mock import patch
|
|||||||
from freezegun.api import FrozenDateTimeFactory
|
from freezegun.api import FrozenDateTimeFactory
|
||||||
import pytest
|
import pytest
|
||||||
from pytrafikverket.exceptions import InvalidAuthentication, NoFerryFound
|
from pytrafikverket.exceptions import InvalidAuthentication, NoFerryFound
|
||||||
from pytrafikverket.trafikverket_ferry import FerryStop
|
from pytrafikverket.models import FerryStopModel
|
||||||
|
|
||||||
from homeassistant.components.trafikverket_ferry.const import DOMAIN
|
from homeassistant.components.trafikverket_ferry.const import DOMAIN
|
||||||
from homeassistant.components.trafikverket_ferry.coordinator import next_departuredate
|
from homeassistant.components.trafikverket_ferry.coordinator import next_departuredate
|
||||||
@ -27,7 +27,7 @@ async def test_coordinator(
|
|||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
freezer: FrozenDateTimeFactory,
|
freezer: FrozenDateTimeFactory,
|
||||||
monkeypatch: pytest.MonkeyPatch,
|
monkeypatch: pytest.MonkeyPatch,
|
||||||
get_ferries: list[FerryStop],
|
get_ferries: list[FerryStopModel],
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test the Trafikverket Ferry coordinator."""
|
"""Test the Trafikverket Ferry coordinator."""
|
||||||
entry = MockConfigEntry(
|
entry = MockConfigEntry(
|
||||||
|
@ -4,7 +4,7 @@ from __future__ import annotations
|
|||||||
|
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
from pytrafikverket.trafikverket_ferry import FerryStop
|
from pytrafikverket.models import FerryStopModel
|
||||||
|
|
||||||
from homeassistant.components.trafikverket_ferry.const import DOMAIN
|
from homeassistant.components.trafikverket_ferry.const import DOMAIN
|
||||||
from homeassistant.config_entries import SOURCE_USER, ConfigEntryState
|
from homeassistant.config_entries import SOURCE_USER, ConfigEntryState
|
||||||
@ -15,7 +15,9 @@ from . import ENTRY_CONFIG
|
|||||||
from tests.common import MockConfigEntry
|
from tests.common import MockConfigEntry
|
||||||
|
|
||||||
|
|
||||||
async def test_setup_entry(hass: HomeAssistant, get_ferries: list[FerryStop]) -> None:
|
async def test_setup_entry(
|
||||||
|
hass: HomeAssistant, get_ferries: list[FerryStopModel]
|
||||||
|
) -> None:
|
||||||
"""Test setup entry."""
|
"""Test setup entry."""
|
||||||
entry = MockConfigEntry(
|
entry = MockConfigEntry(
|
||||||
domain=DOMAIN,
|
domain=DOMAIN,
|
||||||
@ -37,7 +39,9 @@ async def test_setup_entry(hass: HomeAssistant, get_ferries: list[FerryStop]) ->
|
|||||||
assert len(mock_tvt_ferry.mock_calls) == 1
|
assert len(mock_tvt_ferry.mock_calls) == 1
|
||||||
|
|
||||||
|
|
||||||
async def test_unload_entry(hass: HomeAssistant, get_ferries: list[FerryStop]) -> None:
|
async def test_unload_entry(
|
||||||
|
hass: HomeAssistant, get_ferries: list[FerryStopModel]
|
||||||
|
) -> None:
|
||||||
"""Test unload an entry."""
|
"""Test unload an entry."""
|
||||||
entry = MockConfigEntry(
|
entry = MockConfigEntry(
|
||||||
domain=DOMAIN,
|
domain=DOMAIN,
|
||||||
|
@ -6,7 +6,7 @@ from datetime import timedelta
|
|||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from pytrafikverket.trafikverket_ferry import FerryStop
|
from pytrafikverket.models import FerryStopModel
|
||||||
|
|
||||||
from homeassistant.config_entries import ConfigEntry
|
from homeassistant.config_entries import ConfigEntry
|
||||||
from homeassistant.core import HomeAssistant
|
from homeassistant.core import HomeAssistant
|
||||||
@ -19,7 +19,7 @@ async def test_sensor(
|
|||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
load_int: ConfigEntry,
|
load_int: ConfigEntry,
|
||||||
monkeypatch: pytest.MonkeyPatch,
|
monkeypatch: pytest.MonkeyPatch,
|
||||||
get_ferries: list[FerryStop],
|
get_ferries: list[FerryStopModel],
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test the Trafikverket Ferry sensor."""
|
"""Test the Trafikverket Ferry sensor."""
|
||||||
state1 = hass.states.get("sensor.harbor1_departure_from")
|
state1 = hass.states.get("sensor.harbor1_departure_from")
|
||||||
|
@ -6,7 +6,7 @@ from datetime import datetime, timedelta
|
|||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from pytrafikverket.trafikverket_train import TrainStop
|
from pytrafikverket.models import TrainStopModel
|
||||||
|
|
||||||
from homeassistant.components.trafikverket_train.const import DOMAIN
|
from homeassistant.components.trafikverket_train.const import DOMAIN
|
||||||
from homeassistant.config_entries import SOURCE_USER
|
from homeassistant.config_entries import SOURCE_USER
|
||||||
@ -21,8 +21,8 @@ from tests.common import MockConfigEntry
|
|||||||
@pytest.fixture(name="load_int")
|
@pytest.fixture(name="load_int")
|
||||||
async def load_integration_from_entry(
|
async def load_integration_from_entry(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
get_trains: list[TrainStop],
|
get_trains: list[TrainStopModel],
|
||||||
get_train_stop: TrainStop,
|
get_train_stop: TrainStopModel,
|
||||||
) -> MockConfigEntry:
|
) -> MockConfigEntry:
|
||||||
"""Set up the Trafikverket Train integration in Home Assistant."""
|
"""Set up the Trafikverket Train integration in Home Assistant."""
|
||||||
|
|
||||||
@ -69,11 +69,11 @@ async def load_integration_from_entry(
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture(name="get_trains")
|
@pytest.fixture(name="get_trains")
|
||||||
def fixture_get_trains() -> list[TrainStop]:
|
def fixture_get_trains() -> list[TrainStopModel]:
|
||||||
"""Construct TrainStop Mock."""
|
"""Construct TrainStop Mock."""
|
||||||
|
|
||||||
depart1 = TrainStop(
|
depart1 = TrainStopModel(
|
||||||
id=13,
|
train_stop_id=13,
|
||||||
canceled=False,
|
canceled=False,
|
||||||
advertised_time_at_location=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC),
|
advertised_time_at_location=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC),
|
||||||
estimated_time_at_location=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC),
|
estimated_time_at_location=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC),
|
||||||
@ -83,8 +83,8 @@ def fixture_get_trains() -> list[TrainStop]:
|
|||||||
modified_time=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC),
|
modified_time=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC),
|
||||||
product_description=["Regionaltåg"],
|
product_description=["Regionaltåg"],
|
||||||
)
|
)
|
||||||
depart2 = TrainStop(
|
depart2 = TrainStopModel(
|
||||||
id=14,
|
train_stop_id=14,
|
||||||
canceled=False,
|
canceled=False,
|
||||||
advertised_time_at_location=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC)
|
advertised_time_at_location=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC)
|
||||||
+ timedelta(minutes=15),
|
+ timedelta(minutes=15),
|
||||||
@ -95,8 +95,8 @@ def fixture_get_trains() -> list[TrainStop]:
|
|||||||
modified_time=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC),
|
modified_time=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC),
|
||||||
product_description=["Regionaltåg"],
|
product_description=["Regionaltåg"],
|
||||||
)
|
)
|
||||||
depart3 = TrainStop(
|
depart3 = TrainStopModel(
|
||||||
id=15,
|
train_stop_id=15,
|
||||||
canceled=False,
|
canceled=False,
|
||||||
advertised_time_at_location=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC)
|
advertised_time_at_location=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC)
|
||||||
+ timedelta(minutes=30),
|
+ timedelta(minutes=30),
|
||||||
@ -112,11 +112,11 @@ def fixture_get_trains() -> list[TrainStop]:
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture(name="get_trains_next")
|
@pytest.fixture(name="get_trains_next")
|
||||||
def fixture_get_trains_next() -> list[TrainStop]:
|
def fixture_get_trains_next() -> list[TrainStopModel]:
|
||||||
"""Construct TrainStop Mock."""
|
"""Construct TrainStop Mock."""
|
||||||
|
|
||||||
depart1 = TrainStop(
|
depart1 = TrainStopModel(
|
||||||
id=13,
|
train_stop_id=13,
|
||||||
canceled=False,
|
canceled=False,
|
||||||
advertised_time_at_location=datetime(2023, 5, 1, 17, 0, tzinfo=dt_util.UTC),
|
advertised_time_at_location=datetime(2023, 5, 1, 17, 0, tzinfo=dt_util.UTC),
|
||||||
estimated_time_at_location=datetime(2023, 5, 1, 17, 0, tzinfo=dt_util.UTC),
|
estimated_time_at_location=datetime(2023, 5, 1, 17, 0, tzinfo=dt_util.UTC),
|
||||||
@ -126,8 +126,8 @@ def fixture_get_trains_next() -> list[TrainStop]:
|
|||||||
modified_time=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC),
|
modified_time=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC),
|
||||||
product_description=["Regionaltåg"],
|
product_description=["Regionaltåg"],
|
||||||
)
|
)
|
||||||
depart2 = TrainStop(
|
depart2 = TrainStopModel(
|
||||||
id=14,
|
train_stop_id=14,
|
||||||
canceled=False,
|
canceled=False,
|
||||||
advertised_time_at_location=datetime(2023, 5, 1, 17, 0, tzinfo=dt_util.UTC)
|
advertised_time_at_location=datetime(2023, 5, 1, 17, 0, tzinfo=dt_util.UTC)
|
||||||
+ timedelta(minutes=15),
|
+ timedelta(minutes=15),
|
||||||
@ -138,8 +138,8 @@ def fixture_get_trains_next() -> list[TrainStop]:
|
|||||||
modified_time=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC),
|
modified_time=datetime(2023, 5, 1, 12, 0, tzinfo=dt_util.UTC),
|
||||||
product_description=["Regionaltåg"],
|
product_description=["Regionaltåg"],
|
||||||
)
|
)
|
||||||
depart3 = TrainStop(
|
depart3 = TrainStopModel(
|
||||||
id=15,
|
train_stop_id=15,
|
||||||
canceled=False,
|
canceled=False,
|
||||||
advertised_time_at_location=datetime(2023, 5, 1, 17, 0, tzinfo=dt_util.UTC)
|
advertised_time_at_location=datetime(2023, 5, 1, 17, 0, tzinfo=dt_util.UTC)
|
||||||
+ timedelta(minutes=30),
|
+ timedelta(minutes=30),
|
||||||
@ -155,11 +155,11 @@ def fixture_get_trains_next() -> list[TrainStop]:
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture(name="get_train_stop")
|
@pytest.fixture(name="get_train_stop")
|
||||||
def fixture_get_train_stop() -> TrainStop:
|
def fixture_get_train_stop() -> TrainStopModel:
|
||||||
"""Construct TrainStop Mock."""
|
"""Construct TrainStop Mock."""
|
||||||
|
|
||||||
return TrainStop(
|
return TrainStopModel(
|
||||||
id=13,
|
train_stop_id=13,
|
||||||
canceled=False,
|
canceled=False,
|
||||||
advertised_time_at_location=datetime(2023, 5, 1, 11, 0, tzinfo=dt_util.UTC),
|
advertised_time_at_location=datetime(2023, 5, 1, 11, 0, tzinfo=dt_util.UTC),
|
||||||
estimated_time_at_location=None,
|
estimated_time_at_location=None,
|
||||||
|
@ -12,7 +12,7 @@ from pytrafikverket.exceptions import (
|
|||||||
NoTrainStationFound,
|
NoTrainStationFound,
|
||||||
UnknownError,
|
UnknownError,
|
||||||
)
|
)
|
||||||
from pytrafikverket.trafikverket_train import TrainStop
|
from pytrafikverket.models import TrainStopModel
|
||||||
|
|
||||||
from homeassistant import config_entries
|
from homeassistant import config_entries
|
||||||
from homeassistant.components.trafikverket_train.const import (
|
from homeassistant.components.trafikverket_train.const import (
|
||||||
@ -479,8 +479,8 @@ async def test_reauth_flow_error_departures(
|
|||||||
|
|
||||||
async def test_options_flow(
|
async def test_options_flow(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
get_trains: list[TrainStop],
|
get_trains: list[TrainStopModel],
|
||||||
get_train_stop: TrainStop,
|
get_train_stop: TrainStopModel,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test a reauthentication flow."""
|
"""Test a reauthentication flow."""
|
||||||
entry = MockConfigEntry(
|
entry = MockConfigEntry(
|
||||||
|
@ -5,7 +5,7 @@ from __future__ import annotations
|
|||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
|
|
||||||
from pytrafikverket.exceptions import InvalidAuthentication, NoTrainStationFound
|
from pytrafikverket.exceptions import InvalidAuthentication, NoTrainStationFound
|
||||||
from pytrafikverket.trafikverket_train import TrainStop
|
from pytrafikverket.models import TrainStopModel
|
||||||
from syrupy.assertion import SnapshotAssertion
|
from syrupy.assertion import SnapshotAssertion
|
||||||
|
|
||||||
from homeassistant.components.trafikverket_train.const import DOMAIN
|
from homeassistant.components.trafikverket_train.const import DOMAIN
|
||||||
@ -18,7 +18,9 @@ from . import ENTRY_CONFIG, OPTIONS_CONFIG
|
|||||||
from tests.common import MockConfigEntry
|
from tests.common import MockConfigEntry
|
||||||
|
|
||||||
|
|
||||||
async def test_unload_entry(hass: HomeAssistant, get_trains: list[TrainStop]) -> None:
|
async def test_unload_entry(
|
||||||
|
hass: HomeAssistant, get_trains: list[TrainStopModel]
|
||||||
|
) -> None:
|
||||||
"""Test unload an entry."""
|
"""Test unload an entry."""
|
||||||
entry = MockConfigEntry(
|
entry = MockConfigEntry(
|
||||||
domain=DOMAIN,
|
domain=DOMAIN,
|
||||||
@ -52,7 +54,7 @@ async def test_unload_entry(hass: HomeAssistant, get_trains: list[TrainStop]) ->
|
|||||||
|
|
||||||
async def test_auth_failed(
|
async def test_auth_failed(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
get_trains: list[TrainStop],
|
get_trains: list[TrainStopModel],
|
||||||
snapshot: SnapshotAssertion,
|
snapshot: SnapshotAssertion,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test authentication failed."""
|
"""Test authentication failed."""
|
||||||
@ -82,7 +84,7 @@ async def test_auth_failed(
|
|||||||
|
|
||||||
async def test_no_stations(
|
async def test_no_stations(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
get_trains: list[TrainStop],
|
get_trains: list[TrainStopModel],
|
||||||
snapshot: SnapshotAssertion,
|
snapshot: SnapshotAssertion,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test stations are missing."""
|
"""Test stations are missing."""
|
||||||
@ -108,7 +110,7 @@ async def test_no_stations(
|
|||||||
|
|
||||||
async def test_migrate_entity_unique_id(
|
async def test_migrate_entity_unique_id(
|
||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
get_trains: list[TrainStop],
|
get_trains: list[TrainStopModel],
|
||||||
snapshot: SnapshotAssertion,
|
snapshot: SnapshotAssertion,
|
||||||
entity_registry: EntityRegistry,
|
entity_registry: EntityRegistry,
|
||||||
) -> None:
|
) -> None:
|
||||||
|
@ -8,7 +8,7 @@ from unittest.mock import patch
|
|||||||
from freezegun.api import FrozenDateTimeFactory
|
from freezegun.api import FrozenDateTimeFactory
|
||||||
import pytest
|
import pytest
|
||||||
from pytrafikverket.exceptions import InvalidAuthentication, NoTrainAnnouncementFound
|
from pytrafikverket.exceptions import InvalidAuthentication, NoTrainAnnouncementFound
|
||||||
from pytrafikverket.trafikverket_train import TrainStop
|
from pytrafikverket.models import TrainStopModel
|
||||||
from syrupy.assertion import SnapshotAssertion
|
from syrupy.assertion import SnapshotAssertion
|
||||||
|
|
||||||
from homeassistant.config_entries import SOURCE_REAUTH, ConfigEntry
|
from homeassistant.config_entries import SOURCE_REAUTH, ConfigEntry
|
||||||
@ -23,8 +23,8 @@ async def test_sensor_next(
|
|||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
freezer: FrozenDateTimeFactory,
|
freezer: FrozenDateTimeFactory,
|
||||||
load_int: ConfigEntry,
|
load_int: ConfigEntry,
|
||||||
get_trains_next: list[TrainStop],
|
get_trains_next: list[TrainStopModel],
|
||||||
get_train_stop: TrainStop,
|
get_train_stop: TrainStopModel,
|
||||||
snapshot: SnapshotAssertion,
|
snapshot: SnapshotAssertion,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test the Trafikverket Train sensor."""
|
"""Test the Trafikverket Train sensor."""
|
||||||
@ -70,7 +70,7 @@ async def test_sensor_single_stop(
|
|||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
freezer: FrozenDateTimeFactory,
|
freezer: FrozenDateTimeFactory,
|
||||||
load_int: ConfigEntry,
|
load_int: ConfigEntry,
|
||||||
get_trains_next: list[TrainStop],
|
get_trains_next: list[TrainStopModel],
|
||||||
snapshot: SnapshotAssertion,
|
snapshot: SnapshotAssertion,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test the Trafikverket Train sensor."""
|
"""Test the Trafikverket Train sensor."""
|
||||||
@ -86,7 +86,7 @@ async def test_sensor_update_auth_failure(
|
|||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
freezer: FrozenDateTimeFactory,
|
freezer: FrozenDateTimeFactory,
|
||||||
load_int: ConfigEntry,
|
load_int: ConfigEntry,
|
||||||
get_trains_next: list[TrainStop],
|
get_trains_next: list[TrainStopModel],
|
||||||
snapshot: SnapshotAssertion,
|
snapshot: SnapshotAssertion,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test the Trafikverket Train sensor with authentication update failure."""
|
"""Test the Trafikverket Train sensor with authentication update failure."""
|
||||||
@ -119,7 +119,7 @@ async def test_sensor_update_failure(
|
|||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
freezer: FrozenDateTimeFactory,
|
freezer: FrozenDateTimeFactory,
|
||||||
load_int: ConfigEntry,
|
load_int: ConfigEntry,
|
||||||
get_trains_next: list[TrainStop],
|
get_trains_next: list[TrainStopModel],
|
||||||
snapshot: SnapshotAssertion,
|
snapshot: SnapshotAssertion,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test the Trafikverket Train sensor with update failure."""
|
"""Test the Trafikverket Train sensor with update failure."""
|
||||||
@ -149,7 +149,7 @@ async def test_sensor_update_failure_no_state(
|
|||||||
hass: HomeAssistant,
|
hass: HomeAssistant,
|
||||||
freezer: FrozenDateTimeFactory,
|
freezer: FrozenDateTimeFactory,
|
||||||
load_int: ConfigEntry,
|
load_int: ConfigEntry,
|
||||||
get_trains_next: list[TrainStop],
|
get_trains_next: list[TrainStopModel],
|
||||||
snapshot: SnapshotAssertion,
|
snapshot: SnapshotAssertion,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test the Trafikverket Train sensor with update failure from empty state."""
|
"""Test the Trafikverket Train sensor with update failure from empty state."""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user