Use http.HTTPStatus in components/[gh]* (#58246)

This commit is contained in:
Ville Skyttä 2021-10-23 21:34:53 +03:00 committed by GitHub
parent 583ae3c953
commit b52c5c82b1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
38 changed files with 272 additions and 247 deletions

View file

@ -4,6 +4,7 @@ from __future__ import annotations
from abc import ABC, abstractmethod
from asyncio import gather
from collections.abc import Mapping
from http import HTTPStatus
import logging
import pprint
@ -203,7 +204,7 @@ class AbstractConfig(ABC):
# Remove any pending sync
self._google_sync_unsub.pop(agent_user_id, lambda: None)()
status = await self._async_request_sync_devices(agent_user_id)
if status == 404:
if status == HTTPStatus.NOT_FOUND:
await self.async_disconnect_agent_user(agent_user_id)
return status

View file

@ -1,6 +1,7 @@
"""Support for Google Actions Smart Home Control."""
import asyncio
from datetime import timedelta
from http import HTTPStatus
import logging
from uuid import uuid4
@ -14,8 +15,6 @@ from homeassistant.const import (
CLOUD_NEVER_EXPOSED_ENTITIES,
ENTITY_CATEGORY_CONFIG,
ENTITY_CATEGORY_DIAGNOSTIC,
HTTP_INTERNAL_SERVER_ERROR,
HTTP_UNAUTHORIZED,
)
from homeassistant.helpers import entity_registry as er
from homeassistant.helpers.aiohttp_client import async_get_clientsession
@ -157,7 +156,7 @@ class GoogleConfig(AbstractConfig):
)
_LOGGER.error("No configuration for request_sync available")
return HTTP_INTERNAL_SERVER_ERROR
return HTTPStatus.INTERNAL_SERVER_ERROR
async def _async_update_token(self, force=False):
if CONF_SERVICE_ACCOUNT not in self._config:
@ -198,7 +197,7 @@ class GoogleConfig(AbstractConfig):
try:
return await _call()
except ClientResponseError as error:
if error.status == HTTP_UNAUTHORIZED:
if error.status == HTTPStatus.UNAUTHORIZED:
_LOGGER.warning(
"Request for %s unauthorized, renewing token and retrying", url
)
@ -210,7 +209,7 @@ class GoogleConfig(AbstractConfig):
return error.status
except (asyncio.TimeoutError, ClientError):
_LOGGER.error("Could not contact %s", url)
return HTTP_INTERNAL_SERVER_ERROR
return HTTPStatus.INTERNAL_SERVER_ERROR
async def async_report_state(self, message, agent_user_id: str):
"""Send a state report to Google."""

View file

