Files
homeassistant-core/tests/components/axis/test_camera.py
T

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

95 lines
3.3 KiB
Python
Raw Normal View History

2019-03-24 16:16:50 +01:00
"""Axis camera platform tests."""
2021-01-01 22:31:56 +01:00
2024-03-23 00:44:06 +01:00
from collections.abc import Callable
import pytest
from homeassistant.components import camera
from homeassistant.components.axis.const import (
CONF_STREAM_PROFILE,
DOMAIN as AXIS_DOMAIN,
)
2020-05-14 10:49:27 +02:00
from homeassistant.components.camera import DOMAIN as CAMERA_DOMAIN
2024-03-23 00:44:06 +01:00
from homeassistant.config_entries import ConfigEntry
2020-10-22 09:29:53 +02:00
from homeassistant.const import STATE_IDLE
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component
2019-03-24 16:16:50 +01:00
from .const import MAC, NAME
2019-03-24 16:16:50 +01:00
async def test_platform_manually_configured(hass: HomeAssistant) -> None:
2019-03-24 16:16:50 +01:00
"""Test that nothing happens when platform is manually configured."""
assert (
await async_setup_component(
2020-10-22 09:29:53 +02:00
hass, CAMERA_DOMAIN, {CAMERA_DOMAIN: {"platform": AXIS_DOMAIN}}
2019-03-24 16:16:50 +01:00
)
is True
2019-07-31 12:25:30 -07:00
)
2019-03-24 16:16:50 +01:00
2020-05-14 10:49:27 +02:00
assert AXIS_DOMAIN not in hass.data
2019-03-24 16:16:50 +01:00
2024-06-10 08:49:43 +02:00
@pytest.mark.usefixtures("setup_config_entry")
async def test_camera(hass: HomeAssistant) -> None:
2019-03-24 16:16:50 +01:00
"""Test that Axis camera platform is loaded properly."""
2020-05-14 10:49:27 +02:00
assert len(hass.states.async_entity_ids(CAMERA_DOMAIN)) == 1
2019-03-24 16:16:50 +01:00
2020-10-22 09:29:53 +02:00
entity_id = f"{CAMERA_DOMAIN}.{NAME}"
cam = hass.states.get(entity_id)
assert cam.state == STATE_IDLE
2020-01-03 00:02:59 +01:00
assert cam.name == NAME
2020-10-22 09:29:53 +02:00
camera_entity = camera._get_camera_from_entity_id(hass, entity_id)
assert camera_entity.image_source == "http://1.2.3.4:80/axis-cgi/jpg/image.cgi"
assert camera_entity.mjpeg_source == "http://1.2.3.4:80/axis-cgi/mjpg/video.cgi"
assert (
await camera_entity.stream_source()
== "rtsp://root:pass@1.2.3.4/axis-media/media.amp?videocodec=h264"
)
2024-03-23 00:44:06 +01:00
@pytest.mark.parametrize("config_entry_options", [{CONF_STREAM_PROFILE: "profile_1"}])
2024-06-10 08:49:43 +02:00
@pytest.mark.usefixtures("setup_config_entry")
async def test_camera_with_stream_profile(hass: HomeAssistant) -> None:
"""Test that Axis camera entity is using the correct path with stream profike."""
assert len(hass.states.async_entity_ids(CAMERA_DOMAIN)) == 1
2020-10-22 09:29:53 +02:00
entity_id = f"{CAMERA_DOMAIN}.{NAME}"
cam = hass.states.get(entity_id)
assert cam.state == STATE_IDLE
assert cam.name == NAME
2020-10-22 09:29:53 +02:00
camera_entity = camera._get_camera_from_entity_id(hass, entity_id)
assert camera_entity.image_source == "http://1.2.3.4:80/axis-cgi/jpg/image.cgi"
assert (
camera_entity.mjpeg_source
== "http://1.2.3.4:80/axis-cgi/mjpg/video.cgi?streamprofile=profile_1"
)
assert (
await camera_entity.stream_source()
== "rtsp://root:pass@1.2.3.4/axis-media/media.amp?videocodec=h264&streamprofile=profile_1"
)
2024-06-10 08:49:43 +02:00
PROPERTY_DATA = f"""root.Properties.API.HTTP.Version=3
root.Properties.API.Metadata.Metadata=yes
root.Properties.API.Metadata.Version=1.0
root.Properties.EmbeddedDevelopment.Version=2.16
root.Properties.Firmware.BuildDate=Feb 15 2019 09:42
root.Properties.Firmware.BuildNumber=26
root.Properties.Firmware.Version=9.10.1
root.Properties.System.SerialNumber={MAC}
"""
2024-06-10 08:49:43 +02:00
@pytest.mark.parametrize("param_properties_payload", [PROPERTY_DATA])
2024-03-23 00:44:06 +01:00
async def test_camera_disabled(
hass: HomeAssistant, prepare_config_entry: Callable[[], ConfigEntry]
) -> None:
"""Test that Axis camera platform is loaded properly but does not create camera entity."""
await prepare_config_entry()
assert len(hass.states.async_entity_ids(CAMERA_DOMAIN)) == 0