From 50e0c58310b4d8ac2a69dd2484a34fda99acff72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Sat, 23 Oct 2021 21:49:04 +0300 Subject: [PATCH] Use http.HTTPStatus in components/s* (#58291) --- homeassistant/components/sendgrid/notify.py | 4 +- .../components/shelly/config_flow.py | 10 +-- homeassistant/components/sigfox/sensor.py | 7 ++- .../components/smartthings/__init__.py | 21 +++---- .../components/smartthings/config_flow.py | 13 ++-- homeassistant/components/splunk/__init__.py | 3 +- .../components/squeezebox/config_flow.py | 11 +--- homeassistant/components/startca/sensor.py | 4 +- homeassistant/components/stream/hls.py | 9 +-- .../components/synology_chat/notify.py | 5 +- tests/components/shelly/test_config_flow.py | 16 ++++- tests/components/shopping_list/test_init.py | 21 ++++--- tests/components/sigfox/test_sensor.py | 7 ++- .../signal_messenger/test_notify.py | 14 ++--- tests/components/sleepiq/test_init.py | 3 +- tests/components/smappee/test_config_flow.py | 3 +- .../components/smart_meter_texas/conftest.py | 3 +- .../smartthings/test_config_flow.py | 10 ++- tests/components/smartthings/test_init.py | 2 +- tests/components/somfy/test_config_flow.py | 3 +- tests/components/sonarr/__init__.py | 37 ++++++----- tests/components/spaceapi/test_init.py | 8 ++- tests/components/spotify/test_config_flow.py | 3 +- .../components/squeezebox/test_config_flow.py | 13 ++-- tests/components/stream/conftest.py | 3 +- tests/components/stream/test_hls.py | 34 +++++----- tests/components/stream/test_ll_hls.py | 62 ++++++++++--------- tests/components/stt/test_init.py | 6 +- tests/components/system_log/test_init.py | 3 +- 29 files changed, 180 insertions(+), 158 deletions(-) diff --git a/homeassistant/components/sendgrid/notify.py b/homeassistant/components/sendgrid/notify.py index 8d8907f2dcf..e17f6ae60c4 100644 --- a/homeassistant/components/sendgrid/notify.py +++ b/homeassistant/components/sendgrid/notify.py @@ -1,4 +1,5 @@ """SendGrid notification service.""" +from http import HTTPStatus import logging from sendgrid import SendGridAPIClient @@ -15,7 +16,6 @@ from homeassistant.const import ( CONF_RECIPIENT, CONF_SENDER, CONTENT_TYPE_TEXT_PLAIN, - HTTP_ACCEPTED, ) import homeassistant.helpers.config_validation as cv @@ -66,5 +66,5 @@ class SendgridNotificationService(BaseNotificationService): } response = self._sg.client.mail.send.post(request_body=data) - if response.status_code != HTTP_ACCEPTED: + if response.status_code != HTTPStatus.ACCEPTED: _LOGGER.error("Unable to send notification") diff --git a/homeassistant/components/shelly/config_flow.py b/homeassistant/components/shelly/config_flow.py index 31f99b2b1fb..b77868296bd 100644 --- a/homeassistant/components/shelly/config_flow.py +++ b/homeassistant/components/shelly/config_flow.py @@ -2,6 +2,7 @@ from __future__ import annotations import asyncio +from http import HTTPStatus import logging from typing import Any, Final @@ -13,12 +14,7 @@ import async_timeout import voluptuous as vol from homeassistant import config_entries -from homeassistant.const import ( - CONF_HOST, - CONF_PASSWORD, - CONF_USERNAME, - HTTP_UNAUTHORIZED, -) +from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_USERNAME from homeassistant.core import HomeAssistant from homeassistant.data_entry_flow import FlowResult from homeassistant.helpers import aiohttp_client @@ -155,7 +151,7 @@ class ConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): self.hass, self.host, self.info, user_input ) except aiohttp.ClientResponseError as error: - if error.status == HTTP_UNAUTHORIZED: + if error.status == HTTPStatus.UNAUTHORIZED: errors["base"] = "invalid_auth" else: errors["base"] = "cannot_connect" diff --git a/homeassistant/components/sigfox/sensor.py b/homeassistant/components/sigfox/sensor.py index 41fb3469293..5ab68424ad3 100644 --- a/homeassistant/components/sigfox/sensor.py +++ b/homeassistant/components/sigfox/sensor.py @@ -1,5 +1,6 @@ """Sensor for SigFox devices.""" import datetime +from http import HTTPStatus import json import logging from urllib.parse import urljoin @@ -8,7 +9,7 @@ import requests import voluptuous as vol from homeassistant.components.sensor import PLATFORM_SCHEMA, SensorEntity -from homeassistant.const import CONF_NAME, HTTP_OK, HTTP_UNAUTHORIZED +from homeassistant.const import CONF_NAME import homeassistant.helpers.config_validation as cv _LOGGER = logging.getLogger(__name__) @@ -65,8 +66,8 @@ class SigfoxAPI: """Check API credentials are valid.""" url = urljoin(API_URL, "devicetypes") response = requests.get(url, auth=self._auth, timeout=10) - if response.status_code != HTTP_OK: - if response.status_code == HTTP_UNAUTHORIZED: + if response.status_code != HTTPStatus.OK: + if response.status_code == HTTPStatus.UNAUTHORIZED: _LOGGER.error("Invalid credentials for Sigfox API") else: _LOGGER.error( diff --git a/homeassistant/components/smartthings/__init__.py b/homeassistant/components/smartthings/__init__.py index 5612cd65732..eb3aa9cb0f0 100644 --- a/homeassistant/components/smartthings/__init__.py +++ b/homeassistant/components/smartthings/__init__.py @@ -3,6 +3,7 @@ from __future__ import annotations import asyncio from collections.abc import Iterable +from http import HTTPStatus import importlib import logging @@ -12,13 +13,7 @@ from pysmartthings import Attribute, Capability, SmartThings from pysmartthings.device import DeviceEntity from homeassistant.config_entries import SOURCE_IMPORT, ConfigEntry -from homeassistant.const import ( - CONF_ACCESS_TOKEN, - CONF_CLIENT_ID, - CONF_CLIENT_SECRET, - HTTP_FORBIDDEN, - HTTP_UNAUTHORIZED, -) +from homeassistant.const import CONF_ACCESS_TOKEN, CONF_CLIENT_ID, CONF_CLIENT_SECRET from homeassistant.core import HomeAssistant from homeassistant.exceptions import ConfigEntryNotReady from homeassistant.helpers.aiohttp_client import async_get_clientsession @@ -164,7 +159,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool: hass.data[DOMAIN][DATA_BROKERS][entry.entry_id] = broker except ClientResponseError as ex: - if ex.status in (HTTP_UNAUTHORIZED, HTTP_FORBIDDEN): + if ex.status in (HTTPStatus.UNAUTHORIZED, HTTPStatus.FORBIDDEN): _LOGGER.exception( "Unable to setup configuration entry '%s' - please reconfigure the integration", entry.title, @@ -197,7 +192,7 @@ async def async_get_entry_scenes(entry: ConfigEntry, api): try: return await api.scenes(location_id=entry.data[CONF_LOCATION_ID]) except ClientResponseError as ex: - if ex.status == HTTP_FORBIDDEN: + if ex.status == HTTPStatus.FORBIDDEN: _LOGGER.exception( "Unable to load scenes for configuration entry '%s' because the access token does not have the required access", entry.title, @@ -220,12 +215,12 @@ async def async_remove_entry(hass: HomeAssistant, entry: ConfigEntry) -> None: """Perform clean-up when entry is being removed.""" api = SmartThings(async_get_clientsession(hass), entry.data[CONF_ACCESS_TOKEN]) - # Remove the installed_app, which if already removed raises a HTTP_FORBIDDEN error. + # Remove the installed_app, which if already removed raises a HTTPStatus.FORBIDDEN error. installed_app_id = entry.data[CONF_INSTALLED_APP_ID] try: await api.delete_installed_app(installed_app_id) except ClientResponseError as ex: - if ex.status == HTTP_FORBIDDEN: + if ex.status == HTTPStatus.FORBIDDEN: _LOGGER.debug( "Installed app %s has already been removed", installed_app_id, @@ -236,7 +231,7 @@ async def async_remove_entry(hass: HomeAssistant, entry: ConfigEntry) -> None: _LOGGER.debug("Removed installed app %s", installed_app_id) # Remove the app if not referenced by other entries, which if already - # removed raises a HTTP_FORBIDDEN error. + # removed raises a HTTPStatus.FORBIDDEN error. all_entries = hass.config_entries.async_entries(DOMAIN) app_id = entry.data[CONF_APP_ID] app_count = sum(1 for entry in all_entries if entry.data[CONF_APP_ID] == app_id) @@ -250,7 +245,7 @@ async def async_remove_entry(hass: HomeAssistant, entry: ConfigEntry) -> None: try: await api.delete_app(app_id) except ClientResponseError as ex: - if ex.status == HTTP_FORBIDDEN: + if ex.status == HTTPStatus.FORBIDDEN: _LOGGER.debug("App %s has already been removed", app_id, exc_info=True) else: raise diff --git a/homeassistant/components/smartthings/config_flow.py b/homeassistant/components/smartthings/config_flow.py index b69ef5d43a1..9a11fe43e02 100644 --- a/homeassistant/components/smartthings/config_flow.py +++ b/homeassistant/components/smartthings/config_flow.py @@ -1,4 +1,5 @@ """Config flow to configure SmartThings.""" +from http import HTTPStatus import logging from aiohttp import ClientResponseError @@ -7,13 +8,7 @@ from pysmartthings.installedapp import format_install_url import voluptuous as vol from homeassistant import config_entries -from homeassistant.const import ( - CONF_ACCESS_TOKEN, - CONF_CLIENT_ID, - CONF_CLIENT_SECRET, - HTTP_FORBIDDEN, - HTTP_UNAUTHORIZED, -) +from homeassistant.const import CONF_ACCESS_TOKEN, CONF_CLIENT_ID, CONF_CLIENT_SECRET from homeassistant.helpers.aiohttp_client import async_get_clientsession from .const import ( @@ -142,12 +137,12 @@ class SmartThingsFlowHandler(config_entries.ConfigFlow, domain=DOMAIN): ) return self._show_step_pat(errors) except ClientResponseError as ex: - if ex.status == HTTP_UNAUTHORIZED: + if ex.status == HTTPStatus.UNAUTHORIZED: errors[CONF_ACCESS_TOKEN] = "token_unauthorized" _LOGGER.debug( "Unauthorized error received setting up SmartApp", exc_info=True ) - elif ex.status == HTTP_FORBIDDEN: + elif ex.status == HTTPStatus.FORBIDDEN: errors[CONF_ACCESS_TOKEN] = "token_forbidden" _LOGGER.debug( "Forbidden error received setting up SmartApp", exc_info=True diff --git a/homeassistant/components/splunk/__init__.py b/homeassistant/components/splunk/__init__.py index a3ec307d67b..6b40f9b7d58 100644 --- a/homeassistant/components/splunk/__init__.py +++ b/homeassistant/components/splunk/__init__.py @@ -1,5 +1,6 @@ """Support to send data to a Splunk instance.""" import asyncio +from http import HTTPStatus import json import logging import time @@ -111,7 +112,7 @@ async def async_setup(hass, config): try: await event_collector.queue(json.dumps(payload, cls=JSONEncoder), send=True) except SplunkPayloadError as err: - if err.status == 401: + if err.status == HTTPStatus.UNAUTHORIZED: _LOGGER.error(err) else: _LOGGER.warning(err) diff --git a/homeassistant/components/squeezebox/config_flow.py b/homeassistant/components/squeezebox/config_flow.py index 4b05588e281..e7e0a691e85 100644 --- a/homeassistant/components/squeezebox/config_flow.py +++ b/homeassistant/components/squeezebox/config_flow.py @@ -1,5 +1,6 @@ """Config flow for Logitech Squeezebox integration.""" import asyncio +from http import HTTPStatus import logging from pysqueezebox import Server, async_discover @@ -8,13 +9,7 @@ import voluptuous as vol from homeassistant import config_entries, data_entry_flow from homeassistant.components.dhcp import MAC_ADDRESS from homeassistant.components.media_player import DOMAIN as MP_DOMAIN -from homeassistant.const import ( - CONF_HOST, - CONF_PASSWORD, - CONF_PORT, - CONF_USERNAME, - HTTP_UNAUTHORIZED, -) +from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_PORT, CONF_USERNAME from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.device_registry import format_mac from homeassistant.helpers.entity_registry import async_get @@ -115,7 +110,7 @@ class SqueezeboxConfigFlow(config_entries.ConfigFlow, domain=DOMAIN): try: status = await server.async_query("serverstatus") if not status: - if server.http_status == HTTP_UNAUTHORIZED: + if server.http_status == HTTPStatus.UNAUTHORIZED: return "invalid_auth" return "cannot_connect" except Exception: # pylint: disable=broad-except diff --git a/homeassistant/components/startca/sensor.py b/homeassistant/components/startca/sensor.py index 8079ea42c4c..931e9eabfc0 100644 --- a/homeassistant/components/startca/sensor.py +++ b/homeassistant/components/startca/sensor.py @@ -2,6 +2,7 @@ from __future__ import annotations from datetime import timedelta +from http import HTTPStatus import logging from xml.parsers.expat import ExpatError @@ -19,7 +20,6 @@ from homeassistant.const import ( CONF_MONITORED_VARIABLES, CONF_NAME, DATA_GIGABYTES, - HTTP_OK, PERCENTAGE, ) from homeassistant.helpers.aiohttp_client import async_get_clientsession @@ -195,7 +195,7 @@ class StartcaData: url = f"https://www.start.ca/support/usage/api?key={self.api_key}" with async_timeout.timeout(REQUEST_TIMEOUT): req = await self.websession.get(url) - if req.status != HTTP_OK: + if req.status != HTTPStatus.OK: _LOGGER.error("Request failed with status: %u", req.status) return False diff --git a/homeassistant/components/stream/hls.py b/homeassistant/components/stream/hls.py index 50b002b52b4..a88ee465e25 100644 --- a/homeassistant/components/stream/hls.py +++ b/homeassistant/components/stream/hls.py @@ -1,6 +1,7 @@ """Provide functionality to stream HLS.""" from __future__ import annotations +from http import HTTPStatus from typing import TYPE_CHECKING, cast from aiohttp import web @@ -193,7 +194,7 @@ class HlsPlaylistView(StreamView): """Return a HTTP Bad Request response.""" return web.Response( body=None, - status=400, + status=HTTPStatus.BAD_REQUEST, # From Appendix B.1 of the RFC: # Successful responses to blocking Playlist requests should be cached # for six Target Durations. Unsuccessful responses (such as 404s) should @@ -211,7 +212,7 @@ class HlsPlaylistView(StreamView): """Return a HTTP Not Found response.""" return web.Response( body=None, - status=404, + status=HTTPStatus.NOT_FOUND, headers={ "Cache-Control": f"max-age={(4 if blocking else 1)*target_duration:.0f}" }, @@ -351,7 +352,7 @@ class HlsPartView(StreamView): ): return web.Response( body=None, - status=404, + status=HTTPStatus.NOT_FOUND, headers={"Cache-Control": f"max-age={track.target_duration:.0f}"}, ) # If the part is ready or has been hinted, @@ -399,7 +400,7 @@ class HlsSegmentView(StreamView): ): return web.Response( body=None, - status=404, + status=HTTPStatus.NOT_FOUND, headers={"Cache-Control": f"max-age={track.target_duration:.0f}"}, ) return web.Response( diff --git a/homeassistant/components/synology_chat/notify.py b/homeassistant/components/synology_chat/notify.py index f73fd65ba3f..e68968e94d0 100644 --- a/homeassistant/components/synology_chat/notify.py +++ b/homeassistant/components/synology_chat/notify.py @@ -1,4 +1,5 @@ """SynologyChat platform for notify component.""" +from http import HTTPStatus import json import logging @@ -10,7 +11,7 @@ from homeassistant.components.notify import ( PLATFORM_SCHEMA, BaseNotificationService, ) -from homeassistant.const import CONF_RESOURCE, CONF_VERIFY_SSL, HTTP_CREATED, HTTP_OK +from homeassistant.const import CONF_RESOURCE, CONF_VERIFY_SSL import homeassistant.helpers.config_validation as cv ATTR_FILE_URL = "file_url" @@ -57,7 +58,7 @@ class SynologyChatNotificationService(BaseNotificationService): self._resource, data=to_send, timeout=10, verify=self._verify_ssl ) - if response.status_code not in (HTTP_OK, HTTP_CREATED): + if response.status_code not in (HTTPStatus.OK, HTTPStatus.CREATED): _LOGGER.exception( "Error sending message. Response %d: %s:", response.status_code, diff --git a/tests/components/shelly/test_config_flow.py b/tests/components/shelly/test_config_flow.py index f17e01e118b..dc6921b9735 100644 --- a/tests/components/shelly/test_config_flow.py +++ b/tests/components/shelly/test_config_flow.py @@ -1,5 +1,6 @@ """Test the Shelly config flow.""" import asyncio +from http import HTTPStatus from unittest.mock import AsyncMock, Mock, patch import aiohttp @@ -325,8 +326,14 @@ async def test_form_firmware_unsupported(hass): @pytest.mark.parametrize( "error", [ - (aiohttp.ClientResponseError(Mock(), (), status=400), "cannot_connect"), - (aiohttp.ClientResponseError(Mock(), (), status=401), "invalid_auth"), + ( + aiohttp.ClientResponseError(Mock(), (), status=HTTPStatus.BAD_REQUEST), + "cannot_connect", + ), + ( + aiohttp.ClientResponseError(Mock(), (), status=HTTPStatus.UNAUTHORIZED), + "invalid_auth", + ), (asyncio.TimeoutError, "cannot_connect"), (ValueError, "unknown"), ], @@ -480,7 +487,10 @@ async def test_zeroconf_sleeping_device(hass): @pytest.mark.parametrize( "error", [ - (aiohttp.ClientResponseError(Mock(), (), status=400), "cannot_connect"), + ( + aiohttp.ClientResponseError(Mock(), (), status=HTTPStatus.BAD_REQUEST), + "cannot_connect", + ), (asyncio.TimeoutError, "cannot_connect"), ], ) diff --git a/tests/components/shopping_list/test_init.py b/tests/components/shopping_list/test_init.py index 65fddec894e..3c18929f6a1 100644 --- a/tests/components/shopping_list/test_init.py +++ b/tests/components/shopping_list/test_init.py @@ -1,4 +1,5 @@ """Test shopping list component.""" +from http import HTTPStatus from homeassistant.components.shopping_list.const import ( DOMAIN, @@ -11,7 +12,7 @@ from homeassistant.components.websocket_api.const import ( ERR_NOT_FOUND, TYPE_RESULT, ) -from homeassistant.const import ATTR_NAME, HTTP_NOT_FOUND +from homeassistant.const import ATTR_NAME from homeassistant.helpers import intent @@ -115,7 +116,7 @@ async def test_deprecated_api_get_all(hass, hass_client, sl_setup): client = await hass_client() resp = await client.get("/api/shopping_list") - assert resp.status == 200 + assert resp.status == HTTPStatus.OK data = await resp.json() assert len(data) == 2 assert data[0]["name"] == "beer" @@ -169,7 +170,7 @@ async def test_deprecated_api_update(hass, hass_client, sl_setup): f"/api/shopping_list/item/{beer_id}", json={"name": "soda"} ) - assert resp.status == 200 + assert resp.status == HTTPStatus.OK data = await resp.json() assert data == {"id": beer_id, "name": "soda", "complete": False} @@ -177,7 +178,7 @@ async def test_deprecated_api_update(hass, hass_client, sl_setup): f"/api/shopping_list/item/{wine_id}", json={"complete": True} ) - assert resp.status == 200 + assert resp.status == HTTPStatus.OK data = await resp.json() assert data == {"id": wine_id, "name": "wine", "complete": True} @@ -238,12 +239,12 @@ async def test_api_update_fails(hass, hass_client, sl_setup): client = await hass_client() resp = await client.post("/api/shopping_list/non_existing", json={"name": "soda"}) - assert resp.status == HTTP_NOT_FOUND + assert resp.status == HTTPStatus.NOT_FOUND beer_id = hass.data["shopping_list"].items[0]["id"] resp = await client.post(f"/api/shopping_list/item/{beer_id}", json={"name": 123}) - assert resp.status == 400 + assert resp.status == HTTPStatus.BAD_REQUEST async def test_ws_update_item_fail(hass, hass_ws_client, sl_setup): @@ -288,10 +289,10 @@ async def test_deprecated_api_clear_completed(hass, hass_client, sl_setup): resp = await client.post( f"/api/shopping_list/item/{beer_id}", json={"complete": True} ) - assert resp.status == 200 + assert resp.status == HTTPStatus.OK resp = await client.post("/api/shopping_list/clear_completed") - assert resp.status == 200 + assert resp.status == HTTPStatus.OK items = hass.data["shopping_list"].items assert len(items) == 1 @@ -334,7 +335,7 @@ async def test_deprecated_api_create(hass, hass_client, sl_setup): client = await hass_client() resp = await client.post("/api/shopping_list/item", json={"name": "soda"}) - assert resp.status == 200 + assert resp.status == HTTPStatus.OK data = await resp.json() assert data["name"] == "soda" assert data["complete"] is False @@ -351,7 +352,7 @@ async def test_deprecated_api_create_fail(hass, hass_client, sl_setup): client = await hass_client() resp = await client.post("/api/shopping_list/item", json={"name": 1234}) - assert resp.status == 400 + assert resp.status == HTTPStatus.BAD_REQUEST assert len(hass.data["shopping_list"].items) == 0 diff --git a/tests/components/sigfox/test_sensor.py b/tests/components/sigfox/test_sensor.py index a7d293a052e..a5086d522b0 100644 --- a/tests/components/sigfox/test_sensor.py +++ b/tests/components/sigfox/test_sensor.py @@ -1,4 +1,5 @@ """Tests for the sigfox sensor.""" +from http import HTTPStatus import re import requests_mock @@ -34,7 +35,7 @@ async def test_invalid_credentials(hass): """Test for invalid credentials.""" with requests_mock.Mocker() as mock_req: url = re.compile(API_URL + "devicetypes") - mock_req.get(url, text="{}", status_code=401) + mock_req.get(url, text="{}", status_code=HTTPStatus.UNAUTHORIZED) assert await async_setup_component(hass, "sensor", VALID_CONFIG) await hass.async_block_till_done() assert len(hass.states.async_entity_ids()) == 0 @@ -44,7 +45,9 @@ async def test_valid_credentials(hass): """Test for valid credentials.""" with requests_mock.Mocker() as mock_req: url1 = re.compile(API_URL + "devicetypes") - mock_req.get(url1, text='{"data":[{"id":"fake_type"}]}', status_code=200) + mock_req.get( + url1, text='{"data":[{"id":"fake_type"}]}', status_code=HTTPStatus.OK + ) url2 = re.compile(API_URL + "devicetypes/fake_type/devices") mock_req.get(url2, text='{"data":[{"id":"fake_id"}]}') diff --git a/tests/components/signal_messenger/test_notify.py b/tests/components/signal_messenger/test_notify.py index d2dc93fea2e..61d13b8c60b 100644 --- a/tests/components/signal_messenger/test_notify.py +++ b/tests/components/signal_messenger/test_notify.py @@ -1,5 +1,5 @@ """The tests for the signal_messenger platform.""" - +from http import HTTPStatus import os import tempfile import unittest @@ -54,12 +54,12 @@ class TestSignalMesssenger(unittest.TestCase): mock.register_uri( "POST", "http://127.0.0.1:8080/v2/send", - status_code=201, + status_code=HTTPStatus.CREATED, ) mock.register_uri( "GET", "http://127.0.0.1:8080/v1/about", - status_code=200, + status_code=HTTPStatus.OK, json={"versions": ["v1", "v2"]}, ) with self.assertLogs( @@ -77,12 +77,12 @@ class TestSignalMesssenger(unittest.TestCase): mock.register_uri( "POST", "http://127.0.0.1:8080/v2/send", - status_code=201, + status_code=HTTPStatus.CREATED, ) mock.register_uri( "GET", "http://127.0.0.1:8080/v1/about", - status_code=200, + status_code=HTTPStatus.OK, json={"versions": ["v1", "v2"]}, ) with self.assertLogs( @@ -106,12 +106,12 @@ class TestSignalMesssenger(unittest.TestCase): mock.register_uri( "POST", "http://127.0.0.1:8080/v2/send", - status_code=201, + status_code=HTTPStatus.CREATED, ) mock.register_uri( "GET", "http://127.0.0.1:8080/v1/about", - status_code=200, + status_code=HTTPStatus.OK, json={"versions": ["v1", "v2"]}, ) with self.assertLogs( diff --git a/tests/components/sleepiq/test_init.py b/tests/components/sleepiq/test_init.py index a5e8e43ae07..68ca876504f 100644 --- a/tests/components/sleepiq/test_init.py +++ b/tests/components/sleepiq/test_init.py @@ -1,4 +1,5 @@ """The tests for the SleepIQ component.""" +from http import HTTPStatus from unittest.mock import MagicMock, patch from homeassistant import setup @@ -41,7 +42,7 @@ async def test_setup_login_failed(hass, requests_mock): mock_responses(requests_mock) requests_mock.put( "https://prod-api.sleepiq.sleepnumber.com/rest/login", - status_code=401, + status_code=HTTPStatus.UNAUTHORIZED, json=load_fixture("sleepiq-login-failed.json"), ) diff --git a/tests/components/smappee/test_config_flow.py b/tests/components/smappee/test_config_flow.py index 73fbf81fce0..d8efe8b2903 100644 --- a/tests/components/smappee/test_config_flow.py +++ b/tests/components/smappee/test_config_flow.py @@ -1,4 +1,5 @@ """Test the Smappee component config flow module.""" +from http import HTTPStatus from unittest.mock import patch from homeassistant import data_entry_flow, setup @@ -424,7 +425,7 @@ async def test_full_user_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( diff --git a/tests/components/smart_meter_texas/conftest.py b/tests/components/smart_meter_texas/conftest.py index 8b089e5d31b..0d474503582 100644 --- a/tests/components/smart_meter_texas/conftest.py +++ b/tests/components/smart_meter_texas/conftest.py @@ -1,5 +1,6 @@ """Test configuration and mocks for Smart Meter Texas.""" import asyncio +from http import HTTPStatus import json from pathlib import Path @@ -67,7 +68,7 @@ def mock_connection( elif auth_fail: aioclient_mock.post( auth_endpoint, - status=400, + status=HTTPStatus.BAD_REQUEST, json={"errormessage": "ERR-USR-INVALIDPASSWORDERROR"}, ) else: # auth_timeout diff --git a/tests/components/smartthings/test_config_flow.py b/tests/components/smartthings/test_config_flow.py index be6385ccdd9..7f8950f18b5 100644 --- a/tests/components/smartthings/test_config_flow.py +++ b/tests/components/smartthings/test_config_flow.py @@ -551,7 +551,10 @@ async def test_webhook_problem_shows_error(hass, smartthings_mock): data = {"error": {}} request_info = Mock(real_url="http://example.com") error = APIResponseError( - request_info=request_info, history=None, data=data, status=422 + request_info=request_info, + history=None, + data=data, + status=HTTPStatus.UNPROCESSABLE_ENTITY, ) error.is_target_error = Mock(return_value=True) smartthings_mock.apps.side_effect = error @@ -591,7 +594,10 @@ async def test_api_error_shows_error(hass, smartthings_mock): data = {"error": {}} request_info = Mock(real_url="http://example.com") error = APIResponseError( - request_info=request_info, history=None, data=data, status=400 + request_info=request_info, + history=None, + data=data, + status=HTTPStatus.BAD_REQUEST, ) smartthings_mock.apps.side_effect = error diff --git a/tests/components/smartthings/test_init.py b/tests/components/smartthings/test_init.py index 43f88dfb7af..8696fb5956e 100644 --- a/tests/components/smartthings/test_init.py +++ b/tests/components/smartthings/test_init.py @@ -58,7 +58,7 @@ async def test_unrecoverable_api_errors_create_new_flow( config_entry.add_to_hass(hass) request_info = Mock(real_url="http://example.com") smartthings_mock.app.side_effect = ClientResponseError( - request_info=request_info, history=None, status=401 + request_info=request_info, history=None, status=HTTPStatus.UNAUTHORIZED ) # Assert setup returns false diff --git a/tests/components/somfy/test_config_flow.py b/tests/components/somfy/test_config_flow.py index bcfb617db96..752959802da 100644 --- a/tests/components/somfy/test_config_flow.py +++ b/tests/components/somfy/test_config_flow.py @@ -1,5 +1,6 @@ """Tests for the Somfy config flow.""" import asyncio +from http import HTTPStatus from unittest.mock import patch from homeassistant import config_entries, data_entry_flow, setup @@ -69,7 +70,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( diff --git a/tests/components/sonarr/__init__.py b/tests/components/sonarr/__init__.py index e3ae6bfa837..8172cb4e0dd 100644 --- a/tests/components/sonarr/__init__.py +++ b/tests/components/sonarr/__init__.py @@ -1,4 +1,5 @@ """Tests for the Sonarr component.""" +from http import HTTPStatus from socket import gaierror as SocketGIAError from unittest.mock import patch @@ -148,13 +149,13 @@ def mock_connection_invalid_auth( """Mock Sonarr invalid auth errors.""" sonarr_url = f"http://{host}:{port}{base_path}" - aioclient_mock.get(f"{sonarr_url}/system/status", status=403) - aioclient_mock.get(f"{sonarr_url}/diskspace", status=403) - aioclient_mock.get(f"{sonarr_url}/calendar", status=403) - aioclient_mock.get(f"{sonarr_url}/command", status=403) - aioclient_mock.get(f"{sonarr_url}/queue", status=403) - aioclient_mock.get(f"{sonarr_url}/series", status=403) - aioclient_mock.get(f"{sonarr_url}/missing/wanted", status=403) + aioclient_mock.get(f"{sonarr_url}/system/status", status=HTTPStatus.FORBIDDEN) + aioclient_mock.get(f"{sonarr_url}/diskspace", status=HTTPStatus.FORBIDDEN) + aioclient_mock.get(f"{sonarr_url}/calendar", status=HTTPStatus.FORBIDDEN) + aioclient_mock.get(f"{sonarr_url}/command", status=HTTPStatus.FORBIDDEN) + aioclient_mock.get(f"{sonarr_url}/queue", status=HTTPStatus.FORBIDDEN) + aioclient_mock.get(f"{sonarr_url}/series", status=HTTPStatus.FORBIDDEN) + aioclient_mock.get(f"{sonarr_url}/missing/wanted", status=HTTPStatus.FORBIDDEN) def mock_connection_server_error( @@ -166,13 +167,21 @@ def mock_connection_server_error( """Mock Sonarr server errors.""" sonarr_url = f"http://{host}:{port}{base_path}" - aioclient_mock.get(f"{sonarr_url}/system/status", status=500) - aioclient_mock.get(f"{sonarr_url}/diskspace", status=500) - aioclient_mock.get(f"{sonarr_url}/calendar", status=500) - aioclient_mock.get(f"{sonarr_url}/command", status=500) - aioclient_mock.get(f"{sonarr_url}/queue", status=500) - aioclient_mock.get(f"{sonarr_url}/series", status=500) - aioclient_mock.get(f"{sonarr_url}/missing/wanted", status=500) + aioclient_mock.get( + f"{sonarr_url}/system/status", status=HTTPStatus.INTERNAL_SERVER_ERROR + ) + aioclient_mock.get( + f"{sonarr_url}/diskspace", status=HTTPStatus.INTERNAL_SERVER_ERROR + ) + aioclient_mock.get( + f"{sonarr_url}/calendar", status=HTTPStatus.INTERNAL_SERVER_ERROR + ) + aioclient_mock.get(f"{sonarr_url}/command", status=HTTPStatus.INTERNAL_SERVER_ERROR) + aioclient_mock.get(f"{sonarr_url}/queue", status=HTTPStatus.INTERNAL_SERVER_ERROR) + aioclient_mock.get(f"{sonarr_url}/series", status=HTTPStatus.INTERNAL_SERVER_ERROR) + aioclient_mock.get( + f"{sonarr_url}/missing/wanted", status=HTTPStatus.INTERNAL_SERVER_ERROR + ) async def setup_integration( diff --git a/tests/components/spaceapi/test_init.py b/tests/components/spaceapi/test_init.py index 0f33434254c..35da5bf27c7 100644 --- a/tests/components/spaceapi/test_init.py +++ b/tests/components/spaceapi/test_init.py @@ -1,4 +1,6 @@ """The tests for the Home Assistant SpaceAPI component.""" +from http import HTTPStatus + # pylint: disable=protected-access from unittest.mock import patch @@ -91,7 +93,7 @@ def mock_client(hass, hass_client): async def test_spaceapi_get(hass, mock_client): """Test response after start-up Home Assistant.""" resp = await mock_client.get(URL_API_SPACEAPI) - assert resp.status == 200 + assert resp.status == HTTPStatus.OK data = await resp.json() @@ -137,7 +139,7 @@ async def test_spaceapi_state_get(hass, mock_client): hass.states.async_set("test.test_door", True) resp = await mock_client.get(URL_API_SPACEAPI) - assert resp.status == 200 + assert resp.status == HTTPStatus.OK data = await resp.json() assert data["state"]["open"] == bool(1) @@ -146,7 +148,7 @@ async def test_spaceapi_state_get(hass, mock_client): async def test_spaceapi_sensors_get(hass, mock_client): """Test the response for the sensors.""" resp = await mock_client.get(URL_API_SPACEAPI) - assert resp.status == 200 + assert resp.status == HTTPStatus.OK data = await resp.json() assert data["sensors"] == SENSOR_OUTPUT diff --git a/tests/components/spotify/test_config_flow.py b/tests/components/spotify/test_config_flow.py index 0d0d4a50a3d..8ff18882e8b 100644 --- a/tests/components/spotify/test_config_flow.py +++ b/tests/components/spotify/test_config_flow.py @@ -1,4 +1,5 @@ """Tests for the Spotify config flow.""" +from http import HTTPStatus from unittest.mock import patch from spotipy import SpotifyException @@ -80,7 +81,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( diff --git a/tests/components/squeezebox/test_config_flow.py b/tests/components/squeezebox/test_config_flow.py index 9460e2235be..7f07576427b 100644 --- a/tests/components/squeezebox/test_config_flow.py +++ b/tests/components/squeezebox/test_config_flow.py @@ -1,4 +1,5 @@ """Test the Logitech Squeezebox config flow.""" +from http import HTTPStatus from unittest.mock import patch from pysqueezebox import Server @@ -6,13 +7,7 @@ from pysqueezebox import Server from homeassistant import config_entries from homeassistant.components.dhcp import HOSTNAME, IP_ADDRESS, MAC_ADDRESS from homeassistant.components.squeezebox.const import DOMAIN -from homeassistant.const import ( - CONF_HOST, - CONF_PASSWORD, - CONF_PORT, - CONF_USERNAME, - HTTP_UNAUTHORIZED, -) +from homeassistant.const import CONF_HOST, CONF_PASSWORD, CONF_PORT, CONF_USERNAME from homeassistant.data_entry_flow import ( RESULT_TYPE_ABORT, RESULT_TYPE_CREATE_ENTRY, @@ -39,7 +34,7 @@ async def mock_failed_discover(_discovery_callback): async def patch_async_query_unauthorized(self, *args): """Mock an unauthorized query.""" - self.http_status = HTTP_UNAUTHORIZED + self.http_status = HTTPStatus.UNAUTHORIZED return False @@ -128,7 +123,7 @@ async def test_form_invalid_auth(hass): ) async def patch_async_query(self, *args): - self.http_status = HTTP_UNAUTHORIZED + self.http_status = HTTPStatus.UNAUTHORIZED return False with patch("pysqueezebox.Server.async_query", new=patch_async_query): diff --git a/tests/components/stream/conftest.py b/tests/components/stream/conftest.py index 746cc05fcbd..f5f66258f70 100644 --- a/tests/components/stream/conftest.py +++ b/tests/components/stream/conftest.py @@ -13,6 +13,7 @@ from __future__ import annotations import asyncio from collections import deque +from http import HTTPStatus import logging import threading from unittest.mock import patch @@ -171,7 +172,7 @@ class HLSSync: self.check_requests_ready() return self._original_not_found() - def response(self, body, headers, status=200): + def response(self, body, headers, status=HTTPStatus.OK): """Intercept the Response call so we know when the web handler is finished.""" self._num_finished += 1 self.check_requests_ready() diff --git a/tests/components/stream/test_hls.py b/tests/components/stream/test_hls.py index da040f6646a..c3c4779a948 100644 --- a/tests/components/stream/test_hls.py +++ b/tests/components/stream/test_hls.py @@ -1,5 +1,6 @@ """The tests for hls streams.""" from datetime import timedelta +from http import HTTPStatus from unittest.mock import patch from urllib.parse import urlparse @@ -15,7 +16,6 @@ from homeassistant.components.stream.const import ( NUM_PLAYLIST_SEGMENTS, ) from homeassistant.components.stream.core import Part -from homeassistant.const import HTTP_NOT_FOUND from homeassistant.setup import async_setup_component import homeassistant.util.dt as dt_util @@ -138,23 +138,23 @@ async def test_hls_stream(hass, hls_stream, stream_worker_sync): # Fetch master playlist master_playlist_response = await hls_client.get() - assert master_playlist_response.status == 200 + assert master_playlist_response.status == HTTPStatus.OK # Fetch init master_playlist = await master_playlist_response.text() init_response = await hls_client.get("/init.mp4") - assert init_response.status == 200 + assert init_response.status == HTTPStatus.OK # Fetch playlist playlist_url = "/" + master_playlist.splitlines()[-1] playlist_response = await hls_client.get(playlist_url) - assert playlist_response.status == 200 + assert playlist_response.status == HTTPStatus.OK # Fetch segment playlist = await playlist_response.text() segment_url = "/" + [line for line in playlist.splitlines() if line][-1] segment_response = await hls_client.get(segment_url) - assert segment_response.status == 200 + assert segment_response.status == HTTPStatus.OK stream_worker_sync.resume() @@ -163,7 +163,7 @@ async def test_hls_stream(hass, hls_stream, stream_worker_sync): # Ensure playlist not accessible after stream ends fail_response = await hls_client.get() - assert fail_response.status == HTTP_NOT_FOUND + assert fail_response.status == HTTPStatus.NOT_FOUND async def test_stream_timeout(hass, hass_client, stream_worker_sync): @@ -186,7 +186,7 @@ async def test_stream_timeout(hass, hass_client, stream_worker_sync): # Fetch playlist parsed_url = urlparse(url) playlist_response = await http_client.get(parsed_url.path) - assert playlist_response.status == 200 + assert playlist_response.status == HTTPStatus.OK # Wait a minute future = dt_util.utcnow() + timedelta(minutes=1) @@ -194,7 +194,7 @@ async def test_stream_timeout(hass, hass_client, stream_worker_sync): # Fetch again to reset timer playlist_response = await http_client.get(parsed_url.path) - assert playlist_response.status == 200 + assert playlist_response.status == HTTPStatus.OK stream_worker_sync.resume() @@ -205,7 +205,7 @@ async def test_stream_timeout(hass, hass_client, stream_worker_sync): # Ensure playlist not accessible fail_response = await http_client.get(parsed_url.path) - assert fail_response.status == HTTP_NOT_FOUND + assert fail_response.status == HTTPStatus.NOT_FOUND async def test_stream_timeout_after_stop(hass, hass_client, stream_worker_sync): @@ -280,7 +280,7 @@ async def test_hls_playlist_view_no_output(hass, hls_stream): # Fetch playlist resp = await hls_client.get("/playlist.m3u8") - assert resp.status == 404 + assert resp.status == HTTPStatus.NOT_FOUND async def test_hls_playlist_view(hass, hls_stream, stream_worker_sync): @@ -298,7 +298,7 @@ async def test_hls_playlist_view(hass, hls_stream, stream_worker_sync): hls_client = await hls_stream(stream) resp = await hls_client.get("/playlist.m3u8") - assert resp.status == 200 + assert resp.status == HTTPStatus.OK assert await resp.text() == make_playlist( sequence=0, segments=[make_segment(0), make_segment(1)] ) @@ -307,7 +307,7 @@ async def test_hls_playlist_view(hass, hls_stream, stream_worker_sync): hls.put(segment) await hass.async_block_till_done() resp = await hls_client.get("/playlist.m3u8") - assert resp.status == 200 + assert resp.status == HTTPStatus.OK assert await resp.text() == make_playlist( sequence=0, segments=[make_segment(0), make_segment(1), make_segment(2)] ) @@ -333,7 +333,7 @@ async def test_hls_max_segments(hass, hls_stream, stream_worker_sync): await hass.async_block_till_done() resp = await hls_client.get("/playlist.m3u8") - assert resp.status == 200 + assert resp.status == HTTPStatus.OK # Only NUM_PLAYLIST_SEGMENTS are returned in the playlist. start = MAX_SEGMENTS + 1 - NUM_PLAYLIST_SEGMENTS @@ -356,12 +356,12 @@ async def test_hls_max_segments(hass, hls_stream, stream_worker_sync): # The segment that fell off the buffer is not accessible with patch.object(hls.stream_settings, "hls_part_timeout", 0.1): segment_response = await hls_client.get("/segment/0.m4s") - assert segment_response.status == 404 + assert segment_response.status == HTTPStatus.NOT_FOUND # However all segments in the buffer are accessible, even those that were not in the playlist. for sequence in range(1, MAX_SEGMENTS + 1): segment_response = await hls_client.get(f"/segment/{sequence}.m4s") - assert segment_response.status == 200 + assert segment_response.status == HTTPStatus.OK stream_worker_sync.resume() stream.stop() @@ -390,7 +390,7 @@ async def test_hls_playlist_view_discontinuity(hass, hls_stream, stream_worker_s hls_client = await hls_stream(stream) resp = await hls_client.get("/playlist.m3u8") - assert resp.status == 200 + assert resp.status == HTTPStatus.OK assert await resp.text() == make_playlist( sequence=0, segments=[ @@ -428,7 +428,7 @@ async def test_hls_max_segments_discontinuity(hass, hls_stream, stream_worker_sy await hass.async_block_till_done() resp = await hls_client.get("/playlist.m3u8") - assert resp.status == 200 + assert resp.status == HTTPStatus.OK # Only NUM_PLAYLIST_SEGMENTS are returned in the playlist causing the # EXT-X-DISCONTINUITY tag to be omitted and EXT-X-DISCONTINUITY-SEQUENCE diff --git a/tests/components/stream/test_ll_hls.py b/tests/components/stream/test_ll_hls.py index ab1c01adce8..324b1435110 100644 --- a/tests/components/stream/test_ll_hls.py +++ b/tests/components/stream/test_ll_hls.py @@ -1,5 +1,6 @@ """The tests for hls streams.""" import asyncio +from http import HTTPStatus import itertools import re from urllib.parse import urlparse @@ -16,7 +17,6 @@ from homeassistant.components.stream.const import ( HLS_PROVIDER, ) from homeassistant.components.stream.core import Part -from homeassistant.const import HTTP_NOT_FOUND from homeassistant.setup import async_setup_component from .test_hls import SEGMENT_DURATION, STREAM_SOURCE, HlsClient, make_playlist @@ -143,17 +143,17 @@ async def test_ll_hls_stream(hass, hls_stream, stream_worker_sync): # Fetch playlist master_playlist_response = await hls_client.get() - assert master_playlist_response.status == 200 + assert master_playlist_response.status == HTTPStatus.OK # Fetch init master_playlist = await master_playlist_response.text() init_response = await hls_client.get("/init.mp4") - assert init_response.status == 200 + assert init_response.status == HTTPStatus.OK # Fetch playlist playlist_url = "/" + master_playlist.splitlines()[-1] playlist_response = await hls_client.get(playlist_url) - assert playlist_response.status == 200 + assert playlist_response.status == HTTPStatus.OK # Fetch segments playlist = await playlist_response.text() @@ -163,7 +163,7 @@ async def test_ll_hls_stream(hass, hls_stream, stream_worker_sync): if match: segment_url = "/" + match.group("segment_url") segment_response = await hls_client.get(segment_url) - assert segment_response.status == 200 + assert segment_response.status == HTTPStatus.OK def check_part_is_moof_mdat(data: bytes): if len(data) < 8 or data[4:8] != b"moof": @@ -200,7 +200,7 @@ async def test_ll_hls_stream(hass, hls_stream, stream_worker_sync): "Range": f'bytes={match.group("byterange_start")}-{byterange_end}' }, ) - assert part_segment_response.status == 206 + assert part_segment_response.status == HTTPStatus.PARTIAL_CONTENT assert check_part_is_moof_mdat(await part_segment_response.read()) stream_worker_sync.resume() @@ -210,7 +210,7 @@ async def test_ll_hls_stream(hass, hls_stream, stream_worker_sync): # Ensure playlist not accessible after stream ends fail_response = await hls_client.get() - assert fail_response.status == HTTP_NOT_FOUND + assert fail_response.status == HTTPStatus.NOT_FOUND async def test_ll_hls_playlist_view(hass, hls_stream, stream_worker_sync): @@ -244,7 +244,7 @@ async def test_ll_hls_playlist_view(hass, hls_stream, stream_worker_sync): hls_client = await hls_stream(stream) resp = await hls_client.get("/playlist.m3u8") - assert resp.status == 200 + assert resp.status == HTTPStatus.OK assert await resp.text() == make_playlist( sequence=0, segments=[ @@ -265,7 +265,7 @@ async def test_ll_hls_playlist_view(hass, hls_stream, stream_worker_sync): await hass.async_block_till_done() resp = await hls_client.get("/playlist.m3u8") - assert resp.status == 200 + assert resp.status == HTTPStatus.OK assert await resp.text() == make_playlist( sequence=0, segments=[ @@ -316,10 +316,10 @@ async def test_ll_hls_msn(hass, hls_stream, stream_worker_sync, hls_sync): msn_responses = await msn_requests - assert msn_responses[0].status == 200 - assert msn_responses[1].status == 200 - assert msn_responses[2].status == 400 - assert msn_responses[3].status == 400 + assert msn_responses[0].status == HTTPStatus.OK + assert msn_responses[1].status == HTTPStatus.OK + assert msn_responses[2].status == HTTPStatus.BAD_REQUEST + assert msn_responses[3].status == HTTPStatus.BAD_REQUEST # Sequence number is now 2. Create six more requests for sequences 0 through 5. # Calls for msn 0 through 4 should work, 5 should fail. @@ -334,12 +334,12 @@ async def test_ll_hls_msn(hass, hls_stream, stream_worker_sync, hls_sync): hls.put(segment) msn_responses = await msn_requests - assert msn_responses[0].status == 200 - assert msn_responses[1].status == 200 - assert msn_responses[2].status == 200 - assert msn_responses[3].status == 200 - assert msn_responses[4].status == 200 - assert msn_responses[5].status == 400 + assert msn_responses[0].status == HTTPStatus.OK + assert msn_responses[1].status == HTTPStatus.OK + assert msn_responses[2].status == HTTPStatus.OK + assert msn_responses[3].status == HTTPStatus.OK + assert msn_responses[4].status == HTTPStatus.OK + assert msn_responses[5].status == HTTPStatus.BAD_REQUEST stream_worker_sync.resume() @@ -369,7 +369,9 @@ async def test_ll_hls_playlist_bad_msn_part(hass, hls_stream, stream_worker_sync # If the Playlist URI contains an _HLS_part directive but no _HLS_msn # directive, the Server MUST return Bad Request, such as HTTP 400. - assert (await hls_client.get("/playlist.m3u8?_HLS_part=1")).status == 400 + assert ( + await hls_client.get("/playlist.m3u8?_HLS_part=1") + ).status == HTTPStatus.BAD_REQUEST # Seed hls with 1 complete segment and 1 in process segment segment = create_segment(sequence=0) @@ -398,12 +400,14 @@ async def test_ll_hls_playlist_bad_msn_part(hass, hls_stream, stream_worker_sync # The following two tests should fail immediately: # - request with a _HLS_msn of 4 # - request with a _HLS_msn of 1 and a _HLS_part of num_completed_parts-1+advance_part_limit - assert (await hls_client.get("/playlist.m3u8?_HLS_msn=4")).status == 400 + assert ( + await hls_client.get("/playlist.m3u8?_HLS_msn=4") + ).status == HTTPStatus.BAD_REQUEST assert ( await hls_client.get( f"/playlist.m3u8?_HLS_msn=1&_HLS_part={num_completed_parts-1+hass.data[DOMAIN][ATTR_SETTINGS].hls_advance_part_limit}" ) - ).status == 400 + ).status == HTTPStatus.BAD_REQUEST stream_worker_sync.resume() @@ -478,8 +482,8 @@ async def test_ll_hls_playlist_rollover_part( different_response, *same_responses = await requests - assert different_response.status == 200 - assert all(response.status == 200 for response in same_responses) + assert different_response.status == HTTPStatus.OK + assert all(response.status == HTTPStatus.OK for response in same_responses) different_playlist = await different_response.read() same_playlists = [await response.read() for response in same_responses] assert different_playlist != same_playlists[0] @@ -549,8 +553,8 @@ async def test_ll_hls_playlist_msn_part(hass, hls_stream, stream_worker_sync, hl msn_responses = await msn_requests # All the responses should succeed except the last one which fails - assert all(response.status == 200 for response in msn_responses[:-1]) - assert msn_responses[-1].status == 400 + assert all(response.status == HTTPStatus.OK for response in msn_responses[:-1]) + assert msn_responses[-1].status == HTTPStatus.BAD_REQUEST stream_worker_sync.resume() @@ -600,7 +604,7 @@ async def test_get_part_segments(hass, hls_stream, stream_worker_sync, hls_sync) ) ) responses = await requests - assert all(response.status == 200 for response in responses) + assert all(response.status == HTTPStatus.OK for response in responses) assert all( [ await responses[i].read() == segment.parts[i].data @@ -616,7 +620,7 @@ async def test_get_part_segments(hass, hls_stream, stream_worker_sync, hls_sync) await hls_sync.wait_for_handler() hls.part_put() response = await request - assert response.status == 404 + assert response.status == HTTPStatus.NOT_FOUND # Put the remaining parts and complete the segment while remaining_parts: @@ -641,7 +645,7 @@ async def test_get_part_segments(hass, hls_stream, stream_worker_sync, hls_sync) complete_segment(segment) # Check the response response = await request - assert response.status == 200 + assert response.status == HTTPStatus.OK assert ( await response.read() == ALT_SEQUENCE_BYTES[: len(hls.get_segment(2).parts[0].data)] diff --git a/tests/components/stt/test_init.py b/tests/components/stt/test_init.py index 9658ab92140..3b207fae01a 100644 --- a/tests/components/stt/test_init.py +++ b/tests/components/stt/test_init.py @@ -1,7 +1,7 @@ """Test STT component setup.""" +from http import HTTPStatus from homeassistant.components import stt -from homeassistant.const import HTTP_NOT_FOUND from homeassistant.setup import async_setup_component @@ -17,7 +17,7 @@ async def test_demo_settings_not_exists(hass, hass_client): response = await client.get("/api/stt/beer") - assert response.status == HTTP_NOT_FOUND + assert response.status == HTTPStatus.NOT_FOUND async def test_demo_speech_not_exists(hass, hass_client): @@ -27,4 +27,4 @@ async def test_demo_speech_not_exists(hass, hass_client): response = await client.post("/api/stt/beer", data=b"test") - assert response.status == HTTP_NOT_FOUND + assert response.status == HTTPStatus.NOT_FOUND diff --git a/tests/components/system_log/test_init.py b/tests/components/system_log/test_init.py index ef54788d910..d10ee9bbb51 100644 --- a/tests/components/system_log/test_init.py +++ b/tests/components/system_log/test_init.py @@ -1,5 +1,6 @@ """Test system log component.""" import asyncio +from http import HTTPStatus import logging import queue from unittest.mock import MagicMock, patch @@ -40,7 +41,7 @@ async def get_error_log(hass, hass_client, expected_count): client = await hass_client() resp = await client.get("/api/error/all") - assert resp.status == 200 + assert resp.status == HTTPStatus.OK data = await resp.json()