@ -1,12 +1,13 @@
"""Support for Habitica sensors."""
from collections import namedtuple
from datetime import timedelta
from http import HTTPStatus
import logging
from aiohttp import ClientResponseError
from homeassistant.components.sensor import SensorEntity
from homeassistant.const import CONF_NAME, HTTP_TOO_MANY_REQUESTS
from homeassistant.const import CONF_NAME
from homeassistant.util import Throttle
from .const import DOMAIN
@ -94,7 +95,7 @@ class HabitipyData:
try:
self.data = await self.api.user.get()
except ClientResponseError as error:
if error.status == HTTP_TOO_MANY_REQUESTS:
if error.status == HTTPStatus.TOO_MANY_REQUESTS:
_LOGGER.warning(
"Sensor data update for %s has too many API requests;"
" Skipping the update",
@ -111,7 +112,7 @@ class HabitipyData:
try:
self.tasks[task_type] = await self.api.tasks.user.get(type=task_type)
except ClientResponseError as error:
if error.status == HTTP_TOO_MANY_REQUESTS:
if error.status == HTTPStatus.TOO_MANY_REQUESTS:
_LOGGER.warning(
"Sensor data update for %s has too many API requests;"
" Skipping the update",

View file

@ -1,6 +1,7 @@
"""The Hangouts Bot."""
import asyncio
from contextlib import suppress
from http import HTTPStatus
import io
import logging
@ -8,7 +9,6 @@ import aiohttp
import hangups
from hangups import ChatMessageEvent, ChatMessageSegment, Client, get_auth, hangouts_pb2
from homeassistant.const import HTTP_OK
from homeassistant.core import callback
from homeassistant.helpers import dispatcher, intent
from homeassistant.helpers.aiohttp_client import async_get_clientsession
@ -273,7 +273,7 @@ class HangoutsBot:
try:
websession = async_get_clientsession(self.hass)
async with websession.get(uri, timeout=5) as response:
if response.status != HTTP_OK:
if response.status != HTTPStatus.OK:
_LOGGER.error(
"Fetch image failed, %s, %s", response.status, response
)

View file

@ -1,5 +1,6 @@
"""Handler for Hass.io."""
import asyncio
from http import HTTPStatus
import logging
import os
@ -10,7 +11,7 @@ from homeassistant.components.http import (
CONF_SERVER_PORT,
CONF_SSL_CERTIFICATE,
)
from homeassistant.const import HTTP_BAD_REQUEST, HTTP_OK, SERVER_PORT
from homeassistant.const import SERVER_PORT
from .const import X_HASSIO
@ -225,7 +226,7 @@ class HassIO:
timeout=aiohttp.ClientTimeout(total=timeout),
)
if request.status not in (HTTP_OK, HTTP_BAD_REQUEST):
if request.status not in (HTTPStatus.OK, HTTPStatus.BAD_REQUEST):
_LOGGER.error("%s return code %d", command, request.status)
raise HassioAPIError()

View file

@ -1,5 +1,6 @@
"""Support for haveibeenpwned (email breaches) sensor."""
from datetime import timedelta
from http import HTTPStatus
import logging
from aiohttp.hdrs import USER_AGENT
@ -7,13 +8,7 @@ import requests
import voluptuous as vol
from homeassistant.components.sensor import PLATFORM_SCHEMA, SensorEntity
from homeassistant.const import (
ATTR_ATTRIBUTION,
CONF_API_KEY,
CONF_EMAIL,
HTTP_NOT_FOUND,
HTTP_OK,
)
from homeassistant.const import ATTR_ATTRIBUTION, CONF_API_KEY, CONF_EMAIL
import homeassistant.helpers.config_validation as cv
from homeassistant.helpers.event import track_point_in_time
from homeassistant.util import Throttle
@ -163,7 +158,7 @@ class HaveIBeenPwnedData:
_LOGGER.error("Failed fetching data for %s", self._email)
return
if req.status_code == HTTP_OK:
if req.status_code == HTTPStatus.OK:
self.data[self._email] = sorted(
req.json(), key=lambda k: k["AddedDate"], reverse=True
)
@ -172,7 +167,7 @@ class HaveIBeenPwnedData:
# the forced updates try this current email again
self.set_next_email()
elif req.status_code == HTTP_NOT_FOUND:
elif req.status_code == HTTPStatus.NOT_FOUND:
self.data[self._email] = []
# only goto next email if we had data so that

View file

@ -1,5 +1,6 @@
"""Support for the Hitron CODA-4582U, provided by Rogers."""
from collections import namedtuple
from http import HTTPStatus
import logging
import requests
@ -10,13 +11,7 @@ from homeassistant.components.device_tracker import (
PLATFORM_SCHEMA as PARENT_PLATFORM_SCHEMA,
DeviceScanner,
)
from homeassistant.const import (
CONF_HOST,
CONF_PASSWORD,
CONF_TYPE,
CONF_USERNAME,
HTTP_OK,
)
from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_TYPE, CONF_USERNAME
import homeassistant.helpers.config_validation as cv
_LOGGER = logging.getLogger(__name__)
@ -88,7 +83,7 @@ class HitronCODADeviceScanner(DeviceScanner):
except requests.exceptions.Timeout:
_LOGGER.error("Connection to the router timed out at URL %s", self._url)
return False
if res.status_code != HTTP_OK:
if res.status_code != HTTPStatus.OK:
_LOGGER.error("Connection failed with http code %s", res.status_code)
return False
try:
@ -113,7 +108,7 @@ class HitronCODADeviceScanner(DeviceScanner):
except requests.exceptions.Timeout:
_LOGGER.error("Connection to the router timed out at URL %s", self._url)
return False
if res.status_code != HTTP_OK:
if res.status_code != HTTPStatus.OK:
_LOGGER.error("Connection failed with http code %s", res.status_code)
return False
try:

View file

@ -5,6 +5,7 @@ from collections import defaultdict
from collections.abc import Awaitable, Callable
from contextlib import suppress
from datetime import datetime
from http import HTTPStatus
from ipaddress import ip_address
import logging
from socket import gethostbyaddr, herror
@ -15,7 +16,6 @@ from aiohttp.web_exceptions import HTTPForbidden, HTTPUnauthorized
import voluptuous as vol
from homeassistant.config import load_yaml_config_file
from homeassistant.const import HTTP_BAD_REQUEST
from homeassistant.core import HomeAssistant, callback
from homeassistant.exceptions import HomeAssistantError
import homeassistant.helpers.config_validation as cv
@ -89,9 +89,9 @@ def log_invalid_auth(
async def handle_req(
view: HomeAssistantView, request: Request, *args: Any, **kwargs: Any
) -> StreamResponse:
"""Try to log failed login attempts if response status >= 400."""
"""Try to log failed login attempts if response status >= BAD_REQUEST."""
resp = await func(view, request, *args, **kwargs)
if resp.status >= HTTP_BAD_REQUEST:
if resp.status >= HTTPStatus.BAD_REQUEST:
await process_wrong_login(request)
return resp

View file

@ -19,7 +19,7 @@ from aiohttp.web_urldispatcher import AbstractRoute
import voluptuous as vol
from homeassistant import exceptions
from homeassistant.const import CONTENT_TYPE_JSON, HTTP_OK
from homeassistant.const import CONTENT_TYPE_JSON
from homeassistant.core import Context, is_callback
from homeassistant.helpers.json import JSONEncoder
@ -144,7 +144,7 @@ def request_handler_factory(
# The method handler returned a ready-made Response, how nice of it
return result
status_code = HTTP_OK
status_code = HTTPStatus.OK
if isinstance(result, tuple):
result, status_code = result

View file

@ -3,6 +3,7 @@ from __future__ import annotations
import asyncio
from functools import partial
from http import HTTPStatus
import logging
from aiohttp import client_exceptions
@ -11,7 +12,6 @@ import async_timeout
import slugify as unicode_slug
from homeassistant import core
from homeassistant.const import HTTP_INTERNAL_SERVER_ERROR
from homeassistant.exceptions import ConfigEntryNotReady
from homeassistant.helpers import aiohttp_client
@ -148,7 +148,7 @@ class HueBridge:
# We only retry if it's a server error. So raise on all 4XX errors.
if (
isinstance(err, client_exceptions.ClientResponseError)
and err.status < HTTP_INTERNAL_SERVER_ERROR
and err.status < HTTPStatus.INTERNAL_SERVER_ERROR
):
raise

View file

@ -1,4 +1,5 @@
"""Test the Garages Amsterdam config flow."""
from http import HTTPStatus
from unittest.mock import patch
from aiohttp import ClientResponseError
@ -44,7 +45,10 @@ async def test_full_flow(hass: HomeAssistant) -> None:
"side_effect,reason",
[
(RuntimeError, "unknown"),
(ClientResponseError(None, None, status=500), "cannot_connect"),
(
ClientResponseError(None, None, status=HTTPStatus.INTERNAL_SERVER_ERROR),
"cannot_connect",
),
],
)
async def test_error_handling(

View file

@ -1,5 +1,6 @@
"""The tests for generic camera component."""
import asyncio
from http import HTTPStatus
from os import path
from unittest.mock import patch
@ -9,11 +10,7 @@ import respx
from homeassistant import config as hass_config
from homeassistant.components.generic import DOMAIN
from homeassistant.components.websocket_api.const import TYPE_RESULT
from homeassistant.const import (
HTTP_INTERNAL_SERVER_ERROR,
HTTP_NOT_FOUND,
SERVICE_RELOAD,
)
from homeassistant.const import SERVICE_RELOAD
from homeassistant.setup import async_setup_component
@ -41,7 +38,7 @@ async def test_fetching_url(hass, hass_client):
resp = await client.get("/api/camera_proxy/camera.config_test")
assert resp.status == 200
assert resp.status == HTTPStatus.OK
assert respx.calls.call_count == 1
body = await resp.text()
assert body == "hello world"
@ -75,7 +72,7 @@ async def test_fetching_without_verify_ssl(hass, hass_client):
resp = await client.get("/api/camera_proxy/camera.config_test")
assert resp.status == 200
assert resp.status == HTTPStatus.OK
@respx.mock
@ -103,7 +100,7 @@ async def test_fetching_url_with_verify_ssl(hass, hass_client):
resp = await client.get("/api/camera_proxy/camera.config_test")
assert resp.status == 200
assert resp.status == HTTPStatus.OK
@respx.mock
@ -112,7 +109,7 @@ async def test_limit_refetch(hass, hass_client):
respx.get("http://example.com/5a").respond(text="hello world")
respx.get("http://example.com/10a").respond(text="hello world")
respx.get("http://example.com/15a").respond(text="hello planet")
respx.get("http://example.com/20a").respond(status_code=HTTP_NOT_FOUND)
respx.get("http://example.com/20a").respond(status_code=HTTPStatus.NOT_FOUND)
await async_setup_component(
hass,
@ -137,19 +134,19 @@ async def test_limit_refetch(hass, hass_client):
with patch("async_timeout.timeout", side_effect=asyncio.TimeoutError()):
resp = await client.get("/api/camera_proxy/camera.config_test")
assert respx.calls.call_count == 0
assert resp.status == HTTP_INTERNAL_SERVER_ERROR
assert resp.status == HTTPStatus.INTERNAL_SERVER_ERROR
hass.states.async_set("sensor.temp", "10")
resp = await client.get("/api/camera_proxy/camera.config_test")
assert respx.calls.call_count == 1
assert resp.status == 200
assert resp.status == HTTPStatus.OK
body = await resp.text()
assert body == "hello world"
resp = await client.get("/api/camera_proxy/camera.config_test")
assert respx.calls.call_count == 1
assert resp.status == 200
assert resp.status == HTTPStatus.OK
body = await resp.text()
assert body == "hello world"
@ -158,7 +155,7 @@ async def test_limit_refetch(hass, hass_client):
# Url change = fetch new image
resp = await client.get("/api/camera_proxy/camera.config_test")
assert respx.calls.call_count == 2
assert resp.status == 200
assert resp.status == HTTPStatus.OK
body = await resp.text()
assert body == "hello planet"
@ -166,7 +163,7 @@ async def test_limit_refetch(hass, hass_client):
hass.states.async_remove("sensor.temp")
resp = await client.get("/api/camera_proxy/camera.config_test")
assert respx.calls.call_count == 2
assert resp.status == 200
assert resp.status == HTTPStatus.OK
body = await resp.text()
assert body == "hello planet"
@ -340,14 +337,14 @@ async def test_camera_content_type(hass, hass_client):
resp_1 = await client.get("/api/camera_proxy/camera.config_test_svg")
assert respx.calls.call_count == 1
assert resp_1.status == 200
assert resp_1.status == HTTPStatus.OK
assert resp_1.content_type == "image/svg+xml"
body = await resp_1.text()
assert body == svg_image
resp_2 = await client.get("/api/camera_proxy/camera.config_test_jpg")
assert respx.calls.call_count == 2
assert resp_2.status == 200
assert resp_2.status == HTTPStatus.OK
assert resp_2.content_type == "image/jpeg"
body = await resp_2.text()
assert body == svg_image
@ -377,7 +374,7 @@ async def test_reloading(hass, hass_client):
resp = await client.get("/api/camera_proxy/camera.config_test")
assert resp.status == 200
assert resp.status == HTTPStatus.OK
assert respx.calls.call_count == 1
body = await resp.text()
assert body == "hello world"
@ -400,11 +397,11 @@ async def test_reloading(hass, hass_client):
resp = await client.get("/api/camera_proxy/camera.config_test")
assert resp.status == 404
assert resp.status == HTTPStatus.NOT_FOUND
resp = await client.get("/api/camera_proxy/camera.reload")
assert resp.status == 200
assert resp.status == HTTPStatus.OK
assert respx.calls.call_count == 2
body = await resp.text()
assert body == "hello world"
@ -435,7 +432,7 @@ async def test_timeout_cancelled(hass, hass_client):
resp = await client.get("/api/camera_proxy/camera.config_test")
assert resp.status == 200
assert resp.status == HTTPStatus.OK
assert respx.calls.call_count == 1
assert await resp.text() == "hello world"
@ -447,7 +444,7 @@ async def test_timeout_cancelled(hass, hass_client):
):
resp = await client.get("/api/camera_proxy/camera.config_test")
assert respx.calls.call_count == 1
assert resp.status == 500
assert resp.status == HTTPStatus.INTERNAL_SERVER_ERROR
respx.get("http://example.com").side_effect = [
httpx.RequestError,
@ -457,7 +454,7 @@ async def test_timeout_cancelled(hass, hass_client):
for total_calls in range(2, 4):
resp = await client.get("/api/camera_proxy/camera.config_test")
assert respx.calls.call_count == total_calls
assert resp.status == 200
assert resp.status == HTTPStatus.OK
assert await resp.text() == "hello world"

View file

@ -1,4 +1,6 @@
"""The tests for the Geofency device tracker platform."""
from http import HTTPStatus
# pylint: disable=redefined-outer-name
from unittest.mock import patch
@ -11,8 +13,6 @@ from homeassistant.config import async_process_ha_core_config
from homeassistant.const import (
ATTR_LATITUDE,
ATTR_LONGITUDE,
HTTP_OK,
HTTP_UNPROCESSABLE_ENTITY,
STATE_HOME,
STATE_NOT_HOME,
)
@ -172,7 +172,7 @@ async def test_data_validation(geofency_client, webhook_id):
# No data
req = await geofency_client.post(url)
assert req.status == HTTP_UNPROCESSABLE_ENTITY
assert req.status == HTTPStatus.UNPROCESSABLE_ENTITY
missing_attributes = ["address", "device", "entry", "latitude", "longitude", "name"]
@ -181,7 +181,7 @@ async def test_data_validation(geofency_client, webhook_id):
copy = GPS_ENTER_HOME.copy()
del copy[attribute]
req = await geofency_client.post(url, data=copy)
assert req.status == HTTP_UNPROCESSABLE_ENTITY
assert req.status == HTTPStatus.UNPROCESSABLE_ENTITY
async def test_gps_enter_and_exit_home(hass, geofency_client, webhook_id):
@ -191,7 +191,7 @@ async def test_gps_enter_and_exit_home(hass, geofency_client, webhook_id):
# Enter the Home zone
req = await geofency_client.post(url, data=GPS_ENTER_HOME)
await hass.async_block_till_done()
assert req.status == HTTP_OK
assert req.status == HTTPStatus.OK
device_name = slugify(GPS_ENTER_HOME["device"])
state_name = hass.states.get(f"device_tracker.{device_name}").state
assert state_name == STATE_HOME
@ -199,7 +199,7 @@ async def test_gps_enter_and_exit_home(hass, geofency_client, webhook_id):
# Exit the Home zone
req = await geofency_client.post(url, data=GPS_EXIT_HOME)
await hass.async_block_till_done()
assert req.status == HTTP_OK
assert req.status == HTTPStatus.OK
device_name = slugify(GPS_EXIT_HOME["device"])
state_name = hass.states.get(f"device_tracker.{device_name}").state
assert state_name == STATE_NOT_HOME
@ -211,7 +211,7 @@ async def test_gps_enter_and_exit_home(hass, geofency_client, webhook_id):
req = await geofency_client.post(url, data=data)
await hass.async_block_till_done()
assert req.status == HTTP_OK
assert req.status == HTTPStatus.OK
device_name = slugify(GPS_EXIT_HOME["device"])
current_latitude = hass.states.get(f"device_tracker.{device_name}").attributes[
"latitude"
@ -236,7 +236,7 @@ async def test_beacon_enter_and_exit_home(hass, geofency_client, webhook_id):
# Enter the Home zone
req = await geofency_client.post(url, data=BEACON_ENTER_HOME)
await hass.async_block_till_done()
assert req.status == HTTP_OK
assert req.status == HTTPStatus.OK
device_name = slugify(f"beacon_{BEACON_ENTER_HOME['name']}")
state_name = hass.states.get(f"device_tracker.{device_name}").state
assert state_name == STATE_HOME
@ -244,7 +244,7 @@ async def test_beacon_enter_and_exit_home(hass, geofency_client, webhook_id):
# Exit the Home zone
req = await geofency_client.post(url, data=BEACON_EXIT_HOME)
await hass.async_block_till_done()
assert req.status == HTTP_OK
assert req.status == HTTPStatus.OK
device_name = slugify(f"beacon_{BEACON_ENTER_HOME['name']}")
state_name = hass.states.get(f"device_tracker.{device_name}").state
assert state_name == STATE_NOT_HOME
@ -257,7 +257,7 @@ async def test_beacon_enter_and_exit_car(hass, geofency_client, webhook_id):
# Enter the Car away from Home zone
req = await geofency_client.post(url, data=BEACON_ENTER_CAR)
await hass.async_block_till_done()
assert req.status == HTTP_OK
assert req.status == HTTPStatus.OK
device_name = slugify(f"beacon_{BEACON_ENTER_CAR['name']}")
state_name = hass.states.get(f"device_tracker.{device_name}").state
assert state_name == STATE_NOT_HOME
@ -265,7 +265,7 @@ async def test_beacon_enter_and_exit_car(hass, geofency_client, webhook_id):
# Exit the Car away from Home zone
req = await geofency_client.post(url, data=BEACON_EXIT_CAR)
await hass.async_block_till_done()
assert req.status == HTTP_OK
assert req.status == HTTPStatus.OK
device_name = slugify(f"beacon_{BEACON_ENTER_CAR['name']}")
state_name = hass.states.get(f"device_tracker.{device_name}").state
assert state_name == STATE_NOT_HOME
@ -276,7 +276,7 @@ async def test_beacon_enter_and_exit_car(hass, geofency_client, webhook_id):
data["longitude"] = HOME_LONGITUDE
req = await geofency_client.post(url, data=data)
await hass.async_block_till_done()
assert req.status == HTTP_OK
assert req.status == HTTPStatus.OK
device_name = slugify(f"beacon_{data['name']}")
state_name = hass.states.get(f"device_tracker.{device_name}").state
assert state_name == STATE_HOME
@ -284,7 +284,7 @@ async def test_beacon_enter_and_exit_car(hass, geofency_client, webhook_id):
# Exit the Car in the Home zone
req = await geofency_client.post(url, data=data)
await hass.async_block_till_done()
assert req.status == HTTP_OK
assert req.status == HTTPStatus.OK
device_name = slugify(f"beacon_{data['name']}")
state_name = hass.states.get(f"device_tracker.{device_name}").state
assert state_name == STATE_HOME
@ -297,7 +297,7 @@ async def test_load_unload_entry(hass, geofency_client, webhook_id):
# Enter the Home zone
req = await geofency_client.post(url, data=GPS_ENTER_HOME)
await hass.async_block_till_done()
assert req.status == HTTP_OK
assert req.status == HTTPStatus.OK
device_name = slugify(GPS_ENTER_HOME["device"])
state_1 = hass.states.get(f"device_tracker.{device_name}")
assert state_1.state == STATE_HOME

View file

@ -1,4 +1,6 @@
"""The tests for the Google Assistant component."""
from http import HTTPStatus
# pylint: disable=protected-access
import json
@ -154,7 +156,7 @@ async def test_sync_request(hass_fixture, assistant_client, auth_header):
data=json.dumps(data),
headers=auth_header,
)
assert result.status == 200
assert result.status == HTTPStatus.OK
body = await result.json()
assert body.get("requestId") == reqid
devices = body["payload"]["devices"]
@ -198,7 +200,7 @@ async def test_query_request(hass_fixture, assistant_client, auth_header):
data=json.dumps(data),
headers=auth_header,
)
assert result.status == 200
assert result.status == HTTPStatus.OK
body = await result.json()
assert body.get("requestId") == reqid
devices = body["payload"]["devices"]
@ -238,7 +240,7 @@ async def test_query_climate_request(hass_fixture, assistant_client, auth_header
data=json.dumps(data),
headers=auth_header,
)
assert result.status == 200
assert result.status == HTTPStatus.OK
body = await result.json()
assert body.get("requestId") == reqid
devices = body["payload"]["devices"]
@ -297,7 +299,7 @@ async def test_query_climate_request_f(hass_fixture, assistant_client, auth_head
data=json.dumps(data),
headers=auth_header,
)
assert result.status == 200
assert result.status == HTTPStatus.OK
body = await result.json()
assert body.get("requestId") == reqid
devices = body["payload"]["devices"]
@ -350,7 +352,7 @@ async def test_query_humidifier_request(hass_fixture, assistant_client, auth_hea
data=json.dumps(data),
headers=auth_header,
)
assert result.status == 200
assert result.status == HTTPStatus.OK
body = await result.json()
assert body.get("requestId") == reqid
devices = body["payload"]["devices"]
@ -464,7 +466,7 @@ async def test_execute_request(hass_fixture, assistant_client, auth_header):
data=json.dumps(data),
headers=auth_header,
)
assert result.status == 200
assert result.status == HTTPStatus.OK
body = await result.json()
assert body.get("requestId") == reqid
commands = body["payload"]["commands"]

View file

@ -1,5 +1,6 @@
"""Test Google Assistant helpers."""
from datetime import timedelta
from http import HTTPStatus
from unittest.mock import Mock, call, patch
import pytest
@ -112,7 +113,7 @@ async def test_config_local_sdk(hass, hass_client):
"requestId": "mock-req-id",
},
)
assert resp.status == 200
assert resp.status == HTTPStatus.OK
result = await resp.json()
assert result["requestId"] == "mock-req-id"
@ -126,7 +127,7 @@ async def test_config_local_sdk(hass, hass_client):
# Webhook is no longer active
resp = await client.post("/api/webhook/mock-webhook-id")
assert resp.status == 200
assert resp.status == HTTPStatus.OK
assert await resp.read() == b""
@ -148,7 +149,7 @@ async def test_config_local_sdk_if_disabled(hass, hass_client):
resp = await client.post(
"/api/webhook/mock-webhook-id", json={"requestId": "mock-req-id"}
)
assert resp.status == 200
assert resp.status == HTTPStatus.OK
result = await resp.json()
assert result == {
"payload": {"errorCode": "deviceTurnedOff"},
@ -159,7 +160,7 @@ async def test_config_local_sdk_if_disabled(hass, hass_client):
# Webhook is no longer active
resp = await client.post("/api/webhook/mock-webhook-id")
assert resp.status == 200
assert resp.status == HTTPStatus.OK
assert await resp.read() == b""

View file

@ -1,5 +1,6 @@
"""Test Google http services."""
from datetime import datetime, timedelta, timezone
from http import HTTPStatus
from unittest.mock import ANY, patch
from homeassistant.components.google_assistant import GOOGLE_ASSISTANT_SCHEMA
@ -49,7 +50,7 @@ async def test_get_access_token(hass, aioclient_mock):
aioclient_mock.post(
HOMEGRAPH_TOKEN_URL,
status=200,
status=HTTPStatus.OK,
json={"access_token": "1234", "expires_in": 3600},
)
@ -106,10 +107,10 @@ async def test_call_homegraph_api(hass, aioclient_mock, hass_storage):
) as mock_get_token:
mock_get_token.return_value = MOCK_TOKEN
aioclient_mock.post(MOCK_URL, status=200, json={})
aioclient_mock.post(MOCK_URL, status=HTTPStatus.OK, json={})
res = await config.async_call_homegraph_api(MOCK_URL, MOCK_JSON)
assert res == 200
assert res == HTTPStatus.OK
assert mock_get_token.call_count == 1
assert aioclient_mock.call_count == 1
@ -129,7 +130,7 @@ async def test_call_homegraph_api_retry(hass, aioclient_mock, hass_storage):
) as mock_get_token:
mock_get_token.return_value = MOCK_TOKEN
aioclient_mock.post(MOCK_URL, status=401, json={})
aioclient_mock.post(MOCK_URL, status=HTTPStatus.UNAUTHORIZED, json={})
await config.async_call_homegraph_api(MOCK_URL, MOCK_JSON)

