core/tests/components/http/test_view.py

60 lines
1.7 KiB
Python

"""Tests for Home Assistant View."""
from unittest.mock import Mock
from aiohttp.web_exceptions import (
HTTPInternalServerError, HTTPBadRequest, HTTPUnauthorized)
import pytest
import voluptuous as vol
from homeassistant.components.http.view import (
HomeAssistantView, request_handler_factory)
from homeassistant.exceptions import ServiceNotFound, Unauthorized
from tests.common import mock_coro_func
@pytest.fixture
def mock_request():
"""Mock a request."""
return Mock(
app={'hass': Mock(is_running=True)},
match_info={},
)
async def test_invalid_json(caplog):
"""Test trying to return invalid JSON."""
view = HomeAssistantView()
with pytest.raises(HTTPInternalServerError):
view.json(float("NaN"))
assert str(float("NaN")) in caplog.text
async def test_handling_unauthorized(mock_request):
"""Test handling unauth exceptions."""
with pytest.raises(HTTPUnauthorized):
await request_handler_factory(
Mock(requires_auth=False),
mock_coro_func(exception=Unauthorized)
)(mock_request)
async def test_handling_invalid_data(mock_request):
"""Test handling unauth exceptions."""
with pytest.raises(HTTPBadRequest):
await request_handler_factory(
Mock(requires_auth=False),
mock_coro_func(exception=vol.Invalid('yo'))
)(mock_request)
async def test_handling_service_not_found(mock_request):
"""Test handling unauth exceptions."""
with pytest.raises(HTTPInternalServerError):
await request_handler_factory(
Mock(requires_auth=False),
mock_coro_func(exception=ServiceNotFound('test', 'test'))
)(mock_request)