Use http.HTTPStatus in components/f* (#58244)

This commit is contained in:
Ville Skyttä 2021-10-22 23:10:47 +03:00 committed by GitHub
parent 4369b0b8be
commit b1360ffafb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 61 additions and 63 deletions

View file

@ -1,4 +1,5 @@
"""Facebook platform for notify component.""" """Facebook platform for notify component."""
from http import HTTPStatus
import json import json
import logging import logging
@ -12,7 +13,7 @@ from homeassistant.components.notify import (
PLATFORM_SCHEMA, PLATFORM_SCHEMA,
BaseNotificationService, BaseNotificationService,
) )
from homeassistant.const import CONTENT_TYPE_JSON, HTTP_OK from homeassistant.const import CONTENT_TYPE_JSON
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -76,7 +77,7 @@ class FacebookNotificationService(BaseNotificationService):
headers={CONTENT_TYPE: CONTENT_TYPE_JSON}, headers={CONTENT_TYPE: CONTENT_TYPE_JSON},
timeout=10, timeout=10,
) )
if resp.status_code != HTTP_OK: if resp.status_code != HTTPStatus.OK:
log_error(resp) log_error(resp)

View file

@ -1,5 +1,6 @@
"""Component for facial detection and identification via facebox.""" """Component for facial detection and identification via facebox."""
import base64 import base64
from http import HTTPStatus
import logging import logging
import requests import requests
@ -21,9 +22,6 @@ from homeassistant.const import (
CONF_PASSWORD, CONF_PASSWORD,
CONF_PORT, CONF_PORT,
CONF_USERNAME, CONF_USERNAME,
HTTP_BAD_REQUEST,
HTTP_OK,
HTTP_UNAUTHORIZED,
) )
from homeassistant.core import split_entity_id from homeassistant.core import split_entity_id
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
@ -67,10 +65,10 @@ def check_box_health(url, username, password):
kwargs["auth"] = requests.auth.HTTPBasicAuth(username, password) kwargs["auth"] = requests.auth.HTTPBasicAuth(username, password)
try: try:
response = requests.get(url, **kwargs) response = requests.get(url, **kwargs)
if response.status_code == HTTP_UNAUTHORIZED: if response.status_code == HTTPStatus.UNAUTHORIZED:
_LOGGER.error("AuthenticationError on %s", CLASSIFIER) _LOGGER.error("AuthenticationError on %s", CLASSIFIER)
return None return None
if response.status_code == HTTP_OK: if response.status_code == HTTPStatus.OK:
return response.json()["hostname"] return response.json()["hostname"]
except requests.exceptions.ConnectionError: except requests.exceptions.ConnectionError:
_LOGGER.error("ConnectionError: Is %s running?", CLASSIFIER) _LOGGER.error("ConnectionError: Is %s running?", CLASSIFIER)
@ -115,7 +113,7 @@ def post_image(url, image, username, password):
kwargs["auth"] = requests.auth.HTTPBasicAuth(username, password) kwargs["auth"] = requests.auth.HTTPBasicAuth(username, password)
try: try:
response = requests.post(url, json={"base64": encode_image(image)}, **kwargs) response = requests.post(url, json={"base64": encode_image(image)}, **kwargs)
if response.status_code == HTTP_UNAUTHORIZED: if response.status_code == HTTPStatus.UNAUTHORIZED:
_LOGGER.error("AuthenticationError on %s", CLASSIFIER) _LOGGER.error("AuthenticationError on %s", CLASSIFIER)
return None return None
return response return response
@ -137,9 +135,9 @@ def teach_file(url, name, file_path, username, password):
files={"file": open_file}, files={"file": open_file},
**kwargs, **kwargs,
) )
if response.status_code == HTTP_UNAUTHORIZED: if response.status_code == HTTPStatus.UNAUTHORIZED:
_LOGGER.error("AuthenticationError on %s", CLASSIFIER) _LOGGER.error("AuthenticationError on %s", CLASSIFIER)
elif response.status_code == HTTP_BAD_REQUEST: elif response.status_code == HTTPStatus.BAD_REQUEST:
_LOGGER.error( _LOGGER.error(
"%s teaching of file %s failed with message:%s", "%s teaching of file %s failed with message:%s",
CLASSIFIER, CLASSIFIER,

View file

@ -1,12 +1,13 @@
"""Flock platform for notify component.""" """Flock platform for notify component."""
import asyncio import asyncio
from http import HTTPStatus
import logging import logging
import async_timeout import async_timeout
import voluptuous as vol import voluptuous as vol
from homeassistant.components.notify import PLATFORM_SCHEMA, BaseNotificationService from homeassistant.components.notify import PLATFORM_SCHEMA, BaseNotificationService
from homeassistant.const import CONF_ACCESS_TOKEN, HTTP_OK from homeassistant.const import CONF_ACCESS_TOKEN
from homeassistant.helpers.aiohttp_client import async_get_clientsession from homeassistant.helpers.aiohttp_client import async_get_clientsession
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
@ -44,7 +45,7 @@ class FlockNotificationService(BaseNotificationService):
response = await self._session.post(self._url, json=payload) response = await self._session.post(self._url, json=payload)
result = await response.json() result = await response.json()
if response.status != HTTP_OK or "error" in result: if response.status != HTTPStatus.OK or "error" in result:
_LOGGER.error( _LOGGER.error(
"Flock service returned HTTP status %d, response %s", "Flock service returned HTTP status %d, response %s",
response.status, response.status,

View file

@ -6,7 +6,7 @@ import requests
import voluptuous as vol import voluptuous as vol
from homeassistant.components.http import HomeAssistantView from homeassistant.components.http import HomeAssistantView
from homeassistant.const import CONF_ACCESS_TOKEN, HTTP_CREATED, HTTP_OK from homeassistant.const import CONF_ACCESS_TOKEN
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -56,7 +56,7 @@ def setup(hass, config):
url = f"https://api.foursquare.com/v2/checkins/add?oauth_token={config[CONF_ACCESS_TOKEN]}&v=20160802&m=swarm" url = f"https://api.foursquare.com/v2/checkins/add?oauth_token={config[CONF_ACCESS_TOKEN]}&v=20160802&m=swarm"
response = requests.post(url, data=call.data, timeout=10) response = requests.post(url, data=call.data, timeout=10)
if response.status_code not in (HTTP_OK, HTTP_CREATED): if response.status_code not in (HTTPStatus.OK, HTTPStatus.CREATED):
_LOGGER.exception( _LOGGER.exception(
"Error checking in user. Response %d: %s:", "Error checking in user. Response %d: %s:",
response.status_code, response.status_code,

View file

@ -1,17 +1,12 @@
"""Support for Free Mobile SMS platform.""" """Support for Free Mobile SMS platform."""
from http import HTTPStatus
import logging import logging
from freesms import FreeClient from freesms import FreeClient
import voluptuous as vol import voluptuous as vol
from homeassistant.components.notify import PLATFORM_SCHEMA, BaseNotificationService from homeassistant.components.notify import PLATFORM_SCHEMA, BaseNotificationService
from homeassistant.const import ( from homeassistant.const import CONF_ACCESS_TOKEN, CONF_USERNAME
CONF_ACCESS_TOKEN,
CONF_USERNAME,
HTTP_BAD_REQUEST,
HTTP_FORBIDDEN,
HTTP_INTERNAL_SERVER_ERROR,
)
import homeassistant.helpers.config_validation as cv import homeassistant.helpers.config_validation as cv
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -37,11 +32,11 @@ class FreeSMSNotificationService(BaseNotificationService):
"""Send a message to the Free Mobile user cell.""" """Send a message to the Free Mobile user cell."""
resp = self.free_client.send_sms(message) resp = self.free_client.send_sms(message)
if resp.status_code == HTTP_BAD_REQUEST: if resp.status_code == HTTPStatus.BAD_REQUEST:
_LOGGER.error("At least one parameter is missing") _LOGGER.error("At least one parameter is missing")
elif resp.status_code == 402: elif resp.status_code == HTTPStatus.PAYMENT_REQUIRED:
_LOGGER.error("Too much SMS send in a few time") _LOGGER.error("Too much SMS send in a few time")
elif resp.status_code == HTTP_FORBIDDEN: elif resp.status_code == HTTPStatus.FORBIDDEN:
_LOGGER.error("Wrong Username/Password") _LOGGER.error("Wrong Username/Password")
elif resp.status_code == HTTP_INTERNAL_SERVER_ERROR: elif resp.status_code == HTTPStatus.INTERNAL_SERVER_ERROR:
_LOGGER.error("Server error, try later") _LOGGER.error("Server error, try later")

View file

@ -1,4 +1,6 @@
"""The test for the Facebook notify module.""" """The test for the Facebook notify module."""
from http import HTTPStatus
import pytest import pytest
import requests_mock import requests_mock
@ -15,7 +17,7 @@ def facebook():
async def test_send_simple_message(hass, facebook): async def test_send_simple_message(hass, facebook):
"""Test sending a simple message with success.""" """Test sending a simple message with success."""
with requests_mock.Mocker() as mock: with requests_mock.Mocker() as mock:
mock.register_uri(requests_mock.POST, fb.BASE_URL, status_code=200) mock.register_uri(requests_mock.POST, fb.BASE_URL, status_code=HTTPStatus.OK)
message = "This is just a test" message = "This is just a test"
target = ["+15555551234"] target = ["+15555551234"]
@ -39,7 +41,7 @@ async def test_send_simple_message(hass, facebook):
async def test_send_multiple_message(hass, facebook): async def test_send_multiple_message(hass, facebook):
"""Test sending a message to multiple targets.""" """Test sending a message to multiple targets."""
with requests_mock.Mocker() as mock: with requests_mock.Mocker() as mock:
mock.register_uri(requests_mock.POST, fb.BASE_URL, status_code=200) mock.register_uri(requests_mock.POST, fb.BASE_URL, status_code=HTTPStatus.OK)
message = "This is just a test" message = "This is just a test"
targets = ["+15555551234", "+15555551235"] targets = ["+15555551234", "+15555551235"]
@ -65,7 +67,7 @@ async def test_send_multiple_message(hass, facebook):
async def test_send_message_attachment(hass, facebook): async def test_send_message_attachment(hass, facebook):
"""Test sending a message with a remote attachment.""" """Test sending a message with a remote attachment."""
with requests_mock.Mocker() as mock: with requests_mock.Mocker() as mock:
mock.register_uri(requests_mock.POST, fb.BASE_URL, status_code=200) mock.register_uri(requests_mock.POST, fb.BASE_URL, status_code=HTTPStatus.OK)
message = "This will be thrown away." message = "This will be thrown away."
data = { data = {
@ -94,7 +96,9 @@ async def test_send_message_attachment(hass, facebook):
async def test_send_targetless_message(hass, facebook): async def test_send_targetless_message(hass, facebook):
"""Test sending a message without a target.""" """Test sending a message without a target."""
with requests_mock.Mocker() as mock: with requests_mock.Mocker() as mock:
mock.register_uri(requests_mock.POST, fb.BASE_URL, status_code=200) mock.register_uri(
requests_mock.POST, fb.BASE_URL, status_code=HTTPStatus.OK
)
facebook.send_message(message="going nowhere") facebook.send_message(message="going nowhere")
assert not mock.called assert not mock.called
@ -105,7 +109,7 @@ async def test_send_message_attachment(hass, facebook):
mock.register_uri( mock.register_uri(
requests_mock.POST, requests_mock.POST,
fb.BASE_URL, fb.BASE_URL,
status_code=400, status_code=HTTPStatus.BAD_REQUEST,
json={ json={
"error": { "error": {
"message": "Invalid OAuth access token.", "message": "Invalid OAuth access token.",

View file

@ -1,4 +1,5 @@
"""The tests for the facebox component.""" """The tests for the facebox component."""
from http import HTTPStatus
from unittest.mock import Mock, mock_open, patch from unittest.mock import Mock, mock_open, patch
import pytest import pytest
@ -15,9 +16,6 @@ from homeassistant.const import (
CONF_PASSWORD, CONF_PASSWORD,
CONF_PORT, CONF_PORT,
CONF_USERNAME, CONF_USERNAME,
HTTP_BAD_REQUEST,
HTTP_OK,
HTTP_UNAUTHORIZED,
STATE_UNKNOWN, STATE_UNKNOWN,
) )
from homeassistant.core import callback from homeassistant.core import callback
@ -120,10 +118,10 @@ def test_check_box_health(caplog):
"""Test check box health.""" """Test check box health."""
with requests_mock.Mocker() as mock_req: with requests_mock.Mocker() as mock_req:
url = f"http://{MOCK_IP}:{MOCK_PORT}/healthz" url = f"http://{MOCK_IP}:{MOCK_PORT}/healthz"
mock_req.get(url, status_code=HTTP_OK, json=MOCK_HEALTH) mock_req.get(url, status_code=HTTPStatus.OK, json=MOCK_HEALTH)
assert fb.check_box_health(url, "user", "pass") == MOCK_BOX_ID assert fb.check_box_health(url, "user", "pass") == MOCK_BOX_ID
mock_req.get(url, status_code=HTTP_UNAUTHORIZED) mock_req.get(url, status_code=HTTPStatus.UNAUTHORIZED)
assert fb.check_box_health(url, None, None) is None assert fb.check_box_health(url, None, None) is None
assert "AuthenticationError on facebox" in caplog.text assert "AuthenticationError on facebox" in caplog.text
@ -238,7 +236,7 @@ async def test_process_image_errors(hass, mock_healthybox, mock_image, caplog):
# Now test with bad auth. # Now test with bad auth.
with requests_mock.Mocker() as mock_req: with requests_mock.Mocker() as mock_req:
url = f"http://{MOCK_IP}:{MOCK_PORT}/facebox/check" url = f"http://{MOCK_IP}:{MOCK_PORT}/facebox/check"
mock_req.register_uri("POST", url, status_code=HTTP_UNAUTHORIZED) mock_req.register_uri("POST", url, status_code=HTTPStatus.UNAUTHORIZED)
data = {ATTR_ENTITY_ID: VALID_ENTITY_ID} data = {ATTR_ENTITY_ID: VALID_ENTITY_ID}
await hass.services.async_call(ip.DOMAIN, ip.SERVICE_SCAN, service_data=data) await hass.services.async_call(ip.DOMAIN, ip.SERVICE_SCAN, service_data=data)
await hass.async_block_till_done() await hass.async_block_till_done()
@ -259,7 +257,7 @@ async def test_teach_service(
# Test successful teach. # Test successful teach.
with requests_mock.Mocker() as mock_req: with requests_mock.Mocker() as mock_req:
url = f"http://{MOCK_IP}:{MOCK_PORT}/facebox/teach" url = f"http://{MOCK_IP}:{MOCK_PORT}/facebox/teach"
mock_req.post(url, status_code=HTTP_OK) mock_req.post(url, status_code=HTTPStatus.OK)
data = { data = {
ATTR_ENTITY_ID: VALID_ENTITY_ID, ATTR_ENTITY_ID: VALID_ENTITY_ID,
ATTR_NAME: MOCK_NAME, ATTR_NAME: MOCK_NAME,
@ -273,7 +271,7 @@ async def test_teach_service(
# Now test with bad auth. # Now test with bad auth.
with requests_mock.Mocker() as mock_req: with requests_mock.Mocker() as mock_req:
url = f"http://{MOCK_IP}:{MOCK_PORT}/facebox/teach" url = f"http://{MOCK_IP}:{MOCK_PORT}/facebox/teach"
mock_req.post(url, status_code=HTTP_UNAUTHORIZED) mock_req.post(url, status_code=HTTPStatus.UNAUTHORIZED)
data = { data = {
ATTR_ENTITY_ID: VALID_ENTITY_ID, ATTR_ENTITY_ID: VALID_ENTITY_ID,
ATTR_NAME: MOCK_NAME, ATTR_NAME: MOCK_NAME,
@ -288,7 +286,7 @@ async def test_teach_service(
# Now test the failed teaching. # Now test the failed teaching.
with requests_mock.Mocker() as mock_req: with requests_mock.Mocker() as mock_req:
url = f"http://{MOCK_IP}:{MOCK_PORT}/facebox/teach" url = f"http://{MOCK_IP}:{MOCK_PORT}/facebox/teach"
mock_req.post(url, status_code=HTTP_BAD_REQUEST, text=MOCK_ERROR_NO_FACE) mock_req.post(url, status_code=HTTPStatus.BAD_REQUEST, text=MOCK_ERROR_NO_FACE)
data = { data = {
ATTR_ENTITY_ID: VALID_ENTITY_ID, ATTR_ENTITY_ID: VALID_ENTITY_ID,
ATTR_NAME: MOCK_NAME, ATTR_NAME: MOCK_NAME,

View file

@ -1,4 +1,5 @@
"""Define fixtures available for all tests.""" """Define fixtures available for all tests."""
from http import HTTPStatus
import json import json
import time import time
@ -41,40 +42,40 @@ def aioclient_mock_fixture(aioclient_mock):
} }
), ),
headers={"Content-Type": CONTENT_TYPE_JSON}, headers={"Content-Type": CONTENT_TYPE_JSON},
status=200, status=HTTPStatus.OK,
) )
# Mocks the devices for flo. # Mocks the devices for flo.
aioclient_mock.get( aioclient_mock.get(
"https://api-gw.meetflo.com/api/v2/devices/98765", "https://api-gw.meetflo.com/api/v2/devices/98765",
text=load_fixture("flo/device_info_response.json"), text=load_fixture("flo/device_info_response.json"),
status=200, status=HTTPStatus.OK,
headers={"Content-Type": CONTENT_TYPE_JSON}, headers={"Content-Type": CONTENT_TYPE_JSON},
) )
aioclient_mock.get( aioclient_mock.get(
"https://api-gw.meetflo.com/api/v2/devices/32839", "https://api-gw.meetflo.com/api/v2/devices/32839",
text=load_fixture("flo/device_info_response_detector.json"), text=load_fixture("flo/device_info_response_detector.json"),
status=200, status=HTTPStatus.OK,
headers={"Content-Type": CONTENT_TYPE_JSON}, headers={"Content-Type": CONTENT_TYPE_JSON},
) )
# Mocks the water consumption for flo. # Mocks the water consumption for flo.
aioclient_mock.get( aioclient_mock.get(
"https://api-gw.meetflo.com/api/v2/water/consumption", "https://api-gw.meetflo.com/api/v2/water/consumption",
text=load_fixture("flo/water_consumption_info_response.json"), text=load_fixture("flo/water_consumption_info_response.json"),
status=200, status=HTTPStatus.OK,
headers={"Content-Type": CONTENT_TYPE_JSON}, headers={"Content-Type": CONTENT_TYPE_JSON},
) )
# Mocks the location info for flo. # Mocks the location info for flo.
aioclient_mock.get( aioclient_mock.get(
"https://api-gw.meetflo.com/api/v2/locations/mmnnoopp", "https://api-gw.meetflo.com/api/v2/locations/mmnnoopp",
text=load_fixture("flo/location_info_expand_devices_response.json"), text=load_fixture("flo/location_info_expand_devices_response.json"),
status=200, status=HTTPStatus.OK,
headers={"Content-Type": CONTENT_TYPE_JSON}, headers={"Content-Type": CONTENT_TYPE_JSON},
) )
# Mocks the user info for flo. # Mocks the user info for flo.
aioclient_mock.get( aioclient_mock.get(
"https://api-gw.meetflo.com/api/v2/users/12345abcde", "https://api-gw.meetflo.com/api/v2/users/12345abcde",
text=load_fixture("flo/user_info_expand_locations_response.json"), text=load_fixture("flo/user_info_expand_locations_response.json"),
status=200, status=HTTPStatus.OK,
headers={"Content-Type": CONTENT_TYPE_JSON}, headers={"Content-Type": CONTENT_TYPE_JSON},
params={"expand": "locations"}, params={"expand": "locations"},
) )
@ -82,14 +83,14 @@ def aioclient_mock_fixture(aioclient_mock):
aioclient_mock.get( aioclient_mock.get(
"https://api-gw.meetflo.com/api/v2/users/12345abcde", "https://api-gw.meetflo.com/api/v2/users/12345abcde",
text=load_fixture("flo/user_info_expand_locations_response.json"), text=load_fixture("flo/user_info_expand_locations_response.json"),
status=200, status=HTTPStatus.OK,
headers={"Content-Type": CONTENT_TYPE_JSON}, headers={"Content-Type": CONTENT_TYPE_JSON},
) )
# Mocks the valve open call for flo. # Mocks the valve open call for flo.
aioclient_mock.post( aioclient_mock.post(
"https://api-gw.meetflo.com/api/v2/devices/98765", "https://api-gw.meetflo.com/api/v2/devices/98765",
text=load_fixture("flo/device_info_response.json"), text=load_fixture("flo/device_info_response.json"),
status=200, status=HTTPStatus.OK,
headers={"Content-Type": CONTENT_TYPE_JSON}, headers={"Content-Type": CONTENT_TYPE_JSON},
json={"valve": {"target": "open"}}, json={"valve": {"target": "open"}},
) )
@ -97,7 +98,7 @@ def aioclient_mock_fixture(aioclient_mock):
aioclient_mock.post( aioclient_mock.post(
"https://api-gw.meetflo.com/api/v2/devices/98765", "https://api-gw.meetflo.com/api/v2/devices/98765",
text=load_fixture("flo/device_info_response_closed.json"), text=load_fixture("flo/device_info_response_closed.json"),
status=200, status=HTTPStatus.OK,
headers={"Content-Type": CONTENT_TYPE_JSON}, headers={"Content-Type": CONTENT_TYPE_JSON},
json={"valve": {"target": "closed"}}, json={"valve": {"target": "closed"}},
) )
@ -105,14 +106,14 @@ def aioclient_mock_fixture(aioclient_mock):
aioclient_mock.post( aioclient_mock.post(
"https://api-gw.meetflo.com/api/v2/devices/98765/healthTest/run", "https://api-gw.meetflo.com/api/v2/devices/98765/healthTest/run",
text=load_fixture("flo/user_info_expand_locations_response.json"), text=load_fixture("flo/user_info_expand_locations_response.json"),
status=200, status=HTTPStatus.OK,
headers={"Content-Type": CONTENT_TYPE_JSON}, headers={"Content-Type": CONTENT_TYPE_JSON},
) )
# Mocks the health test call for flo. # Mocks the health test call for flo.
aioclient_mock.post( aioclient_mock.post(
"https://api-gw.meetflo.com/api/v2/locations/mmnnoopp/systemMode", "https://api-gw.meetflo.com/api/v2/locations/mmnnoopp/systemMode",
text=load_fixture("flo/user_info_expand_locations_response.json"), text=load_fixture("flo/user_info_expand_locations_response.json"),
status=200, status=HTTPStatus.OK,
headers={"Content-Type": CONTENT_TYPE_JSON}, headers={"Content-Type": CONTENT_TYPE_JSON},
json={"systemMode": {"target": "home"}}, json={"systemMode": {"target": "home"}},
) )
@ -120,7 +121,7 @@ def aioclient_mock_fixture(aioclient_mock):
aioclient_mock.post( aioclient_mock.post(
"https://api-gw.meetflo.com/api/v2/locations/mmnnoopp/systemMode", "https://api-gw.meetflo.com/api/v2/locations/mmnnoopp/systemMode",
text=load_fixture("flo/user_info_expand_locations_response.json"), text=load_fixture("flo/user_info_expand_locations_response.json"),
status=200, status=HTTPStatus.OK,
headers={"Content-Type": CONTENT_TYPE_JSON}, headers={"Content-Type": CONTENT_TYPE_JSON},
json={"systemMode": {"target": "away"}}, json={"systemMode": {"target": "away"}},
) )
@ -128,7 +129,7 @@ def aioclient_mock_fixture(aioclient_mock):
aioclient_mock.post( aioclient_mock.post(
"https://api-gw.meetflo.com/api/v2/locations/mmnnoopp/systemMode", "https://api-gw.meetflo.com/api/v2/locations/mmnnoopp/systemMode",
text=load_fixture("flo/user_info_expand_locations_response.json"), text=load_fixture("flo/user_info_expand_locations_response.json"),
status=200, status=HTTPStatus.OK,
headers={"Content-Type": CONTENT_TYPE_JSON}, headers={"Content-Type": CONTENT_TYPE_JSON},
json={ json={
"systemMode": { "systemMode": {

View file

@ -1,4 +1,5 @@
"""Test the flo config flow.""" """Test the flo config flow."""
from http import HTTPStatus
import json import json
import time import time
from unittest.mock import patch from unittest.mock import patch
@ -51,7 +52,7 @@ async def test_form_cannot_connect(hass, aioclient_mock):
} }
), ),
headers={"Content-Type": CONTENT_TYPE_JSON}, headers={"Content-Type": CONTENT_TYPE_JSON},
status=400, status=HTTPStatus.BAD_REQUEST,
) )
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER} DOMAIN, context={"source": config_entries.SOURCE_USER}

View file

@ -1,6 +1,7 @@
"""The tests for the Foobot sensor platform.""" """The tests for the Foobot sensor platform."""
import asyncio import asyncio
from http import HTTPStatus
import re import re
from unittest.mock import MagicMock from unittest.mock import MagicMock
@ -12,8 +13,6 @@ from homeassistant.const import (
CONCENTRATION_MICROGRAMS_PER_CUBIC_METER, CONCENTRATION_MICROGRAMS_PER_CUBIC_METER,
CONCENTRATION_PARTS_PER_BILLION, CONCENTRATION_PARTS_PER_BILLION,
CONCENTRATION_PARTS_PER_MILLION, CONCENTRATION_PARTS_PER_MILLION,
HTTP_FORBIDDEN,
HTTP_INTERNAL_SERVER_ERROR,
PERCENTAGE, PERCENTAGE,
TEMP_CELSIUS, TEMP_CELSIUS,
) )
@ -73,7 +72,7 @@ async def test_setup_permanent_error(hass, aioclient_mock):
"""Expected failures caused by permanent errors in API response.""" """Expected failures caused by permanent errors in API response."""
fake_async_add_entities = MagicMock() fake_async_add_entities = MagicMock()
errors = [400, 401, HTTP_FORBIDDEN] errors = [HTTPStatus.BAD_REQUEST, HTTPStatus.UNAUTHORIZED, HTTPStatus.FORBIDDEN]
for error in errors: for error in errors:
aioclient_mock.get(re.compile("api.foobot.io/v2/owner/.*"), status=error) aioclient_mock.get(re.compile("api.foobot.io/v2/owner/.*"), status=error)
result = await foobot.async_setup_platform( result = await foobot.async_setup_platform(
@ -86,7 +85,7 @@ async def test_setup_temporary_error(hass, aioclient_mock):
"""Expected failures caused by temporary errors in API response.""" """Expected failures caused by temporary errors in API response."""
fake_async_add_entities = MagicMock() fake_async_add_entities = MagicMock()
errors = [429, HTTP_INTERNAL_SERVER_ERROR] errors = [HTTPStatus.TOO_MANY_REQUESTS, HTTPStatus.INTERNAL_SERVER_ERROR]
for error in errors: for error in errors:
aioclient_mock.get(re.compile("api.foobot.io/v2/owner/.*"), status=error) aioclient_mock.get(re.compile("api.foobot.io/v2/owner/.*"), status=error)
with pytest.raises(PlatformNotReady): with pytest.raises(PlatformNotReady):

View file

@ -1,5 +1,6 @@
"""The tests for Home Assistant frontend.""" """The tests for Home Assistant frontend."""
from datetime import timedelta from datetime import timedelta
from http import HTTPStatus
import re import re
from unittest.mock import patch from unittest.mock import patch
@ -16,7 +17,6 @@ from homeassistant.components.frontend import (
THEMES_STORAGE_KEY, THEMES_STORAGE_KEY,
) )
from homeassistant.components.websocket_api.const import TYPE_RESULT from homeassistant.components.websocket_api.const import TYPE_RESULT
from homeassistant.const import HTTP_NOT_FOUND, HTTP_OK
from homeassistant.loader import async_get_integration from homeassistant.loader import async_get_integration
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from homeassistant.util import dt from homeassistant.util import dt
@ -156,7 +156,7 @@ async def test_dont_cache_service_worker(mock_http_client):
async def test_404(mock_http_client): async def test_404(mock_http_client):
"""Test for HTTP 404 error.""" """Test for HTTP 404 error."""
resp = await mock_http_client.get("/not-existing") resp = await mock_http_client.get("/not-existing")
assert resp.status == HTTP_NOT_FOUND assert resp.status == HTTPStatus.NOT_FOUND
async def test_we_cannot_POST_to_root(mock_http_client): async def test_we_cannot_POST_to_root(mock_http_client):
@ -365,7 +365,7 @@ async def test_get_panels(hass, hass_ws_client, mock_http_client):
events = async_capture_events(hass, EVENT_PANELS_UPDATED) events = async_capture_events(hass, EVENT_PANELS_UPDATED)
resp = await mock_http_client.get("/map") resp = await mock_http_client.get("/map")
assert resp.status == HTTP_NOT_FOUND assert resp.status == HTTPStatus.NOT_FOUND
hass.components.frontend.async_register_built_in_panel( hass.components.frontend.async_register_built_in_panel(
"map", "Map", "mdi:tooltip-account", require_admin=True "map", "Map", "mdi:tooltip-account", require_admin=True
@ -393,7 +393,7 @@ async def test_get_panels(hass, hass_ws_client, mock_http_client):
hass.components.frontend.async_remove_panel("map") hass.components.frontend.async_remove_panel("map")
resp = await mock_http_client.get("/map") resp = await mock_http_client.get("/map")
assert resp.status == HTTP_NOT_FOUND assert resp.status == HTTPStatus.NOT_FOUND
assert len(events) == 2 assert len(events) == 2
@ -509,7 +509,7 @@ async def test_static_paths(hass, mock_http_client):
async def test_manifest_json(hass, frontend_themes, mock_http_client): async def test_manifest_json(hass, frontend_themes, mock_http_client):
"""Test for fetching manifest.json.""" """Test for fetching manifest.json."""
resp = await mock_http_client.get("/manifest.json") resp = await mock_http_client.get("/manifest.json")
assert resp.status == HTTP_OK assert resp.status == HTTPStatus.OK
assert "cache-control" not in resp.headers assert "cache-control" not in resp.headers
json = await resp.json() json = await resp.json()
@ -521,7 +521,7 @@ async def test_manifest_json(hass, frontend_themes, mock_http_client):
await hass.async_block_till_done() await hass.async_block_till_done()
resp = await mock_http_client.get("/manifest.json") resp = await mock_http_client.get("/manifest.json")
assert resp.status == HTTP_OK assert resp.status == HTTPStatus.OK
assert "cache-control" not in resp.headers assert "cache-control" not in resp.headers
json = await resp.json() json = await resp.json()