View file

@ -1,4 +1,6 @@
"""The tests for google-assistant init."""
from http import HTTPStatus
from homeassistant.components import google_assistant as ga
from homeassistant.core import Context
from homeassistant.setup import async_setup_component
@ -10,11 +12,11 @@ async def test_request_sync_service(aioclient_mock, hass):
"""Test that it posts to the request_sync url."""
aioclient_mock.post(
ga.const.HOMEGRAPH_TOKEN_URL,
status=200,
status=HTTPStatus.OK,
json={"access_token": "1234", "expires_in": 3600},
)
aioclient_mock.post(ga.const.REQUEST_SYNC_BASE_URL, status=200)
aioclient_mock.post(ga.const.REQUEST_SYNC_BASE_URL, status=HTTPStatus.OK)
await async_setup_component(
hass,

View file

@ -1,5 +1,6 @@
"""The tests for the Google Wifi platform."""
from datetime import datetime, timedelta
from http import HTTPStatus
from unittest.mock import Mock, patch
import homeassistant.components.google_wifi.sensor as google_wifi
@ -33,7 +34,7 @@ MOCK_DATA_MISSING = '{"software": {},' '"system": {},' '"wan": {}}'
async def test_setup_minimum(hass, requests_mock):
"""Test setup with minimum configuration."""
resource = f"http://{google_wifi.DEFAULT_HOST}{google_wifi.ENDPOINT}"
requests_mock.get(resource, status_code=200)
requests_mock.get(resource, status_code=HTTPStatus.OK)
assert await async_setup_component(
hass,
"sensor",
@ -45,7 +46,7 @@ async def test_setup_minimum(hass, requests_mock):
async def test_setup_get(hass, requests_mock):
"""Test setup with full configuration."""
resource = f"http://localhost{google_wifi.ENDPOINT}"
requests_mock.get(resource, status_code=200)
requests_mock.get(resource, status_code=HTTPStatus.OK)
assert await async_setup_component(
hass,
"sensor",
@ -74,7 +75,7 @@ def setup_api(hass, data, requests_mock):
now = datetime(1970, month=1, day=1)
sensor_dict = {}
with patch("homeassistant.util.dt.now", return_value=now):
requests_mock.get(resource, text=data, status_code=200)
requests_mock.get(resource, text=data, status_code=HTTPStatus.OK)
conditions = google_wifi.SENSOR_KEYS
api = google_wifi.GoogleWifiAPI("localhost", conditions)
for desc in google_wifi.SENSOR_TYPES:

View file

@ -1,4 +1,5 @@
"""The tests the for GPSLogger device tracker platform."""
from http import HTTPStatus
from unittest.mock import patch
import pytest
@ -8,12 +9,7 @@ from homeassistant.components import gpslogger, zone
from homeassistant.components.device_tracker import DOMAIN as DEVICE_TRACKER_DOMAIN
from homeassistant.components.gpslogger import DOMAIN, TRACKER_UPDATE
from homeassistant.config import async_process_ha_core_config
from homeassistant.const import (
HTTP_OK,
HTTP_UNPROCESSABLE_ENTITY,
STATE_HOME,
STATE_NOT_HOME,
)
from homeassistant.const import STATE_HOME, STATE_NOT_HOME
from homeassistant.helpers import device_registry as dr, entity_registry as er
from homeassistant.helpers.dispatcher import DATA_DISPATCHER
from homeassistant.setup import async_setup_component
@ -87,21 +83,21 @@ async def test_missing_data(hass, gpslogger_client, webhook_id):
# No data
req = await gpslogger_client.post(url)
await hass.async_block_till_done()
assert req.status == HTTP_UNPROCESSABLE_ENTITY
assert req.status == HTTPStatus.UNPROCESSABLE_ENTITY
# No latitude
copy = data.copy()
del copy["latitude"]
req = await gpslogger_client.post(url, data=copy)
await hass.async_block_till_done()
assert req.status == HTTP_UNPROCESSABLE_ENTITY
assert req.status == HTTPStatus.UNPROCESSABLE_ENTITY
# No device
copy = data.copy()
del copy["device"]
req = await gpslogger_client.post(url, data=copy)
await hass.async_block_till_done()
assert req.status == HTTP_UNPROCESSABLE_ENTITY
assert req.status == HTTPStatus.UNPROCESSABLE_ENTITY
async def test_enter_and_exit(hass, gpslogger_client, webhook_id):
@ -113,14 +109,14 @@ async def test_enter_and_exit(hass, gpslogger_client, webhook_id):
# Enter the Home
req = await gpslogger_client.post(url, data=data)
await hass.async_block_till_done()
assert req.status == HTTP_OK
assert req.status == HTTPStatus.OK
state_name = hass.states.get(f"{DEVICE_TRACKER_DOMAIN}.{data['device']}").state
assert state_name == STATE_HOME
# Enter Home again
req = await gpslogger_client.post(url, data=data)
await hass.async_block_till_done()
assert req.status == HTTP_OK
assert req.status == HTTPStatus.OK
state_name = hass.states.get(f"{DEVICE_TRACKER_DOMAIN}.{data['device']}").state
assert state_name == STATE_HOME
@ -130,7 +126,7 @@ async def test_enter_and_exit(hass, gpslogger_client, webhook_id):
# Enter Somewhere else
req = await gpslogger_client.post(url, data=data)
await hass.async_block_till_done()
assert req.status == HTTP_OK
assert req.status == HTTPStatus.OK
state_name = hass.states.get(f"{DEVICE_TRACKER_DOMAIN}.{data['device']}").state
assert state_name == STATE_NOT_HOME
@ -160,7 +156,7 @@ async def test_enter_with_attrs(hass, gpslogger_client, webhook_id):
req = await gpslogger_client.post(url, data=data)
await hass.async_block_till_done()
assert req.status == HTTP_OK
assert req.status == HTTPStatus.OK
state = hass.states.get(f"{DEVICE_TRACKER_DOMAIN}.{data['device']}")
assert state.state == STATE_NOT_HOME
assert state.attributes["gps_accuracy"] == 10.5
@ -186,7 +182,7 @@ async def test_enter_with_attrs(hass, gpslogger_client, webhook_id):
req = await gpslogger_client.post(url, data=data)
await hass.async_block_till_done()
assert req.status == HTTP_OK
assert req.status == HTTPStatus.OK
state = hass.states.get(f"{DEVICE_TRACKER_DOMAIN}.{data['device']}")
assert state.state == STATE_HOME
assert state.attributes["gps_accuracy"] == 123
@ -209,7 +205,7 @@ async def test_load_unload_entry(hass, gpslogger_client, webhook_id):
# Enter the Home
req = await gpslogger_client.post(url, data=data)
await hass.async_block_till_done()
assert req.status == HTTP_OK
assert req.status == HTTPStatus.OK
state_name = hass.states.get(f"{DEVICE_TRACKER_DOMAIN}.{data['device']}").state
assert state_name == STATE_HOME
assert len(hass.data[DATA_DISPATCHER][TRACKER_UPDATE]) == 1

View file

@ -1,4 +1,6 @@
"""Test the habitica module."""
from http import HTTPStatus
import pytest
from homeassistant.components.habitica.const import (
@ -82,7 +84,7 @@ def common_requests(aioclient_mock):
aioclient_mock.post(
"https://habitica.com/api/v3/tasks/user",
status=201,
status=HTTPStatus.CREATED,
json={"data": TEST_API_CALL_ARGS},
)

View file

@ -1,4 +1,5 @@
"""Test add-on panel."""
from http import HTTPStatus
from unittest.mock import patch
import pytest
@ -104,10 +105,10 @@ async def test_hassio_addon_panel_api(hass, aioclient_mock, hassio_env, hass_cli
hass_client = await hass_client()
resp = await hass_client.post("/api/hassio_push/panel/test2")
assert resp.status == 400
assert resp.status == HTTPStatus.BAD_REQUEST
resp = await hass_client.post("/api/hassio_push/panel/test1")
assert resp.status == 200
assert resp.status == HTTPStatus.OK
assert mock_panel.call_count == 2
mock_panel.assert_called_with(

View file

@ -1,5 +1,6 @@
"""The tests for the hassio component."""
from http import HTTPStatus
from unittest.mock import Mock, patch
from homeassistant.auth.providers.homeassistant import InvalidAuth
@ -17,7 +18,7 @@ async def test_auth_success(hass, hassio_client_supervisor):
)
# Check we got right response
assert resp.status == 200
assert resp.status == HTTPStatus.OK
mock_login.assert_called_with("test", "123456")
@ -33,7 +34,7 @@ async def test_auth_fails_no_supervisor(hass, hassio_client):
)
# Check we got right response
assert resp.status == 401
assert resp.status == HTTPStatus.UNAUTHORIZED
assert not mock_login.called
@ -49,7 +50,7 @@ async def test_auth_fails_no_auth(hass, hassio_noauth_client):
)
# Check we got right response
assert resp.status == 401
assert resp.status == HTTPStatus.UNAUTHORIZED
assert not mock_login.called
@ -66,7 +67,7 @@ async def test_login_error(hass, hassio_client_supervisor):
)
# Check we got right response
assert resp.status == 404
assert resp.status == HTTPStatus.NOT_FOUND
mock_login.assert_called_with("test", "123456")
@ -80,7 +81,7 @@ async def test_login_no_data(hass, hassio_client_supervisor):
resp = await hassio_client_supervisor.post("/api/hassio_auth")
# Check we got right response
assert resp.status == 400
assert resp.status == HTTPStatus.BAD_REQUEST
assert not mock_login.called
@ -96,7 +97,7 @@ async def test_login_no_username(hass, hassio_client_supervisor):
)
# Check we got right response
assert resp.status == 400
assert resp.status == HTTPStatus.BAD_REQUEST
assert not mock_login.called
@ -117,7 +118,7 @@ async def test_login_success_extra(hass, hassio_client_supervisor):
)
# Check we got right response
assert resp.status == 200
assert resp.status == HTTPStatus.OK
mock_login.assert_called_with("test", "123456")
@ -133,7 +134,7 @@ async def test_password_success(hass, hassio_client_supervisor):
)
# Check we got right response
assert resp.status == 200
assert resp.status == HTTPStatus.OK
mock_change.assert_called_with("test", "123456")
@ -145,7 +146,7 @@ async def test_password_fails_no_supervisor(hass, hassio_client):
)
# Check we got right response
assert resp.status == 401
assert resp.status == HTTPStatus.UNAUTHORIZED
async def test_password_fails_no_auth(hass, hassio_noauth_client):
@ -156,7 +157,7 @@ async def test_password_fails_no_auth(hass, hassio_noauth_client):
)
# Check we got right response
assert resp.status == 401
assert resp.status == HTTPStatus.UNAUTHORIZED
async def test_password_no_user(hass, hassio_client_supervisor):
@ -167,4 +168,4 @@ async def test_password_no_user(hass, hassio_client_supervisor):
)
# Check we got right response
assert resp.status == 404
assert resp.status == HTTPStatus.NOT_FOUND

