From 711e0ee5030249420fd7a1ac9b5cf1eaced9406f Mon Sep 17 00:00:00 2001 From: G Johansson Date: Tue, 24 Sep 2024 12:12:01 +0200 Subject: [PATCH] Change camera state to an enum (#126558) * Change camera state to an enum * copy/paste mistake * Add test deprecated constants --- homeassistant/components/camera/__init__.py | 15 ++++++---- homeassistant/components/camera/const.py | 8 +++++ homeassistant/components/push/camera.py | 6 ++-- tests/components/abode/test_camera.py | 6 ++-- tests/components/august/test_camera.py | 4 +-- tests/components/camera/test_init.py | 21 +++++++++++-- .../camera/test_significant_change.py | 8 ++--- tests/components/demo/test_camera.py | 15 +++++----- tests/components/doorbird/test_camera.py | 8 ++--- tests/components/esphome/test_camera.py | 26 ++++++++-------- tests/components/nest/test_camera.py | 30 +++++++++---------- tests/components/netatmo/test_camera.py | 6 ++-- tests/components/reolink/test_camera.py | 12 +++++--- tests/components/unifiprotect/test_camera.py | 6 ++-- tests/components/uvc/test_camera.py | 14 ++++----- tests/components/yale/test_camera.py | 4 +-- 16 files changed, 110 insertions(+), 79 deletions(-) diff --git a/homeassistant/components/camera/__init__.py b/homeassistant/components/camera/__init__.py index ae081b96cd8..88162df6f1a 100644 --- a/homeassistant/components/camera/__init__.py +++ b/homeassistant/components/camera/__init__.py @@ -77,6 +77,7 @@ from .const import ( # noqa: F401 PREF_ORIENTATION, PREF_PRELOAD_STREAM, SERVICE_RECORD, + CameraState, StreamType, ) from .img_util import scale_jpeg_camera_image @@ -98,9 +99,11 @@ ATTR_FILENAME: Final = "filename" ATTR_MEDIA_PLAYER: Final = "media_player" ATTR_FORMAT: Final = "format" -STATE_RECORDING: Final = "recording" -STATE_STREAMING: Final = "streaming" -STATE_IDLE: Final = "idle" +# These constants are deprecated as of Home Assistant 2024.10 +# Please use the StreamType enum instead. +_DEPRECATED_STATE_RECORDING = DeprecatedConstantEnum(CameraState.RECORDING, "2025.10") +_DEPRECATED_STATE_STREAMING = DeprecatedConstantEnum(CameraState.STREAMING, "2025.10") +_DEPRECATED_STATE_IDLE = DeprecatedConstantEnum(CameraState.IDLE, "2025.10") class CameraEntityFeature(IntFlag): @@ -674,10 +677,10 @@ class Camera(Entity, cached_properties=CACHED_PROPERTIES_WITH_ATTR_): def state(self) -> str: """Return the camera state.""" if self.is_recording: - return STATE_RECORDING + return CameraState.RECORDING if self.is_streaming: - return STATE_STREAMING - return STATE_IDLE + return CameraState.STREAMING + return CameraState.IDLE @cached_property def is_on(self) -> bool: diff --git a/homeassistant/components/camera/const.py b/homeassistant/components/camera/const.py index 453506e7a90..c4327e922e6 100644 --- a/homeassistant/components/camera/const.py +++ b/homeassistant/components/camera/const.py @@ -40,6 +40,14 @@ CAMERA_STREAM_SOURCE_TIMEOUT: Final = 10 CAMERA_IMAGE_TIMEOUT: Final = 10 +class CameraState(StrEnum): + """Camera entity states.""" + + RECORDING = "recording" + STREAMING = "streaming" + IDLE = "idle" + + class StreamType(StrEnum): """Camera stream type. diff --git a/homeassistant/components/push/camera.py b/homeassistant/components/push/camera.py index 6e75cbec420..37ac6144d0d 100644 --- a/homeassistant/components/push/camera.py +++ b/homeassistant/components/push/camera.py @@ -15,8 +15,8 @@ from homeassistant.components import webhook from homeassistant.components.camera import ( DOMAIN as CAMERA_DOMAIN, PLATFORM_SCHEMA as CAMERA_PLATFORM_SCHEMA, - STATE_IDLE, Camera, + CameraState, ) from homeassistant.const import CONF_NAME, CONF_TIMEOUT, CONF_WEBHOOK_ID from homeassistant.core import HomeAssistant, callback @@ -135,7 +135,7 @@ class PushCamera(Camera): async def update_image(self, image, filename): """Update the camera image.""" - if self.state == STATE_IDLE: + if self.state == CameraState.IDLE: self._attr_is_recording = True self._last_trip = dt_util.utcnow() self.queue.clear() @@ -165,7 +165,7 @@ class PushCamera(Camera): ) -> bytes | None: """Return a still image response.""" if self.queue: - if self.state == STATE_IDLE: + if self.state == CameraState.IDLE: self.queue.rotate(1) self._current_image = self.queue[0] diff --git a/tests/components/abode/test_camera.py b/tests/components/abode/test_camera.py index 5cf3263876b..1fcf250935e 100644 --- a/tests/components/abode/test_camera.py +++ b/tests/components/abode/test_camera.py @@ -3,8 +3,8 @@ from unittest.mock import patch from homeassistant.components.abode.const import DOMAIN as ABODE_DOMAIN -from homeassistant.components.camera import DOMAIN as CAMERA_DOMAIN -from homeassistant.const import ATTR_ENTITY_ID, STATE_IDLE +from homeassistant.components.camera import DOMAIN as CAMERA_DOMAIN, CameraState +from homeassistant.const import ATTR_ENTITY_ID from homeassistant.core import HomeAssistant from homeassistant.helpers import entity_registry as er @@ -26,7 +26,7 @@ async def test_attributes(hass: HomeAssistant) -> None: await setup_platform(hass, CAMERA_DOMAIN) state = hass.states.get("camera.test_cam") - assert state.state == STATE_IDLE + assert state.state == CameraState.IDLE async def test_capture_image(hass: HomeAssistant) -> None: diff --git a/tests/components/august/test_camera.py b/tests/components/august/test_camera.py index 5ab7d49c3b8..287620cc872 100644 --- a/tests/components/august/test_camera.py +++ b/tests/components/august/test_camera.py @@ -6,7 +6,7 @@ from unittest.mock import patch from yalexs.const import Brand from yalexs.doorbell import ContentTokenExpired -from homeassistant.const import STATE_IDLE +from homeassistant.components.camera import CameraState from homeassistant.core import HomeAssistant from .mocks import _create_august_with_devices, _mock_doorbell_from_fixture @@ -26,7 +26,7 @@ async def test_create_doorbell( await _create_august_with_devices(hass, [doorbell_one], brand=Brand.AUGUST) camera_state = hass.states.get("camera.k98gidt45gul_name_camera") - assert camera_state.state == STATE_IDLE + assert camera_state.state == CameraState.IDLE url = camera_state.attributes["entity_picture"] diff --git a/tests/components/camera/test_init.py b/tests/components/camera/test_init.py index 098c321e63b..fd3ee8df22e 100644 --- a/tests/components/camera/test_init.py +++ b/tests/components/camera/test_init.py @@ -766,7 +766,7 @@ async def test_state_streaming(hass: HomeAssistant) -> None: """Camera state.""" demo_camera = hass.states.get("camera.demo_camera") assert demo_camera is not None - assert demo_camera.state == camera.STATE_STREAMING + assert demo_camera.state == camera.CameraState.STREAMING @pytest.mark.usefixtures("mock_camera", "mock_stream") @@ -819,7 +819,7 @@ async def test_stream_unavailable( demo_camera = hass.states.get("camera.demo_camera") assert demo_camera is not None - assert demo_camera.state == camera.STATE_STREAMING + assert demo_camera.state == camera.CameraState.STREAMING @pytest.mark.usefixtures("mock_camera", "mock_stream_source") @@ -1043,6 +1043,23 @@ def test_deprecated_stream_type_constants( ) +@pytest.mark.parametrize( + "enum", + list(camera.const.CameraState), +) +@pytest.mark.parametrize( + "module", + [camera], +) +def test_deprecated_state_constants( + caplog: pytest.LogCaptureFixture, + enum: camera.const.StreamType, + module: ModuleType, +) -> None: + """Test deprecated stream type constants.""" + import_and_test_deprecated_constant_enum(caplog, module, enum, "STATE_", "2025.10") + + @pytest.mark.parametrize( "entity_feature", list(camera.CameraEntityFeature), diff --git a/tests/components/camera/test_significant_change.py b/tests/components/camera/test_significant_change.py index a2a7ef20e71..b89b1c26747 100644 --- a/tests/components/camera/test_significant_change.py +++ b/tests/components/camera/test_significant_change.py @@ -1,6 +1,6 @@ """Test the Camera significant change platform.""" -from homeassistant.components.camera import STATE_IDLE, STATE_RECORDING +from homeassistant.components.camera import CameraState from homeassistant.components.camera.significant_change import ( async_check_significant_change, ) @@ -10,11 +10,11 @@ async def test_significant_change() -> None: """Detect Camera significant changes.""" attrs = {} assert not async_check_significant_change( - None, STATE_IDLE, attrs, STATE_IDLE, attrs + None, CameraState.IDLE, attrs, CameraState.IDLE, attrs ) assert not async_check_significant_change( - None, STATE_IDLE, attrs, STATE_IDLE, {"dummy": "dummy"} + None, CameraState.IDLE, attrs, CameraState.IDLE, {"dummy": "dummy"} ) assert async_check_significant_change( - None, STATE_IDLE, attrs, STATE_RECORDING, attrs + None, CameraState.IDLE, attrs, CameraState.RECORDING, attrs ) diff --git a/tests/components/demo/test_camera.py b/tests/components/demo/test_camera.py index 89dd8e0cdf7..c8d8e1ef2e4 100644 --- a/tests/components/demo/test_camera.py +++ b/tests/components/demo/test_camera.py @@ -11,8 +11,7 @@ from homeassistant.components.camera import ( SERVICE_ENABLE_MOTION, SERVICE_TURN_OFF, SERVICE_TURN_ON, - STATE_IDLE, - STATE_STREAMING, + CameraState, async_get_image, ) from homeassistant.components.demo import DOMAIN @@ -46,7 +45,7 @@ async def demo_camera(hass: HomeAssistant, camera_only: None) -> None: async def test_init_state_is_streaming(hass: HomeAssistant) -> None: """Demo camera initialize as streaming.""" state = hass.states.get(ENTITY_CAMERA) - assert state.state == STATE_STREAMING + assert state.state == CameraState.STREAMING with patch( "homeassistant.components.demo.camera.Path.read_bytes", return_value=b"ON" @@ -59,21 +58,21 @@ async def test_init_state_is_streaming(hass: HomeAssistant) -> None: async def test_turn_on_state_back_to_streaming(hass: HomeAssistant) -> None: """After turn on state back to streaming.""" state = hass.states.get(ENTITY_CAMERA) - assert state.state == STATE_STREAMING + assert state.state == CameraState.STREAMING await hass.services.async_call( CAMERA_DOMAIN, SERVICE_TURN_OFF, {ATTR_ENTITY_ID: ENTITY_CAMERA}, blocking=True ) state = hass.states.get(ENTITY_CAMERA) - assert state.state == STATE_IDLE + assert state.state == CameraState.IDLE await hass.services.async_call( CAMERA_DOMAIN, SERVICE_TURN_ON, {ATTR_ENTITY_ID: ENTITY_CAMERA}, blocking=True ) state = hass.states.get(ENTITY_CAMERA) - assert state.state == STATE_STREAMING + assert state.state == CameraState.STREAMING async def test_turn_off_image(hass: HomeAssistant) -> None: @@ -90,7 +89,7 @@ async def test_turn_off_image(hass: HomeAssistant) -> None: async def test_turn_off_invalid_camera(hass: HomeAssistant) -> None: """Turn off non-exist camera should quietly fail.""" state = hass.states.get(ENTITY_CAMERA) - assert state.state == STATE_STREAMING + assert state.state == CameraState.STREAMING await hass.services.async_call( CAMERA_DOMAIN, @@ -100,7 +99,7 @@ async def test_turn_off_invalid_camera(hass: HomeAssistant) -> None: ) state = hass.states.get(ENTITY_CAMERA) - assert state.state == STATE_STREAMING + assert state.state == CameraState.STREAMING async def test_motion_detection(hass: HomeAssistant) -> None: diff --git a/tests/components/doorbird/test_camera.py b/tests/components/doorbird/test_camera.py index 228a6c81daa..a310bcb88cc 100644 --- a/tests/components/doorbird/test_camera.py +++ b/tests/components/doorbird/test_camera.py @@ -4,7 +4,7 @@ from freezegun.api import FrozenDateTimeFactory import pytest from homeassistant.components.camera import ( - STATE_IDLE, + CameraState, async_get_image, async_get_stream_source, ) @@ -23,11 +23,11 @@ async def test_doorbird_cameras( """Test the doorbird cameras.""" doorbird_entry = await doorbird_mocker() live_camera_entity_id = "camera.mydoorbird_live" - assert hass.states.get(live_camera_entity_id).state == STATE_IDLE + assert hass.states.get(live_camera_entity_id).state == CameraState.IDLE last_motion_camera_entity_id = "camera.mydoorbird_last_motion" - assert hass.states.get(last_motion_camera_entity_id).state == STATE_IDLE + assert hass.states.get(last_motion_camera_entity_id).state == CameraState.IDLE last_ring_camera_entity_id = "camera.mydoorbird_last_ring" - assert hass.states.get(last_ring_camera_entity_id).state == STATE_IDLE + assert hass.states.get(last_ring_camera_entity_id).state == CameraState.IDLE assert await async_get_stream_source(hass, live_camera_entity_id) is not None api = doorbird_entry.api api.get_image.side_effect = mock_not_found_exception() diff --git a/tests/components/esphome/test_camera.py b/tests/components/esphome/test_camera.py index c6a61cd18e8..87b86b039fd 100644 --- a/tests/components/esphome/test_camera.py +++ b/tests/components/esphome/test_camera.py @@ -5,13 +5,13 @@ from collections.abc import Awaitable, Callable from aioesphomeapi import ( APIClient, CameraInfo, - CameraState, + CameraState as ESPHomeCameraState, EntityInfo, EntityState, UserService, ) -from homeassistant.components.camera import STATE_IDLE +from homeassistant.components.camera import CameraState from homeassistant.const import STATE_UNAVAILABLE from homeassistant.core import HomeAssistant @@ -55,10 +55,10 @@ async def test_camera_single_image( ) state = hass.states.get("camera.test_mycamera") assert state is not None - assert state.state == STATE_IDLE + assert state.state == CameraState.IDLE def _mock_camera_image(): - mock_device.set_state(CameraState(key=1, data=SMALLEST_VALID_JPEG_BYTES)) + mock_device.set_state(ESPHomeCameraState(key=1, data=SMALLEST_VALID_JPEG_BYTES)) mock_client.request_single_image = _mock_camera_image @@ -67,7 +67,7 @@ async def test_camera_single_image( await hass.async_block_till_done() state = hass.states.get("camera.test_mycamera") assert state is not None - assert state.state == STATE_IDLE + assert state.state == CameraState.IDLE assert resp.status == 200 assert resp.content_type == "image/jpeg" @@ -103,7 +103,7 @@ async def test_camera_single_image_unavailable_before_requested( ) state = hass.states.get("camera.test_mycamera") assert state is not None - assert state.state == STATE_IDLE + assert state.state == CameraState.IDLE await mock_device.mock_disconnect(False) client = await hass_client() @@ -144,7 +144,7 @@ async def test_camera_single_image_unavailable_during_request( ) state = hass.states.get("camera.test_mycamera") assert state is not None - assert state.state == STATE_IDLE + assert state.state == CameraState.IDLE def _mock_camera_image(): hass.async_create_task(mock_device.mock_disconnect(False)) @@ -189,7 +189,7 @@ async def test_camera_stream( ) state = hass.states.get("camera.test_mycamera") assert state is not None - assert state.state == STATE_IDLE + assert state.state == CameraState.IDLE remaining_responses = 3 def _mock_camera_image(): @@ -197,7 +197,7 @@ async def test_camera_stream( if remaining_responses == 0: return remaining_responses -= 1 - mock_device.set_state(CameraState(key=1, data=SMALLEST_VALID_JPEG_BYTES)) + mock_device.set_state(ESPHomeCameraState(key=1, data=SMALLEST_VALID_JPEG_BYTES)) mock_client.request_image_stream = _mock_camera_image mock_client.request_single_image = _mock_camera_image @@ -207,7 +207,7 @@ async def test_camera_stream( await hass.async_block_till_done() state = hass.states.get("camera.test_mycamera") assert state is not None - assert state.state == STATE_IDLE + assert state.state == CameraState.IDLE assert resp.status == 200 assert resp.content_type == "multipart/x-mixed-replace" @@ -249,7 +249,7 @@ async def test_camera_stream_unavailable( ) state = hass.states.get("camera.test_mycamera") assert state is not None - assert state.state == STATE_IDLE + assert state.state == CameraState.IDLE await mock_device.mock_disconnect(False) @@ -289,7 +289,7 @@ async def test_camera_stream_with_disconnection( ) state = hass.states.get("camera.test_mycamera") assert state is not None - assert state.state == STATE_IDLE + assert state.state == CameraState.IDLE remaining_responses = 3 def _mock_camera_image(): @@ -299,7 +299,7 @@ async def test_camera_stream_with_disconnection( if remaining_responses == 2: hass.async_create_task(mock_device.mock_disconnect(False)) remaining_responses -= 1 - mock_device.set_state(CameraState(key=1, data=SMALLEST_VALID_JPEG_BYTES)) + mock_device.set_state(ESPHomeCameraState(key=1, data=SMALLEST_VALID_JPEG_BYTES)) mock_client.request_image_stream = _mock_camera_image mock_client.request_single_image = _mock_camera_image diff --git a/tests/components/nest/test_camera.py b/tests/components/nest/test_camera.py index 6aa25134563..dda7bcfa093 100644 --- a/tests/components/nest/test_camera.py +++ b/tests/components/nest/test_camera.py @@ -15,7 +15,7 @@ from google_nest_sdm.event import EventMessage import pytest from homeassistant.components import camera -from homeassistant.components.camera import STATE_IDLE, STATE_STREAMING, StreamType +from homeassistant.components.camera import CameraState, StreamType from homeassistant.components.nest.const import DOMAIN from homeassistant.components.websocket_api import TYPE_RESULT from homeassistant.const import ATTR_FRIENDLY_NAME @@ -218,7 +218,7 @@ async def test_camera_device( assert len(hass.states.async_all()) == 1 camera = hass.states.get("camera.my_camera") assert camera is not None - assert camera.state == STATE_STREAMING + assert camera.state == CameraState.STREAMING assert camera.attributes.get(ATTR_FRIENDLY_NAME) == "My Camera" entry = entity_registry.async_get("camera.my_camera") @@ -245,7 +245,7 @@ async def test_camera_stream( assert len(hass.states.async_all()) == 1 cam = hass.states.get("camera.my_camera") assert cam is not None - assert cam.state == STATE_STREAMING + assert cam.state == CameraState.STREAMING assert cam.attributes["frontend_stream_type"] == StreamType.HLS stream_source = await camera.async_get_stream_source(hass, "camera.my_camera") @@ -267,7 +267,7 @@ async def test_camera_ws_stream( assert len(hass.states.async_all()) == 1 cam = hass.states.get("camera.my_camera") assert cam is not None - assert cam.state == STATE_STREAMING + assert cam.state == CameraState.STREAMING assert cam.attributes["frontend_stream_type"] == StreamType.HLS client = await hass_ws_client(hass) @@ -300,7 +300,7 @@ async def test_camera_ws_stream_failure( assert len(hass.states.async_all()) == 1 cam = hass.states.get("camera.my_camera") assert cam is not None - assert cam.state == STATE_STREAMING + assert cam.state == CameraState.STREAMING client = await hass_ws_client(hass) await client.send_json( @@ -341,7 +341,7 @@ async def test_camera_stream_missing_trait( assert len(hass.states.async_all()) == 1 cam = hass.states.get("camera.my_camera") assert cam is not None - assert cam.state == STATE_IDLE + assert cam.state == CameraState.IDLE stream_source = await camera.async_get_stream_source(hass, "camera.my_camera") assert stream_source is None @@ -375,7 +375,7 @@ async def test_refresh_expired_stream_token( assert len(hass.states.async_all()) == 1 cam = hass.states.get("camera.my_camera") assert cam is not None - assert cam.state == STATE_STREAMING + assert cam.state == CameraState.STREAMING # Request a stream for the camera entity to exercise nest cam + camera interaction # and shutdown on url expiration @@ -446,7 +446,7 @@ async def test_stream_response_already_expired( assert len(hass.states.async_all()) == 1 cam = hass.states.get("camera.my_camera") assert cam is not None - assert cam.state == STATE_STREAMING + assert cam.state == CameraState.STREAMING # The stream is expired, but we return it anyway stream_source = await camera.async_get_stream_source(hass, "camera.my_camera") @@ -474,7 +474,7 @@ async def test_camera_removed( assert len(hass.states.async_all()) == 1 cam = hass.states.get("camera.my_camera") assert cam is not None - assert cam.state == STATE_STREAMING + assert cam.state == CameraState.STREAMING # Start a stream, exercising cleanup on remove auth.responses = [ @@ -502,7 +502,7 @@ async def test_camera_remove_failure( assert len(hass.states.async_all()) == 1 cam = hass.states.get("camera.my_camera") assert cam is not None - assert cam.state == STATE_STREAMING + assert cam.state == CameraState.STREAMING # Start a stream, exercising cleanup on remove auth.responses = [ @@ -543,7 +543,7 @@ async def test_refresh_expired_stream_failure( assert len(hass.states.async_all()) == 1 cam = hass.states.get("camera.my_camera") assert cam is not None - assert cam.state == STATE_STREAMING + assert cam.state == CameraState.STREAMING # Request an HLS stream with patch("homeassistant.components.camera.create_stream") as create_stream: @@ -602,7 +602,7 @@ async def test_camera_web_rtc( assert len(hass.states.async_all()) == 1 cam = hass.states.get("camera.my_camera") assert cam is not None - assert cam.state == STATE_STREAMING + assert cam.state == CameraState.STREAMING assert cam.attributes["frontend_stream_type"] == StreamType.WEB_RTC client = await hass_ws_client(hass) @@ -639,7 +639,7 @@ async def test_camera_web_rtc_unsupported( assert len(hass.states.async_all()) == 1 cam = hass.states.get("camera.my_camera") assert cam is not None - assert cam.state == STATE_STREAMING + assert cam.state == CameraState.STREAMING assert cam.attributes["frontend_stream_type"] == StreamType.HLS client = await hass_ws_client(hass) @@ -676,7 +676,7 @@ async def test_camera_web_rtc_offer_failure( assert len(hass.states.async_all()) == 1 cam = hass.states.get("camera.my_camera") assert cam is not None - assert cam.state == STATE_STREAMING + assert cam.state == CameraState.STREAMING client = await hass_ws_client(hass) await client.send_json( @@ -741,7 +741,7 @@ async def test_camera_multiple_streams( assert len(hass.states.async_all()) == 1 cam = hass.states.get("camera.my_camera") assert cam is not None - assert cam.state == STATE_STREAMING + assert cam.state == CameraState.STREAMING # Prefer WebRTC over RTSP/HLS assert cam.attributes["frontend_stream_type"] == StreamType.WEB_RTC diff --git a/tests/components/netatmo/test_camera.py b/tests/components/netatmo/test_camera.py index c7398d64e1d..43904ed8f71 100644 --- a/tests/components/netatmo/test_camera.py +++ b/tests/components/netatmo/test_camera.py @@ -9,7 +9,7 @@ import pytest from syrupy import SnapshotAssertion from homeassistant.components import camera -from homeassistant.components.camera import STATE_STREAMING +from homeassistant.components.camera import CameraState from homeassistant.components.netatmo.const import ( NETATMO_EVENT, SERVICE_SET_CAMERA_LIGHT, @@ -176,7 +176,7 @@ async def test_camera_image_local( cam = hass.states.get(camera_entity_indoor) assert cam is not None - assert cam.state == STATE_STREAMING + assert cam.state == CameraState.STREAMING assert cam.name == "Hall" stream_source = await camera.async_get_stream_source(hass, camera_entity_indoor) @@ -204,7 +204,7 @@ async def test_camera_image_vpn( cam = hass.states.get(camera_entity_indoor) assert cam is not None - assert cam.state == STATE_STREAMING + assert cam.state == CameraState.STREAMING stream_source = await camera.async_get_stream_source(hass, camera_entity_indoor) assert stream_source == stream_uri diff --git a/tests/components/reolink/test_camera.py b/tests/components/reolink/test_camera.py index 21ebb242882..4f18f769e02 100644 --- a/tests/components/reolink/test_camera.py +++ b/tests/components/reolink/test_camera.py @@ -5,9 +5,13 @@ from unittest.mock import MagicMock, patch import pytest from reolink_aio.exceptions import ReolinkError -from homeassistant.components.camera import async_get_image, async_get_stream_source +from homeassistant.components.camera import ( + CameraState, + async_get_image, + async_get_stream_source, +) from homeassistant.config_entries import ConfigEntryState -from homeassistant.const import STATE_IDLE, Platform +from homeassistant.const import Platform from homeassistant.core import HomeAssistant from homeassistant.exceptions import HomeAssistantError @@ -30,7 +34,7 @@ async def test_camera( assert config_entry.state is ConfigEntryState.LOADED entity_id = f"{Platform.CAMERA}.{TEST_NVR_NAME}_fluent" - assert hass.states.get(entity_id).state == STATE_IDLE + assert hass.states.get(entity_id).state == CameraState.IDLE # check getting a image from the camera reolink_connect.get_snapshot.return_value = b"image" @@ -62,4 +66,4 @@ async def test_camera_no_stream_source( assert config_entry.state is ConfigEntryState.LOADED entity_id = f"{Platform.CAMERA}.{TEST_NVR_NAME}_snapshots_fluent_lens_0" - assert hass.states.get(entity_id).state == STATE_IDLE + assert hass.states.get(entity_id).state == CameraState.IDLE diff --git a/tests/components/unifiprotect/test_camera.py b/tests/components/unifiprotect/test_camera.py index ea7a7ae942d..75a0beb23d9 100644 --- a/tests/components/unifiprotect/test_camera.py +++ b/tests/components/unifiprotect/test_camera.py @@ -10,8 +10,8 @@ from uiprotect.exceptions import NvrError from uiprotect.websocket import WebsocketState from homeassistant.components.camera import ( - STATE_IDLE, CameraEntityFeature, + CameraState, async_get_image, async_get_stream_source, ) @@ -431,7 +431,7 @@ async def test_camera_websocket_disconnected( entity_id = "camera.test_camera_high_resolution_channel" state = hass.states.get(entity_id) - assert state and state.state == STATE_IDLE + assert state and state.state == CameraState.IDLE # websocket disconnects ufp.ws_state_subscription(WebsocketState.DISCONNECTED) @@ -445,7 +445,7 @@ async def test_camera_websocket_disconnected( await hass.async_block_till_done() state = hass.states.get(entity_id) - assert state and state.state == STATE_IDLE + assert state and state.state == CameraState.IDLE async def test_camera_ws_update( diff --git a/tests/components/uvc/test_camera.py b/tests/components/uvc/test_camera.py index 3d41e725209..43216e354c7 100644 --- a/tests/components/uvc/test_camera.py +++ b/tests/components/uvc/test_camera.py @@ -10,8 +10,8 @@ from homeassistant.components.camera import ( DEFAULT_CONTENT_TYPE, SERVICE_DISABLE_MOTION, SERVICE_ENABLE_MOTION, - STATE_RECORDING, CameraEntityFeature, + CameraState, async_get_image, async_get_stream_source, ) @@ -336,7 +336,7 @@ async def test_properties(hass: HomeAssistant, mock_remote) -> None: assert state assert state.name == "Front" - assert state.state == STATE_RECORDING + assert state.state == CameraState.RECORDING assert state.attributes["brand"] == "Ubiquiti" assert state.attributes["model_name"] == "UVC" assert state.attributes["supported_features"] == CameraEntityFeature.STREAM @@ -354,7 +354,7 @@ async def test_motion_recording_mode_properties( state = hass.states.get("camera.front") assert state - assert state.state == STATE_RECORDING + assert state.state == CameraState.RECORDING mock_remote.return_value.get_camera.return_value["recordingSettings"][ "fullTimeRecordEnabled" @@ -369,7 +369,7 @@ async def test_motion_recording_mode_properties( state = hass.states.get("camera.front") assert state - assert state.state != STATE_RECORDING + assert state.state != CameraState.RECORDING assert state.attributes["last_recording_start_time"] == datetime( 2021, 1, 8, 1, 56, 32, 367000, tzinfo=UTC ) @@ -382,7 +382,7 @@ async def test_motion_recording_mode_properties( state = hass.states.get("camera.front") assert state - assert state.state != STATE_RECORDING + assert state.state != CameraState.RECORDING mock_remote.return_value.get_camera.return_value["recordingIndicator"] = ( "MOTION_INPROGRESS" @@ -394,7 +394,7 @@ async def test_motion_recording_mode_properties( state = hass.states.get("camera.front") assert state - assert state.state == STATE_RECORDING + assert state.state == CameraState.RECORDING mock_remote.return_value.get_camera.return_value["recordingIndicator"] = ( "MOTION_FINISHED" @@ -406,7 +406,7 @@ async def test_motion_recording_mode_properties( state = hass.states.get("camera.front") assert state - assert state.state == STATE_RECORDING + assert state.state == CameraState.RECORDING async def test_stream(hass: HomeAssistant, mock_remote) -> None: diff --git a/tests/components/yale/test_camera.py b/tests/components/yale/test_camera.py index 502945b19c1..122f3c65def 100644 --- a/tests/components/yale/test_camera.py +++ b/tests/components/yale/test_camera.py @@ -6,7 +6,7 @@ from unittest.mock import patch from yalexs.const import Brand from yalexs.doorbell import ContentTokenExpired -from homeassistant.const import STATE_IDLE +from homeassistant.components.camera import CameraState from homeassistant.core import HomeAssistant from .mocks import _create_yale_with_devices, _mock_doorbell_from_fixture @@ -28,7 +28,7 @@ async def test_create_doorbell( camera_k98gidt45gul_name_camera = hass.states.get( "camera.k98gidt45gul_name_camera" ) - assert camera_k98gidt45gul_name_camera.state == STATE_IDLE + assert camera_k98gidt45gul_name_camera.state == CameraState.IDLE url = hass.states.get("camera.k98gidt45gul_name_camera").attributes[ "entity_picture"