mirror of
https://github.com/home-assistant/core.git
synced 2025-12-24 21:06:19 +00:00
Black
This commit is contained in:
@@ -3,8 +3,7 @@ import asyncio
|
||||
from unittest import mock
|
||||
|
||||
from homeassistant.components.camera.const import DOMAIN
|
||||
from homeassistant.components.local_file.camera import (
|
||||
SERVICE_UPDATE_FILE_PATH)
|
||||
from homeassistant.components.local_file.camera import SERVICE_UPDATE_FILE_PATH
|
||||
from homeassistant.setup import async_setup_component
|
||||
|
||||
from tests.common import mock_registry
|
||||
@@ -15,103 +14,117 @@ def test_loading_file(hass, hass_client):
|
||||
"""Test that it loads image from disk."""
|
||||
mock_registry(hass)
|
||||
|
||||
with mock.patch('os.path.isfile', mock.Mock(return_value=True)), \
|
||||
mock.patch('os.access', mock.Mock(return_value=True)):
|
||||
yield from async_setup_component(hass, 'camera', {
|
||||
'camera': {
|
||||
'name': 'config_test',
|
||||
'platform': 'local_file',
|
||||
'file_path': 'mock.file',
|
||||
}})
|
||||
with mock.patch("os.path.isfile", mock.Mock(return_value=True)), mock.patch(
|
||||
"os.access", mock.Mock(return_value=True)
|
||||
):
|
||||
yield from async_setup_component(
|
||||
hass,
|
||||
"camera",
|
||||
{
|
||||
"camera": {
|
||||
"name": "config_test",
|
||||
"platform": "local_file",
|
||||
"file_path": "mock.file",
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
client = yield from hass_client()
|
||||
|
||||
m_open = mock.mock_open(read_data=b'hello')
|
||||
m_open = mock.mock_open(read_data=b"hello")
|
||||
with mock.patch(
|
||||
'homeassistant.components.local_file.camera.open',
|
||||
m_open, create=True
|
||||
"homeassistant.components.local_file.camera.open", m_open, create=True
|
||||
):
|
||||
resp = yield from client.get('/api/camera_proxy/camera.config_test')
|
||||
resp = yield from client.get("/api/camera_proxy/camera.config_test")
|
||||
|
||||
assert resp.status == 200
|
||||
body = yield from resp.text()
|
||||
assert body == 'hello'
|
||||
assert body == "hello"
|
||||
|
||||
|
||||
@asyncio.coroutine
|
||||
def test_file_not_readable(hass, caplog):
|
||||
"""Test a warning is shown setup when file is not readable."""
|
||||
with mock.patch('os.path.isfile', mock.Mock(return_value=True)), \
|
||||
mock.patch('os.access', mock.Mock(return_value=False)):
|
||||
yield from async_setup_component(hass, 'camera', {
|
||||
'camera': {
|
||||
'name': 'config_test',
|
||||
'platform': 'local_file',
|
||||
'file_path': 'mock.file',
|
||||
}})
|
||||
with mock.patch("os.path.isfile", mock.Mock(return_value=True)), mock.patch(
|
||||
"os.access", mock.Mock(return_value=False)
|
||||
):
|
||||
yield from async_setup_component(
|
||||
hass,
|
||||
"camera",
|
||||
{
|
||||
"camera": {
|
||||
"name": "config_test",
|
||||
"platform": "local_file",
|
||||
"file_path": "mock.file",
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
assert 'Could not read' in caplog.text
|
||||
assert 'config_test' in caplog.text
|
||||
assert 'mock.file' in caplog.text
|
||||
assert "Could not read" in caplog.text
|
||||
assert "config_test" in caplog.text
|
||||
assert "mock.file" in caplog.text
|
||||
|
||||
|
||||
@asyncio.coroutine
|
||||
def test_camera_content_type(hass, hass_client):
|
||||
"""Test local_file camera content_type."""
|
||||
cam_config_jpg = {
|
||||
'name': 'test_jpg',
|
||||
'platform': 'local_file',
|
||||
'file_path': '/path/to/image.jpg',
|
||||
"name": "test_jpg",
|
||||
"platform": "local_file",
|
||||
"file_path": "/path/to/image.jpg",
|
||||
}
|
||||
cam_config_png = {
|
||||
'name': 'test_png',
|
||||
'platform': 'local_file',
|
||||
'file_path': '/path/to/image.png',
|
||||
"name": "test_png",
|
||||
"platform": "local_file",
|
||||
"file_path": "/path/to/image.png",
|
||||
}
|
||||
cam_config_svg = {
|
||||
'name': 'test_svg',
|
||||
'platform': 'local_file',
|
||||
'file_path': '/path/to/image.svg',
|
||||
"name": "test_svg",
|
||||
"platform": "local_file",
|
||||
"file_path": "/path/to/image.svg",
|
||||
}
|
||||
cam_config_noext = {
|
||||
'name': 'test_no_ext',
|
||||
'platform': 'local_file',
|
||||
'file_path': '/path/to/image',
|
||||
"name": "test_no_ext",
|
||||
"platform": "local_file",
|
||||
"file_path": "/path/to/image",
|
||||
}
|
||||
|
||||
yield from async_setup_component(hass, 'camera', {
|
||||
'camera': [cam_config_jpg, cam_config_png,
|
||||
cam_config_svg, cam_config_noext]})
|
||||
yield from async_setup_component(
|
||||
hass,
|
||||
"camera",
|
||||
{"camera": [cam_config_jpg, cam_config_png, cam_config_svg, cam_config_noext]},
|
||||
)
|
||||
|
||||
client = yield from hass_client()
|
||||
|
||||
image = 'hello'
|
||||
image = "hello"
|
||||
m_open = mock.mock_open(read_data=image.encode())
|
||||
with mock.patch('homeassistant.components.local_file.camera.open',
|
||||
m_open, create=True):
|
||||
resp_1 = yield from client.get('/api/camera_proxy/camera.test_jpg')
|
||||
resp_2 = yield from client.get('/api/camera_proxy/camera.test_png')
|
||||
resp_3 = yield from client.get('/api/camera_proxy/camera.test_svg')
|
||||
resp_4 = yield from client.get('/api/camera_proxy/camera.test_no_ext')
|
||||
with mock.patch(
|
||||
"homeassistant.components.local_file.camera.open", m_open, create=True
|
||||
):
|
||||
resp_1 = yield from client.get("/api/camera_proxy/camera.test_jpg")
|
||||
resp_2 = yield from client.get("/api/camera_proxy/camera.test_png")
|
||||
resp_3 = yield from client.get("/api/camera_proxy/camera.test_svg")
|
||||
resp_4 = yield from client.get("/api/camera_proxy/camera.test_no_ext")
|
||||
|
||||
assert resp_1.status == 200
|
||||
assert resp_1.content_type == 'image/jpeg'
|
||||
assert resp_1.content_type == "image/jpeg"
|
||||
body = yield from resp_1.text()
|
||||
assert body == image
|
||||
|
||||
assert resp_2.status == 200
|
||||
assert resp_2.content_type == 'image/png'
|
||||
assert resp_2.content_type == "image/png"
|
||||
body = yield from resp_2.text()
|
||||
assert body == image
|
||||
|
||||
assert resp_3.status == 200
|
||||
assert resp_3.content_type == 'image/svg+xml'
|
||||
assert resp_3.content_type == "image/svg+xml"
|
||||
body = yield from resp_3.text()
|
||||
assert body == image
|
||||
|
||||
# default mime type
|
||||
assert resp_4.status == 200
|
||||
assert resp_4.content_type == 'image/jpeg'
|
||||
assert resp_4.content_type == "image/jpeg"
|
||||
body = yield from resp_4.text()
|
||||
assert body == image
|
||||
|
||||
@@ -122,40 +135,31 @@ async def test_update_file_path(hass):
|
||||
|
||||
mock_registry(hass)
|
||||
|
||||
with mock.patch('os.path.isfile', mock.Mock(return_value=True)), \
|
||||
mock.patch('os.access', mock.Mock(return_value=True)):
|
||||
with mock.patch("os.path.isfile", mock.Mock(return_value=True)), mock.patch(
|
||||
"os.access", mock.Mock(return_value=True)
|
||||
):
|
||||
|
||||
camera_1 = {
|
||||
'platform': 'local_file',
|
||||
'file_path': 'mock/path.jpg'
|
||||
}
|
||||
camera_1 = {"platform": "local_file", "file_path": "mock/path.jpg"}
|
||||
camera_2 = {
|
||||
'platform': 'local_file',
|
||||
'name': 'local_file_camera_2',
|
||||
'file_path': 'mock/path_2.jpg'
|
||||
}
|
||||
await async_setup_component(hass, 'camera', {
|
||||
'camera': [camera_1, camera_2]
|
||||
})
|
||||
"platform": "local_file",
|
||||
"name": "local_file_camera_2",
|
||||
"file_path": "mock/path_2.jpg",
|
||||
}
|
||||
await async_setup_component(hass, "camera", {"camera": [camera_1, camera_2]})
|
||||
|
||||
# Fetch state and check motion detection attribute
|
||||
state = hass.states.get('camera.local_file')
|
||||
assert state.attributes.get('friendly_name') == 'Local File'
|
||||
assert state.attributes.get('file_path') == 'mock/path.jpg'
|
||||
state = hass.states.get("camera.local_file")
|
||||
assert state.attributes.get("friendly_name") == "Local File"
|
||||
assert state.attributes.get("file_path") == "mock/path.jpg"
|
||||
|
||||
service_data = {
|
||||
"entity_id": 'camera.local_file',
|
||||
"file_path": 'new/path.jpg'
|
||||
}
|
||||
service_data = {"entity_id": "camera.local_file", "file_path": "new/path.jpg"}
|
||||
|
||||
await hass.services.async_call(DOMAIN,
|
||||
SERVICE_UPDATE_FILE_PATH,
|
||||
service_data)
|
||||
await hass.services.async_call(DOMAIN, SERVICE_UPDATE_FILE_PATH, service_data)
|
||||
await hass.async_block_till_done()
|
||||
|
||||
state = hass.states.get('camera.local_file')
|
||||
assert state.attributes.get('file_path') == 'new/path.jpg'
|
||||
state = hass.states.get("camera.local_file")
|
||||
assert state.attributes.get("file_path") == "new/path.jpg"
|
||||
|
||||
# Check that local_file_camera_2 file_path is still as configured
|
||||
state = hass.states.get('camera.local_file_camera_2')
|
||||
assert state.attributes.get('file_path') == 'mock/path_2.jpg'
|
||||
state = hass.states.get("camera.local_file_camera_2")
|
||||
assert state.attributes.get("file_path") == "mock/path_2.jpg"
|
||||
|
||||
Reference in New Issue
Block a user