View file

@ -1,4 +1,5 @@
"""Test config flow."""
from http import HTTPStatus
from unittest.mock import Mock, patch
from homeassistant.components.hassio.handler import HassioAPIError
@ -154,7 +155,7 @@ async def test_hassio_discovery_webhook(hass, aioclient_mock, hassio_client):
)
await hass.async_block_till_done()
assert resp.status == 200
assert resp.status == HTTPStatus.OK
assert aioclient_mock.call_count == 2
assert mock_mqtt.called
mock_mqtt.assert_called_with(

View file

@ -1,5 +1,6 @@
"""The tests for the hassio component."""
import asyncio
from http import HTTPStatus
from aiohttp import StreamReader
import pytest
@ -14,7 +15,7 @@ async def test_forward_request(hassio_client, aioclient_mock):
resp = await hassio_client.post("/api/hassio/beer")
# Check we got right response
assert resp.status == 200
assert resp.status == HTTPStatus.OK
body = await resp.text()
assert body == "response"
@ -30,7 +31,7 @@ async def test_auth_required_forward_request(hassio_noauth_client, build_type):
resp = await hassio_noauth_client.post(f"/api/hassio/{build_type}")
# Check we got right response
assert resp.status == 401
assert resp.status == HTTPStatus.UNAUTHORIZED
@pytest.mark.parametrize(
@ -53,7 +54,7 @@ async def test_forward_request_no_auth_for_panel(
resp = await hassio_client.get(f"/api/hassio/{build_type}")
# Check we got right response
assert resp.status == 200
assert resp.status == HTTPStatus.OK
body = await resp.text()
assert body == "response"
@ -68,7 +69,7 @@ async def test_forward_request_no_auth_for_logo(hassio_client, aioclient_mock):
resp = await hassio_client.get("/api/hassio/addons/bl_b392/logo")
# Check we got right response
assert resp.status == 200
assert resp.status == HTTPStatus.OK
body = await resp.text()
assert body == "response"
@ -83,7 +84,7 @@ async def test_forward_request_no_auth_for_icon(hassio_client, aioclient_mock):
resp = await hassio_client.get("/api/hassio/addons/bl_b392/icon")
# Check we got right response
assert resp.status == 200
assert resp.status == HTTPStatus.OK
body = await resp.text()
assert body == "response"
@ -98,7 +99,7 @@ async def test_forward_log_request(hassio_client, aioclient_mock):
resp = await hassio_client.get("/api/hassio/beer/logs")
# Check we got right response
assert resp.status == 200
assert resp.status == HTTPStatus.OK
body = await resp.text()
assert body == "\033[32mresponse\033[0m"
@ -111,7 +112,7 @@ async def test_bad_gateway_when_cannot_find_supervisor(hassio_client, aioclient_
aioclient_mock.get("http://127.0.0.1/addons/test/info", exc=asyncio.TimeoutError)
resp = await hassio_client.get("/api/hassio/addons/test/info")
assert resp.status == 502
assert resp.status == HTTPStatus.BAD_GATEWAY
async def test_forwarding_user_info(hassio_client, hass_admin_user, aioclient_mock):
@ -121,7 +122,7 @@ async def test_forwarding_user_info(hassio_client, hass_admin_user, aioclient_mo
resp = await hassio_client.get("/api/hassio/hello")
# Check we got right response
assert resp.status == 200
assert resp.status == HTTPStatus.OK
assert len(aioclient_mock.mock_calls) == 1
@ -140,7 +141,7 @@ async def test_backup_upload_headers(hassio_client, aioclient_mock, caplog):
)
# Check we got right response
assert resp.status == 200
assert resp.status == HTTPStatus.OK
assert len(aioclient_mock.mock_calls) == 1
@ -162,7 +163,7 @@ async def test_backup_download_headers(hassio_client, aioclient_mock):
resp = await hassio_client.get("/api/hassio/backups/slug/download")
# Check we got right response
assert resp.status == 200
assert resp.status == HTTPStatus.OK
assert len(aioclient_mock.mock_calls) == 1
@ -196,8 +197,8 @@ async def test_entrypoint_cache_control(hassio_client, aioclient_mock):
resp2 = await hassio_client.get("/api/hassio/app/entrypoint.fdhkusd8y43r.js")
# Check we got right response
assert resp1.status == 200
assert resp2.status == 200
assert resp1.status == HTTPStatus.OK
assert resp2.status == HTTPStatus.OK
assert len(aioclient_mock.mock_calls) == 2
assert resp1.headers["Cache-Control"] == "no-store, max-age=0"

View file

@ -1,5 +1,5 @@
"""The tests for the hassio component."""
from http import HTTPStatus
from unittest.mock import MagicMock, patch
from aiohttp.hdrs import X_FORWARDED_FOR, X_FORWARDED_HOST, X_FORWARDED_PROTO
@ -29,7 +29,7 @@ async def test_ingress_request_get(hassio_client, build_type, aioclient_mock):
)
# Check we got right response
assert resp.status == 200
assert resp.status == HTTPStatus.OK
body = await resp.text()
assert body == "test"
@ -69,7 +69,7 @@ async def test_ingress_request_post(hassio_client, build_type, aioclient_mock):
)
# Check we got right response
assert resp.status == 200
assert resp.status == HTTPStatus.OK
body = await resp.text()
assert body == "test"
@ -109,7 +109,7 @@ async def test_ingress_request_put(hassio_client, build_type, aioclient_mock):
)
# Check we got right response
assert resp.status == 200
assert resp.status == HTTPStatus.OK
body = await resp.text()
assert body == "test"
@ -149,7 +149,7 @@ async def test_ingress_request_delete(hassio_client, build_type, aioclient_mock)
)
# Check we got right response
assert resp.status == 200
assert resp.status == HTTPStatus.OK
body = await resp.text()
assert body == "test"
@ -189,7 +189,7 @@ async def test_ingress_request_patch(hassio_client, build_type, aioclient_mock):
)
# Check we got right response
assert resp.status == 200
assert resp.status == HTTPStatus.OK
body = await resp.text()
assert body == "test"
@ -229,7 +229,7 @@ async def test_ingress_request_options(hassio_client, build_type, aioclient_mock
)
# Check we got right response
assert resp.status == 200
assert resp.status == HTTPStatus.OK
body = await resp.text()
assert body == "test"
@ -302,4 +302,4 @@ async def test_ingress_missing_peername(hassio_client, aioclient_mock, caplog):
assert "Can't set forward_for header, missing peername" in caplog.text
# Check we got right response
assert resp.status == 400
assert resp.status == HTTPStatus.BAD_REQUEST

