mirror of
				https://github.com/python-kasa/python-kasa.git
				synced 2025-10-31 04:31:54 +00:00 
			
		
		
		
	Provide alternative camera urls (#1316)
This commit is contained in:
		| @@ -4,15 +4,13 @@ from __future__ import annotations | ||||
| 
 | ||||
| import base64 | ||||
| import json | ||||
| from datetime import UTC, datetime | ||||
| from unittest.mock import patch | ||||
| 
 | ||||
| import pytest | ||||
| from freezegun.api import FrozenDateTimeFactory | ||||
| 
 | ||||
| from kasa import Credentials, Device, DeviceType, Module | ||||
| from kasa import Credentials, Device, DeviceType, Module, StreamResolution | ||||
| 
 | ||||
| from ..conftest import camera_smartcam, device_smartcam, hub_smartcam | ||||
| from ...conftest import camera_smartcam, device_smartcam | ||||
| 
 | ||||
| 
 | ||||
| @device_smartcam | ||||
| @@ -37,6 +35,16 @@ async def test_stream_rtsp_url(dev: Device): | ||||
|     url = camera_module.stream_rtsp_url(Credentials("foo", "bar")) | ||||
|     assert url == "rtsp://foo:bar@127.0.0.123:554/stream1" | ||||
| 
 | ||||
|     url = camera_module.stream_rtsp_url( | ||||
|         Credentials("foo", "bar"), stream_resolution=StreamResolution.HD | ||||
|     ) | ||||
|     assert url == "rtsp://foo:bar@127.0.0.123:554/stream1" | ||||
| 
 | ||||
|     url = camera_module.stream_rtsp_url( | ||||
|         Credentials("foo", "bar"), stream_resolution=StreamResolution.SD | ||||
|     ) | ||||
|     assert url == "rtsp://foo:bar@127.0.0.123:554/stream2" | ||||
| 
 | ||||
|     with patch.object(dev.config, "credentials", Credentials("bar", "foo")): | ||||
|         url = camera_module.stream_rtsp_url() | ||||
|     assert url == "rtsp://bar:foo@127.0.0.123:554/stream1" | ||||
| @@ -75,49 +83,12 @@ async def test_stream_rtsp_url(dev: Device): | ||||
|         url = camera_module.stream_rtsp_url() | ||||
|     assert url is None | ||||
| 
 | ||||
|     # Test with camera off | ||||
|     await camera_module.set_state(False) | ||||
|     await dev.update() | ||||
|     url = camera_module.stream_rtsp_url(Credentials("foo", "bar")) | ||||
|     assert url is None | ||||
|     with patch.object(dev.config, "credentials", Credentials("bar", "foo")): | ||||
|         url = camera_module.stream_rtsp_url() | ||||
|     assert url is None | ||||
| 
 | ||||
| @camera_smartcam | ||||
| async def test_onvif_url(dev: Device): | ||||
|     """Test the onvif url.""" | ||||
|     camera_module = dev.modules.get(Module.Camera) | ||||
|     assert camera_module | ||||
| 
 | ||||
| @device_smartcam | ||||
| async def test_alias(dev): | ||||
|     test_alias = "TEST1234" | ||||
|     original = dev.alias | ||||
| 
 | ||||
|     assert isinstance(original, str) | ||||
|     await dev.set_alias(test_alias) | ||||
|     await dev.update() | ||||
|     assert dev.alias == test_alias | ||||
| 
 | ||||
|     await dev.set_alias(original) | ||||
|     await dev.update() | ||||
|     assert dev.alias == original | ||||
| 
 | ||||
| 
 | ||||
| @hub_smartcam | ||||
| async def test_hub(dev): | ||||
|     assert dev.children | ||||
|     for child in dev.children: | ||||
|         assert "Cloud" in child.modules | ||||
|         assert child.modules["Cloud"].data | ||||
|         assert child.alias | ||||
|         await child.update() | ||||
|         assert "Time" not in child.modules | ||||
|         assert child.time | ||||
| 
 | ||||
| 
 | ||||
| @device_smartcam | ||||
| async def test_device_time(dev: Device, freezer: FrozenDateTimeFactory): | ||||
|     """Test a child device gets the time from it's parent module.""" | ||||
|     fallback_time = datetime.now(UTC).astimezone().replace(microsecond=0) | ||||
|     assert dev.time != fallback_time | ||||
|     module = dev.modules[Module.Time] | ||||
|     await module.set_time(fallback_time) | ||||
|     await dev.update() | ||||
|     assert dev.time == fallback_time | ||||
|     url = camera_module.onvif_url() | ||||
|     assert url == "http://127.0.0.123:2020/onvif/device_service" | ||||
							
								
								
									
										61
									
								
								tests/smartcam/test_smartcamdevice.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								tests/smartcam/test_smartcamdevice.py
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,61 @@ | ||||
| """Tests for smart camera devices.""" | ||||
|  | ||||
| from __future__ import annotations | ||||
|  | ||||
| from datetime import UTC, datetime | ||||
|  | ||||
| import pytest | ||||
| from freezegun.api import FrozenDateTimeFactory | ||||
|  | ||||
| from kasa import Device, DeviceType, Module | ||||
|  | ||||
| from ..conftest import device_smartcam, hub_smartcam | ||||
|  | ||||
|  | ||||
| @device_smartcam | ||||
| async def test_state(dev: Device): | ||||
|     if dev.device_type is DeviceType.Hub: | ||||
|         pytest.skip("Hubs cannot be switched on and off") | ||||
|  | ||||
|     state = dev.is_on | ||||
|     await dev.set_state(not state) | ||||
|     await dev.update() | ||||
|     assert dev.is_on is not state | ||||
|  | ||||
|  | ||||
| @device_smartcam | ||||
| async def test_alias(dev): | ||||
|     test_alias = "TEST1234" | ||||
|     original = dev.alias | ||||
|  | ||||
|     assert isinstance(original, str) | ||||
|     await dev.set_alias(test_alias) | ||||
|     await dev.update() | ||||
|     assert dev.alias == test_alias | ||||
|  | ||||
|     await dev.set_alias(original) | ||||
|     await dev.update() | ||||
|     assert dev.alias == original | ||||
|  | ||||
|  | ||||
| @hub_smartcam | ||||
| async def test_hub(dev): | ||||
|     assert dev.children | ||||
|     for child in dev.children: | ||||
|         assert "Cloud" in child.modules | ||||
|         assert child.modules["Cloud"].data | ||||
|         assert child.alias | ||||
|         await child.update() | ||||
|         assert "Time" not in child.modules | ||||
|         assert child.time | ||||
|  | ||||
|  | ||||
| @device_smartcam | ||||
| async def test_device_time(dev: Device, freezer: FrozenDateTimeFactory): | ||||
|     """Test a child device gets the time from it's parent module.""" | ||||
|     fallback_time = datetime.now(UTC).astimezone().replace(microsecond=0) | ||||
|     assert dev.time != fallback_time | ||||
|     module = dev.modules[Module.Time] | ||||
|     await module.set_time(fallback_time) | ||||
|     await dev.update() | ||||
|     assert dev.time == fallback_time | ||||
		Reference in New Issue
	
	Block a user
	 Steven B.
					Steven B.