View file

@ -1,6 +1,7 @@
"""The tests the History component."""
# pylint: disable=protected-access,invalid-name
from datetime import timedelta
from http import HTTPStatus
import json
from unittest.mock import patch, sentinel
@ -586,7 +587,7 @@ async def test_fetch_period_api(hass, hass_client):
await hass.async_add_executor_job(hass.data[recorder.DATA_INSTANCE].block_till_done)
client = await hass_client()
response = await client.get(f"/api/history/period/{dt_util.utcnow().isoformat()}")
assert response.status == 200
assert response.status == HTTPStatus.OK
async def test_fetch_period_api_with_use_include_order(hass, hass_client):
@ -598,7 +599,7 @@ async def test_fetch_period_api_with_use_include_order(hass, hass_client):
await hass.async_add_executor_job(hass.data[recorder.DATA_INSTANCE].block_till_done)
client = await hass_client()
response = await client.get(f"/api/history/period/{dt_util.utcnow().isoformat()}")
assert response.status == 200
assert response.status == HTTPStatus.OK
async def test_fetch_period_api_with_minimal_response(hass, hass_client):
@ -610,7 +611,7 @@ async def test_fetch_period_api_with_minimal_response(hass, hass_client):
response = await client.get(
f"/api/history/period/{dt_util.utcnow().isoformat()}?minimal_response"
)
assert response.status == 200
assert response.status == HTTPStatus.OK
async def test_fetch_period_api_with_no_timestamp(hass, hass_client):
@ -620,7 +621,7 @@ async def test_fetch_period_api_with_no_timestamp(hass, hass_client):
await hass.async_add_executor_job(hass.data[recorder.DATA_INSTANCE].block_till_done)
client = await hass_client()
response = await client.get("/api/history/period")
assert response.status == 200
assert response.status == HTTPStatus.OK
async def test_fetch_period_api_with_include_order(hass, hass_client):
@ -642,7 +643,7 @@ async def test_fetch_period_api_with_include_order(hass, hass_client):
f"/api/history/period/{dt_util.utcnow().isoformat()}",
params={"filter_entity_id": "non.existing,something.else"},
)
assert response.status == 200
assert response.status == HTTPStatus.OK
async def test_fetch_period_api_with_entity_glob_include(hass, hass_client):
@ -672,7 +673,7 @@ async def test_fetch_period_api_with_entity_glob_include(hass, hass_client):
response = await client.get(
f"/api/history/period/{dt_util.utcnow().isoformat()}",
)
assert response.status == 200
assert response.status == HTTPStatus.OK
response_json = await response.json()
assert response_json[0][0]["entity_id"] == "light.kitchen"
@ -710,7 +711,7 @@ async def test_fetch_period_api_with_entity_glob_exclude(hass, hass_client):
response = await client.get(
f"/api/history/period/{dt_util.utcnow().isoformat()}",
)
assert response.status == 200
assert response.status == HTTPStatus.OK
response_json = await response.json()
assert len(response_json) == 2
assert response_json[0][0]["entity_id"] == "light.cow"
@ -754,7 +755,7 @@ async def test_fetch_period_api_with_entity_glob_include_and_exclude(hass, hass_
response = await client.get(
f"/api/history/period/{dt_util.utcnow().isoformat()}",
)
assert response.status == 200
assert response.status == HTTPStatus.OK
response_json = await response.json()
assert len(response_json) == 3
assert response_json[0][0]["entity_id"] == "light.match"
@ -785,7 +786,7 @@ async def test_entity_ids_limit_via_api(hass, hass_client):
response = await client.get(
f"/api/history/period/{dt_util.utcnow().isoformat()}?filter_entity_id=light.kitchen,light.cow",
)
assert response.status == 200
assert response.status == HTTPStatus.OK
response_json = await response.json()
assert len(response_json) == 2
assert response_json[0][0]["entity_id"] == "light.kitchen"
@ -815,7 +816,7 @@ async def test_entity_ids_limit_via_api_with_skip_initial_state(hass, hass_clien
response = await client.get(
f"/api/history/period/{dt_util.utcnow().isoformat()}?filter_entity_id=light.kitchen,light.cow&skip_initial_state",
)
assert response.status == 200
assert response.status == HTTPStatus.OK
response_json = await response.json()
assert len(response_json) == 0
@ -823,7 +824,7 @@ async def test_entity_ids_limit_via_api_with_skip_initial_state(hass, hass_clien
response = await client.get(
f"/api/history/period/{when.isoformat()}?filter_entity_id=light.kitchen,light.cow&skip_initial_state",
)
assert response.status == 200
assert response.status == HTTPStatus.OK
response_json = await response.json()
assert len(response_json) == 2
assert response_json[0][0]["entity_id"] == "light.kitchen"

View file

@ -1,4 +1,5 @@
"""Test the Home Connect config flow."""
from http import HTTPStatus
from unittest.mock import patch
from homeassistant import config_entries, data_entry_flow, setup
@ -50,7 +51,7 @@ async def test_full_flow(
client = await hass_client_no_auth()
resp = await client.get(f"/auth/external/callback?code=abcd&state={state}")
assert resp.status == 200
assert resp.status == HTTPStatus.OK
assert resp.headers["content-type"] == "text/html; charset=utf-8"
aioclient_mock.post(

View file

@ -1,4 +1,5 @@
"""Test the Legrand Home+ Control config flow."""
from http import HTTPStatus
from unittest.mock import patch
from homeassistant import config_entries, data_entry_flow, setup
@ -56,7 +57,7 @@ async def test_full_flow(
client = await hass_client_no_auth()
resp = await client.get(f"/auth/external/callback?code=abcd&state={state}")
assert resp.status == 200
assert resp.status == HTTPStatus.OK
assert resp.headers["content-type"] == "text/html; charset=utf-8"
aioclient_mock.post(
@ -174,7 +175,7 @@ async def test_abort_if_invalid_token(
client = await hass_client_no_auth()
resp = await client.get(f"/auth/external/callback?code=abcd&state={state}")
assert resp.status == 200
assert resp.status == HTTPStatus.OK
assert resp.headers["content-type"] == "text/html; charset=utf-8"
aioclient_mock.post(

View file

@ -1,11 +1,11 @@
"""Test HTML5 notify platform."""
from http import HTTPStatus
import json
from unittest.mock import MagicMock, mock_open, patch
from aiohttp.hdrs import AUTHORIZATION
import homeassistant.components.html5.notify as html5
from homeassistant.const import HTTP_INTERNAL_SERVER_ERROR
from homeassistant.exceptions import HomeAssistantError
from homeassistant.setup import async_setup_component
@ -294,7 +294,7 @@ async def test_registering_new_device_view(hass, hass_client):
with patch("homeassistant.components.html5.notify.save_json") as mock_save:
resp = await client.post(REGISTER_URL, data=json.dumps(SUBSCRIPTION_1))
assert resp.status == 200
assert resp.status == HTTPStatus.OK
assert len(mock_save.mock_calls) == 1
assert mock_save.mock_calls[0][1][1] == {"unnamed device": SUBSCRIPTION_1}
@ -309,7 +309,7 @@ async def test_registering_new_device_view_with_name(hass, hass_client):
with patch("homeassistant.components.html5.notify.save_json") as mock_save:
resp = await client.post(REGISTER_URL, data=json.dumps(SUB_WITH_NAME))
assert resp.status == 200
assert resp.status == HTTPStatus.OK
assert len(mock_save.mock_calls) == 1
assert mock_save.mock_calls[0][1][1] == {"test device": SUBSCRIPTION_1}
@ -321,7 +321,7 @@ async def test_registering_new_device_expiration_view(hass, hass_client):
with patch("homeassistant.components.html5.notify.save_json") as mock_save:
resp = await client.post(REGISTER_URL, data=json.dumps(SUBSCRIPTION_4))
assert resp.status == 200
assert resp.status == HTTPStatus.OK
assert mock_save.mock_calls[0][1][1] == {"unnamed device": SUBSCRIPTION_4}
@ -336,7 +336,7 @@ async def test_registering_new_device_fails_view(hass, hass_client):
):
resp = await client.post(REGISTER_URL, data=json.dumps(SUBSCRIPTION_4))
assert resp.status == HTTP_INTERNAL_SERVER_ERROR
assert resp.status == HTTPStatus.INTERNAL_SERVER_ERROR
assert registrations == {}
@ -349,7 +349,7 @@ async def test_registering_existing_device_view(hass, hass_client):
await client.post(REGISTER_URL, data=json.dumps(SUBSCRIPTION_1))
resp = await client.post(REGISTER_URL, data=json.dumps(SUBSCRIPTION_4))
assert resp.status == 200
assert resp.status == HTTPStatus.OK
assert mock_save.mock_calls[0][1][1] == {"unnamed device": SUBSCRIPTION_4}
assert registrations == {"unnamed device": SUBSCRIPTION_4}
@ -366,7 +366,7 @@ async def test_registering_existing_device_view_with_name(hass, hass_client):
await client.post(REGISTER_URL, data=json.dumps(SUB_WITH_NAME))
resp = await client.post(REGISTER_URL, data=json.dumps(SUBSCRIPTION_4))
assert resp.status == 200
assert resp.status == HTTPStatus.OK
assert mock_save.mock_calls[0][1][1] == {"test device": SUBSCRIPTION_4}
assert registrations == {"test device": SUBSCRIPTION_4}
@ -381,7 +381,7 @@ async def test_registering_existing_device_fails_view(hass, hass_client):
mock_save.side_effect = HomeAssistantError
resp = await client.post(REGISTER_URL, data=json.dumps(SUBSCRIPTION_4))
assert resp.status == HTTP_INTERNAL_SERVER_ERROR
assert resp.status == HTTPStatus.INTERNAL_SERVER_ERROR
assert registrations == {"unnamed device": SUBSCRIPTION_1}
@ -393,17 +393,17 @@ async def test_registering_new_device_validation(hass, hass_client):
REGISTER_URL,
data=json.dumps({"browser": "invalid browser", "subscription": "sub info"}),
)
assert resp.status == 400
assert resp.status == HTTPStatus.BAD_REQUEST
resp = await client.post(REGISTER_URL, data=json.dumps({"browser": "chrome"}))
assert resp.status == 400
assert resp.status == HTTPStatus.BAD_REQUEST
with patch("homeassistant.components.html5.notify.save_json", return_value=False):
resp = await client.post(
REGISTER_URL,
data=json.dumps({"browser": "chrome", "subscription": "sub info"}),
)
assert resp.status == 400
assert resp.status == HTTPStatus.BAD_REQUEST
async def test_unregistering_device_view(hass, hass_client):
@ -417,7 +417,7 @@ async def test_unregistering_device_view(hass, hass_client):
data=json.dumps({"subscription": SUBSCRIPTION_1["subscription"]}),
)
assert resp.status == 200
assert resp.status == HTTPStatus.OK
assert len(mock_save.mock_calls) == 1
assert registrations == {"other device": SUBSCRIPTION_2}
@ -433,7 +433,7 @@ async def test_unregister_device_view_handle_unknown_subscription(hass, hass_cli
data=json.dumps({"subscription": SUBSCRIPTION_3["subscription"]}),
)
assert resp.status == 200, resp.response
assert resp.status == HTTPStatus.OK, resp.response
assert registrations == {}
assert len(mock_save.mock_calls) == 0
@ -452,7 +452,7 @@ async def test_unregistering_device_view_handles_save_error(hass, hass_client):
data=json.dumps({"subscription": SUBSCRIPTION_1["subscription"]}),
)
assert resp.status == HTTP_INTERNAL_SERVER_ERROR, resp.response
assert resp.status == HTTPStatus.INTERNAL_SERVER_ERROR, resp.response
assert registrations == {
"some device": SUBSCRIPTION_1,
"other device": SUBSCRIPTION_2,
@ -469,7 +469,7 @@ async def test_callback_view_no_jwt(hass, hass_client):
),
)
assert resp.status == 401
assert resp.status == HTTPStatus.UNAUTHORIZED
async def test_callback_view_with_jwt(hass, hass_client):
@ -504,7 +504,7 @@ async def test_callback_view_with_jwt(hass, hass_client):
PUBLISH_URL, json={"type": "push"}, headers={AUTHORIZATION: bearer_token}
)
assert resp.status == 200
assert resp.status == HTTPStatus.OK
body = await resp.json()
assert body == {"event": "push", "status": "ok"}

View file

@ -1,5 +1,6 @@
"""The tests for the Home Assistant HTTP component."""
from datetime import timedelta
from http import HTTPStatus
from ipaddress import ip_network
from unittest.mock import patch
@ -94,10 +95,10 @@ async def test_cant_access_with_password_in_header(
client = await aiohttp_client(app)
req = await client.get("/", headers={HTTP_HEADER_HA_AUTH: API_PASSWORD})
assert req.status == 401
assert req.status == HTTPStatus.UNAUTHORIZED
req = await client.get("/", headers={HTTP_HEADER_HA_AUTH: "wrong-pass"})
assert req.status == 401
assert req.status == HTTPStatus.UNAUTHORIZED
async def test_cant_access_with_password_in_query(
@ -108,13 +109,13 @@ async def test_cant_access_with_password_in_query(
client = await aiohttp_client(app)
resp = await client.get("/", params={"api_password": API_PASSWORD})
assert resp.status == 401
assert resp.status == HTTPStatus.UNAUTHORIZED
resp = await client.get("/")
assert resp.status == 401
assert resp.status == HTTPStatus.UNAUTHORIZED
resp = await client.get("/", params={"api_password": "wrong-password"})
assert resp.status == 401
assert resp.status == HTTPStatus.UNAUTHORIZED
async def test_basic_auth_does_not_work(app, aiohttp_client, hass, legacy_auth):
@ -123,16 +124,16 @@ async def test_basic_auth_does_not_work(app, aiohttp_client, hass, legacy_auth):
client = await aiohttp_client(app)
req = await client.get("/", auth=BasicAuth("homeassistant", API_PASSWORD))
assert req.status == 401
assert req.status == HTTPStatus.UNAUTHORIZED
req = await client.get("/", auth=BasicAuth("wrong_username", API_PASSWORD))
assert req.status == 401
assert req.status == HTTPStatus.UNAUTHORIZED
req = await client.get("/", auth=BasicAuth("homeassistant", "wrong password"))
assert req.status == 401
assert req.status == HTTPStatus.UNAUTHORIZED
req = await client.get("/", headers={"authorization": "NotBasic abcdefg"})
assert req.status == 401
assert req.status == HTTPStatus.UNAUTHORIZED
async def test_cannot_access_with_trusted_ip(
@ -147,12 +148,16 @@ async def test_cannot_access_with_trusted_ip(
for remote_addr in UNTRUSTED_ADDRESSES:
set_mock_ip(remote_addr)
resp = await client.get("/")
assert resp.status == 401, f"{remote_addr} shouldn't be trusted"
assert (
resp.status == HTTPStatus.UNAUTHORIZED
), f"{remote_addr} shouldn't be trusted"
for remote_addr in TRUSTED_ADDRESSES:
set_mock_ip(remote_addr)
resp = await client.get("/")
assert resp.status == 401, f"{remote_addr} shouldn't be trusted"
assert (
resp.status == HTTPStatus.UNAUTHORIZED
), f"{remote_addr} shouldn't be trusted"
async def test_auth_active_access_with_access_token_in_header(
@ -165,27 +170,27 @@ async def test_auth_active_access_with_access_token_in_header(
refresh_token = await hass.auth.async_validate_access_token(hass_access_token)
req = await client.get("/", headers={"Authorization": f"Bearer {token}"})
assert req.status == 200
assert req.status == HTTPStatus.OK
assert await req.json() == {"user_id": refresh_token.user.id}
req = await client.get("/", headers={"AUTHORIZATION": f"Bearer {token}"})
assert req.status == 200
assert req.status == HTTPStatus.OK
assert await req.json() == {"user_id": refresh_token.user.id}
req = await client.get("/", headers={"authorization": f"Bearer {token}"})
assert req.status == 200
assert req.status == HTTPStatus.OK
assert await req.json() == {"user_id": refresh_token.user.id}
req = await client.get("/", headers={"Authorization": token})
assert req.status == 401
assert req.status == HTTPStatus.UNAUTHORIZED
req = await client.get("/", headers={"Authorization": f"BEARER {token}"})
assert req.status == 401
assert req.status == HTTPStatus.UNAUTHORIZED
refresh_token = await hass.auth.async_validate_access_token(hass_access_token)
refresh_token.user.is_active = False
req = await client.get("/", headers={"Authorization": f"Bearer {token}"})
assert req.status == 401
assert req.status == HTTPStatus.UNAUTHORIZED
async def test_auth_active_access_with_trusted_ip(
@ -200,12 +205,16 @@ async def test_auth_active_access_with_trusted_ip(
for remote_addr in UNTRUSTED_ADDRESSES:
set_mock_ip(remote_addr)
resp = await client.get("/")
assert resp.status == 401, f"{remote_addr} shouldn't be trusted"
assert (
resp.status == HTTPStatus.UNAUTHORIZED
), f"{remote_addr} shouldn't be trusted"
for remote_addr in TRUSTED_ADDRESSES:
set_mock_ip(remote_addr)
resp = await client.get("/")
assert resp.status == 401, f"{remote_addr} shouldn't be trusted"
assert (
resp.status == HTTPStatus.UNAUTHORIZED
), f"{remote_addr} shouldn't be trusted"
async def test_auth_legacy_support_api_password_cannot_access(
@ -216,13 +225,13 @@ async def test_auth_legacy_support_api_password_cannot_access(
client = await aiohttp_client(app)
req = await client.get("/", headers={HTTP_HEADER_HA_AUTH: API_PASSWORD})
assert req.status == 401
assert req.status == HTTPStatus.UNAUTHORIZED
resp = await client.get("/", params={"api_password": API_PASSWORD})
assert resp.status == 401
assert resp.status == HTTPStatus.UNAUTHORIZED
req = await client.get("/", auth=BasicAuth("homeassistant", API_PASSWORD))
assert req.status == 401
assert req.status == HTTPStatus.UNAUTHORIZED
async def test_auth_access_signed_path(hass, app, aiohttp_client, hass_access_token):
@ -237,17 +246,17 @@ async def test_auth_access_signed_path(hass, app, aiohttp_client, hass_access_to
signed_path = async_sign_path(hass, refresh_token.id, "/", timedelta(seconds=5))
req = await client.get(signed_path)
assert req.status == 200
assert req.status == HTTPStatus.OK
data = await req.json()
assert data["user_id"] == refresh_token.user.id
# Use signature on other path
req = await client.get("/another_path?{}".format(signed_path.split("?")[1]))
assert req.status == 401
assert req.status == HTTPStatus.UNAUTHORIZED
# We only allow GET
req = await client.post(signed_path)
assert req.status == 401
assert req.status == HTTPStatus.UNAUTHORIZED
# Never valid as expired in the past.
expired_signed_path = async_sign_path(
@ -255,9 +264,9 @@ async def test_auth_access_signed_path(hass, app, aiohttp_client, hass_access_to
)
req = await client.get(expired_signed_path)
assert req.status == 401
assert req.status == HTTPStatus.UNAUTHORIZED
# refresh token gone should also invalidate signature
await hass.auth.async_remove_refresh_token(refresh_token)
req = await client.get(signed_path)
assert req.status == 401
assert req.status == HTTPStatus.UNAUTHORIZED

View file

@ -1,4 +1,6 @@
"""The tests for the Home Assistant HTTP component."""
from http import HTTPStatus
# pylint: disable=protected-access
from ipaddress import ip_address
import os
@ -19,7 +21,6 @@ from homeassistant.components.http.ban import (
setup_bans,
)
from homeassistant.components.http.view import request_handler_factory
from homeassistant.const import HTTP_FORBIDDEN
from homeassistant.setup import async_setup_component
from . import mock_real_ip
@ -65,14 +66,16 @@ async def test_access_from_banned_ip(hass, aiohttp_client):
for remote_addr in BANNED_IPS:
set_real_ip(remote_addr)
resp = await client.get("/")
assert resp.status == HTTP_FORBIDDEN
assert resp.status == HTTPStatus.FORBIDDEN
@pytest.mark.parametrize(
"remote_addr, bans, status",
list(
zip(
BANNED_IPS_WITH_SUPERVISOR, [1, 1, 0], [HTTP_FORBIDDEN, HTTP_FORBIDDEN, 401]
BANNED_IPS_WITH_SUPERVISOR,
[1, 1, 0],
[HTTPStatus.FORBIDDEN, HTTPStatus.FORBIDDEN, HTTPStatus.UNAUTHORIZED],
)
),
)
@ -104,7 +107,7 @@ async def test_access_from_supervisor_ip(
"homeassistant.components.http.ban.open", m_open, create=True
):
resp = await client.get("/")
assert resp.status == 401
assert resp.status == HTTPStatus.UNAUTHORIZED
assert len(app[KEY_BANNED_IPS]) == bans
assert m_open.call_count == bans
@ -155,19 +158,19 @@ async def test_ip_bans_file_creation(hass, aiohttp_client):
with patch("homeassistant.components.http.ban.open", m_open, create=True):
resp = await client.get("/")
assert resp.status == 401
assert resp.status == HTTPStatus.UNAUTHORIZED
assert len(app[KEY_BANNED_IPS]) == len(BANNED_IPS)
assert m_open.call_count == 0
resp = await client.get("/")
assert resp.status == 401
assert resp.status == HTTPStatus.UNAUTHORIZED
assert len(app[KEY_BANNED_IPS]) == len(BANNED_IPS) + 1
m_open.assert_called_once_with(
hass.config.path(IP_BANS_FILE), "a", encoding="utf8"
)
resp = await client.get("/")
assert resp.status == HTTP_FORBIDDEN
assert resp.status == HTTPStatus.FORBIDDEN
assert m_open.call_count == 1
assert (
@ -216,19 +219,19 @@ async def test_failed_login_attempts_counter(hass, aiohttp_client):
client = await aiohttp_client(app)
resp = await client.get("/auth_false")
assert resp.status == 401
assert resp.status == HTTPStatus.UNAUTHORIZED
assert app[KEY_FAILED_LOGIN_ATTEMPTS][remote_ip] == 1
resp = await client.get("/auth_false")
assert resp.status == 401
assert resp.status == HTTPStatus.UNAUTHORIZED
assert app[KEY_FAILED_LOGIN_ATTEMPTS][remote_ip] == 2
resp = await client.get("/")
assert resp.status == 200
assert resp.status == HTTPStatus.OK
assert app[KEY_FAILED_LOGIN_ATTEMPTS][remote_ip] == 2
# This used to check that with trusted networks we reset login attempts
# We no longer support trusted networks.
resp = await client.get("/auth_true")
assert resp.status == 200
assert resp.status == HTTPStatus.OK
assert app[KEY_FAILED_LOGIN_ATTEMPTS][remote_ip] == 2

View file

@ -1,4 +1,5 @@
"""Test cors for the HTTP component."""
from http import HTTPStatus
from pathlib import Path
from unittest.mock import patch
@ -59,28 +60,28 @@ def client(loop, aiohttp_client):
async def test_cors_requests(client):
"""Test cross origin requests."""
req = await client.get("/", headers={ORIGIN: TRUSTED_ORIGIN})
assert req.status == 200
assert req.status == HTTPStatus.OK
assert req.headers[ACCESS_CONTROL_ALLOW_ORIGIN] == TRUSTED_ORIGIN
# With password in URL
req = await client.get(
"/", params={"api_password": "some-pass"}, headers={ORIGIN: TRUSTED_ORIGIN}
)
assert req.status == 200
assert req.status == HTTPStatus.OK
assert req.headers[ACCESS_CONTROL_ALLOW_ORIGIN] == TRUSTED_ORIGIN
# With password in headers
req = await client.get(
"/", headers={HTTP_HEADER_HA_AUTH: "some-pass", ORIGIN: TRUSTED_ORIGIN}
)
assert req.status == 200
assert req.status == HTTPStatus.OK
assert req.headers[ACCESS_CONTROL_ALLOW_ORIGIN] == TRUSTED_ORIGIN
# With auth token in headers
req = await client.get(
"/", headers={AUTHORIZATION: "Bearer some-token", ORIGIN: TRUSTED_ORIGIN}
)
assert req.status == 200
assert req.status == HTTPStatus.OK
assert req.headers[ACCESS_CONTROL_ALLOW_ORIGIN] == TRUSTED_ORIGIN
@ -95,7 +96,7 @@ async def test_cors_preflight_allowed(client):
},
)
assert req.status == 200
assert req.status == HTTPStatus.OK
assert req.headers[ACCESS_CONTROL_ALLOW_ORIGIN] == TRUSTED_ORIGIN
assert req.headers[ACCESS_CONTROL_ALLOW_HEADERS] == "X-REQUESTED-WITH"
@ -139,7 +140,7 @@ async def test_cors_works_with_frontend(hass, hass_client):
)
client = await hass_client()
resp = await client.get("/")
assert resp.status == 200
assert resp.status == HTTPStatus.OK
async def test_cors_on_static_files(hass, hass_client):
@ -157,5 +158,5 @@ async def test_cors_on_static_files(hass, hass_client):
ACCESS_CONTROL_REQUEST_METHOD: "GET",
},
)
assert resp.status == 200
assert resp.status == HTTPStatus.OK
assert resp.headers[ACCESS_CONTROL_ALLOW_ORIGIN] == "http://www.example.com"

View file

@ -1,4 +1,5 @@
"""Test data validator decorator."""
from http import HTTPStatus
from unittest.mock import Mock
from aiohttp import web
@ -35,13 +36,13 @@ async def test_validator(aiohttp_client):
)
resp = await client.post("/", json={"test": "bla"})
assert resp.status == 200
assert resp.status == HTTPStatus.OK
resp = await client.post("/", json={"test": 100})
assert resp.status == 400
assert resp.status == HTTPStatus.BAD_REQUEST
resp = await client.post("/")
assert resp.status == 400
assert resp.status == HTTPStatus.BAD_REQUEST
async def test_validator_allow_empty(aiohttp_client):
@ -61,10 +62,10 @@ async def test_validator_allow_empty(aiohttp_client):
)
resp = await client.post("/", json={"test": "bla"})
assert resp.status == 200
assert resp.status == HTTPStatus.OK
resp = await client.post("/", json={"test": 100})
assert resp.status == 400
assert resp.status == HTTPStatus.BAD_REQUEST
resp = await client.post("/")
assert resp.status == 200
assert resp.status == HTTPStatus.OK

View file

@ -1,4 +1,5 @@
"""Test real forwarded middleware."""
from http import HTTPStatus
from ipaddress import ip_network
from unittest.mock import Mock, patch
@ -34,7 +35,7 @@ async def test_x_forwarded_for_without_trusted_proxy(aiohttp_client, caplog):
mock_api_client = await aiohttp_client(app)
resp = await mock_api_client.get("/", headers={X_FORWARDED_FOR: "255.255.255.255"})
assert resp.status == 400
assert resp.status == HTTPStatus.BAD_REQUEST
assert (
"Received X-Forwarded-For header from an untrusted proxy 127.0.0.1"
in caplog.text
@ -81,7 +82,7 @@ async def test_x_forwarded_for_with_trusted_proxy(
mock_api_client = await aiohttp_client(app)
resp = await mock_api_client.get("/", headers={X_FORWARDED_FOR: x_forwarded_for})
assert resp.status == 200
assert resp.status == HTTPStatus.OK
async def test_x_forwarded_for_disabled_with_proxy(aiohttp_client, caplog):
@ -104,7 +105,7 @@ async def test_x_forwarded_for_disabled_with_proxy(aiohttp_client, caplog):
mock_api_client = await aiohttp_client(app)
resp = await mock_api_client.get("/", headers={X_FORWARDED_FOR: "255.255.255.255"})
assert resp.status == 400
assert resp.status == HTTPStatus.BAD_REQUEST
assert (
"A request from a reverse proxy was received from 127.0.0.1, but your HTTP "
"integration is not set-up for reverse proxies" in caplog.text
@ -132,7 +133,7 @@ async def test_x_forwarded_for_with_spoofed_header(aiohttp_client):
"/", headers={X_FORWARDED_FOR: "222.222.222.222, 255.255.255.255"}
)
assert resp.status == 200
assert resp.status == HTTPStatus.OK
@pytest.mark.parametrize(
@ -160,7 +161,7 @@ async def test_x_forwarded_for_with_malformed_header(
resp = await mock_api_client.get("/", headers={X_FORWARDED_FOR: x_forwarded_for})
assert resp.status == 400
assert resp.status == HTTPStatus.BAD_REQUEST
assert "Invalid IP address in X-Forwarded-For" in caplog.text
@ -180,7 +181,7 @@ async def test_x_forwarded_for_with_multiple_headers(aiohttp_client, caplog):
],
)
assert resp.status == 400
assert resp.status == HTTPStatus.BAD_REQUEST
assert "Too many headers for X-Forwarded-For" in caplog.text
@ -237,7 +238,7 @@ async def test_x_forwarded_proto_with_trusted_proxy(
},
)
assert resp.status == 200
assert resp.status == HTTPStatus.OK
async def test_x_forwarded_proto_with_trusted_proxy_multiple_for(aiohttp_client):
@ -265,7 +266,7 @@ async def test_x_forwarded_proto_with_trusted_proxy_multiple_for(aiohttp_client)
},
)
assert resp.status == 200
assert resp.status == HTTPStatus.OK
async def test_x_forwarded_proto_not_processed_without_for(aiohttp_client):
@ -287,7 +288,7 @@ async def test_x_forwarded_proto_not_processed_without_for(aiohttp_client):
mock_api_client = await aiohttp_client(app)
resp = await mock_api_client.get("/", headers={X_FORWARDED_PROTO: "https"})
assert resp.status == 200
assert resp.status == HTTPStatus.OK
async def test_x_forwarded_proto_with_multiple_headers(aiohttp_client, caplog):
@ -306,7 +307,7 @@ async def test_x_forwarded_proto_with_multiple_headers(aiohttp_client, caplog):
],
)
assert resp.status == 400
assert resp.status == HTTPStatus.BAD_REQUEST
assert "Too many headers for X-Forward-Proto" in caplog.text
@ -328,7 +329,7 @@ async def test_x_forwarded_proto_empty_element(
headers={X_FORWARDED_FOR: "1.1.1.1", X_FORWARDED_PROTO: x_forwarded_proto},
)
assert resp.status == 400
assert resp.status == HTTPStatus.BAD_REQUEST
assert "Empty item received in X-Forward-Proto header" in caplog.text
@ -356,7 +357,7 @@ async def test_x_forwarded_proto_incorrect_number_of_elements(
},
)
assert resp.status == 400
assert resp.status == HTTPStatus.BAD_REQUEST
assert (
f"Incorrect number of elements in X-Forward-Proto. Expected 1 or {expected}, got {got}"
in caplog.text
@ -384,7 +385,7 @@ async def test_x_forwarded_host_with_trusted_proxy(aiohttp_client):
headers={X_FORWARDED_FOR: "255.255.255.255", X_FORWARDED_HOST: "example.com"},
)
assert resp.status == 200
assert resp.status == HTTPStatus.OK
async def test_x_forwarded_host_not_processed_without_for(aiohttp_client):
@ -406,7 +407,7 @@ async def test_x_forwarded_host_not_processed_without_for(aiohttp_client):
mock_api_client = await aiohttp_client(app)
resp = await mock_api_client.get("/", headers={X_FORWARDED_HOST: "example.com"})
assert resp.status == 200
assert resp.status == HTTPStatus.OK
async def test_x_forwarded_host_with_multiple_headers(aiohttp_client, caplog):
@ -425,7 +426,7 @@ async def test_x_forwarded_host_with_multiple_headers(aiohttp_client, caplog):
],
)
assert resp.status == 400
assert resp.status == HTTPStatus.BAD_REQUEST
assert "Too many headers for X-Forwarded-Host" in caplog.text
@ -440,7 +441,7 @@ async def test_x_forwarded_host_with_empty_header(aiohttp_client, caplog):
"/", headers={X_FORWARDED_FOR: "222.222.222.222", X_FORWARDED_HOST: ""}
)
assert resp.status == 400
assert resp.status == HTTPStatus.BAD_REQUEST
assert "Empty value received in X-Forward-Host header" in caplog.text
@ -460,4 +461,4 @@ async def test_x_forwarded_cloud(aiohttp_client, caplog):
)
# This request would normally fail because it's invalid, now it works.
assert resp.status == 200
assert resp.status == HTTPStatus.OK

View file

@ -1,5 +1,6 @@
"""The tests for the Home Assistant HTTP component."""
from datetime import timedelta
from http import HTTPStatus
from ipaddress import ip_network
import logging
from unittest.mock import Mock, patch
@ -72,7 +73,7 @@ async def test_not_log_password(hass, hass_client_no_auth, caplog, legacy_auth):
resp = await client.get("/api/", params={"api_password": "test-password"})
assert resp.status == 401
assert resp.status == HTTPStatus.UNAUTHORIZED
logs = caplog.text
# Ensure we don't log API passwords

View file

@ -1,5 +1,6 @@
"""Test request context middleware."""
from contextvars import ContextVar
from http import HTTPStatus
from aiohttp import web
@ -24,7 +25,7 @@ async def test_request_context_middleware(aiohttp_client):
mock_api_client = await aiohttp_client(app)
resp = await mock_api_client.get("/")
assert resp.status == 200
assert resp.status == HTTPStatus.OK
text = await resp.text()
assert text == "hi!"

View file

@ -1,4 +1,6 @@
"""Test security filter middleware."""
from http import HTTPStatus
from aiohttp import web
import pytest
import urllib3
@ -31,7 +33,7 @@ async def test_ok_requests(request_path, request_params, aiohttp_client):
mock_api_client = await aiohttp_client(app)
resp = await mock_api_client.get(request_path, params=request_params)
assert resp.status == 200
assert resp.status == HTTPStatus.OK
assert await resp.text() == "OK"
@ -80,7 +82,7 @@ async def test_bad_requests(
request_params,
)
assert resp.status == 400
assert resp.status == HTTPStatus.BAD_REQUEST
message = "Filtered a potential harmful request to:"
if fail_on_query_string:

View file

@ -1,4 +1,5 @@
"""Tests for Home Assistant View."""
from http import HTTPStatus
from unittest.mock import AsyncMock, Mock
from aiohttp.web_exceptions import (
@ -68,4 +69,4 @@ async def test_not_running(mock_request_with_stopping):
response = await request_handler_factory(
Mock(requires_auth=False), AsyncMock(side_effect=Unauthorized)
)(mock_request_with_stopping)
assert response.status == 503
assert response.status == HTTPStatus.SERVICE_UNAVAILABLE