Add return type to tests without arguments (#87613)

* Add return type to tests without arguments

* Black

* Cancel fixture amends
This commit is contained in:
epenet 2023-02-07 14:20:06 +01:00 committed by GitHub
parent fb4c0b4b7a
commit 4142f0d15d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
99 changed files with 473 additions and 459 deletions

View file

@ -13,14 +13,14 @@ from homeassistant.helpers.entity_registry import RegistryEntry
from tests.common import mock_device_registry, mock_registry from tests.common import mock_device_registry, mock_registry
def test_entities_none(): def test_entities_none() -> None:
"""Test entity ID policy.""" """Test entity ID policy."""
policy = None policy = None
compiled = compile_entities(policy, None) compiled = compile_entities(policy, None)
assert compiled("light.kitchen", "read") is False assert compiled("light.kitchen", "read") is False
def test_entities_empty(): def test_entities_empty() -> None:
"""Test entity ID policy.""" """Test entity ID policy."""
policy = {} policy = {}
ENTITY_POLICY_SCHEMA(policy) ENTITY_POLICY_SCHEMA(policy)
@ -28,14 +28,14 @@ def test_entities_empty():
assert compiled("light.kitchen", "read") is False assert compiled("light.kitchen", "read") is False
def test_entities_false(): def test_entities_false() -> None:
"""Test entity ID policy.""" """Test entity ID policy."""
policy = False policy = False
with pytest.raises(vol.Invalid): with pytest.raises(vol.Invalid):
ENTITY_POLICY_SCHEMA(policy) ENTITY_POLICY_SCHEMA(policy)
def test_entities_true(): def test_entities_true() -> None:
"""Test entity ID policy.""" """Test entity ID policy."""
policy = True policy = True
ENTITY_POLICY_SCHEMA(policy) ENTITY_POLICY_SCHEMA(policy)
@ -43,7 +43,7 @@ def test_entities_true():
assert compiled("light.kitchen", "read") is True assert compiled("light.kitchen", "read") is True
def test_entities_domains_true(): def test_entities_domains_true() -> None:
"""Test entity ID policy.""" """Test entity ID policy."""
policy = {"domains": True} policy = {"domains": True}
ENTITY_POLICY_SCHEMA(policy) ENTITY_POLICY_SCHEMA(policy)
@ -51,7 +51,7 @@ def test_entities_domains_true():
assert compiled("light.kitchen", "read") is True assert compiled("light.kitchen", "read") is True
def test_entities_domains_domain_true(): def test_entities_domains_domain_true() -> None:
"""Test entity ID policy.""" """Test entity ID policy."""
policy = {"domains": {"light": True}} policy = {"domains": {"light": True}}
ENTITY_POLICY_SCHEMA(policy) ENTITY_POLICY_SCHEMA(policy)
@ -60,14 +60,14 @@ def test_entities_domains_domain_true():
assert compiled("switch.kitchen", "read") is False assert compiled("switch.kitchen", "read") is False
def test_entities_domains_domain_false(): def test_entities_domains_domain_false() -> None:
"""Test entity ID policy.""" """Test entity ID policy."""
policy = {"domains": {"light": False}} policy = {"domains": {"light": False}}
with pytest.raises(vol.Invalid): with pytest.raises(vol.Invalid):
ENTITY_POLICY_SCHEMA(policy) ENTITY_POLICY_SCHEMA(policy)
def test_entities_entity_ids_true(): def test_entities_entity_ids_true() -> None:
"""Test entity ID policy.""" """Test entity ID policy."""
policy = {"entity_ids": True} policy = {"entity_ids": True}
ENTITY_POLICY_SCHEMA(policy) ENTITY_POLICY_SCHEMA(policy)
@ -75,14 +75,14 @@ def test_entities_entity_ids_true():
assert compiled("light.kitchen", "read") is True assert compiled("light.kitchen", "read") is True
def test_entities_entity_ids_false(): def test_entities_entity_ids_false() -> None:
"""Test entity ID policy.""" """Test entity ID policy."""
policy = {"entity_ids": False} policy = {"entity_ids": False}
with pytest.raises(vol.Invalid): with pytest.raises(vol.Invalid):
ENTITY_POLICY_SCHEMA(policy) ENTITY_POLICY_SCHEMA(policy)
def test_entities_entity_ids_entity_id_true(): def test_entities_entity_ids_entity_id_true() -> None:
"""Test entity ID policy.""" """Test entity ID policy."""
policy = {"entity_ids": {"light.kitchen": True}} policy = {"entity_ids": {"light.kitchen": True}}
ENTITY_POLICY_SCHEMA(policy) ENTITY_POLICY_SCHEMA(policy)
@ -91,14 +91,14 @@ def test_entities_entity_ids_entity_id_true():
assert compiled("switch.kitchen", "read") is False assert compiled("switch.kitchen", "read") is False
def test_entities_entity_ids_entity_id_false(): def test_entities_entity_ids_entity_id_false() -> None:
"""Test entity ID policy.""" """Test entity ID policy."""
policy = {"entity_ids": {"light.kitchen": False}} policy = {"entity_ids": {"light.kitchen": False}}
with pytest.raises(vol.Invalid): with pytest.raises(vol.Invalid):
ENTITY_POLICY_SCHEMA(policy) ENTITY_POLICY_SCHEMA(policy)
def test_entities_control_only(): def test_entities_control_only() -> None:
"""Test policy granting control only.""" """Test policy granting control only."""
policy = {"entity_ids": {"light.kitchen": {"read": True}}} policy = {"entity_ids": {"light.kitchen": {"read": True}}}
ENTITY_POLICY_SCHEMA(policy) ENTITY_POLICY_SCHEMA(policy)
@ -108,7 +108,7 @@ def test_entities_control_only():
assert compiled("light.kitchen", "edit") is False assert compiled("light.kitchen", "edit") is False
def test_entities_read_control(): def test_entities_read_control() -> None:
"""Test policy granting control only.""" """Test policy granting control only."""
policy = {"domains": {"light": {"read": True, "control": True}}} policy = {"domains": {"light": {"read": True, "control": True}}}
ENTITY_POLICY_SCHEMA(policy) ENTITY_POLICY_SCHEMA(policy)
@ -118,7 +118,7 @@ def test_entities_read_control():
assert compiled("light.kitchen", "edit") is False assert compiled("light.kitchen", "edit") is False
def test_entities_all_allow(): def test_entities_all_allow() -> None:
"""Test policy allowing all entities.""" """Test policy allowing all entities."""
policy = {"all": True} policy = {"all": True}
ENTITY_POLICY_SCHEMA(policy) ENTITY_POLICY_SCHEMA(policy)
@ -128,7 +128,7 @@ def test_entities_all_allow():
assert compiled("switch.kitchen", "read") is True assert compiled("switch.kitchen", "read") is True
def test_entities_all_read(): def test_entities_all_read() -> None:
"""Test policy applying read to all entities.""" """Test policy applying read to all entities."""
policy = {"all": {"read": True}} policy = {"all": {"read": True}}
ENTITY_POLICY_SCHEMA(policy) ENTITY_POLICY_SCHEMA(policy)
@ -138,7 +138,7 @@ def test_entities_all_read():
assert compiled("switch.kitchen", "read") is True assert compiled("switch.kitchen", "read") is True
def test_entities_all_control(): def test_entities_all_control() -> None:
"""Test entity ID policy applying control to all.""" """Test entity ID policy applying control to all."""
policy = {"all": {"control": True}} policy = {"all": {"control": True}}
ENTITY_POLICY_SCHEMA(policy) ENTITY_POLICY_SCHEMA(policy)
@ -181,7 +181,7 @@ def test_entities_device_id_boolean(hass):
assert compiled("test_domain.not_allowed", "control") is False assert compiled("test_domain.not_allowed", "control") is False
def test_entities_areas_true(): def test_entities_areas_true() -> None:
"""Test entity ID policy for areas.""" """Test entity ID policy for areas."""
policy = {"area_ids": True} policy = {"area_ids": True}
ENTITY_POLICY_SCHEMA(policy) ENTITY_POLICY_SCHEMA(policy)

View file

@ -2,7 +2,7 @@
from homeassistant.auth.permissions.merge import merge_policies from homeassistant.auth.permissions.merge import merge_policies
def test_merging_permissions_true_rules_dict(): def test_merging_permissions_true_rules_dict() -> None:
"""Test merging policy with two entities.""" """Test merging policy with two entities."""
policy1 = { policy1 = {
"something_else": True, "something_else": True,
@ -15,7 +15,7 @@ def test_merging_permissions_true_rules_dict():
} }
def test_merging_permissions_multiple_subcategories(): def test_merging_permissions_multiple_subcategories() -> None:
"""Test merging policy with two entities.""" """Test merging policy with two entities."""
policy1 = {"entities": None} policy1 = {"entities": None}
policy2 = {"entities": {"entity_ids": True}} policy2 = {"entities": {"entity_ids": True}}

View file

@ -6,7 +6,7 @@ from homeassistant.auth.permissions import (
) )
def test_admin_policy(): def test_admin_policy() -> None:
"""Test admin policy works.""" """Test admin policy works."""
# Make sure it's valid # Make sure it's valid
POLICY_SCHEMA(system_policies.ADMIN_POLICY) POLICY_SCHEMA(system_policies.ADMIN_POLICY)
@ -17,7 +17,7 @@ def test_admin_policy():
assert perms.check_entity("light.kitchen", "edit") assert perms.check_entity("light.kitchen", "edit")
def test_user_policy(): def test_user_policy() -> None:
"""Test user policy works.""" """Test user policy works."""
# Make sure it's valid # Make sure it's valid
POLICY_SCHEMA(system_policies.USER_POLICY) POLICY_SCHEMA(system_policies.USER_POLICY)
@ -28,7 +28,7 @@ def test_user_policy():
assert perms.check_entity("light.kitchen", "edit") assert perms.check_entity("light.kitchen", "edit")
def test_read_only_policy(): def test_read_only_policy() -> None:
"""Test read only policy works.""" """Test read only policy works."""
# Make sure it's valid # Make sure it's valid
POLICY_SCHEMA(system_policies.READ_ONLY_POLICY) POLICY_SCHEMA(system_policies.READ_ONLY_POLICY)

View file

@ -3,7 +3,7 @@
from homeassistant.auth.permissions import util from homeassistant.auth.permissions import util
def test_test_all(): def test_test_all() -> None:
"""Test if we can test the all group.""" """Test if we can test the all group."""
for val in (None, {}, {"all": None}, {"all": {}}): for val in (None, {}, {"all": None}, {"all": {}}):
assert util.test_all(val, "read") is False assert util.test_all(val, "read") is False

View file

@ -2,7 +2,7 @@
from homeassistant.auth import models, permissions from homeassistant.auth import models, permissions
def test_owner_fetching_owner_permissions(): def test_owner_fetching_owner_permissions() -> None:
"""Test we fetch the owner permissions for an owner user.""" """Test we fetch the owner permissions for an owner user."""
group = models.Group(name="Test Group", policy={}) group = models.Group(name="Test Group", policy={})
owner = models.User( owner = models.User(
@ -11,7 +11,7 @@ def test_owner_fetching_owner_permissions():
assert owner.permissions is permissions.OwnerPermissions assert owner.permissions is permissions.OwnerPermissions
def test_permissions_merged(): def test_permissions_merged() -> None:
"""Test we merge the groups permissions.""" """Test we merge the groups permissions."""
group = models.Group( group = models.Group(
name="Test Group", policy={"entities": {"domains": {"switch": True}}} name="Test Group", policy={"entities": {"domains": {"switch": True}}}

View file

@ -7,7 +7,7 @@ import pytest
from homeassistant.backports.enum import StrEnum from homeassistant.backports.enum import StrEnum
def test_strenum(): def test_strenum() -> None:
"""Test StrEnum.""" """Test StrEnum."""
class TestEnum(StrEnum): class TestEnum(StrEnum):

View file

@ -79,7 +79,7 @@ def test_create_api_message_defaults(hass):
assert msg["endpoint"] is not request["directive"]["endpoint"] assert msg["endpoint"] is not request["directive"]["endpoint"]
def test_create_api_message_special(): def test_create_api_message_special() -> None:
"""Create an API message response of a request with non defaults.""" """Create an API message response of a request with non defaults."""
request = get_new_request("Alexa.PowerController", "TurnOn") request = get_new_request("Alexa.PowerController", "TurnOn")
directive_header = request["directive"]["header"] directive_header = request["directive"]["header"]

View file

@ -15,44 +15,44 @@ TEST_HOST = "testhost"
TEST_PASSWORD = "testpass" TEST_PASSWORD = "testpass"
def test_make_filter(): def test_make_filter() -> None:
"""Test filter.""" """Test filter."""
callsigns = ["CALLSIGN1", "callsign2"] callsigns = ["CALLSIGN1", "callsign2"]
res = device_tracker.make_filter(callsigns) res = device_tracker.make_filter(callsigns)
assert res == "b/CALLSIGN1 b/CALLSIGN2" assert res == "b/CALLSIGN1 b/CALLSIGN2"
def test_gps_accuracy_0(): def test_gps_accuracy_0() -> None:
"""Test GPS accuracy level 0.""" """Test GPS accuracy level 0."""
acc = device_tracker.gps_accuracy(TEST_COORDS_NULL_ISLAND, 0) acc = device_tracker.gps_accuracy(TEST_COORDS_NULL_ISLAND, 0)
assert acc == 0 assert acc == 0
def test_gps_accuracy_1(): def test_gps_accuracy_1() -> None:
"""Test GPS accuracy level 1.""" """Test GPS accuracy level 1."""
acc = device_tracker.gps_accuracy(TEST_COORDS_NULL_ISLAND, 1) acc = device_tracker.gps_accuracy(TEST_COORDS_NULL_ISLAND, 1)
assert acc == 186 assert acc == 186
def test_gps_accuracy_2(): def test_gps_accuracy_2() -> None:
"""Test GPS accuracy level 2.""" """Test GPS accuracy level 2."""
acc = device_tracker.gps_accuracy(TEST_COORDS_NULL_ISLAND, 2) acc = device_tracker.gps_accuracy(TEST_COORDS_NULL_ISLAND, 2)
assert acc == 1855 assert acc == 1855
def test_gps_accuracy_3(): def test_gps_accuracy_3() -> None:
"""Test GPS accuracy level 3.""" """Test GPS accuracy level 3."""
acc = device_tracker.gps_accuracy(TEST_COORDS_NULL_ISLAND, 3) acc = device_tracker.gps_accuracy(TEST_COORDS_NULL_ISLAND, 3)
assert acc == 18553 assert acc == 18553
def test_gps_accuracy_4(): def test_gps_accuracy_4() -> None:
"""Test GPS accuracy level 4.""" """Test GPS accuracy level 4."""
acc = device_tracker.gps_accuracy(TEST_COORDS_NULL_ISLAND, 4) acc = device_tracker.gps_accuracy(TEST_COORDS_NULL_ISLAND, 4)
assert acc == 111319 assert acc == 111319
def test_gps_accuracy_invalid_int(): def test_gps_accuracy_invalid_int() -> None:
"""Test GPS accuracy with invalid input.""" """Test GPS accuracy with invalid input."""
level = 5 level = 5
@ -63,7 +63,7 @@ def test_gps_accuracy_invalid_int():
pass pass
def test_gps_accuracy_invalid_string(): def test_gps_accuracy_invalid_string() -> None:
"""Test GPS accuracy with invalid input.""" """Test GPS accuracy with invalid input."""
level = "not an int" level = "not an int"
@ -74,7 +74,7 @@ def test_gps_accuracy_invalid_string():
pass pass
def test_gps_accuracy_invalid_float(): def test_gps_accuracy_invalid_float() -> None:
"""Test GPS accuracy with invalid input.""" """Test GPS accuracy with invalid input."""
level = 1.2 level = 1.2
@ -85,7 +85,7 @@ def test_gps_accuracy_invalid_float():
pass pass
def test_aprs_listener(): def test_aprs_listener() -> None:
"""Test listener thread.""" """Test listener thread."""
with patch("aprslib.IS") as mock_ais: with patch("aprslib.IS") as mock_ais:
callsign = TEST_CALLSIGN callsign = TEST_CALLSIGN
@ -110,7 +110,7 @@ def test_aprs_listener():
mock_ais.assert_called_with(callsign, passwd=password, host=host, port=port) mock_ais.assert_called_with(callsign, passwd=password, host=host, port=port)
def test_aprs_listener_start_fail(): def test_aprs_listener_start_fail() -> None:
"""Test listener thread start failure.""" """Test listener thread start failure."""
with patch( with patch(
"aprslib.IS.connect", side_effect=aprslib.ConnectionError("Unable to connect.") "aprslib.IS.connect", side_effect=aprslib.ConnectionError("Unable to connect.")
@ -135,7 +135,7 @@ def test_aprs_listener_start_fail():
assert listener.start_message == "Unable to connect." assert listener.start_message == "Unable to connect."
def test_aprs_listener_stop(): def test_aprs_listener_stop() -> None:
"""Test listener thread stop.""" """Test listener thread stop."""
with patch("aprslib.IS"): with patch("aprslib.IS"):
callsign = TEST_CALLSIGN callsign = TEST_CALLSIGN
@ -161,7 +161,7 @@ def test_aprs_listener_stop():
listener.ais.close.assert_called_with() listener.ais.close.assert_called_with()
def test_aprs_listener_rx_msg(): def test_aprs_listener_rx_msg() -> None:
"""Test rx_msg.""" """Test rx_msg."""
with patch("aprslib.IS"): with patch("aprslib.IS"):
callsign = TEST_CALLSIGN callsign = TEST_CALLSIGN
@ -198,7 +198,7 @@ def test_aprs_listener_rx_msg():
) )
def test_aprs_listener_rx_msg_ambiguity(): def test_aprs_listener_rx_msg_ambiguity() -> None:
"""Test rx_msg with posambiguity.""" """Test rx_msg with posambiguity."""
with patch("aprslib.IS"): with patch("aprslib.IS"):
callsign = TEST_CALLSIGN callsign = TEST_CALLSIGN
@ -235,7 +235,7 @@ def test_aprs_listener_rx_msg_ambiguity():
) )
def test_aprs_listener_rx_msg_ambiguity_invalid(): def test_aprs_listener_rx_msg_ambiguity_invalid() -> None:
"""Test rx_msg with invalid posambiguity.""" """Test rx_msg with invalid posambiguity."""
with patch("aprslib.IS"): with patch("aprslib.IS"):
callsign = TEST_CALLSIGN callsign = TEST_CALLSIGN
@ -270,7 +270,7 @@ def test_aprs_listener_rx_msg_ambiguity_invalid():
) )
def test_aprs_listener_rx_msg_no_position(): def test_aprs_listener_rx_msg_no_position() -> None:
"""Test rx_msg with non-position report.""" """Test rx_msg with non-position report."""
with patch("aprslib.IS"): with patch("aprslib.IS"):
callsign = TEST_CALLSIGN callsign = TEST_CALLSIGN

View file

@ -23,7 +23,7 @@ def mock_session():
yield mocker yield mocker
def test_client_id_scheme(): def test_client_id_scheme() -> None:
"""Test we enforce valid scheme.""" """Test we enforce valid scheme."""
assert indieauth._parse_client_id("http://ex.com/") assert indieauth._parse_client_id("http://ex.com/")
assert indieauth._parse_client_id("https://ex.com/") assert indieauth._parse_client_id("https://ex.com/")
@ -32,7 +32,7 @@ def test_client_id_scheme():
indieauth._parse_client_id("ftp://ex.com") indieauth._parse_client_id("ftp://ex.com")
def test_client_id_path(): def test_client_id_path() -> None:
"""Test we enforce valid path.""" """Test we enforce valid path."""
assert indieauth._parse_client_id("http://ex.com").path == "/" assert indieauth._parse_client_id("http://ex.com").path == "/"
assert indieauth._parse_client_id("http://ex.com/hello").path == "/hello" assert indieauth._parse_client_id("http://ex.com/hello").path == "/hello"
@ -54,13 +54,13 @@ def test_client_id_path():
indieauth._parse_client_id("http://ex.com/hello/../yo") indieauth._parse_client_id("http://ex.com/hello/../yo")
def test_client_id_fragment(): def test_client_id_fragment() -> None:
"""Test we enforce valid fragment.""" """Test we enforce valid fragment."""
with pytest.raises(ValueError): with pytest.raises(ValueError):
indieauth._parse_client_id("http://ex.com/#yoo") indieauth._parse_client_id("http://ex.com/#yoo")
def test_client_id_user_pass(): def test_client_id_user_pass() -> None:
"""Test we enforce valid username/password.""" """Test we enforce valid username/password."""
with pytest.raises(ValueError): with pytest.raises(ValueError):
indieauth._parse_client_id("http://user@ex.com/") indieauth._parse_client_id("http://user@ex.com/")
@ -69,7 +69,7 @@ def test_client_id_user_pass():
indieauth._parse_client_id("http://user:pass@ex.com/") indieauth._parse_client_id("http://user:pass@ex.com/")
def test_client_id_hostname(): def test_client_id_hostname() -> None:
"""Test we enforce valid hostname.""" """Test we enforce valid hostname."""
assert indieauth._parse_client_id("http://www.home-assistant.io/") assert indieauth._parse_client_id("http://www.home-assistant.io/")
assert indieauth._parse_client_id("http://[::1]") assert indieauth._parse_client_id("http://[::1]")
@ -91,7 +91,7 @@ def test_client_id_hostname():
assert indieauth._parse_client_id("http://192.167.0.0/") assert indieauth._parse_client_id("http://192.167.0.0/")
def test_parse_url_lowercase_host(): def test_parse_url_lowercase_host() -> None:
"""Test we update empty paths.""" """Test we update empty paths."""
assert indieauth._parse_url("http://ex.com/hello").path == "/hello" assert indieauth._parse_url("http://ex.com/hello").path == "/hello"
assert indieauth._parse_url("http://EX.COM/hello").hostname == "ex.com" assert indieauth._parse_url("http://EX.COM/hello").hostname == "ex.com"
@ -101,7 +101,7 @@ def test_parse_url_lowercase_host():
assert parts.path == "/HELLO" assert parts.path == "/HELLO"
def test_parse_url_path(): def test_parse_url_path() -> None:
"""Test we update empty paths.""" """Test we update empty paths."""
assert indieauth._parse_url("http://ex.com").path == "/" assert indieauth._parse_url("http://ex.com").path == "/"

View file

@ -5,7 +5,7 @@ from homeassistant.components import binary_sensor
from homeassistant.const import STATE_OFF, STATE_ON from homeassistant.const import STATE_OFF, STATE_ON
def test_state(): def test_state() -> None:
"""Test binary sensor state.""" """Test binary sensor state."""
sensor = binary_sensor.BinarySensorEntity() sensor = binary_sensor.BinarySensorEntity()
assert sensor.state is None assert sensor.state is None

View file

@ -53,7 +53,7 @@ class MockBlackbird:
self.zones[3].av = source_idx self.zones[3].av = source_idx
def test_valid_serial_schema(): def test_valid_serial_schema() -> None:
"""Test valid schema.""" """Test valid schema."""
valid_schema = { valid_schema = {
"platform": "blackbird", "platform": "blackbird",
@ -82,7 +82,7 @@ def test_valid_serial_schema():
PLATFORM_SCHEMA(valid_schema) PLATFORM_SCHEMA(valid_schema)
def test_valid_socket_schema(): def test_valid_socket_schema() -> None:
"""Test valid schema.""" """Test valid schema."""
valid_schema = { valid_schema = {
"platform": "blackbird", "platform": "blackbird",
@ -104,7 +104,7 @@ def test_valid_socket_schema():
PLATFORM_SCHEMA(valid_schema) PLATFORM_SCHEMA(valid_schema)
def test_invalid_schemas(): def test_invalid_schemas() -> None:
"""Test invalid schemas.""" """Test invalid schemas."""
schemas = ( schemas = (
{}, # Empty {}, # Empty

View file

@ -84,7 +84,7 @@ COMMUNITY_POST_INPUTS = {
} }
def test_get_community_post_import_url(): def test_get_community_post_import_url() -> None:
"""Test variations of generating import forum url.""" """Test variations of generating import forum url."""
assert ( assert (
importer._get_community_post_import_url( importer._get_community_post_import_url(
@ -101,7 +101,7 @@ def test_get_community_post_import_url():
) )
def test_get_github_import_url(): def test_get_github_import_url() -> None:
"""Test getting github import url.""" """Test getting github import url."""
assert ( assert (
importer._get_github_import_url( importer._get_github_import_url(
@ -128,7 +128,7 @@ def test_extract_blueprint_from_community_topic(community_post):
assert imported_blueprint.blueprint.inputs == COMMUNITY_POST_INPUTS assert imported_blueprint.blueprint.inputs == COMMUNITY_POST_INPUTS
def test_extract_blueprint_from_community_topic_invalid_yaml(): def test_extract_blueprint_from_community_topic_invalid_yaml() -> None:
"""Test extracting blueprint with invalid YAML.""" """Test extracting blueprint with invalid YAML."""
with pytest.raises(HomeAssistantError): with pytest.raises(HomeAssistantError):
importer._extract_blueprint_from_community_topic( importer._extract_blueprint_from_community_topic(
@ -143,7 +143,7 @@ def test_extract_blueprint_from_community_topic_invalid_yaml():
) )
def test_extract_blueprint_from_community_topic_wrong_lang(): def test_extract_blueprint_from_community_topic_wrong_lang() -> None:
"""Test extracting blueprint with invalid YAML.""" """Test extracting blueprint with invalid YAML."""
with pytest.raises(importer.HomeAssistantError): with pytest.raises(importer.HomeAssistantError):
assert importer._extract_blueprint_from_community_topic( assert importer._extract_blueprint_from_community_topic(

View file

@ -52,7 +52,7 @@ def domain_bps(hass):
) )
def test_blueprint_model_init(): def test_blueprint_model_init() -> None:
"""Test constructor validation.""" """Test constructor validation."""
with pytest.raises(errors.InvalidBlueprint): with pytest.raises(errors.InvalidBlueprint):
models.Blueprint({}) models.Blueprint({})
@ -91,7 +91,7 @@ def test_blueprint_properties(blueprint_1):
} }
def test_blueprint_update_metadata(): def test_blueprint_update_metadata() -> None:
"""Test update metadata.""" """Test update metadata."""
bp = models.Blueprint( bp = models.Blueprint(
{ {
@ -106,7 +106,7 @@ def test_blueprint_update_metadata():
assert bp.metadata["source_url"] == "http://bla.com" assert bp.metadata["source_url"] == "http://bla.com"
def test_blueprint_validate(): def test_blueprint_validate() -> None:
"""Test validate blueprint.""" """Test validate blueprint."""
assert ( assert (
models.Blueprint( models.Blueprint(

View file

@ -24,13 +24,13 @@ def _reset_turbojpeg_singleton():
TurboJPEGSingleton.__instance = TurboJPEG() TurboJPEGSingleton.__instance = TurboJPEG()
def test_turbojpeg_singleton(): def test_turbojpeg_singleton() -> None:
"""Verify the instance always gives back the same.""" """Verify the instance always gives back the same."""
_clear_turbojpeg_singleton() _clear_turbojpeg_singleton()
assert TurboJPEGSingleton.instance() == TurboJPEGSingleton.instance() assert TurboJPEGSingleton.instance() == TurboJPEGSingleton.instance()
def test_scale_jpeg_camera_image(): def test_scale_jpeg_camera_image() -> None:
"""Test we can scale a jpeg image.""" """Test we can scale a jpeg image."""
_clear_turbojpeg_singleton() _clear_turbojpeg_singleton()
@ -71,7 +71,7 @@ def test_scale_jpeg_camera_image():
assert jpeg_bytes == EMPTY_16_12_JPEG assert jpeg_bytes == EMPTY_16_12_JPEG
def test_turbojpeg_load_failure(): def test_turbojpeg_load_failure() -> None:
"""Handle libjpegturbo not being installed.""" """Handle libjpegturbo not being installed."""
_clear_turbojpeg_singleton() _clear_turbojpeg_singleton()
with patch("turbojpeg.TurboJPEG", side_effect=Exception): with patch("turbojpeg.TurboJPEG", side_effect=Exception):

View file

@ -14,12 +14,12 @@ def cloud_with_prefs(cloud_prefs):
return Mock(client=Mock(prefs=cloud_prefs)) return Mock(client=Mock(prefs=cloud_prefs))
def test_default_exists(): def test_default_exists() -> None:
"""Test our default language exists.""" """Test our default language exists."""
assert const.DEFAULT_TTS_DEFAULT_VOICE in voice.MAP_VOICE assert const.DEFAULT_TTS_DEFAULT_VOICE in voice.MAP_VOICE
def test_schema(): def test_schema() -> None:
"""Test schema.""" """Test schema."""
assert "nl-NL" in tts.SUPPORT_LANGUAGES assert "nl-NL" in tts.SUPPORT_LANGUAGES

View file

@ -2,7 +2,7 @@
from homeassistant.components.conversation.util import create_matcher from homeassistant.components.conversation.util import create_matcher
def test_create_matcher(): def test_create_matcher() -> None:
"""Test the create matcher method.""" """Test the create matcher method."""
# Basic sentence # Basic sentence
pattern = create_matcher("Hello world") pattern = create_matcher("Hello world")

View file

@ -2,13 +2,13 @@
from homeassistant.components.daikin.climate import format_target_temperature from homeassistant.components.daikin.climate import format_target_temperature
def test_int_conversion(): def test_int_conversion() -> None:
"""Check no decimal are kept when target temp is an integer.""" """Check no decimal are kept when target temp is an integer."""
formatted = format_target_temperature("16") formatted = format_target_temperature("16")
assert formatted == "16" assert formatted == "16"
def test_rounding(): def test_rounding() -> None:
"""Check 1 decimal is kept when target temp is a decimal.""" """Check 1 decimal is kept when target temp is a decimal."""
formatted = format_target_temperature("16.1") formatted = format_target_temperature("16.1")
assert formatted == "16" assert formatted == "16"

View file

@ -12,7 +12,7 @@ from tests.common import (
) )
def test_tracker_entity(): def test_tracker_entity() -> None:
"""Test tracker entity.""" """Test tracker entity."""
class TestEntry(ce.TrackerEntity): class TestEntry(ce.TrackerEntity):

View file

@ -53,7 +53,7 @@ async def test_scanner_entity_device_tracker(hass, enable_custom_integrations):
assert entity_state.state == STATE_HOME assert entity_state.state == STATE_HOME
def test_scanner_entity(): def test_scanner_entity() -> None:
"""Test coverage for base ScannerEntity entity class.""" """Test coverage for base ScannerEntity entity class."""
entity = ScannerEntity() entity = ScannerEntity()
with pytest.raises(NotImplementedError): with pytest.raises(NotImplementedError):
@ -68,7 +68,7 @@ def test_scanner_entity():
assert entity.hostname is None assert entity.hostname is None
def test_base_tracker_entity(): def test_base_tracker_entity() -> None:
"""Test coverage for base BaseTrackerEntity entity class.""" """Test coverage for base BaseTrackerEntity entity class."""
entity = BaseTrackerEntity() entity = BaseTrackerEntity()
with pytest.raises(NotImplementedError): with pytest.raises(NotImplementedError):

View file

@ -629,7 +629,7 @@ async def test_old_style_track_new_is_skipped(mock_device_tracker_conf, hass):
assert mock_device_tracker_conf[0].track is False assert mock_device_tracker_conf[0].track is False
def test_see_schema_allowing_ios_calls(): def test_see_schema_allowing_ios_calls() -> None:
"""Test SEE service schema allows extra keys. """Test SEE service schema allows extra keys.
Temp work around because the iOS app sends incorrect data. Temp work around because the iOS app sends incorrect data.

View file

@ -2,7 +2,7 @@
from homeassistant.components.diagnostics import REDACTED, async_redact_data from homeassistant.components.diagnostics import REDACTED, async_redact_data
def test_redact(): def test_redact() -> None:
"""Test the async_redact_data helper.""" """Test the async_redact_data helper."""
data = { data = {
"key1": "value1", "key1": "value1",

View file

@ -569,7 +569,7 @@ async def test_options_flow(hass):
assert entry.options == {"time_between_update": 15} assert entry.options == {"time_between_update": 15}
def test_get_serial_by_id_no_dir(): def test_get_serial_by_id_no_dir() -> None:
"""Test serial by id conversion if there's no /dev/serial/by-id.""" """Test serial by id conversion if there's no /dev/serial/by-id."""
p1 = patch("os.path.isdir", MagicMock(return_value=False)) p1 = patch("os.path.isdir", MagicMock(return_value=False))
p2 = patch("os.scandir") p2 = patch("os.scandir")
@ -580,7 +580,7 @@ def test_get_serial_by_id_no_dir():
assert scan_mock.call_count == 0 assert scan_mock.call_count == 0
def test_get_serial_by_id(): def test_get_serial_by_id() -> None:
"""Test serial by id conversion.""" """Test serial by id conversion."""
p1 = patch("os.path.isdir", MagicMock(return_value=True)) p1 = patch("os.path.isdir", MagicMock(return_value=True))
p2 = patch("os.scandir") p2 = patch("os.scandir")

View file

@ -102,7 +102,7 @@ async def test_config_google_home_entity_id_to_number_empty(hass, hass_storage):
assert entity_id == "light.test2" assert entity_id == "light.test2"
def test_config_alexa_entity_id_to_number(): def test_config_alexa_entity_id_to_number() -> None:
"""Test config adheres to the type.""" """Test config adheres to the type."""
conf = Config(None, {"type": "alexa"}, "127.0.0.1") conf = Config(None, {"type": "alexa"}, "127.0.0.1")

View file

@ -64,7 +64,7 @@ async def setup_hue(hass):
await hass.async_block_till_done() await hass.async_block_till_done()
def test_upnp_discovery_basic(): def test_upnp_discovery_basic() -> None:
"""Tests the UPnP basic discovery response.""" """Tests the UPnP basic discovery response."""
upnp_responder_protocol = upnp.UPNPResponderProtocol(None, None, "192.0.2.42", 8080) upnp_responder_protocol = upnp.UPNPResponderProtocol(None, None, "192.0.2.42", 8080)
mock_transport = MockTransport() mock_transport = MockTransport()
@ -96,7 +96,7 @@ USN: uuid:2f402f80-da50-11e1-9b23-001788255acc
assert mock_transport.sends == [(expected_send, 1234)] assert mock_transport.sends == [(expected_send, 1234)]
def test_upnp_discovery_rootdevice(): def test_upnp_discovery_rootdevice() -> None:
"""Tests the UPnP rootdevice discovery response.""" """Tests the UPnP rootdevice discovery response."""
upnp_responder_protocol = upnp.UPNPResponderProtocol(None, None, "192.0.2.42", 8080) upnp_responder_protocol = upnp.UPNPResponderProtocol(None, None, "192.0.2.42", 8080)
mock_transport = MockTransport() mock_transport = MockTransport()
@ -128,7 +128,7 @@ USN: uuid:2f402f80-da50-11e1-9b23-001788255acc::upnp:rootdevice
assert mock_transport.sends == [(expected_send, 1234)] assert mock_transport.sends == [(expected_send, 1234)]
def test_upnp_no_response(): def test_upnp_no_response() -> None:
"""Tests the UPnP does not response on an invalid request.""" """Tests the UPnP does not response on an invalid request."""
upnp_responder_protocol = upnp.UPNPResponderProtocol(None, None, "192.0.2.42", 8080) upnp_responder_protocol = upnp.UPNPResponderProtocol(None, None, "192.0.2.42", 8080)
mock_transport = MockTransport() mock_transport = MockTransport()

View file

@ -2,14 +2,14 @@
from homeassistant.components.everlights import light as everlights from homeassistant.components.everlights import light as everlights
def test_color_rgb_to_int(): def test_color_rgb_to_int() -> None:
"""Test RGB to integer conversion.""" """Test RGB to integer conversion."""
assert everlights.color_rgb_to_int(0x00, 0x00, 0x00) == 0x000000 assert everlights.color_rgb_to_int(0x00, 0x00, 0x00) == 0x000000
assert everlights.color_rgb_to_int(0xFF, 0xFF, 0xFF) == 0xFFFFFF assert everlights.color_rgb_to_int(0xFF, 0xFF, 0xFF) == 0xFFFFFF
assert everlights.color_rgb_to_int(0x12, 0x34, 0x56) == 0x123456 assert everlights.color_rgb_to_int(0x12, 0x34, 0x56) == 0x123456
def test_int_to_rgb(): def test_int_to_rgb() -> None:
"""Test integer to RGB conversion.""" """Test integer to RGB conversion."""
assert everlights.color_int_to_rgb(0x000000) == (0x00, 0x00, 0x00) assert everlights.color_int_to_rgb(0x000000) == (0x00, 0x00, 0x00)
assert everlights.color_int_to_rgb(0xFFFFFF) == (0xFF, 0xFF, 0xFF) assert everlights.color_int_to_rgb(0xFFFFFF) == (0xFF, 0xFF, 0xFF)

View file

@ -130,23 +130,23 @@ def test_check_box_health(caplog):
assert "ConnectionError: Is facebox running?" in caplog.text assert "ConnectionError: Is facebox running?" in caplog.text
def test_encode_image(): def test_encode_image() -> None:
"""Test that binary data is encoded correctly.""" """Test that binary data is encoded correctly."""
assert fb.encode_image(b"test") == "dGVzdA==" assert fb.encode_image(b"test") == "dGVzdA=="
def test_get_matched_faces(): def test_get_matched_faces() -> None:
"""Test that matched_faces are parsed correctly.""" """Test that matched_faces are parsed correctly."""
assert fb.get_matched_faces(PARSED_FACES) == MATCHED_FACES assert fb.get_matched_faces(PARSED_FACES) == MATCHED_FACES
def test_parse_faces(): def test_parse_faces() -> None:
"""Test parsing of raw face data, and generation of matched_faces.""" """Test parsing of raw face data, and generation of matched_faces."""
assert fb.parse_faces(MOCK_JSON["faces"]) == PARSED_FACES assert fb.parse_faces(MOCK_JSON["faces"]) == PARSED_FACES
@patch("os.access", Mock(return_value=False)) @patch("os.access", Mock(return_value=False))
def test_valid_file_path(): def test_valid_file_path() -> None:
"""Test that an invalid file_path is caught.""" """Test that an invalid file_path is caught."""
assert not fb.valid_file_path("test_path") assert not fb.valid_file_path("test_path")

View file

@ -12,7 +12,7 @@ class BaseFan(FanEntity):
"""Initialize the fan.""" """Initialize the fan."""
def test_fanentity(): def test_fanentity() -> None:
"""Test fan entity methods.""" """Test fan entity methods."""
fan = BaseFan() fan = BaseFan()
assert fan.state == "off" assert fan.state == "off"

View file

@ -28,7 +28,7 @@ async def test_valid_path_setup(hass):
) )
def test_event(): def test_event() -> None:
"""Check that Home Assistant events are fired correctly on watchdog event.""" """Check that Home Assistant events are fired correctly on watchdog event."""
class MockPatternMatchingEventHandler: class MockPatternMatchingEventHandler:
@ -58,7 +58,7 @@ def test_event():
} }
def test_move_event(): def test_move_event() -> None:
"""Check that Home Assistant events are fired correctly on watchdog event.""" """Check that Home Assistant events are fired correctly on watchdog event."""
class MockPatternMatchingEventHandler: class MockPatternMatchingEventHandler:

View file

@ -332,7 +332,7 @@ def test_supported_features_string(caplog):
assert "Entity test.entity_id contains invalid supported_features value invalid" assert "Entity test.entity_id contains invalid supported_features value invalid"
def test_request_data(): def test_request_data() -> None:
"""Test request data properties.""" """Test request data properties."""
config = MockConfig() config = MockConfig()
data = helpers.RequestData( data = helpers.RequestData(
@ -428,7 +428,7 @@ async def test_config_local_sdk_warn_version(hass, hass_client, caplog, version)
) in caplog.text ) in caplog.text
def test_is_supported_cached(): def test_is_supported_cached() -> None:
"""Test is_supported is cached.""" """Test is_supported is cached."""
config = MockConfig() config = MockConfig()

View file

@ -42,7 +42,7 @@ def listeners_without_writes(listeners: dict[str, int]) -> dict[str, int]:
@pytest.mark.usefixtures("hass_history") @pytest.mark.usefixtures("hass_history")
def test_setup(): def test_setup() -> None:
"""Test setup method of history.""" """Test setup method of history."""
# Verification occurs in the fixture # Verification occurs in the fixture

View file

@ -80,7 +80,7 @@ def db_schema_30():
@pytest.mark.usefixtures("hass_history") @pytest.mark.usefixtures("hass_history")
def test_setup(): def test_setup() -> None:
"""Test setup method of history.""" """Test setup method of history."""
# Verification occurs in the fixture # Verification occurs in the fixture

View file

@ -35,7 +35,7 @@ def listeners_without_writes(listeners: dict[str, int]) -> dict[str, int]:
@pytest.mark.usefixtures("hass_history") @pytest.mark.usefixtures("hass_history")
def test_setup(): def test_setup() -> None:
"""Test setup method of history.""" """Test setup method of history."""
# Verification occurs in the fixture # Verification occurs in the fixture

View file

@ -321,7 +321,7 @@ async def test_config(hass):
assert "icon" not in no_icon.attributes assert "icon" not in no_icon.attributes
def test_validator(): def test_validator() -> None:
"""Test validators.""" """Test validators."""
parsed = ha_scene.STATES_SCHEMA({"light.Test": {"state": "on"}}) parsed = ha_scene.STATES_SCHEMA({"light.Test": {"state": "on"}})
assert len(parsed) == 1 assert len(parsed) == 1

View file

@ -46,7 +46,7 @@ def test_not_supported(caplog):
assert "invalid aid" in caplog.records[0].msg assert "invalid aid" in caplog.records[0].msg
def test_not_supported_media_player(): def test_not_supported_media_player() -> None:
"""Test if mode isn't supported and if no supported modes.""" """Test if mode isn't supported and if no supported modes."""
# selected mode for entity not supported # selected mode for entity not supported
config = {CONF_FEATURE_LIST: {FEATURE_ON_OFF: None}} config = {CONF_FEATURE_LIST: {FEATURE_ON_OFF: None}}

View file

@ -73,7 +73,7 @@ def _mock_socket(failure_attempts: int = 0) -> MagicMock:
return mock_socket return mock_socket
def test_validate_entity_config(): def test_validate_entity_config() -> None:
"""Test validate entities.""" """Test validate entities."""
configs = [ configs = [
None, None,
@ -173,7 +173,7 @@ def test_validate_entity_config():
} }
def test_validate_media_player_features(): def test_validate_media_player_features() -> None:
"""Test validate modes for media players.""" """Test validate modes for media players."""
config = {} config = {}
attrs = {ATTR_SUPPORTED_FEATURES: 20873} attrs = {ATTR_SUPPORTED_FEATURES: 20873}
@ -187,7 +187,7 @@ def test_validate_media_player_features():
assert validate_media_player_features(entity_state, config) is False assert validate_media_player_features(entity_state, config) is False
def test_convert_to_float(): def test_convert_to_float() -> None:
"""Test convert_to_float method.""" """Test convert_to_float method."""
assert convert_to_float(12) == 12 assert convert_to_float(12) == 12
assert convert_to_float(12.4) == 12.4 assert convert_to_float(12.4) == 12.4
@ -195,7 +195,7 @@ def test_convert_to_float():
assert convert_to_float(None) is None assert convert_to_float(None) is None
def test_cleanup_name_for_homekit(): def test_cleanup_name_for_homekit() -> None:
"""Ensure name sanitize works as expected.""" """Ensure name sanitize works as expected."""
assert cleanup_name_for_homekit("abc") == "abc" assert cleanup_name_for_homekit("abc") == "abc"
@ -208,19 +208,19 @@ def test_cleanup_name_for_homekit():
assert cleanup_name_for_homekit("の日本_語文字セット") == "の日本 語文字セット" assert cleanup_name_for_homekit("の日本_語文字セット") == "の日本 語文字セット"
def test_temperature_to_homekit(): def test_temperature_to_homekit() -> None:
"""Test temperature conversion from HA to HomeKit.""" """Test temperature conversion from HA to HomeKit."""
assert temperature_to_homekit(20.46, UnitOfTemperature.CELSIUS) == 20.5 assert temperature_to_homekit(20.46, UnitOfTemperature.CELSIUS) == 20.5
assert temperature_to_homekit(92.1, UnitOfTemperature.FAHRENHEIT) == 33.4 assert temperature_to_homekit(92.1, UnitOfTemperature.FAHRENHEIT) == 33.4
def test_temperature_to_states(): def test_temperature_to_states() -> None:
"""Test temperature conversion from HomeKit to HA.""" """Test temperature conversion from HomeKit to HA."""
assert temperature_to_states(20, UnitOfTemperature.CELSIUS) == 20.0 assert temperature_to_states(20, UnitOfTemperature.CELSIUS) == 20.0
assert temperature_to_states(20.2, UnitOfTemperature.FAHRENHEIT) == 68.5 assert temperature_to_states(20.2, UnitOfTemperature.FAHRENHEIT) == 68.5
def test_density_to_air_quality(): def test_density_to_air_quality() -> None:
"""Test map PM2.5 density to HomeKit AirQuality level.""" """Test map PM2.5 density to HomeKit AirQuality level."""
assert density_to_air_quality(0) == 1 assert density_to_air_quality(0) == 1
assert density_to_air_quality(12) == 1 assert density_to_air_quality(12) == 1

View file

@ -331,7 +331,7 @@ async def test_sensor_unavailable(hass, utcnow):
assert state.state == "unavailable" assert state.state == "unavailable"
def test_thread_node_caps_to_str(): def test_thread_node_caps_to_str() -> None:
"""Test all values of this enum get a translatable string.""" """Test all values of this enum get a translatable string."""
assert ( assert (
thread_node_capability_to_str(ThreadNodeCapabilities.BORDER_ROUTER_CAPABLE) thread_node_capability_to_str(ThreadNodeCapabilities.BORDER_ROUTER_CAPABLE)
@ -347,7 +347,7 @@ def test_thread_node_caps_to_str():
assert thread_node_capability_to_str(ThreadNodeCapabilities(128)) == "none" assert thread_node_capability_to_str(ThreadNodeCapabilities(128)) == "none"
def test_thread_status_to_str(): def test_thread_status_to_str() -> None:
"""Test all values of this enum get a translatable string.""" """Test all values of this enum get a translatable string."""
assert thread_status_to_str(ThreadStatus.BORDER_ROUTER) == "border_router" assert thread_status_to_str(ThreadStatus.BORDER_ROUTER) == "border_router"
assert thread_status_to_str(ThreadStatus.LEADER) == "leader" assert thread_status_to_str(ThreadStatus.LEADER) == "leader"

View file

@ -650,7 +650,7 @@ async def test_light_turn_off_service(hass, mock_bridge_v1):
assert light.state == "off" assert light.state == "off"
def test_available(): def test_available() -> None:
"""Test available property.""" """Test available property."""
light = hue_light.HueLight( light = hue_light.HueLight(
light=Mock( light=Mock(
@ -704,7 +704,7 @@ def test_available():
assert light.available is True assert light.available is True
def test_hs_color(): def test_hs_color() -> None:
"""Test hs_color property.""" """Test hs_color property."""
light = hue_light.HueLight( light = hue_light.HueLight(
light=Mock( light=Mock(

View file

@ -2348,7 +2348,7 @@ async def test_services_filter_parameters(
assert data == {} assert data == {}
def test_valid_supported_color_modes(): def test_valid_supported_color_modes() -> None:
"""Test valid_supported_color_modes.""" """Test valid_supported_color_modes."""
supported = {light.ColorMode.HS} supported = {light.ColorMode.HS}
assert light.valid_supported_color_modes(supported) == supported assert light.valid_supported_color_modes(supported) == supported
@ -2387,7 +2387,7 @@ def test_valid_supported_color_modes():
light.valid_supported_color_modes(supported) light.valid_supported_color_modes(supported)
def test_filter_supported_color_modes(): def test_filter_supported_color_modes() -> None:
"""Test filter_supported_color_modes.""" """Test filter_supported_color_modes."""
supported = {light.ColorMode.HS} supported = {light.ColorMode.HS}
assert light.filter_supported_color_modes(supported) == supported assert light.filter_supported_color_modes(supported) == supported

View file

@ -635,7 +635,7 @@ async def test_publish_function_with_bad_encoding_conditions(
) )
def test_validate_topic(): def test_validate_topic() -> None:
"""Test topic name/filter validation.""" """Test topic name/filter validation."""
# Invalid UTF-8, must not contain U+D800 to U+DFFF. # Invalid UTF-8, must not contain U+D800 to U+DFFF.
with pytest.raises(vol.Invalid): with pytest.raises(vol.Invalid):
@ -679,7 +679,7 @@ def test_validate_topic():
mqtt.util.valid_topic("\U0001ffff") mqtt.util.valid_topic("\U0001ffff")
def test_validate_subscribe_topic(): def test_validate_subscribe_topic() -> None:
"""Test invalid subscribe topics.""" """Test invalid subscribe topics."""
mqtt.valid_subscribe_topic("#") mqtt.valid_subscribe_topic("#")
mqtt.valid_subscribe_topic("sport/#") mqtt.valid_subscribe_topic("sport/#")
@ -708,7 +708,7 @@ def test_validate_subscribe_topic():
mqtt.valid_subscribe_topic("$SYS/#") mqtt.valid_subscribe_topic("$SYS/#")
def test_validate_publish_topic(): def test_validate_publish_topic() -> None:
"""Test invalid publish topics.""" """Test invalid publish topics."""
with pytest.raises(vol.Invalid): with pytest.raises(vol.Invalid):
mqtt.valid_publish_topic("pub+") mqtt.valid_publish_topic("pub+")
@ -724,7 +724,7 @@ def test_validate_publish_topic():
mqtt.valid_publish_topic("$SYS/") mqtt.valid_publish_topic("$SYS/")
def test_entity_device_info_schema(): def test_entity_device_info_schema() -> None:
"""Test MQTT entity device info validation.""" """Test MQTT entity device info validation."""
# just identifier # just identifier
MQTT_ENTITY_DEVICE_INFO_SCHEMA({"identifiers": ["abcd"]}) MQTT_ENTITY_DEVICE_INFO_SCHEMA({"identifiers": ["abcd"]})

View file

@ -12,7 +12,7 @@ from homeassistant.const import (
) )
def test_device_custom_name(): def test_device_custom_name() -> None:
"""Test a device name from an Info trait.""" """Test a device name from an Info trait."""
device = Device.MakeDevice( device = Device.MakeDevice(
{ {
@ -40,7 +40,7 @@ def test_device_custom_name():
} }
def test_device_name_room(): def test_device_name_room() -> None:
"""Test a device name from the room name.""" """Test a device name from the room name."""
device = Device.MakeDevice( device = Device.MakeDevice(
{ {
@ -66,7 +66,7 @@ def test_device_name_room():
} }
def test_device_no_name(): def test_device_no_name() -> None:
"""Test a device that has a name inferred from the type.""" """Test a device that has a name inferred from the type."""
device = Device.MakeDevice( device = Device.MakeDevice(
{"name": "some-device-id", "type": "sdm.devices.types.DOORBELL", "traits": {}}, {"name": "some-device-id", "type": "sdm.devices.types.DOORBELL", "traits": {}},
@ -86,7 +86,7 @@ def test_device_no_name():
} }
def test_device_invalid_type(): def test_device_invalid_type() -> None:
"""Test a device with a type name that is not recognized.""" """Test a device with a type name that is not recognized."""
device = Device.MakeDevice( device = Device.MakeDevice(
{ {
@ -114,7 +114,7 @@ def test_device_invalid_type():
} }
def test_suggested_area(): def test_suggested_area() -> None:
"""Test the suggested area with different device name and room name.""" """Test the suggested area with different device name and room name."""
device = Device.MakeDevice( device = Device.MakeDevice(
{ {

View file

@ -864,7 +864,7 @@ async def test_custom_unit_change(
assert state.attributes[ATTR_UNIT_OF_MEASUREMENT] == default_unit assert state.attributes[ATTR_UNIT_OF_MEASUREMENT] == default_unit
def test_device_classes_aligned(): def test_device_classes_aligned() -> None:
"""Make sure all sensor device classes are also available in NumberDeviceClass.""" """Make sure all sensor device classes are also available in NumberDeviceClass."""
non_numeric_device_classes = { non_numeric_device_classes = {

View file

@ -145,7 +145,7 @@ def test_nx584_sensor_setup_no_zones(hass):
assert not add_entities.called assert not add_entities.called
def test_nx584_zone_sensor_normal(): def test_nx584_zone_sensor_normal() -> None:
"""Test for the NX584 zone sensor.""" """Test for the NX584 zone sensor."""
zone = {"number": 1, "name": "foo", "state": True} zone = {"number": 1, "name": "foo", "state": True}
sensor = nx584.NX584ZoneSensor(zone, "motion") sensor = nx584.NX584ZoneSensor(zone, "motion")
@ -159,7 +159,7 @@ def test_nx584_zone_sensor_normal():
assert not sensor.is_on assert not sensor.is_on
def test_nx584_zone_sensor_bypassed(): def test_nx584_zone_sensor_bypassed() -> None:
"""Test for the NX584 zone sensor.""" """Test for the NX584 zone sensor."""
zone = {"number": 1, "name": "foo", "state": True, "bypassed": True} zone = {"number": 1, "name": "foo", "state": True, "bypassed": True}
sensor = nx584.NX584ZoneSensor(zone, "motion") sensor = nx584.NX584ZoneSensor(zone, "motion")
@ -198,7 +198,7 @@ def test_nx584_watcher_process_zone_event_missing_zone(mock_update):
assert not mock_update.called assert not mock_update.called
def test_nx584_watcher_run_with_zone_events(): def test_nx584_watcher_run_with_zone_events() -> None:
"""Test the zone events.""" """Test the zone events."""
empty_me = [1, 2] empty_me = [1, 2]

View file

@ -136,7 +136,7 @@ async def test_returns_error_missing_device(mock_client):
assert json == [] assert json == []
def test_context_delivers_pending_msg(): def test_context_delivers_pending_msg() -> None:
"""Test that context is able to hold pending messages while being init.""" """Test that context is able to hold pending messages while being init."""
context = owntracks.OwnTracksContext(None, None, None, None, None, None, None, None) context = owntracks.OwnTracksContext(None, None, None, None, None, None, None, None)
context.async_see(hello="world") context.async_see(hello="world")

View file

@ -43,7 +43,7 @@ SIMPLE_EXCLUDE_FILTER = {
SIMPLE_INCLUDE_EXCLUDE_FILTER = {**SIMPLE_INCLUDE_FILTER, **SIMPLE_EXCLUDE_FILTER} SIMPLE_INCLUDE_EXCLUDE_FILTER = {**SIMPLE_INCLUDE_FILTER, **SIMPLE_EXCLUDE_FILTER}
def test_extract_include_exclude_filter_conf(): def test_extract_include_exclude_filter_conf() -> None:
"""Test we can extract a filter from configuration without altering it.""" """Test we can extract a filter from configuration without altering it."""
include_filter = extract_include_exclude_filter_conf(SIMPLE_INCLUDE_FILTER) include_filter = extract_include_exclude_filter_conf(SIMPLE_INCLUDE_FILTER)
assert include_filter == { assert include_filter == {
@ -109,7 +109,7 @@ def test_extract_include_exclude_filter_conf():
} }
def test_merge_include_exclude_filters(): def test_merge_include_exclude_filters() -> None:
"""Test we can merge two filters together.""" """Test we can merge two filters together."""
include_exclude_filter_base = extract_include_exclude_filter_conf( include_exclude_filter_base = extract_include_exclude_filter_conf(
SIMPLE_INCLUDE_EXCLUDE_FILTER SIMPLE_INCLUDE_EXCLUDE_FILTER

View file

@ -398,7 +398,7 @@ def test_modify_column(engine_type, substr):
assert not connection.execute.called assert not connection.execute.called
def test_forgiving_add_column(): def test_forgiving_add_column() -> None:
"""Test that add column will continue if column exists.""" """Test that add column will continue if column exists."""
engine = create_engine("sqlite://", poolclass=StaticPool) engine = create_engine("sqlite://", poolclass=StaticPool)
with Session(engine) as session: with Session(engine) as session:
@ -413,7 +413,7 @@ def test_forgiving_add_column():
) )
def test_forgiving_add_index(): def test_forgiving_add_index() -> None:
"""Test that add index will continue if index exists.""" """Test that add index will continue if index exists."""
engine = create_engine("sqlite://", poolclass=StaticPool) engine = create_engine("sqlite://", poolclass=StaticPool)
db_schema.Base.metadata.create_all(engine) db_schema.Base.metadata.create_all(engine)
@ -454,7 +454,7 @@ class MockPyODBCProgrammingError(Exception):
"""A mock pyodbc error.""" """A mock pyodbc error."""
def test_raise_if_exception_missing_str(): def test_raise_if_exception_missing_str() -> None:
"""Test we raise an exception if strings are not present.""" """Test we raise an exception if strings are not present."""
programming_exc = ProgrammingError("select * from;", Mock(), Mock()) programming_exc = ProgrammingError("select * from;", Mock(), Mock())
programming_exc.__cause__ = MockPyODBCProgrammingError( programming_exc.__cause__ = MockPyODBCProgrammingError(
@ -469,7 +469,7 @@ def test_raise_if_exception_missing_str():
migration.raise_if_exception_missing_str(programming_exc, ["not present"]) migration.raise_if_exception_missing_str(programming_exc, ["not present"])
def test_raise_if_exception_missing_empty_cause_str(): def test_raise_if_exception_missing_empty_cause_str() -> None:
"""Test we raise an exception if strings are not present with an empty cause.""" """Test we raise an exception if strings are not present with an empty cause."""
programming_exc = ProgrammingError("select * from;", Mock(), Mock()) programming_exc = ProgrammingError("select * from;", Mock(), Mock())
programming_exc.__cause__ = MockPyODBCProgrammingError() programming_exc.__cause__ = MockPyODBCProgrammingError()

View file

@ -28,7 +28,7 @@ from homeassistant.exceptions import InvalidEntityFormatError
from homeassistant.util import dt, dt as dt_util from homeassistant.util import dt, dt as dt_util
def test_from_event_to_db_event(): def test_from_event_to_db_event() -> None:
"""Test converting event to db event.""" """Test converting event to db event."""
event = ha.Event("test_event", {"some_data": 15}) event = ha.Event("test_event", {"some_data": 15})
db_event = Events.from_event(event) db_event = Events.from_event(event)
@ -37,7 +37,7 @@ def test_from_event_to_db_event():
assert event.as_dict() == db_event.to_native().as_dict() assert event.as_dict() == db_event.to_native().as_dict()
def test_from_event_to_db_state(): def test_from_event_to_db_state() -> None:
"""Test converting event to db state.""" """Test converting event to db state."""
state = ha.State("sensor.temperature", "18") state = ha.State("sensor.temperature", "18")
event = ha.Event( event = ha.Event(
@ -48,7 +48,7 @@ def test_from_event_to_db_state():
assert state.as_dict() == States.from_event(event).to_native().as_dict() assert state.as_dict() == States.from_event(event).to_native().as_dict()
def test_from_event_to_db_state_attributes(): def test_from_event_to_db_state_attributes() -> None:
"""Test converting event to db state attributes.""" """Test converting event to db state attributes."""
attrs = {"this_attr": True} attrs = {"this_attr": True}
state = ha.State("sensor.temperature", "18", attrs) state = ha.State("sensor.temperature", "18", attrs)
@ -65,7 +65,7 @@ def test_from_event_to_db_state_attributes():
assert db_attrs.to_native() == attrs assert db_attrs.to_native() == attrs
def test_repr(): def test_repr() -> None:
"""Test converting event to db state repr.""" """Test converting event to db state repr."""
attrs = {"this_attr": True} attrs = {"this_attr": True}
fixed_time = datetime(2016, 7, 9, 11, 0, 0, tzinfo=dt.UTC, microsecond=432432) fixed_time = datetime(2016, 7, 9, 11, 0, 0, tzinfo=dt.UTC, microsecond=432432)
@ -86,7 +86,7 @@ def test_repr():
assert "2016-07-09 11:00:00+00:00" in repr(Events.from_event(event)) assert "2016-07-09 11:00:00+00:00" in repr(Events.from_event(event))
def test_states_repr_without_timestamp(): def test_states_repr_without_timestamp() -> None:
"""Test repr for a state without last_updated_ts.""" """Test repr for a state without last_updated_ts."""
fixed_time = datetime(2016, 7, 9, 11, 0, 0, tzinfo=dt.UTC, microsecond=432432) fixed_time = datetime(2016, 7, 9, 11, 0, 0, tzinfo=dt.UTC, microsecond=432432)
states = States( states = States(
@ -104,7 +104,7 @@ def test_states_repr_without_timestamp():
assert "2016-07-09 11:00:00+00:00" in repr(states) assert "2016-07-09 11:00:00+00:00" in repr(states)
def test_events_repr_without_timestamp(): def test_events_repr_without_timestamp() -> None:
"""Test repr for an event without time_fired_ts.""" """Test repr for an event without time_fired_ts."""
fixed_time = datetime(2016, 7, 9, 11, 0, 0, tzinfo=dt.UTC, microsecond=432432) fixed_time = datetime(2016, 7, 9, 11, 0, 0, tzinfo=dt.UTC, microsecond=432432)
events = Events( events = Events(
@ -129,7 +129,7 @@ def test_handling_broken_json_state_attributes(caplog):
assert "Error converting row to state attributes" in caplog.text assert "Error converting row to state attributes" in caplog.text
def test_from_event_to_delete_state(): def test_from_event_to_delete_state() -> None:
"""Test converting deleting state event to db state.""" """Test converting deleting state event to db state."""
event = ha.Event( event = ha.Event(
EVENT_STATE_CHANGED, EVENT_STATE_CHANGED,
@ -147,7 +147,7 @@ def test_from_event_to_delete_state():
assert db_state.last_updated_ts == event.time_fired.timestamp() assert db_state.last_updated_ts == event.time_fired.timestamp()
def test_entity_ids(): def test_entity_ids() -> None:
"""Test if entity ids helper method works.""" """Test if entity ids helper method works."""
engine = create_engine("sqlite://") engine = create_engine("sqlite://")
Base.metadata.create_all(engine) Base.metadata.create_all(engine)
@ -215,7 +215,7 @@ def test_entity_ids():
assert run.entity_ids(in_run2) == ["sensor.humidity"] assert run.entity_ids(in_run2) == ["sensor.humidity"]
def test_states_from_native_invalid_entity_id(): def test_states_from_native_invalid_entity_id() -> None:
"""Test loading a state from an invalid entity ID.""" """Test loading a state from an invalid entity ID."""
state = States() state = States()
state.entity_id = "test.invalid__id" state.entity_id = "test.invalid__id"

View file

@ -51,7 +51,7 @@ from tests.common import get_test_home_assistant, mock_registry
ORIG_TZ = dt_util.DEFAULT_TIME_ZONE ORIG_TZ = dt_util.DEFAULT_TIME_ZONE
def test_converters_align_with_sensor(): def test_converters_align_with_sensor() -> None:
"""Ensure STATISTIC_UNIT_TO_UNIT_CONVERTER is aligned with UNIT_CONVERTERS.""" """Ensure STATISTIC_UNIT_TO_UNIT_CONVERTER is aligned with UNIT_CONVERTERS."""
for converter in UNIT_CONVERTERS.values(): for converter in UNIT_CONVERTERS.values():
assert converter in STATISTIC_UNIT_TO_UNIT_CONVERTER.values() assert converter in STATISTIC_UNIT_TO_UNIT_CONVERTER.values()

View file

@ -844,7 +844,7 @@ async def test_write_lock_db(
await hass.async_add_executor_job(_drop_table) await hass.async_add_executor_job(_drop_table)
def test_is_second_sunday(): def test_is_second_sunday() -> None:
"""Test we can find the second sunday of the month.""" """Test we can find the second sunday of the month."""
assert is_second_sunday(datetime(2022, 1, 9, 0, 0, 0, tzinfo=dt_util.UTC)) is True assert is_second_sunday(datetime(2022, 1, 9, 0, 0, 0, tzinfo=dt_util.UTC)) is True
assert is_second_sunday(datetime(2022, 2, 13, 0, 0, 0, tzinfo=dt_util.UTC)) is True assert is_second_sunday(datetime(2022, 2, 13, 0, 0, 0, tzinfo=dt_util.UTC)) is True
@ -855,7 +855,7 @@ def test_is_second_sunday():
assert is_second_sunday(datetime(2022, 1, 10, 0, 0, 0, tzinfo=dt_util.UTC)) is False assert is_second_sunday(datetime(2022, 1, 10, 0, 0, 0, tzinfo=dt_util.UTC)) is False
def test_build_mysqldb_conv(): def test_build_mysqldb_conv() -> None:
"""Test building the MySQLdb connect conv param.""" """Test building the MySQLdb connect conv param."""
mock_converters = Mock(conversions={"original": "preserved"}) mock_converters = Mock(conversions={"original": "preserved"})
mock_constants = Mock(FIELD_TYPE=Mock(DATETIME="DATETIME")) mock_constants = Mock(FIELD_TYPE=Mock(DATETIME="DATETIME"))

View file

@ -126,7 +126,7 @@ VOLUME_SENSOR_M3_ATTRIBUTES_TOTAL = {
} }
def test_converters_align_with_sensor(): def test_converters_align_with_sensor() -> None:
"""Ensure UNIT_SCHEMA is aligned with sensor UNIT_CONVERTERS.""" """Ensure UNIT_SCHEMA is aligned with sensor UNIT_CONVERTERS."""
for converter in UNIT_CONVERTERS.values(): for converter in UNIT_CONVERTERS.values():
assert converter.UNIT_CLASS in UNIT_SCHEMA.schema assert converter.UNIT_CLASS in UNIT_SCHEMA.schema

View file

@ -912,7 +912,7 @@ async def test_options_configure_rfy_cover_device(hass):
) )
def test_get_serial_by_id_no_dir(): def test_get_serial_by_id_no_dir() -> None:
"""Test serial by id conversion if there's no /dev/serial/by-id.""" """Test serial by id conversion if there's no /dev/serial/by-id."""
p1 = patch("os.path.isdir", MagicMock(return_value=False)) p1 = patch("os.path.isdir", MagicMock(return_value=False))
p2 = patch("os.scandir") p2 = patch("os.scandir")
@ -923,7 +923,7 @@ def test_get_serial_by_id_no_dir():
assert scan_mock.call_count == 0 assert scan_mock.call_count == 0
def test_get_serial_by_id(): def test_get_serial_by_id() -> None:
"""Test serial by id conversion.""" """Test serial by id conversion."""
p1 = patch("os.path.isdir", MagicMock(return_value=True)) p1 = patch("os.path.isdir", MagicMock(return_value=True))
p2 = patch("os.scandir") p2 = patch("os.scandir")

View file

@ -1176,7 +1176,7 @@ async def test_unit_conversion_priority_legacy_conversion_removed(
assert state.attributes[ATTR_UNIT_OF_MEASUREMENT] == original_unit assert state.attributes[ATTR_UNIT_OF_MEASUREMENT] == original_unit
def test_device_classes_aligned(): def test_device_classes_aligned() -> None:
"""Make sure all number device classes are also available in SensorDeviceClass.""" """Make sure all number device classes are also available in SensorDeviceClass."""
for device_class in NumberDeviceClass: for device_class in NumberDeviceClass:

View file

@ -252,7 +252,7 @@ async def test_refresh_weather_forecast_retry(
assert mock_get_forecast.call_count == 3 assert mock_get_forecast.call_count == 3
def test_condition_class(): def test_condition_class() -> None:
"""Test condition class.""" """Test condition class."""
def get_condition(index: int) -> str: def get_condition(index: int) -> str:

View file

@ -18,7 +18,7 @@ def mock_client():
yield mock_client.return_value yield mock_client.return_value
def test_invalid_config(): def test_invalid_config() -> None:
"""Test configuration with defaults.""" """Test configuration with defaults."""
config = {"statsd": {"host1": "host1"}} config = {"statsd": {"host1": "host1"}}

View file

@ -224,7 +224,7 @@ def test_config_valid_verify_ssl_bool(hass, mock_session_send):
) )
def test_config_errors(): def test_config_errors() -> None:
"""Test for configuration errors.""" """Test for configuration errors."""
with pytest.raises(vol.Invalid): with pytest.raises(vol.Invalid):
tomato.PLATFORM_SCHEMA( tomato.PLATFORM_SCHEMA(

View file

@ -141,7 +141,7 @@ def test_bad_response_returns_none(hass):
assert _response_to_json("{(}") == {} assert _response_to_json("{(}") == {}
def test_config_error(): def test_config_error() -> None:
"""Test for configuration errors.""" """Test for configuration errors."""
with pytest.raises(vol.Invalid): with pytest.raises(vol.Invalid):
PLATFORM_SCHEMA( PLATFORM_SCHEMA(

View file

@ -756,7 +756,7 @@ async def test_not_discovered_by_observer_before_started_on_docker(hass, docker)
assert len(mock_config_flow.mock_calls) == 0 assert len(mock_config_flow.mock_calls) == 0
def test_get_serial_by_id_no_dir(): def test_get_serial_by_id_no_dir() -> None:
"""Test serial by id conversion if there's no /dev/serial/by-id.""" """Test serial by id conversion if there's no /dev/serial/by-id."""
p1 = patch("os.path.isdir", MagicMock(return_value=False)) p1 = patch("os.path.isdir", MagicMock(return_value=False))
p2 = patch("os.scandir") p2 = patch("os.scandir")
@ -767,7 +767,7 @@ def test_get_serial_by_id_no_dir():
assert scan_mock.call_count == 0 assert scan_mock.call_count == 0
def test_get_serial_by_id(): def test_get_serial_by_id() -> None:
"""Test serial by id conversion.""" """Test serial by id conversion."""
p1 = patch("os.path.isdir", MagicMock(return_value=True)) p1 = patch("os.path.isdir", MagicMock(return_value=True))
p2 = patch("os.scandir") p2 = patch("os.scandir")
@ -803,7 +803,7 @@ def test_get_serial_by_id():
assert scan_mock.call_count == 2 assert scan_mock.call_count == 2
def test_human_readable_device_name(): def test_human_readable_device_name() -> None:
"""Test human readable device name includes the passed data.""" """Test human readable device name includes the passed data."""
name = usb.human_readable_device_name( name = usb.human_readable_device_name(
"/dev/null", "/dev/null",

View file

@ -74,7 +74,7 @@ def test_binary_sensor(hass: HomeAssistant):
assert device_attrs[ATTR_SUBSCRIPTION_ID] == "123456" assert device_attrs[ATTR_SUBSCRIPTION_ID] == "123456"
def test_invalid_sensor_config(): def test_invalid_sensor_config() -> None:
"""Test config type failures.""" """Test config type failures."""
with pytest.raises(vol.Invalid): # No subs with pytest.raises(vol.Invalid): # No subs
vultr.PLATFORM_SCHEMA({CONF_PLATFORM: base_vultr.DOMAIN}) vultr.PLATFORM_SCHEMA({CONF_PLATFORM: base_vultr.DOMAIN})

View file

@ -93,7 +93,7 @@ def test_sensor(hass: HomeAssistant):
assert tested == 5 assert tested == 5
def test_invalid_sensor_config(): def test_invalid_sensor_config() -> None:
"""Test config type failures.""" """Test config type failures."""
with pytest.raises(vol.Invalid): # No subscription with pytest.raises(vol.Invalid): # No subscription
vultr.PLATFORM_SCHEMA( vultr.PLATFORM_SCHEMA(

View file

@ -127,7 +127,7 @@ def test_turn_off(hass: HomeAssistant, hass_devices: list[vultr.VultrSwitch]):
assert mock_halt.call_count == 1 assert mock_halt.call_count == 1
def test_invalid_switch_config(): def test_invalid_switch_config() -> None:
"""Test config type failures.""" """Test config type failures."""
with pytest.raises(vol.Invalid): # No subscription with pytest.raises(vol.Invalid): # No subscription
vultr.PLATFORM_SCHEMA({CONF_PLATFORM: base_vultr.DOMAIN}) vultr.PLATFORM_SCHEMA({CONF_PLATFORM: base_vultr.DOMAIN})

View file

@ -319,7 +319,7 @@ async def test_out_channel_config(
assert cluster.configure_reporting.call_count == 0 assert cluster.configure_reporting.call_count == 0
def test_channel_registry(): def test_channel_registry() -> None:
"""Test ZIGBEE Channel Registry.""" """Test ZIGBEE Channel Registry."""
for cluster_id, channel in registries.ZIGBEE_CHANNEL_REGISTRY.items(): for cluster_id, channel in registries.ZIGBEE_CHANNEL_REGISTRY.items():
assert isinstance(cluster_id, int) assert isinstance(cluster_id, int)

View file

@ -267,7 +267,7 @@ async def device_climate_zonnsmart(device_climate_mock):
) )
def test_sequence_mappings(): def test_sequence_mappings() -> None:
"""Test correct mapping between control sequence -> HVAC Mode -> Sysmode.""" """Test correct mapping between control sequence -> HVAC Mode -> Sysmode."""
for hvac_modes in SEQ_OF_OPERATION.values(): for hvac_modes in SEQ_OF_OPERATION.values():

View file

@ -1037,7 +1037,7 @@ async def test_hardware_invalid_data(hass, data):
assert result["reason"] == "invalid_hardware_data" assert result["reason"] == "invalid_hardware_data"
def test_allow_overwrite_ezsp_ieee(): def test_allow_overwrite_ezsp_ieee() -> None:
"""Test modifying the backup to allow bellows to override the IEEE address.""" """Test modifying the backup to allow bellows to override the IEEE address."""
backup = zigpy.backups.NetworkBackup() backup = zigpy.backups.NetworkBackup()
new_backup = radio_manager._allow_overwrite_ezsp_ieee(backup) new_backup = radio_manager._allow_overwrite_ezsp_ieee(backup)
@ -1046,7 +1046,7 @@ def test_allow_overwrite_ezsp_ieee():
assert new_backup.network_info.stack_specific["ezsp"][EZSP_OVERWRITE_EUI64] is True assert new_backup.network_info.stack_specific["ezsp"][EZSP_OVERWRITE_EUI64] is True
def test_prevent_overwrite_ezsp_ieee(): def test_prevent_overwrite_ezsp_ieee() -> None:
"""Test modifying the backup to prevent bellows from overriding the IEEE address.""" """Test modifying the backup to prevent bellows from overriding the IEEE address."""
backup = zigpy.backups.NetworkBackup() backup = zigpy.backups.NetworkBackup()
backup.network_info.stack_specific["ezsp"] = {EZSP_OVERWRITE_EUI64: True} backup.network_info.stack_specific["ezsp"] = {EZSP_OVERWRITE_EUI64: True}
@ -1342,7 +1342,7 @@ async def test_formation_strategy_restore_manual_backup_invalid_upload(
assert result3["errors"]["base"] == "invalid_backup_json" assert result3["errors"]["base"] == "invalid_backup_json"
def test_format_backup_choice(): def test_format_backup_choice() -> None:
"""Test formatting zigpy NetworkBackup objects.""" """Test formatting zigpy NetworkBackup objects."""
backup = zigpy.backups.NetworkBackup() backup = zigpy.backups.NetworkBackup()
backup.network_info.pan_id = zigpy.types.PanId(0x1234) backup.network_info.pan_id = zigpy.types.PanId(0x1234)

View file

@ -264,7 +264,7 @@ def test_discover_by_device_type(device_type, component, hit):
assert ep_channels.async_new_entity.call_args[0][1] == mock.sentinel.entity_cls assert ep_channels.async_new_entity.call_args[0][1] == mock.sentinel.entity_cls
def test_discover_by_device_type_override(): def test_discover_by_device_type_override() -> None:
"""Test entity discovery by device type overriding.""" """Test entity discovery by device type overriding."""
ep_channels = mock.MagicMock(spec_set=zha_channels.ChannelPool) ep_channels = mock.MagicMock(spec_set=zha_channels.ChannelPool)
@ -290,7 +290,7 @@ def test_discover_by_device_type_override():
assert ep_channels.async_new_entity.call_args[0][1] == mock.sentinel.entity_cls assert ep_channels.async_new_entity.call_args[0][1] == mock.sentinel.entity_cls
def test_discover_probe_single_cluster(): def test_discover_probe_single_cluster() -> None:
"""Test entity discovery by single cluster.""" """Test entity discovery by single cluster."""
ep_channels = mock.MagicMock(spec_set=zha_channels.ChannelPool) ep_channels = mock.MagicMock(spec_set=zha_channels.ChannelPool)
@ -424,7 +424,7 @@ def _test_single_input_cluster_device_class(probe_mock):
assert call[0][1] == ch assert call[0][1] == ch
def test_single_input_cluster_device_class_by_cluster_class(): def test_single_input_cluster_device_class_by_cluster_class() -> None:
"""Test SINGLE_INPUT_CLUSTER_DEVICE_CLASS matching by cluster id or class.""" """Test SINGLE_INPUT_CLUSTER_DEVICE_CLASS matching by cluster id or class."""
mock_reg = { mock_reg = {
zigpy.zcl.clusters.closures.DoorLock.cluster_id: Platform.LOCK, zigpy.zcl.clusters.closures.DoorLock.cluster_id: Platform.LOCK,

View file

@ -5,7 +5,7 @@ import voluptuous as vol
from homeassistant.components.zwave_js.config_validation import boolean from homeassistant.components.zwave_js.config_validation import boolean
def test_boolean_validation(): def test_boolean_validation() -> None:
"""Test boolean config validator.""" """Test boolean config validator."""
# test bool # test bool
assert boolean(True) assert boolean(True)

View file

@ -99,7 +99,7 @@ class MockStorageCollection(collection.StorageCollection):
return {**data, **update_data} return {**data, **update_data}
def test_id_manager(): def test_id_manager() -> None:
"""Test the ID manager.""" """Test the ID manager."""
id_manager = collection.IDManager() id_manager = collection.IDManager()
assert not id_manager.has_id("some_id") assert not id_manager.has_id("some_id")

View file

@ -88,7 +88,7 @@ class MockOAuth2Implementation(config_entry_oauth2_flow.AbstractOAuth2Implementa
raise NotImplementedError() raise NotImplementedError()
def test_inherit_enforces_domain_set(): def test_inherit_enforces_domain_set() -> None:
"""Test we enforce setting DOMAIN.""" """Test we enforce setting DOMAIN."""
class TestFlowHandler(config_entry_oauth2_flow.AbstractOAuth2FlowHandler): class TestFlowHandler(config_entry_oauth2_flow.AbstractOAuth2FlowHandler):

View file

@ -14,7 +14,7 @@ import homeassistant
from homeassistant.helpers import config_validation as cv, selector, template from homeassistant.helpers import config_validation as cv, selector, template
def test_boolean(): def test_boolean() -> None:
"""Test boolean validation.""" """Test boolean validation."""
schema = vol.Schema(cv.boolean) schema = vol.Schema(cv.boolean)
@ -39,7 +39,7 @@ def test_boolean():
assert not schema(value) assert not schema(value)
def test_latitude(): def test_latitude() -> None:
"""Test latitude validation.""" """Test latitude validation."""
schema = vol.Schema(cv.latitude) schema = vol.Schema(cv.latitude)
@ -51,7 +51,7 @@ def test_latitude():
schema(value) schema(value)
def test_longitude(): def test_longitude() -> None:
"""Test longitude validation.""" """Test longitude validation."""
schema = vol.Schema(cv.longitude) schema = vol.Schema(cv.longitude)
@ -63,7 +63,7 @@ def test_longitude():
schema(value) schema(value)
def test_port(): def test_port() -> None:
"""Test TCP/UDP network port.""" """Test TCP/UDP network port."""
schema = vol.Schema(cv.port) schema = vol.Schema(cv.port)
@ -75,7 +75,7 @@ def test_port():
schema(value) schema(value)
def test_isfile(): def test_isfile() -> None:
"""Validate that the value is an existing file.""" """Validate that the value is an existing file."""
schema = vol.Schema(cv.isfile) schema = vol.Schema(cv.isfile)
@ -94,7 +94,7 @@ def test_isfile():
schema("test.txt") schema("test.txt")
def test_url(): def test_url() -> None:
"""Test URL.""" """Test URL."""
schema = vol.Schema(cv.url) schema = vol.Schema(cv.url)
@ -120,7 +120,7 @@ def test_url():
assert schema(value) assert schema(value)
def test_url_no_path(): def test_url_no_path() -> None:
"""Test URL.""" """Test URL."""
schema = vol.Schema(cv.url_no_path) schema = vol.Schema(cv.url_no_path)
@ -139,7 +139,7 @@ def test_url_no_path():
assert schema(value) assert schema(value)
def test_platform_config(): def test_platform_config() -> None:
"""Test platform config validation.""" """Test platform config validation."""
options = ({}, {"hello": "world"}) options = ({}, {"hello": "world"})
for value in options: for value in options:
@ -151,7 +151,7 @@ def test_platform_config():
cv.PLATFORM_SCHEMA_BASE(value) cv.PLATFORM_SCHEMA_BASE(value)
def test_ensure_list(): def test_ensure_list() -> None:
"""Test ensure_list.""" """Test ensure_list."""
schema = vol.Schema(cv.ensure_list) schema = vol.Schema(cv.ensure_list)
assert [] == schema(None) assert [] == schema(None)
@ -162,7 +162,7 @@ def test_ensure_list():
assert [{"1": "2"}] == schema({"1": "2"}) assert [{"1": "2"}] == schema({"1": "2"})
def test_entity_id(): def test_entity_id() -> None:
"""Test entity ID validation.""" """Test entity ID validation."""
schema = vol.Schema(cv.entity_id) schema = vol.Schema(cv.entity_id)
@ -195,7 +195,7 @@ def test_entity_ids(validator):
assert schema("sensor.LIGHT, light.kitchen ") == ["sensor.light", "light.kitchen"] assert schema("sensor.LIGHT, light.kitchen ") == ["sensor.light", "light.kitchen"]
def test_entity_ids_or_uuids(): def test_entity_ids_or_uuids() -> None:
"""Test entity ID validation.""" """Test entity ID validation."""
schema = vol.Schema(cv.entity_ids_or_uuids) schema = vol.Schema(cv.entity_ids_or_uuids)
@ -221,7 +221,7 @@ def test_entity_ids_or_uuids():
assert schema(f"{valid_uuid}, {valid_uuid2} ") == [valid_uuid, valid_uuid2] assert schema(f"{valid_uuid}, {valid_uuid2} ") == [valid_uuid, valid_uuid2]
def test_entity_domain(): def test_entity_domain() -> None:
"""Test entity domain validation.""" """Test entity domain validation."""
schema = vol.Schema(cv.entity_domain("sensor")) schema = vol.Schema(cv.entity_domain("sensor"))
@ -246,7 +246,7 @@ def test_entity_domain():
assert schema("binary_sensor.LIGHT") == "binary_sensor.light" assert schema("binary_sensor.LIGHT") == "binary_sensor.light"
def test_entities_domain(): def test_entities_domain() -> None:
"""Test entities domain validation.""" """Test entities domain validation."""
schema = vol.Schema(cv.entities_domain("sensor")) schema = vol.Schema(cv.entities_domain("sensor"))
@ -270,7 +270,7 @@ def test_entities_domain():
assert schema(["sensor.light", "SENSOR.demo"]) == ["sensor.light", "sensor.demo"] assert schema(["sensor.light", "SENSOR.demo"]) == ["sensor.light", "sensor.demo"]
def test_ensure_list_csv(): def test_ensure_list_csv() -> None:
"""Test ensure_list_csv.""" """Test ensure_list_csv."""
schema = vol.Schema(cv.ensure_list_csv) schema = vol.Schema(cv.ensure_list_csv)
@ -281,7 +281,7 @@ def test_ensure_list_csv():
assert schema("string1, string2 ") == ["string1", "string2"] assert schema("string1, string2 ") == ["string1", "string2"]
def test_event_schema(): def test_event_schema() -> None:
"""Test event_schema validation.""" """Test event_schema validation."""
options = ( options = (
{}, {},
@ -301,7 +301,7 @@ def test_event_schema():
cv.EVENT_SCHEMA(value) cv.EVENT_SCHEMA(value)
def test_icon(): def test_icon() -> None:
"""Test icon validation.""" """Test icon validation."""
schema = vol.Schema(cv.icon) schema = vol.Schema(cv.icon)
@ -313,7 +313,7 @@ def test_icon():
schema("custom:prefix") schema("custom:prefix")
def test_time_period(): def test_time_period() -> None:
"""Test time_period validation.""" """Test time_period validation."""
schema = vol.Schema(cv.time_period) schema = vol.Schema(cv.time_period)
@ -362,12 +362,12 @@ def test_time_period():
assert schema(value) == result assert schema(value) == result
def test_remove_falsy(): def test_remove_falsy() -> None:
"""Test remove falsy.""" """Test remove falsy."""
assert cv.remove_falsy([0, None, 1, "1", {}, [], ""]) == [1, "1"] assert cv.remove_falsy([0, None, 1, "1", {}, [], ""]) == [1, "1"]
def test_service(): def test_service() -> None:
"""Test service validation.""" """Test service validation."""
schema = vol.Schema(cv.service) schema = vol.Schema(cv.service)
@ -377,7 +377,7 @@ def test_service():
schema("homeassistant.turn_on") schema("homeassistant.turn_on")
def test_service_schema(): def test_service_schema() -> None:
"""Test service_schema validation.""" """Test service_schema validation."""
options = ( options = (
{}, {},
@ -421,7 +421,7 @@ def test_service_schema():
} }
def test_entity_service_schema(): def test_entity_service_schema() -> None:
"""Test make_entity_service_schema validation.""" """Test make_entity_service_schema validation."""
schema = cv.make_entity_service_schema( schema = cv.make_entity_service_schema(
{vol.Required("required"): cv.positive_int, vol.Optional("optional"): cv.string} {vol.Required("required"): cv.positive_int, vol.Optional("optional"): cv.string}
@ -460,7 +460,7 @@ def test_entity_service_schema():
assert "metadata" not in validated assert "metadata" not in validated
def test_entity_service_schema_with_metadata(): def test_entity_service_schema_with_metadata() -> None:
"""Test make_entity_service_schema with overridden metadata key.""" """Test make_entity_service_schema with overridden metadata key."""
schema = cv.make_entity_service_schema({vol.Required("metadata"): cv.positive_int}) schema = cv.make_entity_service_schema({vol.Required("metadata"): cv.positive_int})
@ -475,7 +475,7 @@ def test_entity_service_schema_with_metadata():
assert "metadata" in validated assert "metadata" in validated
def test_slug(): def test_slug() -> None:
"""Test slug validation.""" """Test slug validation."""
schema = vol.Schema(cv.slug) schema = vol.Schema(cv.slug)
@ -517,7 +517,7 @@ def test_string(hass):
assert schema(result) == text assert schema(result) == text
def test_string_with_no_html(): def test_string_with_no_html() -> None:
"""Test string with no html validation.""" """Test string with no html validation."""
schema = vol.Schema(cv.string_with_no_html) schema = vol.Schema(cv.string_with_no_html)
@ -537,7 +537,7 @@ def test_string_with_no_html():
schema(value) schema(value)
def test_temperature_unit(): def test_temperature_unit() -> None:
"""Test temperature unit validation.""" """Test temperature unit validation."""
schema = vol.Schema(cv.temperature_unit) schema = vol.Schema(cv.temperature_unit)
@ -548,7 +548,7 @@ def test_temperature_unit():
schema("F") schema("F")
def test_x10_address(): def test_x10_address() -> None:
"""Test x10 addr validator.""" """Test x10 addr validator."""
schema = vol.Schema(cv.x10_address) schema = vol.Schema(cv.x10_address)
with pytest.raises(vol.Invalid): with pytest.raises(vol.Invalid):
@ -560,7 +560,7 @@ def test_x10_address():
schema("C11") schema("C11")
def test_template(): def test_template() -> None:
"""Test template validator.""" """Test template validator."""
schema = vol.Schema(cv.template) schema = vol.Schema(cv.template)
@ -578,7 +578,7 @@ def test_template():
schema(value) schema(value)
def test_dynamic_template(): def test_dynamic_template() -> None:
"""Test dynamic template validator.""" """Test dynamic template validator."""
schema = vol.Schema(cv.dynamic_template) schema = vol.Schema(cv.dynamic_template)
@ -601,7 +601,7 @@ def test_dynamic_template():
schema(value) schema(value)
def test_template_complex(): def test_template_complex() -> None:
"""Test template_complex validator.""" """Test template_complex validator."""
schema = vol.Schema(cv.template_complex) schema = vol.Schema(cv.template_complex)
@ -635,7 +635,7 @@ def test_template_complex():
assert schema(value) == value assert schema(value) == value
def test_time_zone(): def test_time_zone() -> None:
"""Test time zone validation.""" """Test time zone validation."""
schema = vol.Schema(cv.time_zone) schema = vol.Schema(cv.time_zone)
@ -646,7 +646,7 @@ def test_time_zone():
schema("UTC") schema("UTC")
def test_date(): def test_date() -> None:
"""Test date validation.""" """Test date validation."""
schema = vol.Schema(cv.date) schema = vol.Schema(cv.date)
@ -658,7 +658,7 @@ def test_date():
schema("2016-11-23") schema("2016-11-23")
def test_time(): def test_time() -> None:
"""Test date validation.""" """Test date validation."""
schema = vol.Schema(cv.time) schema = vol.Schema(cv.time)
@ -671,7 +671,7 @@ def test_time():
schema("23:42") schema("23:42")
def test_datetime(): def test_datetime() -> None:
"""Test date time validation.""" """Test date time validation."""
schema = vol.Schema(cv.datetime) schema = vol.Schema(cv.datetime)
for value in [date.today(), "Wrong DateTime"]: for value in [date.today(), "Wrong DateTime"]:
@ -682,7 +682,7 @@ def test_datetime():
schema("2016-11-23T18:59:08") schema("2016-11-23T18:59:08")
def test_multi_select(): def test_multi_select() -> None:
"""Test multi select validation. """Test multi select validation.
Expected behavior: Expected behavior:
@ -698,7 +698,7 @@ def test_multi_select():
schema(["robban", "paulus"]) schema(["robban", "paulus"])
def test_multi_select_in_serializer(): def test_multi_select_in_serializer() -> None:
"""Test multi_select with custom_serializer.""" """Test multi_select with custom_serializer."""
assert cv.custom_serializer(cv.multi_select({"paulus": "Paulus"})) == { assert cv.custom_serializer(cv.multi_select({"paulus": "Paulus"})) == {
"type": "multi_select", "type": "multi_select",
@ -706,21 +706,21 @@ def test_multi_select_in_serializer():
} }
def test_boolean_in_serializer(): def test_boolean_in_serializer() -> None:
"""Test boolean with custom_serializer.""" """Test boolean with custom_serializer."""
assert cv.custom_serializer(cv.boolean) == { assert cv.custom_serializer(cv.boolean) == {
"type": "boolean", "type": "boolean",
} }
def test_string_in_serializer(): def test_string_in_serializer() -> None:
"""Test string with custom_serializer.""" """Test string with custom_serializer."""
assert cv.custom_serializer(cv.string) == { assert cv.custom_serializer(cv.string) == {
"type": "string", "type": "string",
} }
def test_selector_in_serializer(): def test_selector_in_serializer() -> None:
"""Test selector with custom_serializer.""" """Test selector with custom_serializer."""
assert cv.custom_serializer(selector.selector({"text": {}})) == { assert cv.custom_serializer(selector.selector({"text": {}})) == {
"selector": { "selector": {
@ -731,7 +731,7 @@ def test_selector_in_serializer():
} }
def test_positive_time_period_dict_in_serializer(): def test_positive_time_period_dict_in_serializer() -> None:
"""Test positive_time_period_dict with custom_serializer.""" """Test positive_time_period_dict with custom_serializer."""
assert cv.custom_serializer(cv.positive_time_period_dict) == { assert cv.custom_serializer(cv.positive_time_period_dict) == {
"type": "positive_time_period_dict", "type": "positive_time_period_dict",
@ -941,7 +941,7 @@ def test_deprecated_with_replacement_key_and_default(caplog, schema):
assert {"jupiter": True} == output assert {"jupiter": True} == output
def test_deprecated_cant_find_module(): def test_deprecated_cant_find_module() -> None:
"""Test if the current module cannot be inspected.""" """Test if the current module cannot be inspected."""
with patch("inspect.getmodule", return_value=None): with patch("inspect.getmodule", return_value=None):
# This used to raise. # This used to raise.
@ -1049,7 +1049,7 @@ def test_deprecated_logger_without_config_attributes(caplog):
assert len(caplog.records) == 0 assert len(caplog.records) == 0
def test_key_dependency(): def test_key_dependency() -> None:
"""Test key_dependency validator.""" """Test key_dependency validator."""
schema = vol.Schema(cv.key_dependency("beer", "soda")) schema = vol.Schema(cv.key_dependency("beer", "soda"))
@ -1063,7 +1063,7 @@ def test_key_dependency():
schema(value) schema(value)
def test_has_at_most_one_key(): def test_has_at_most_one_key() -> None:
"""Test has_at_most_one_key validator.""" """Test has_at_most_one_key validator."""
schema = vol.Schema(cv.has_at_most_one_key("beer", "soda")) schema = vol.Schema(cv.has_at_most_one_key("beer", "soda"))
@ -1075,7 +1075,7 @@ def test_has_at_most_one_key():
schema(value) schema(value)
def test_has_at_least_one_key(): def test_has_at_least_one_key() -> None:
"""Test has_at_least_one_key validator.""" """Test has_at_least_one_key validator."""
schema = vol.Schema(cv.has_at_least_one_key("beer", "soda")) schema = vol.Schema(cv.has_at_least_one_key("beer", "soda"))
@ -1087,7 +1087,7 @@ def test_has_at_least_one_key():
schema(value) schema(value)
def test_enum(): def test_enum() -> None:
"""Test enum validator.""" """Test enum validator."""
class TestEnum(enum.Enum): class TestEnum(enum.Enum):
@ -1117,7 +1117,7 @@ def test_socket_timeout(): # pylint: disable=invalid-name
assert schema(1) == 1.0 assert schema(1) == 1.0
def test_matches_regex(): def test_matches_regex() -> None:
"""Test matches_regex validator.""" """Test matches_regex validator."""
schema = vol.Schema(cv.matches_regex(".*uiae.*")) schema = vol.Schema(cv.matches_regex(".*uiae.*"))
@ -1131,7 +1131,7 @@ def test_matches_regex():
assert schema(test_str) == test_str assert schema(test_str) == test_str
def test_is_regex(): def test_is_regex() -> None:
"""Test the is_regex validator.""" """Test the is_regex validator."""
schema = vol.Schema(cv.is_regex) schema = vol.Schema(cv.is_regex)
@ -1145,7 +1145,7 @@ def test_is_regex():
schema(valid_re) schema(valid_re)
def test_comp_entity_ids(): def test_comp_entity_ids() -> None:
"""Test config validation for component entity IDs.""" """Test config validation for component entity IDs."""
schema = vol.Schema(cv.comp_entity_ids) schema = vol.Schema(cv.comp_entity_ids)
@ -1186,7 +1186,7 @@ def test_uuid4_hex(caplog):
assert schema(_hex.upper()) == _hex assert schema(_hex.upper()) == _hex
def test_key_value_schemas(): def test_key_value_schemas() -> None:
"""Test key value schemas.""" """Test key value schemas."""
schema = vol.Schema( schema = vol.Schema(
cv.key_value_schemas( cv.key_value_schemas(
@ -1222,7 +1222,7 @@ def test_key_value_schemas():
schema({"mode": mode, "data": data}) schema({"mode": mode, "data": data})
def test_key_value_schemas_with_default(): def test_key_value_schemas_with_default() -> None:
"""Test key value schemas.""" """Test key value schemas."""
schema = vol.Schema( schema = vol.Schema(
cv.key_value_schemas( cv.key_value_schemas(
@ -1293,7 +1293,7 @@ def test_script(caplog):
assert msg in str(excinfo.value) assert msg in str(excinfo.value)
def test_whitespace(): def test_whitespace() -> None:
"""Test whitespace validation.""" """Test whitespace validation."""
schema = vol.Schema(cv.whitespace) schema = vol.Schema(cv.whitespace)
@ -1314,7 +1314,7 @@ def test_whitespace():
assert schema(value) assert schema(value)
def test_currency(): def test_currency() -> None:
"""Test currency validator.""" """Test currency validator."""
schema = vol.Schema(cv.currency) schema = vol.Schema(cv.currency)
@ -1329,7 +1329,7 @@ def test_currency():
assert schema(value) assert schema(value)
def test_historic_currency(): def test_historic_currency() -> None:
"""Test historic currency validator.""" """Test historic currency validator."""
schema = vol.Schema(cv.historic_currency) schema = vol.Schema(cv.historic_currency)
@ -1341,7 +1341,7 @@ def test_historic_currency():
assert schema(value) assert schema(value)
def test_country(): def test_country() -> None:
"""Test country validator.""" """Test country validator."""
schema = vol.Schema(cv.country) schema = vol.Schema(cv.country)
@ -1353,7 +1353,7 @@ def test_country():
assert schema(value) assert schema(value)
def test_language(): def test_language() -> None:
"""Test language validator.""" """Test language validator."""
schema = vol.Schema(cv.language) schema = vol.Schema(cv.language)

View file

@ -29,13 +29,13 @@ from tests.common import (
) )
def test_generate_entity_id_requires_hass_or_ids(): def test_generate_entity_id_requires_hass_or_ids() -> None:
"""Ensure we require at least hass or current ids.""" """Ensure we require at least hass or current ids."""
with pytest.raises(ValueError): with pytest.raises(ValueError):
entity.generate_entity_id("test.{}", "hello world") entity.generate_entity_id("test.{}", "hello world")
def test_generate_entity_id_given_keys(): def test_generate_entity_id_given_keys() -> None:
"""Test generating an entity id given current ids.""" """Test generating an entity id given current ids."""
assert ( assert (
entity.generate_entity_id( entity.generate_entity_id(

View file

@ -1290,7 +1290,7 @@ async def test_resolve_entity_ids(hass, registry):
er.async_validate_entity_ids(registry, ["unknown_uuid"]) er.async_validate_entity_ids(registry, ["unknown_uuid"])
def test_entity_registry_items(): def test_entity_registry_items() -> None:
"""Test the EntityRegistryItems container.""" """Test the EntityRegistryItems container."""
entities = er.EntityRegistryItems() entities = er.EntityRegistryItems()
assert entities.get_entity_id(("a", "b", "c")) is None assert entities.get_entity_id(("a", "b", "c")) is None

View file

@ -6,7 +6,7 @@ from homeassistant.helpers.entity_values import EntityValues as EV
ent = "test.test" ent = "test.test"
def test_override_single_value(): def test_override_single_value() -> None:
"""Test values with exact match.""" """Test values with exact match."""
store = EV({ent: {"key": "value"}}) store = EV({ent: {"key": "value"}})
assert store.get(ent) == {"key": "value"} assert store.get(ent) == {"key": "value"}
@ -15,25 +15,25 @@ def test_override_single_value():
assert len(store._cache) == 1 assert len(store._cache) == 1
def test_override_by_domain(): def test_override_by_domain() -> None:
"""Test values with domain match.""" """Test values with domain match."""
store = EV(domain={"test": {"key": "value"}}) store = EV(domain={"test": {"key": "value"}})
assert store.get(ent) == {"key": "value"} assert store.get(ent) == {"key": "value"}
def test_override_by_glob(): def test_override_by_glob() -> None:
"""Test values with glob match.""" """Test values with glob match."""
store = EV(glob={"test.?e*": {"key": "value"}}) store = EV(glob={"test.?e*": {"key": "value"}})
assert store.get(ent) == {"key": "value"} assert store.get(ent) == {"key": "value"}
def test_glob_overrules_domain(): def test_glob_overrules_domain() -> None:
"""Test domain overrules glob match.""" """Test domain overrules glob match."""
store = EV(domain={"test": {"key": "domain"}}, glob={"test.?e*": {"key": "glob"}}) store = EV(domain={"test": {"key": "domain"}}, glob={"test.?e*": {"key": "glob"}})
assert store.get(ent) == {"key": "glob"} assert store.get(ent) == {"key": "glob"}
def test_exact_overrules_domain(): def test_exact_overrules_domain() -> None:
"""Test exact overrules domain match.""" """Test exact overrules domain match."""
store = EV( store = EV(
exact={"test.test": {"key": "exact"}}, exact={"test.test": {"key": "exact"}},
@ -43,7 +43,7 @@ def test_exact_overrules_domain():
assert store.get(ent) == {"key": "exact"} assert store.get(ent) == {"key": "exact"}
def test_merging_values(): def test_merging_values() -> None:
"""Test merging glob, domain and exact configs.""" """Test merging glob, domain and exact configs."""
store = EV( store = EV(
exact={"test.test": {"exact_key": "exact"}}, exact={"test.test": {"exact_key": "exact"}},
@ -57,7 +57,7 @@ def test_merging_values():
} }
def test_glob_order(): def test_glob_order() -> None:
"""Test merging glob, domain and exact configs.""" """Test merging glob, domain and exact configs."""
glob = OrderedDict() glob = OrderedDict()
glob["test.*est"] = {"value": "first"} glob["test.*est"] = {"value": "first"}

View file

@ -7,7 +7,7 @@ from homeassistant.helpers.entityfilter import (
) )
def test_no_filters_case_1(): def test_no_filters_case_1() -> None:
"""If include and exclude not included, pass everything.""" """If include and exclude not included, pass everything."""
incl_dom = {} incl_dom = {}
incl_ent = {} incl_ent = {}
@ -19,7 +19,7 @@ def test_no_filters_case_1():
assert testfilter(value) assert testfilter(value)
def test_includes_only_case_2(): def test_includes_only_case_2() -> None:
"""If include specified, only pass if specified (Case 2).""" """If include specified, only pass if specified (Case 2)."""
incl_dom = {"light", "sensor"} incl_dom = {"light", "sensor"}
incl_ent = {"binary_sensor.working"} incl_ent = {"binary_sensor.working"}
@ -34,7 +34,7 @@ def test_includes_only_case_2():
assert testfilter("sun.sun") is False assert testfilter("sun.sun") is False
def test_includes_only_with_glob_case_2(): def test_includes_only_with_glob_case_2() -> None:
"""If include specified, only pass if specified (Case 2).""" """If include specified, only pass if specified (Case 2)."""
incl_dom = {"light", "sensor"} incl_dom = {"light", "sensor"}
incl_glob = {"cover.*_window"} incl_glob = {"cover.*_window"}
@ -55,7 +55,7 @@ def test_includes_only_with_glob_case_2():
assert testfilter("cover.garage_door") is False assert testfilter("cover.garage_door") is False
def test_excludes_only_case_3(): def test_excludes_only_case_3() -> None:
"""If exclude specified, pass all but specified (Case 3).""" """If exclude specified, pass all but specified (Case 3)."""
incl_dom = {} incl_dom = {}
incl_ent = {} incl_ent = {}
@ -70,7 +70,7 @@ def test_excludes_only_case_3():
assert testfilter("sun.sun") is True assert testfilter("sun.sun") is True
def test_excludes_only_with_glob_case_3(): def test_excludes_only_with_glob_case_3() -> None:
"""If exclude specified, pass all but specified (Case 3).""" """If exclude specified, pass all but specified (Case 3)."""
incl_dom = {} incl_dom = {}
incl_glob = {} incl_glob = {}
@ -91,7 +91,7 @@ def test_excludes_only_with_glob_case_3():
assert testfilter("cover.garage_door") assert testfilter("cover.garage_door")
def test_with_include_domain_case4(): def test_with_include_domain_case4() -> None:
"""Test case 4 - include and exclude specified, with included domain.""" """Test case 4 - include and exclude specified, with included domain."""
incl_dom = {"light", "sensor"} incl_dom = {"light", "sensor"}
incl_ent = {"binary_sensor.working"} incl_ent = {"binary_sensor.working"}
@ -108,7 +108,7 @@ def test_with_include_domain_case4():
assert testfilter("sun.sun") is False assert testfilter("sun.sun") is False
def test_with_include_domain_exclude_glob_case4(): def test_with_include_domain_exclude_glob_case4() -> None:
"""Test case 4 - include and exclude specified, with included domain but excluded by glob.""" """Test case 4 - include and exclude specified, with included domain but excluded by glob."""
incl_dom = {"light", "sensor"} incl_dom = {"light", "sensor"}
incl_ent = {"binary_sensor.working"} incl_ent = {"binary_sensor.working"}
@ -130,7 +130,7 @@ def test_with_include_domain_exclude_glob_case4():
assert testfilter("sun.sun") is False assert testfilter("sun.sun") is False
def test_with_include_glob_case4(): def test_with_include_glob_case4() -> None:
"""Test case 4 - include and exclude specified, with included glob.""" """Test case 4 - include and exclude specified, with included glob."""
incl_dom = {} incl_dom = {}
incl_glob = {"light.*", "sensor.*"} incl_glob = {"light.*", "sensor.*"}
@ -151,7 +151,7 @@ def test_with_include_glob_case4():
assert testfilter("sun.sun") is False assert testfilter("sun.sun") is False
def test_with_include_domain_glob_filtering_case4(): def test_with_include_domain_glob_filtering_case4() -> None:
"""Test case 4 - include and exclude specified, both have domains and globs.""" """Test case 4 - include and exclude specified, both have domains and globs."""
incl_dom = {"light"} incl_dom = {"light"}
incl_glob = {"*working"} incl_glob = {"*working"}
@ -173,7 +173,7 @@ def test_with_include_domain_glob_filtering_case4():
assert testfilter("sun.sun") is False assert testfilter("sun.sun") is False
def test_with_include_domain_glob_filtering_case4a_include_strong(): def test_with_include_domain_glob_filtering_case4a_include_strong() -> None:
"""Test case 4 - include and exclude specified, both have domains and globs, and a specifically included entity.""" """Test case 4 - include and exclude specified, both have domains and globs, and a specifically included entity."""
incl_dom = {"light"} incl_dom = {"light"}
incl_glob = {"*working"} incl_glob = {"*working"}
@ -196,7 +196,7 @@ def test_with_include_domain_glob_filtering_case4a_include_strong():
assert testfilter("sun.sun") is False assert testfilter("sun.sun") is False
def test_with_include_glob_filtering_case4a_include_strong(): def test_with_include_glob_filtering_case4a_include_strong() -> None:
"""Test case 4 - include and exclude specified, both have globs, and a specifically included entity.""" """Test case 4 - include and exclude specified, both have globs, and a specifically included entity."""
incl_dom = {} incl_dom = {}
incl_glob = {"*working"} incl_glob = {"*working"}
@ -220,7 +220,7 @@ def test_with_include_glob_filtering_case4a_include_strong():
assert testfilter("sun.sun") is False assert testfilter("sun.sun") is False
def test_exclude_domain_case5(): def test_exclude_domain_case5() -> None:
"""Test case 5 - include and exclude specified, with excluded domain.""" """Test case 5 - include and exclude specified, with excluded domain."""
incl_dom = {} incl_dom = {}
incl_ent = {"binary_sensor.working"} incl_ent = {"binary_sensor.working"}
@ -237,7 +237,7 @@ def test_exclude_domain_case5():
assert testfilter("sun.sun") is True assert testfilter("sun.sun") is True
def test_exclude_glob_case5(): def test_exclude_glob_case5() -> None:
"""Test case 5 - include and exclude specified, with excluded glob.""" """Test case 5 - include and exclude specified, with excluded glob."""
incl_dom = {} incl_dom = {}
incl_glob = {} incl_glob = {}
@ -258,7 +258,7 @@ def test_exclude_glob_case5():
assert testfilter("sun.sun") is True assert testfilter("sun.sun") is True
def test_exclude_glob_case5_include_strong(): def test_exclude_glob_case5_include_strong() -> None:
"""Test case 5 - include and exclude specified, with excluded glob, and a specifically included entity.""" """Test case 5 - include and exclude specified, with excluded glob, and a specifically included entity."""
incl_dom = {} incl_dom = {}
incl_glob = {} incl_glob = {}
@ -279,7 +279,7 @@ def test_exclude_glob_case5_include_strong():
assert testfilter("sun.sun") is True assert testfilter("sun.sun") is True
def test_no_domain_case6(): def test_no_domain_case6() -> None:
"""Test case 6 - include and exclude specified, with no domains.""" """Test case 6 - include and exclude specified, with no domains."""
incl_dom = {} incl_dom = {}
incl_ent = {"binary_sensor.working"} incl_ent = {"binary_sensor.working"}
@ -296,7 +296,7 @@ def test_no_domain_case6():
assert testfilter("sun.sun") is False assert testfilter("sun.sun") is False
def test_filter_schema_empty(): def test_filter_schema_empty() -> None:
"""Test filter schema.""" """Test filter schema."""
conf = {} conf = {}
filt = FILTER_SCHEMA(conf) filt = FILTER_SCHEMA(conf)
@ -314,7 +314,7 @@ def test_filter_schema_empty():
assert filt.empty_filter assert filt.empty_filter
def test_filter_schema(): def test_filter_schema() -> None:
"""Test filter schema.""" """Test filter schema."""
conf = { conf = {
"include_domains": ["light"], "include_domains": ["light"],
@ -328,7 +328,7 @@ def test_filter_schema():
assert not filt.empty_filter assert not filt.empty_filter
def test_filter_schema_with_globs(): def test_filter_schema_with_globs() -> None:
"""Test filter schema with glob options.""" """Test filter schema with glob options."""
conf = { conf = {
"include_domains": ["light"], "include_domains": ["light"],
@ -343,7 +343,7 @@ def test_filter_schema_with_globs():
assert not filt.empty_filter assert not filt.empty_filter
def test_filter_schema_include_exclude(): def test_filter_schema_include_exclude() -> None:
"""Test the include exclude filter schema.""" """Test the include exclude filter schema."""
conf = { conf = {
"include": { "include": {
@ -369,7 +369,7 @@ def test_filter_schema_include_exclude():
assert not filt.empty_filter assert not filt.empty_filter
def test_exlictly_included(): def test_exlictly_included() -> None:
"""Test if an entity is explicitly included.""" """Test if an entity is explicitly included."""
conf = { conf = {
"include": { "include": {
@ -395,7 +395,7 @@ def test_exlictly_included():
assert filt.explicitly_excluded("light.kitchen") assert filt.explicitly_excluded("light.kitchen")
def test_complex_include_exclude_filter(): def test_complex_include_exclude_filter() -> None:
"""Test a complex include exclude filter.""" """Test a complex include exclude filter."""
conf = { conf = {
"include": { "include": {

View file

@ -1,7 +1,7 @@
"""Test Home Assistant icon util methods.""" """Test Home Assistant icon util methods."""
def test_battery_icon(): def test_battery_icon() -> None:
"""Test icon generator for battery sensor.""" """Test icon generator for battery sensor."""
from homeassistant.helpers.icon import icon_for_battery_level from homeassistant.helpers.icon import icon_for_battery_level
@ -46,7 +46,7 @@ def test_battery_icon():
assert iconbase + postfix_charging == icon_for_battery_level(level, True) assert iconbase + postfix_charging == icon_for_battery_level(level, True)
def test_signal_icon(): def test_signal_icon() -> None:
"""Test icon generator for signal sensor.""" """Test icon generator for signal sensor."""
from homeassistant.helpers.icon import icon_for_signal_level from homeassistant.helpers.icon import icon_for_signal_level

View file

@ -5,7 +5,7 @@ from collections import OrderedDict
from homeassistant import helpers from homeassistant import helpers
def test_extract_domain_configs(): def test_extract_domain_configs() -> None:
"""Test the extraction of domain configuration.""" """Test the extraction of domain configuration."""
config = { config = {
"zone": None, "zone": None,
@ -20,7 +20,7 @@ def test_extract_domain_configs():
) )
def test_config_per_platform(): def test_config_per_platform() -> None:
"""Test config per platform method.""" """Test config per platform method."""
config = OrderedDict( config = OrderedDict(
[ [

View file

@ -140,7 +140,7 @@ async def test_match_device_area(hass):
) == [state1] ) == [state1]
def test_async_validate_slots(): def test_async_validate_slots() -> None:
"""Test async_validate_slots of IntentHandler.""" """Test async_validate_slots of IntentHandler."""
handler1 = MockIntentHandler({vol.Required("name"): cv.string}) handler1 = MockIntentHandler({vol.Required("name"): cv.string})

View file

@ -76,7 +76,7 @@ def test_extended_json_encoder(hass):
assert ha_json_enc.default(o) == {"__type": str(type(o)), "repr": repr(o)} assert ha_json_enc.default(o) == {"__type": str(type(o)), "repr": repr(o)}
def test_json_dumps_sorted(): def test_json_dumps_sorted() -> None:
"""Test the json dumps sorted function.""" """Test the json dumps sorted function."""
data = {"c": 3, "a": 1, "b": 2} data = {"c": 3, "a": 1, "b": 2}
assert json_dumps_sorted(data) == json.dumps( assert json_dumps_sorted(data) == json.dumps(
@ -84,7 +84,7 @@ def test_json_dumps_sorted():
) )
def test_json_dumps_float_subclass(): def test_json_dumps_float_subclass() -> None:
"""Test the json dumps a float subclass.""" """Test the json dumps a float subclass."""
class FloatSubclass(float): class FloatSubclass(float):
@ -93,7 +93,7 @@ def test_json_dumps_float_subclass():
assert json_dumps({"c": FloatSubclass(1.2)}) == '{"c":1.2}' assert json_dumps({"c": FloatSubclass(1.2)}) == '{"c":1.2}'
def test_json_dumps_tuple_subclass(): def test_json_dumps_tuple_subclass() -> None:
"""Test the json dumps a tuple subclass.""" """Test the json dumps a tuple subclass."""
tt = time.struct_time((1999, 3, 17, 32, 44, 55, 2, 76, 0)) tt = time.struct_time((1999, 3, 17, 32, 44, 55, 2, 76, 0))
@ -101,7 +101,7 @@ def test_json_dumps_tuple_subclass():
assert json_dumps(tt) == "[1999,3,17,32,44,55,2,76,0]" assert json_dumps(tt) == "[1999,3,17,32,44,55,2,76,0]"
def test_json_dumps_named_tuple_subclass(): def test_json_dumps_named_tuple_subclass() -> None:
"""Test the json dumps a tuple subclass.""" """Test the json dumps a tuple subclass."""
class NamedTupleSubclass(NamedTuple): class NamedTupleSubclass(NamedTuple):
@ -114,14 +114,14 @@ def test_json_dumps_named_tuple_subclass():
assert json_dumps(nts) == '["a"]' assert json_dumps(nts) == '["a"]'
def test_json_dumps_rgb_color_subclass(): def test_json_dumps_rgb_color_subclass() -> None:
"""Test the json dumps of RGBColor.""" """Test the json dumps of RGBColor."""
rgb = RGBColor(4, 2, 1) rgb = RGBColor(4, 2, 1)
assert json_dumps(rgb) == "[4,2,1]" assert json_dumps(rgb) == "[4,2,1]"
def test_json_bytes_strip_null(): def test_json_bytes_strip_null() -> None:
"""Test stripping nul from strings.""" """Test stripping nul from strings."""
assert json_bytes_strip_null("\0") == b'""' assert json_bytes_strip_null("\0") == b'""'

View file

@ -4,13 +4,13 @@ from homeassistant.core import State
from homeassistant.helpers import location from homeassistant.helpers import location
def test_has_location_with_invalid_states(): def test_has_location_with_invalid_states() -> None:
"""Set up the tests.""" """Set up the tests."""
for state in (None, 1, "hello", object): for state in (None, 1, "hello", object):
assert not location.has_location(state) assert not location.has_location(state)
def test_has_location_with_states_with_invalid_locations(): def test_has_location_with_states_with_invalid_locations() -> None:
"""Set up the tests.""" """Set up the tests."""
state = State( state = State(
"hello.world", "invalid", {ATTR_LATITUDE: "no number", ATTR_LONGITUDE: 123.12} "hello.world", "invalid", {ATTR_LATITUDE: "no number", ATTR_LONGITUDE: 123.12}
@ -18,7 +18,7 @@ def test_has_location_with_states_with_invalid_locations():
assert not location.has_location(state) assert not location.has_location(state)
def test_has_location_with_states_with_valid_location(): def test_has_location_with_states_with_valid_location() -> None:
"""Set up the tests.""" """Set up the tests."""
state = State( state = State(
"hello.world", "invalid", {ATTR_LATITUDE: 123.12, ATTR_LONGITUDE: 123.12} "hello.world", "invalid", {ATTR_LATITUDE: 123.12, ATTR_LONGITUDE: 123.12}
@ -26,7 +26,7 @@ def test_has_location_with_states_with_valid_location():
assert location.has_location(state) assert location.has_location(state)
def test_closest_with_no_states_with_location(): def test_closest_with_no_states_with_location() -> None:
"""Set up the tests.""" """Set up the tests."""
state = State("light.test", "on") state = State("light.test", "on")
state2 = State( state2 = State(
@ -37,7 +37,7 @@ def test_closest_with_no_states_with_location():
assert location.closest(123.45, 123.45, [state, state2, state3]) is None assert location.closest(123.45, 123.45, [state, state2, state3]) is None
def test_closest_returns_closest(): def test_closest_returns_closest() -> None:
"""Test .""" """Test ."""
state = State("light.test", "on", {ATTR_LATITUDE: 124.45, ATTR_LONGITUDE: 124.45}) state = State("light.test", "on", {ATTR_LATITUDE: 124.45, ATTR_LONGITUDE: 124.45})
state2 = State("light.test", "on", {ATTR_LATITUDE: 125.45, ATTR_LONGITUDE: 125.45}) state2 = State("light.test", "on", {ATTR_LATITUDE: 125.45, ATTR_LONGITUDE: 125.45})

View file

@ -20,7 +20,7 @@ def mock_config_flows():
yield flows yield flows
def test_recursive_flatten(): def test_recursive_flatten() -> None:
"""Test the flatten function.""" """Test the flatten function."""
data = {"parent1": {"child1": "data1", "child2": "data2"}, "parent2": "data3"} data = {"parent1": {"child1": "data1", "child2": "data2"}, "parent2": "data3"}

View file

@ -134,14 +134,14 @@ async def test_ensure_existing_files_is_not_overwritten(hass):
assert content == "" assert content == ""
def test_load_yaml_config_converts_empty_files_to_dict(): def test_load_yaml_config_converts_empty_files_to_dict() -> None:
"""Test that loading an empty file returns an empty dict.""" """Test that loading an empty file returns an empty dict."""
create_file(YAML_PATH) create_file(YAML_PATH)
assert isinstance(config_util.load_yaml_config_file(YAML_PATH), dict) assert isinstance(config_util.load_yaml_config_file(YAML_PATH), dict)
def test_load_yaml_config_raises_error_if_not_dict(): def test_load_yaml_config_raises_error_if_not_dict() -> None:
"""Test error raised when YAML file is not a dict.""" """Test error raised when YAML file is not a dict."""
with open(YAML_PATH, "w") as fp: with open(YAML_PATH, "w") as fp:
fp.write("5") fp.write("5")
@ -150,7 +150,7 @@ def test_load_yaml_config_raises_error_if_not_dict():
config_util.load_yaml_config_file(YAML_PATH) config_util.load_yaml_config_file(YAML_PATH)
def test_load_yaml_config_raises_error_if_malformed_yaml(): def test_load_yaml_config_raises_error_if_malformed_yaml() -> None:
"""Test error raised if invalid YAML.""" """Test error raised if invalid YAML."""
with open(YAML_PATH, "w") as fp: with open(YAML_PATH, "w") as fp:
fp.write(":-") fp.write(":-")
@ -159,7 +159,7 @@ def test_load_yaml_config_raises_error_if_malformed_yaml():
config_util.load_yaml_config_file(YAML_PATH) config_util.load_yaml_config_file(YAML_PATH)
def test_load_yaml_config_raises_error_if_unsafe_yaml(): def test_load_yaml_config_raises_error_if_unsafe_yaml() -> None:
"""Test error raised if unsafe YAML.""" """Test error raised if unsafe YAML."""
with open(YAML_PATH, "w") as fp: with open(YAML_PATH, "w") as fp:
fp.write("- !!python/object/apply:os.system []") fp.write("- !!python/object/apply:os.system []")
@ -179,7 +179,7 @@ def test_load_yaml_config_raises_error_if_unsafe_yaml():
assert len(system_mock.mock_calls) == 1 assert len(system_mock.mock_calls) == 1
def test_load_yaml_config_preserves_key_order(): def test_load_yaml_config_preserves_key_order() -> None:
"""Test removal of library.""" """Test removal of library."""
with open(YAML_PATH, "w") as fp: with open(YAML_PATH, "w") as fp:
fp.write("hello: 2\n") fp.write("hello: 2\n")
@ -201,7 +201,7 @@ async def test_create_default_config_returns_none_if_write_error(hass):
assert mock_print.called assert mock_print.called
def test_core_config_schema(): def test_core_config_schema() -> None:
"""Test core config schema.""" """Test core config schema."""
for value in ( for value in (
{CONF_UNIT_SYSTEM: "K"}, {CONF_UNIT_SYSTEM: "K"},
@ -249,7 +249,7 @@ def test_core_config_schema_internal_external_warning(caplog):
assert "Invalid internal_url set" in caplog.text assert "Invalid internal_url set" in caplog.text
def test_customize_dict_schema(): def test_customize_dict_schema() -> None:
"""Test basic customize config validation.""" """Test basic customize config validation."""
values = ({ATTR_FRIENDLY_NAME: None}, {ATTR_ASSUMED_STATE: "2"}) values = ({ATTR_FRIENDLY_NAME: None}, {ATTR_ASSUMED_STATE: "2"})
@ -262,7 +262,7 @@ def test_customize_dict_schema():
) == {ATTR_FRIENDLY_NAME: "2", ATTR_ASSUMED_STATE: False} ) == {ATTR_FRIENDLY_NAME: "2", ATTR_ASSUMED_STATE: False}
def test_customize_glob_is_ordered(): def test_customize_glob_is_ordered() -> None:
"""Test that customize_glob preserves order.""" """Test that customize_glob preserves order."""
conf = config_util.CORE_CONFIG_SCHEMA({"customize_glob": OrderedDict()}) conf = config_util.CORE_CONFIG_SCHEMA({"customize_glob": OrderedDict()})
assert isinstance(conf["customize_glob"], OrderedDict) assert isinstance(conf["customize_glob"], OrderedDict)

View file

@ -48,7 +48,7 @@ from .common import async_capture_events, async_mock_service
PST = dt_util.get_time_zone("America/Los_Angeles") PST = dt_util.get_time_zone("America/Los_Angeles")
def test_split_entity_id(): def test_split_entity_id() -> None:
"""Test split_entity_id.""" """Test split_entity_id."""
assert ha.split_entity_id("domain.object_id") == ("domain", "object_id") assert ha.split_entity_id("domain.object_id") == ("domain", "object_id")
with pytest.raises(ValueError): with pytest.raises(ValueError):
@ -63,7 +63,7 @@ def test_split_entity_id():
ha.split_entity_id(".empty_domain") ha.split_entity_id(".empty_domain")
def test_async_add_hass_job_schedule_callback(): def test_async_add_hass_job_schedule_callback() -> None:
"""Test that we schedule coroutines and add jobs to the job pool.""" """Test that we schedule coroutines and add jobs to the job pool."""
hass = MagicMock() hass = MagicMock()
job = MagicMock() job = MagicMock()
@ -74,7 +74,7 @@ def test_async_add_hass_job_schedule_callback():
assert len(hass.add_job.mock_calls) == 0 assert len(hass.add_job.mock_calls) == 0
def test_async_add_hass_job_schedule_partial_callback(): def test_async_add_hass_job_schedule_partial_callback() -> None:
"""Test that we schedule partial coros and add jobs to the job pool.""" """Test that we schedule partial coros and add jobs to the job pool."""
hass = MagicMock() hass = MagicMock()
job = MagicMock() job = MagicMock()
@ -114,7 +114,7 @@ def test_async_add_hass_job_schedule_partial_coroutinefunction(event_loop):
assert len(hass.add_job.mock_calls) == 0 assert len(hass.add_job.mock_calls) == 0
def test_async_add_job_add_hass_threaded_job_to_pool(): def test_async_add_job_add_hass_threaded_job_to_pool() -> None:
"""Test that we schedule coroutines and add jobs to the job pool.""" """Test that we schedule coroutines and add jobs to the job pool."""
hass = MagicMock() hass = MagicMock()
@ -140,7 +140,7 @@ def test_async_create_task_schedule_coroutine(event_loop):
assert len(hass.add_job.mock_calls) == 0 assert len(hass.add_job.mock_calls) == 0
def test_async_run_hass_job_calls_callback(): def test_async_run_hass_job_calls_callback() -> None:
"""Test that the callback annotation is respected.""" """Test that the callback annotation is respected."""
hass = MagicMock() hass = MagicMock()
calls = [] calls = []
@ -153,7 +153,7 @@ def test_async_run_hass_job_calls_callback():
assert len(hass.async_add_job.mock_calls) == 0 assert len(hass.async_add_job.mock_calls) == 0
def test_async_run_hass_job_delegates_non_async(): def test_async_run_hass_job_delegates_non_async() -> None:
"""Test that the callback annotation is respected.""" """Test that the callback annotation is respected."""
hass = MagicMock() hass = MagicMock()
calls = [] calls = []
@ -322,7 +322,7 @@ async def test_add_job_with_none(hass):
hass.async_add_job(None, "test_arg") hass.async_add_job(None, "test_arg")
def test_event_eq(): def test_event_eq() -> None:
"""Test events.""" """Test events."""
now = dt_util.utcnow() now = dt_util.utcnow()
data = {"some": "attr"} data = {"some": "attr"}
@ -334,7 +334,7 @@ def test_event_eq():
assert event1.as_dict() == event2.as_dict() assert event1.as_dict() == event2.as_dict()
def test_event_repr(): def test_event_repr() -> None:
"""Test that Event repr method works.""" """Test that Event repr method works."""
assert str(ha.Event("TestEvent")) == "<Event TestEvent[L]>" assert str(ha.Event("TestEvent")) == "<Event TestEvent[L]>"
@ -344,7 +344,7 @@ def test_event_repr():
) )
def test_event_as_dict(): def test_event_as_dict() -> None:
"""Test an Event as dictionary.""" """Test an Event as dictionary."""
event_type = "some_type" event_type = "some_type"
now = dt_util.utcnow() now = dt_util.utcnow()
@ -367,7 +367,7 @@ def test_event_as_dict():
assert event.as_dict() == expected assert event.as_dict() == expected
def test_state_as_dict(): def test_state_as_dict() -> None:
"""Test a State as dictionary.""" """Test a State as dictionary."""
last_time = datetime(1984, 12, 8, 12, 0, 0) last_time = datetime(1984, 12, 8, 12, 0, 0)
state = ha.State( state = ha.State(
@ -399,7 +399,7 @@ def test_state_as_dict():
assert state.as_dict() is as_dict_1 assert state.as_dict() is as_dict_1
def test_state_as_compressed_state(): def test_state_as_compressed_state() -> None:
"""Test a State as compressed state.""" """Test a State as compressed state."""
last_time = datetime(1984, 12, 8, 12, 0, 0, tzinfo=dt_util.UTC) last_time = datetime(1984, 12, 8, 12, 0, 0, tzinfo=dt_util.UTC)
state = ha.State( state = ha.State(
@ -424,7 +424,7 @@ def test_state_as_compressed_state():
assert state.as_compressed_state() is as_compressed_state assert state.as_compressed_state() is as_compressed_state
def test_state_as_compressed_state_unique_last_updated(): def test_state_as_compressed_state_unique_last_updated() -> None:
"""Test a State as compressed state where last_changed is not last_updated.""" """Test a State as compressed state where last_changed is not last_updated."""
last_changed = datetime(1984, 12, 8, 11, 0, 0, tzinfo=dt_util.UTC) last_changed = datetime(1984, 12, 8, 11, 0, 0, tzinfo=dt_util.UTC)
last_updated = datetime(1984, 12, 8, 12, 0, 0, tzinfo=dt_util.UTC) last_updated = datetime(1984, 12, 8, 12, 0, 0, tzinfo=dt_util.UTC)
@ -648,7 +648,7 @@ async def test_eventbus_max_length_exceeded(hass):
assert exc_info.value.value == long_evt_name assert exc_info.value.value == long_evt_name
def test_state_init(): def test_state_init() -> None:
"""Test state.init.""" """Test state.init."""
with pytest.raises(InvalidEntityFormatError): with pytest.raises(InvalidEntityFormatError):
ha.State("invalid_entity_format", "test_state") ha.State("invalid_entity_format", "test_state")
@ -657,38 +657,38 @@ def test_state_init():
ha.State("domain.long_state", "t" * 256) ha.State("domain.long_state", "t" * 256)
def test_state_domain(): def test_state_domain() -> None:
"""Test domain.""" """Test domain."""
state = ha.State("some_domain.hello", "world") state = ha.State("some_domain.hello", "world")
assert state.domain == "some_domain" assert state.domain == "some_domain"
def test_state_object_id(): def test_state_object_id() -> None:
"""Test object ID.""" """Test object ID."""
state = ha.State("domain.hello", "world") state = ha.State("domain.hello", "world")
assert state.object_id == "hello" assert state.object_id == "hello"
def test_state_name_if_no_friendly_name_attr(): def test_state_name_if_no_friendly_name_attr() -> None:
"""Test if there is no friendly name.""" """Test if there is no friendly name."""
state = ha.State("domain.hello_world", "world") state = ha.State("domain.hello_world", "world")
assert state.name == "hello world" assert state.name == "hello world"
def test_state_name_if_friendly_name_attr(): def test_state_name_if_friendly_name_attr() -> None:
"""Test if there is a friendly name.""" """Test if there is a friendly name."""
name = "Some Unique Name" name = "Some Unique Name"
state = ha.State("domain.hello_world", "world", {ATTR_FRIENDLY_NAME: name}) state = ha.State("domain.hello_world", "world", {ATTR_FRIENDLY_NAME: name})
assert state.name == name assert state.name == name
def test_state_dict_conversion(): def test_state_dict_conversion() -> None:
"""Test conversion of dict.""" """Test conversion of dict."""
state = ha.State("domain.hello", "world", {"some": "attr"}) state = ha.State("domain.hello", "world", {"some": "attr"})
assert state.as_dict() == ha.State.from_dict(state.as_dict()).as_dict() assert state.as_dict() == ha.State.from_dict(state.as_dict()).as_dict()
def test_state_dict_conversion_with_wrong_data(): def test_state_dict_conversion_with_wrong_data() -> None:
"""Test conversion with wrong data.""" """Test conversion with wrong data."""
assert ha.State.from_dict(None) is None assert ha.State.from_dict(None) is None
assert ha.State.from_dict({"state": "yes"}) is None assert ha.State.from_dict({"state": "yes"}) is None
@ -705,7 +705,7 @@ def test_state_dict_conversion_with_wrong_data():
assert wrong_context.context.id == "123" assert wrong_context.context.id == "123"
def test_state_repr(): def test_state_repr() -> None:
"""Test state.repr.""" """Test state.repr."""
assert ( assert (
str(ha.State("happy.happy", "on", last_changed=datetime(1984, 12, 8, 12, 0, 0))) str(ha.State("happy.happy", "on", last_changed=datetime(1984, 12, 8, 12, 0, 0)))
@ -813,7 +813,7 @@ async def test_statemachine_force_update(hass):
assert len(events) == 1 assert len(events) == 1
def test_service_call_repr(): def test_service_call_repr() -> None:
"""Test ServiceCall repr.""" """Test ServiceCall repr."""
call = ha.ServiceCall("homeassistant", "start") call = ha.ServiceCall("homeassistant", "start")
assert str(call) == f"<ServiceCall homeassistant.start (c:{call.context.id})>" assert str(call) == f"<ServiceCall homeassistant.start (c:{call.context.id})>"
@ -1216,7 +1216,7 @@ async def test_service_call_event_contains_original_data(hass):
assert calls[0].context is context assert calls[0].context is context
def test_context(): def test_context() -> None:
"""Test context init.""" """Test context init."""
c = ha.Context() c = ha.Context()
assert c.user_id is None assert c.user_id is None
@ -1290,7 +1290,7 @@ async def test_cancel_service_task(hass, cancel_call):
assert service_cancelled assert service_cancelled
def test_valid_entity_id(): def test_valid_entity_id() -> None:
"""Test valid entity ID.""" """Test valid entity ID."""
for invalid in [ for invalid in [
"_light.kitchen", "_light.kitchen",

View file

@ -7,7 +7,7 @@ import pytest_socket
from homeassistant.core import async_get_hass from homeassistant.core import async_get_hass
def test_sockets_disabled(): def test_sockets_disabled() -> None:
"""Test we can't open sockets.""" """Test we can't open sockets."""
with pytest.raises(pytest_socket.SocketBlockedError): with pytest.raises(pytest_socket.SocketBlockedError):
socket.socket() socket.socket()

View file

@ -28,7 +28,7 @@ async def test_request_post_query() -> None:
assert request.query == {"get": "true"} assert request.query == {"get": "true"}
def test_serialize_text(): def test_serialize_text() -> None:
"""Test serializing a text response.""" """Test serializing a text response."""
response = web.Response(status=201, text="Hello") response = web.Response(status=201, text="Hello")
assert aiohttp.serialize_response(response) == { assert aiohttp.serialize_response(response) == {
@ -38,7 +38,7 @@ def test_serialize_text():
} }
def test_serialize_body_str(): def test_serialize_body_str() -> None:
"""Test serializing a response with a str as body.""" """Test serializing a response with a str as body."""
response = web.Response(status=201, body="Hello") response = web.Response(status=201, body="Hello")
assert aiohttp.serialize_response(response) == { assert aiohttp.serialize_response(response) == {
@ -48,7 +48,7 @@ def test_serialize_body_str():
} }
def test_serialize_body_None(): def test_serialize_body_None() -> None:
"""Test serializing a response with a str as body.""" """Test serializing a response with a str as body."""
response = web.Response(status=201, body=None) response = web.Response(status=201, body=None)
assert aiohttp.serialize_response(response) == { assert aiohttp.serialize_response(response) == {
@ -58,7 +58,7 @@ def test_serialize_body_None():
} }
def test_serialize_body_bytes(): def test_serialize_body_bytes() -> None:
"""Test serializing a response with a str as body.""" """Test serializing a response with a str as body."""
response = web.Response(status=201, body=b"Hello") response = web.Response(status=201, body=b"Hello")
assert aiohttp.serialize_response(response) == { assert aiohttp.serialize_response(response) == {
@ -68,7 +68,7 @@ def test_serialize_body_bytes():
} }
def test_serialize_json(): def test_serialize_json() -> None:
"""Test serializing a JSON response.""" """Test serializing a JSON response."""
response = web.json_response({"how": "what"}) response = web.json_response({"how": "what"})
assert aiohttp.serialize_response(response) == { assert aiohttp.serialize_response(response) == {

View file

@ -180,7 +180,7 @@ def test_check_loop_sync(caplog):
assert "Detected blocking call inside the event loop" not in caplog.text assert "Detected blocking call inside the event loop" not in caplog.text
def test_protect_loop_sync(): def test_protect_loop_sync() -> None:
"""Test protect_loop calls check_loop.""" """Test protect_loop calls check_loop."""
func = Mock() func = Mock()
with patch("homeassistant.util.async_.check_loop") as mock_check_loop: with patch("homeassistant.util.async_.check_loop") as mock_check_loop:

View file

@ -32,7 +32,7 @@ GAMUT_INVALID_4 = color_util.GamutType(
# pylint: disable=invalid-name # pylint: disable=invalid-name
def test_color_RGB_to_xy_brightness(): def test_color_RGB_to_xy_brightness() -> None:
"""Test color_RGB_to_xy_brightness.""" """Test color_RGB_to_xy_brightness."""
assert color_util.color_RGB_to_xy_brightness(0, 0, 0) == (0, 0, 0) assert color_util.color_RGB_to_xy_brightness(0, 0, 0) == (0, 0, 0)
assert color_util.color_RGB_to_xy_brightness(255, 255, 255) == (0.323, 0.329, 255) assert color_util.color_RGB_to_xy_brightness(255, 255, 255) == (0.323, 0.329, 255)
@ -56,7 +56,7 @@ def test_color_RGB_to_xy_brightness():
assert color_util.color_RGB_to_xy_brightness(0, 0, 255, GAMUT) == (0.138, 0.08, 12) assert color_util.color_RGB_to_xy_brightness(0, 0, 255, GAMUT) == (0.138, 0.08, 12)
def test_color_RGB_to_xy(): def test_color_RGB_to_xy() -> None:
"""Test color_RGB_to_xy.""" """Test color_RGB_to_xy."""
assert color_util.color_RGB_to_xy(0, 0, 0) == (0, 0) assert color_util.color_RGB_to_xy(0, 0, 0) == (0, 0)
assert color_util.color_RGB_to_xy(255, 255, 255) == (0.323, 0.329) assert color_util.color_RGB_to_xy(255, 255, 255) == (0.323, 0.329)
@ -76,7 +76,7 @@ def test_color_RGB_to_xy():
assert color_util.color_RGB_to_xy(255, 0, 0, GAMUT) == (0.7, 0.299) assert color_util.color_RGB_to_xy(255, 0, 0, GAMUT) == (0.7, 0.299)
def test_color_xy_brightness_to_RGB(): def test_color_xy_brightness_to_RGB() -> None:
"""Test color_xy_brightness_to_RGB.""" """Test color_xy_brightness_to_RGB."""
assert color_util.color_xy_brightness_to_RGB(1, 1, 0) == (0, 0, 0) assert color_util.color_xy_brightness_to_RGB(1, 1, 0) == (0, 0, 0)
@ -97,7 +97,7 @@ def test_color_xy_brightness_to_RGB():
assert color_util.color_xy_brightness_to_RGB(0, 0, 255, GAMUT) == (9, 85, 255) assert color_util.color_xy_brightness_to_RGB(0, 0, 255, GAMUT) == (9, 85, 255)
def test_color_xy_to_RGB(): def test_color_xy_to_RGB() -> None:
"""Test color_xy_to_RGB.""" """Test color_xy_to_RGB."""
assert color_util.color_xy_to_RGB(0.35, 0.35) == (255, 243, 222) assert color_util.color_xy_to_RGB(0.35, 0.35) == (255, 243, 222)
@ -114,7 +114,7 @@ def test_color_xy_to_RGB():
assert color_util.color_xy_to_RGB(0, 0, GAMUT) == (9, 85, 255) assert color_util.color_xy_to_RGB(0, 0, GAMUT) == (9, 85, 255)
def test_color_RGB_to_hsv(): def test_color_RGB_to_hsv() -> None:
"""Test color_RGB_to_hsv.""" """Test color_RGB_to_hsv."""
assert color_util.color_RGB_to_hsv(0, 0, 0) == (0, 0, 0) assert color_util.color_RGB_to_hsv(0, 0, 0) == (0, 0, 0)
@ -127,7 +127,7 @@ def test_color_RGB_to_hsv():
assert color_util.color_RGB_to_hsv(255, 0, 0) == (0, 100, 100) assert color_util.color_RGB_to_hsv(255, 0, 0) == (0, 100, 100)
def test_color_hsv_to_RGB(): def test_color_hsv_to_RGB() -> None:
"""Test color_hsv_to_RGB.""" """Test color_hsv_to_RGB."""
assert color_util.color_hsv_to_RGB(0, 0, 0) == (0, 0, 0) assert color_util.color_hsv_to_RGB(0, 0, 0) == (0, 0, 0)
@ -140,7 +140,7 @@ def test_color_hsv_to_RGB():
assert color_util.color_hsv_to_RGB(0, 100, 100) == (255, 0, 0) assert color_util.color_hsv_to_RGB(0, 100, 100) == (255, 0, 0)
def test_color_hsb_to_RGB(): def test_color_hsb_to_RGB() -> None:
"""Test color_hsb_to_RGB.""" """Test color_hsb_to_RGB."""
assert color_util.color_hsb_to_RGB(0, 0, 0) == (0, 0, 0) assert color_util.color_hsb_to_RGB(0, 0, 0) == (0, 0, 0)
@ -153,7 +153,7 @@ def test_color_hsb_to_RGB():
assert color_util.color_hsb_to_RGB(0, 1.0, 1.0) == (255, 0, 0) assert color_util.color_hsb_to_RGB(0, 1.0, 1.0) == (255, 0, 0)
def test_color_xy_to_hs(): def test_color_xy_to_hs() -> None:
"""Test color_xy_to_hs.""" """Test color_xy_to_hs."""
assert color_util.color_xy_to_hs(1, 1) == (47.294, 100) assert color_util.color_xy_to_hs(1, 1) == (47.294, 100)
@ -172,7 +172,7 @@ def test_color_xy_to_hs():
assert color_util.color_xy_to_hs(0, 0, GAMUT) == (221.463, 96.471) assert color_util.color_xy_to_hs(0, 0, GAMUT) == (221.463, 96.471)
def test_color_hs_to_xy(): def test_color_hs_to_xy() -> None:
"""Test color_hs_to_xy.""" """Test color_hs_to_xy."""
assert color_util.color_hs_to_xy(180, 100) == (0.151, 0.343) assert color_util.color_hs_to_xy(180, 100) == (0.151, 0.343)
@ -195,7 +195,7 @@ def test_color_hs_to_xy():
assert color_util.color_hs_to_xy(360, 100, GAMUT) == (0.7, 0.299) assert color_util.color_hs_to_xy(360, 100, GAMUT) == (0.7, 0.299)
def test_rgb_hex_to_rgb_list(): def test_rgb_hex_to_rgb_list() -> None:
"""Test rgb_hex_to_rgb_list.""" """Test rgb_hex_to_rgb_list."""
assert [255, 255, 255] == color_util.rgb_hex_to_rgb_list("ffffff") assert [255, 255, 255] == color_util.rgb_hex_to_rgb_list("ffffff")
@ -210,7 +210,7 @@ def test_rgb_hex_to_rgb_list():
assert [51, 153, 255, 0] == color_util.rgb_hex_to_rgb_list("3399ff00") assert [51, 153, 255, 0] == color_util.rgb_hex_to_rgb_list("3399ff00")
def test_color_name_to_rgb_valid_name(): def test_color_name_to_rgb_valid_name() -> None:
"""Test color_name_to_rgb.""" """Test color_name_to_rgb."""
assert color_util.color_name_to_rgb("red") == (255, 0, 0) assert color_util.color_name_to_rgb("red") == (255, 0, 0)
@ -227,13 +227,13 @@ def test_color_name_to_rgb_valid_name():
assert color_util.color_name_to_rgb("darkslate blue") == (72, 61, 139) assert color_util.color_name_to_rgb("darkslate blue") == (72, 61, 139)
def test_color_name_to_rgb_unknown_name_raises_value_error(): def test_color_name_to_rgb_unknown_name_raises_value_error() -> None:
"""Test color_name_to_rgb.""" """Test color_name_to_rgb."""
with pytest.raises(ValueError): with pytest.raises(ValueError):
color_util.color_name_to_rgb("not a color") color_util.color_name_to_rgb("not a color")
def test_color_rgb_to_rgbw(): def test_color_rgb_to_rgbw() -> None:
"""Test color_rgb_to_rgbw.""" """Test color_rgb_to_rgbw."""
assert color_util.color_rgb_to_rgbw(0, 0, 0) == (0, 0, 0, 0) assert color_util.color_rgb_to_rgbw(0, 0, 0) == (0, 0, 0, 0)
@ -252,7 +252,7 @@ def test_color_rgb_to_rgbw():
assert color_util.color_rgb_to_rgbw(127, 127, 127) == (0, 0, 0, 127) assert color_util.color_rgb_to_rgbw(127, 127, 127) == (0, 0, 0, 127)
def test_color_rgbw_to_rgb(): def test_color_rgbw_to_rgb() -> None:
"""Test color_rgbw_to_rgb.""" """Test color_rgbw_to_rgb."""
assert color_util.color_rgbw_to_rgb(0, 0, 0, 0) == (0, 0, 0) assert color_util.color_rgbw_to_rgb(0, 0, 0, 0) == (0, 0, 0)
@ -271,7 +271,7 @@ def test_color_rgbw_to_rgb():
assert color_util.color_rgbw_to_rgb(0, 0, 0, 127) == (127, 127, 127) assert color_util.color_rgbw_to_rgb(0, 0, 0, 127) == (127, 127, 127)
def test_color_rgb_to_hex(): def test_color_rgb_to_hex() -> None:
"""Test color_rgb_to_hex.""" """Test color_rgb_to_hex."""
assert color_util.color_rgb_to_hex(255, 255, 255) == "ffffff" assert color_util.color_rgb_to_hex(255, 255, 255) == "ffffff"
assert color_util.color_rgb_to_hex(0, 0, 0) == "000000" assert color_util.color_rgb_to_hex(0, 0, 0) == "000000"
@ -279,7 +279,7 @@ def test_color_rgb_to_hex():
assert color_util.color_rgb_to_hex(255, 67.9204190, 0) == "ff4400" assert color_util.color_rgb_to_hex(255, 67.9204190, 0) == "ff4400"
def test_match_max_scale(): def test_match_max_scale() -> None:
"""Test match_max_scale.""" """Test match_max_scale."""
match_max_scale = color_util.match_max_scale match_max_scale = color_util.match_max_scale
assert match_max_scale((255, 255, 255), (255, 255, 255)) == (255, 255, 255) assert match_max_scale((255, 255, 255), (255, 255, 255)) == (255, 255, 255)
@ -293,7 +293,7 @@ def test_match_max_scale():
assert match_max_scale((10, 20, 30, 128), (100, 200, 333)) == (38, 77, 128) assert match_max_scale((10, 20, 30, 128), (100, 200, 333)) == (38, 77, 128)
def test_gamut(): def test_gamut() -> None:
"""Test gamut functions.""" """Test gamut functions."""
assert color_util.check_valid_gamut(GAMUT) assert color_util.check_valid_gamut(GAMUT)
assert not color_util.check_valid_gamut(GAMUT_INVALID_1) assert not color_util.check_valid_gamut(GAMUT_INVALID_1)
@ -302,7 +302,7 @@ def test_gamut():
assert not color_util.check_valid_gamut(GAMUT_INVALID_4) assert not color_util.check_valid_gamut(GAMUT_INVALID_4)
def test_color_temperature_mired_to_kelvin(): def test_color_temperature_mired_to_kelvin() -> None:
"""Test color_temperature_mired_to_kelvin.""" """Test color_temperature_mired_to_kelvin."""
assert color_util.color_temperature_mired_to_kelvin(40) == 25000 assert color_util.color_temperature_mired_to_kelvin(40) == 25000
assert color_util.color_temperature_mired_to_kelvin(200) == 5000 assert color_util.color_temperature_mired_to_kelvin(200) == 5000
@ -310,7 +310,7 @@ def test_color_temperature_mired_to_kelvin():
assert color_util.color_temperature_mired_to_kelvin(0) assert color_util.color_temperature_mired_to_kelvin(0)
def test_color_temperature_kelvin_to_mired(): def test_color_temperature_kelvin_to_mired() -> None:
"""Test color_temperature_kelvin_to_mired.""" """Test color_temperature_kelvin_to_mired."""
assert color_util.color_temperature_kelvin_to_mired(25000) == 40 assert color_util.color_temperature_kelvin_to_mired(25000) == 40
assert color_util.color_temperature_kelvin_to_mired(5000) == 200 assert color_util.color_temperature_kelvin_to_mired(5000) == 200
@ -318,21 +318,21 @@ def test_color_temperature_kelvin_to_mired():
assert color_util.color_temperature_kelvin_to_mired(0) assert color_util.color_temperature_kelvin_to_mired(0)
def test_returns_same_value_for_any_two_temperatures_below_1000(): def test_returns_same_value_for_any_two_temperatures_below_1000() -> None:
"""Function should return same value for 999 Kelvin and 0 Kelvin.""" """Function should return same value for 999 Kelvin and 0 Kelvin."""
rgb_1 = color_util.color_temperature_to_rgb(999) rgb_1 = color_util.color_temperature_to_rgb(999)
rgb_2 = color_util.color_temperature_to_rgb(0) rgb_2 = color_util.color_temperature_to_rgb(0)
assert rgb_1 == rgb_2 assert rgb_1 == rgb_2
def test_returns_same_value_for_any_two_temperatures_above_40000(): def test_returns_same_value_for_any_two_temperatures_above_40000() -> None:
"""Function should return same value for 40001K and 999999K.""" """Function should return same value for 40001K and 999999K."""
rgb_1 = color_util.color_temperature_to_rgb(40001) rgb_1 = color_util.color_temperature_to_rgb(40001)
rgb_2 = color_util.color_temperature_to_rgb(999999) rgb_2 = color_util.color_temperature_to_rgb(999999)
assert rgb_1 == rgb_2 assert rgb_1 == rgb_2
def test_should_return_pure_white_at_6600(): def test_should_return_pure_white_at_6600() -> None:
"""Function should return red=255, blue=255, green=255 when given 6600K. """Function should return red=255, blue=255, green=255 when given 6600K.
6600K is considered "pure white" light. 6600K is considered "pure white" light.
@ -343,21 +343,21 @@ def test_should_return_pure_white_at_6600():
assert rgb == (255, 255, 255) assert rgb == (255, 255, 255)
def test_color_above_6600_should_have_more_blue_than_red_or_green(): def test_color_above_6600_should_have_more_blue_than_red_or_green() -> None:
"""Function should return a higher blue value for blue-ish light.""" """Function should return a higher blue value for blue-ish light."""
rgb = color_util.color_temperature_to_rgb(6700) rgb = color_util.color_temperature_to_rgb(6700)
assert rgb[2] > rgb[1] assert rgb[2] > rgb[1]
assert rgb[2] > rgb[0] assert rgb[2] > rgb[0]
def test_color_below_6600_should_have_more_red_than_blue_or_green(): def test_color_below_6600_should_have_more_red_than_blue_or_green() -> None:
"""Function should return a higher red value for red-ish light.""" """Function should return a higher red value for red-ish light."""
rgb = color_util.color_temperature_to_rgb(6500) rgb = color_util.color_temperature_to_rgb(6500)
assert rgb[0] > rgb[1] assert rgb[0] > rgb[1]
assert rgb[0] > rgb[2] assert rgb[0] > rgb[2]
def test_get_color_in_voluptuous(): def test_get_color_in_voluptuous() -> None:
"""Test using the get method in color validation.""" """Test using the get method in color validation."""
schema = vol.Schema(color_util.color_name_to_rgb) schema = vol.Schema(color_util.color_name_to_rgb)
@ -367,7 +367,7 @@ def test_get_color_in_voluptuous():
assert schema("red") == (255, 0, 0) assert schema("red") == (255, 0, 0)
def test_color_rgb_to_rgbww(): def test_color_rgb_to_rgbww() -> None:
"""Test color_rgb_to_rgbww conversions.""" """Test color_rgb_to_rgbww conversions."""
# Light with mid point at ~4600K (warm white) -> output compensated by adding blue # Light with mid point at ~4600K (warm white) -> output compensated by adding blue
assert color_util.color_rgb_to_rgbww(255, 255, 255, 2702, 6493) == ( assert color_util.color_rgb_to_rgbww(255, 255, 255, 2702, 6493) == (
@ -413,7 +413,7 @@ def test_color_rgb_to_rgbww():
) )
def test_color_rgbww_to_rgb(): def test_color_rgbww_to_rgb() -> None:
"""Test color_rgbww_to_rgb conversions.""" """Test color_rgbww_to_rgb conversions."""
assert color_util.color_rgbww_to_rgb(0, 54, 98, 255, 255, 2702, 6493) == ( assert color_util.color_rgbww_to_rgb(0, 54, 98, 255, 255, 2702, 6493) == (
255, 255,
@ -449,7 +449,7 @@ def test_color_rgbww_to_rgb():
) )
def test_color_temperature_to_rgbww(): def test_color_temperature_to_rgbww() -> None:
"""Test color temp to warm, cold conversion. """Test color temp to warm, cold conversion.
Temperature values must be in mireds Temperature values must be in mireds
@ -502,7 +502,7 @@ def test_color_temperature_to_rgbww():
) )
def test_rgbww_to_color_temperature(): def test_rgbww_to_color_temperature() -> None:
"""Test rgbww conversion to color temp. """Test rgbww conversion to color temp.
Temperature values must be in mireds Temperature values must be in mireds
@ -542,7 +542,7 @@ def test_rgbww_to_color_temperature():
) )
def test_white_levels_to_color_temperature(): def test_white_levels_to_color_temperature() -> None:
"""Test warm, cold conversion to color temp. """Test warm, cold conversion to color temp.
Temperature values must be in mireds Temperature values must be in mireds

View file

@ -25,7 +25,7 @@ def test_raise_deprecation_warning(caplog: pytest.LogCaptureFixture) -> None:
assert "use unit_conversion.DistanceConverter instead" in caplog.text assert "use unit_conversion.DistanceConverter instead" in caplog.text
def test_convert_same_unit(): def test_convert_same_unit() -> None:
"""Test conversion from any unit to same unit.""" """Test conversion from any unit to same unit."""
assert distance_util.convert(5, LENGTH_KILOMETERS, LENGTH_KILOMETERS) == 5 assert distance_util.convert(5, LENGTH_KILOMETERS, LENGTH_KILOMETERS) == 5
assert distance_util.convert(2, LENGTH_METERS, LENGTH_METERS) == 2 assert distance_util.convert(2, LENGTH_METERS, LENGTH_METERS) == 2
@ -37,7 +37,7 @@ def test_convert_same_unit():
assert distance_util.convert(7, LENGTH_INCHES, LENGTH_INCHES) == 7 assert distance_util.convert(7, LENGTH_INCHES, LENGTH_INCHES) == 7
def test_convert_invalid_unit(): def test_convert_invalid_unit() -> None:
"""Test exception is thrown for invalid units.""" """Test exception is thrown for invalid units."""
with pytest.raises(HomeAssistantError, match="is not a recognized .* unit"): with pytest.raises(HomeAssistantError, match="is not a recognized .* unit"):
distance_util.convert(5, INVALID_SYMBOL, VALID_SYMBOL) distance_util.convert(5, INVALID_SYMBOL, VALID_SYMBOL)
@ -46,7 +46,7 @@ def test_convert_invalid_unit():
distance_util.convert(5, VALID_SYMBOL, INVALID_SYMBOL) distance_util.convert(5, VALID_SYMBOL, INVALID_SYMBOL)
def test_convert_nonnumeric_value(): def test_convert_nonnumeric_value() -> None:
"""Test exception is thrown for nonnumeric type.""" """Test exception is thrown for nonnumeric type."""
with pytest.raises(TypeError): with pytest.raises(TypeError):
distance_util.convert("a", LENGTH_KILOMETERS, LENGTH_METERS) distance_util.convert("a", LENGTH_KILOMETERS, LENGTH_METERS)

View file

@ -20,17 +20,17 @@ def teardown():
dt_util.set_default_time_zone(DEFAULT_TIME_ZONE) dt_util.set_default_time_zone(DEFAULT_TIME_ZONE)
def test_get_time_zone_retrieves_valid_time_zone(): def test_get_time_zone_retrieves_valid_time_zone() -> None:
"""Test getting a time zone.""" """Test getting a time zone."""
assert dt_util.get_time_zone(TEST_TIME_ZONE) is not None assert dt_util.get_time_zone(TEST_TIME_ZONE) is not None
def test_get_time_zone_returns_none_for_garbage_time_zone(): def test_get_time_zone_returns_none_for_garbage_time_zone() -> None:
"""Test getting a non existing time zone.""" """Test getting a non existing time zone."""
assert dt_util.get_time_zone("Non existing time zone") is None assert dt_util.get_time_zone("Non existing time zone") is None
def test_set_default_time_zone(): def test_set_default_time_zone() -> None:
"""Test setting default time zone.""" """Test setting default time zone."""
time_zone = dt_util.get_time_zone(TEST_TIME_ZONE) time_zone = dt_util.get_time_zone(TEST_TIME_ZONE)
@ -39,14 +39,14 @@ def test_set_default_time_zone():
assert dt_util.now().tzinfo is time_zone assert dt_util.now().tzinfo is time_zone
def test_utcnow(): def test_utcnow() -> None:
"""Test the UTC now method.""" """Test the UTC now method."""
assert abs(dt_util.utcnow().replace(tzinfo=None) - datetime.utcnow()) < timedelta( assert abs(dt_util.utcnow().replace(tzinfo=None) - datetime.utcnow()) < timedelta(
seconds=1 seconds=1
) )
def test_now(): def test_now() -> None:
"""Test the now method.""" """Test the now method."""
dt_util.set_default_time_zone(dt_util.get_time_zone(TEST_TIME_ZONE)) dt_util.set_default_time_zone(dt_util.get_time_zone(TEST_TIME_ZONE))
@ -55,21 +55,21 @@ def test_now():
) < timedelta(seconds=1) ) < timedelta(seconds=1)
def test_as_utc_with_naive_object(): def test_as_utc_with_naive_object() -> None:
"""Test the now method.""" """Test the now method."""
utcnow = datetime.utcnow() utcnow = datetime.utcnow()
assert utcnow == dt_util.as_utc(utcnow).replace(tzinfo=None) assert utcnow == dt_util.as_utc(utcnow).replace(tzinfo=None)
def test_as_utc_with_utc_object(): def test_as_utc_with_utc_object() -> None:
"""Test UTC time with UTC object.""" """Test UTC time with UTC object."""
utcnow = dt_util.utcnow() utcnow = dt_util.utcnow()
assert utcnow == dt_util.as_utc(utcnow) assert utcnow == dt_util.as_utc(utcnow)
def test_as_utc_with_local_object(): def test_as_utc_with_local_object() -> None:
"""Test the UTC time with local object.""" """Test the UTC time with local object."""
dt_util.set_default_time_zone(dt_util.get_time_zone(TEST_TIME_ZONE)) dt_util.set_default_time_zone(dt_util.get_time_zone(TEST_TIME_ZONE))
localnow = dt_util.now() localnow = dt_util.now()
@ -79,19 +79,19 @@ def test_as_utc_with_local_object():
assert localnow.tzinfo != utcnow.tzinfo assert localnow.tzinfo != utcnow.tzinfo
def test_as_local_with_naive_object(): def test_as_local_with_naive_object() -> None:
"""Test local time with native object.""" """Test local time with native object."""
now = dt_util.now() now = dt_util.now()
assert abs(now - dt_util.as_local(datetime.utcnow())) < timedelta(seconds=1) assert abs(now - dt_util.as_local(datetime.utcnow())) < timedelta(seconds=1)
def test_as_local_with_local_object(): def test_as_local_with_local_object() -> None:
"""Test local with local object.""" """Test local with local object."""
now = dt_util.now() now = dt_util.now()
assert now == now assert now == now
def test_as_local_with_utc_object(): def test_as_local_with_utc_object() -> None:
"""Test local time with UTC object.""" """Test local time with UTC object."""
dt_util.set_default_time_zone(dt_util.get_time_zone(TEST_TIME_ZONE)) dt_util.set_default_time_zone(dt_util.get_time_zone(TEST_TIME_ZONE))
@ -102,20 +102,20 @@ def test_as_local_with_utc_object():
assert localnow.tzinfo != utcnow.tzinfo assert localnow.tzinfo != utcnow.tzinfo
def test_utc_from_timestamp(): def test_utc_from_timestamp() -> None:
"""Test utc_from_timestamp method.""" """Test utc_from_timestamp method."""
assert datetime(1986, 7, 9, tzinfo=dt_util.UTC) == dt_util.utc_from_timestamp( assert datetime(1986, 7, 9, tzinfo=dt_util.UTC) == dt_util.utc_from_timestamp(
521251200 521251200
) )
def test_timestamp_to_utc(): def test_timestamp_to_utc() -> None:
"""Test we can convert a utc datetime to a timestamp.""" """Test we can convert a utc datetime to a timestamp."""
utc_now = dt_util.utcnow() utc_now = dt_util.utcnow()
assert dt_util.utc_to_timestamp(utc_now) == utc_now.timestamp() assert dt_util.utc_to_timestamp(utc_now) == utc_now.timestamp()
def test_as_timestamp(): def test_as_timestamp() -> None:
"""Test as_timestamp method.""" """Test as_timestamp method."""
ts = 1462401234 ts = 1462401234
utc_dt = dt_util.utc_from_timestamp(ts) utc_dt = dt_util.utc_from_timestamp(ts)
@ -129,7 +129,7 @@ def test_as_timestamp():
assert delta == 1 assert delta == 1
def test_parse_datetime_converts_correctly(): def test_parse_datetime_converts_correctly() -> None:
"""Test parse_datetime converts strings.""" """Test parse_datetime converts strings."""
assert datetime(1986, 7, 9, 12, 0, 0, tzinfo=dt_util.UTC) == dt_util.parse_datetime( assert datetime(1986, 7, 9, 12, 0, 0, tzinfo=dt_util.UTC) == dt_util.parse_datetime(
"1986-07-09T12:00:00Z" "1986-07-09T12:00:00Z"
@ -140,7 +140,7 @@ def test_parse_datetime_converts_correctly():
assert utcnow == dt_util.parse_datetime(utcnow.isoformat()) assert utcnow == dt_util.parse_datetime(utcnow.isoformat())
def test_parse_datetime_returns_none_for_incorrect_format(): def test_parse_datetime_returns_none_for_incorrect_format() -> None:
"""Test parse_datetime returns None if incorrect format.""" """Test parse_datetime returns None if incorrect format."""
assert dt_util.parse_datetime("not a datetime string") is None assert dt_util.parse_datetime("not a datetime string") is None
@ -171,7 +171,7 @@ def test_parse_duration(
assert dt_util.parse_duration(duration_string) == expected_result assert dt_util.parse_duration(duration_string) == expected_result
def test_get_age(): def test_get_age() -> None:
"""Test get_age.""" """Test get_age."""
diff = dt_util.now() - timedelta(seconds=0) diff = dt_util.now() - timedelta(seconds=0)
assert dt_util.get_age(diff) == "0 seconds" assert dt_util.get_age(diff) == "0 seconds"
@ -207,7 +207,7 @@ def test_get_age():
assert dt_util.get_age(diff) == "1 year" assert dt_util.get_age(diff) == "1 year"
def test_parse_time_expression(): def test_parse_time_expression() -> None:
"""Test parse_time_expression.""" """Test parse_time_expression."""
assert list(range(60)) == dt_util.parse_time_expression("*", 0, 59) assert list(range(60)) == dt_util.parse_time_expression("*", 0, 59)
assert list(range(60)) == dt_util.parse_time_expression(None, 0, 59) assert list(range(60)) == dt_util.parse_time_expression(None, 0, 59)
@ -225,7 +225,7 @@ def test_parse_time_expression():
dt_util.parse_time_expression(61, 0, 60) dt_util.parse_time_expression(61, 0, 60)
def test_find_next_time_expression_time_basic(): def test_find_next_time_expression_time_basic() -> None:
"""Test basic stuff for find_next_time_expression_time.""" """Test basic stuff for find_next_time_expression_time."""
def find(dt, hour, minute, second): def find(dt, hour, minute, second):
@ -257,7 +257,7 @@ def test_find_next_time_expression_time_basic():
) )
def test_find_next_time_expression_time_dst(): def test_find_next_time_expression_time_dst() -> None:
"""Test daylight saving time for find_next_time_expression_time.""" """Test daylight saving time for find_next_time_expression_time."""
tz = dt_util.get_time_zone("Europe/Vienna") tz = dt_util.get_time_zone("Europe/Vienna")
dt_util.set_default_time_zone(tz) dt_util.set_default_time_zone(tz)
@ -427,7 +427,7 @@ def test_find_next_time_expression_exiting_dst(now_dt, expected_dt):
assert dt_util.as_utc(res_dt) == dt_util.as_utc(expected_dt) assert dt_util.as_utc(res_dt) == dt_util.as_utc(expected_dt)
def test_find_next_time_expression_time_dst_chicago(): def test_find_next_time_expression_time_dst_chicago() -> None:
"""Test daylight saving time for find_next_time_expression_time.""" """Test daylight saving time for find_next_time_expression_time."""
tz = dt_util.get_time_zone("America/Chicago") tz = dt_util.get_time_zone("America/Chicago")
dt_util.set_default_time_zone(tz) dt_util.set_default_time_zone(tz)
@ -503,7 +503,7 @@ def _get_matches(hours, minutes, seconds):
return matching_hours, matching_minutes, matching_seconds return matching_hours, matching_minutes, matching_seconds
def test_find_next_time_expression_day_before_dst_change_the_same_time(): def test_find_next_time_expression_day_before_dst_change_the_same_time() -> None:
"""Test the day before DST to establish behavior without DST.""" """Test the day before DST to establish behavior without DST."""
tz = dt_util.get_time_zone("America/Chicago") tz = dt_util.get_time_zone("America/Chicago")
dt_util.set_default_time_zone(tz) dt_util.set_default_time_zone(tz)
@ -524,7 +524,9 @@ def test_find_next_time_expression_day_before_dst_change_the_same_time():
) )
def test_find_next_time_expression_time_leave_dst_chicago_before_the_fold_30_s(): def test_find_next_time_expression_time_leave_dst_chicago_before_the_fold_30_s() -> (
None
):
"""Test leaving daylight saving time for find_next_time_expression_time 30s into the future.""" """Test leaving daylight saving time for find_next_time_expression_time 30s into the future."""
tz = dt_util.get_time_zone("America/Chicago") tz = dt_util.get_time_zone("America/Chicago")
dt_util.set_default_time_zone(tz) dt_util.set_default_time_zone(tz)
@ -547,7 +549,9 @@ def test_find_next_time_expression_time_leave_dst_chicago_before_the_fold_30_s()
assert next_time.fold == 0 assert next_time.fold == 0
def test_find_next_time_expression_time_leave_dst_chicago_before_the_fold_same_time(): def test_find_next_time_expression_time_leave_dst_chicago_before_the_fold_same_time() -> (
None
):
"""Test leaving daylight saving time for find_next_time_expression_time with the same time.""" """Test leaving daylight saving time for find_next_time_expression_time with the same time."""
tz = dt_util.get_time_zone("America/Chicago") tz = dt_util.get_time_zone("America/Chicago")
dt_util.set_default_time_zone(tz) dt_util.set_default_time_zone(tz)
@ -570,7 +574,9 @@ def test_find_next_time_expression_time_leave_dst_chicago_before_the_fold_same_t
assert next_time.fold == 0 assert next_time.fold == 0
def test_find_next_time_expression_time_leave_dst_chicago_into_the_fold_same_time(): def test_find_next_time_expression_time_leave_dst_chicago_into_the_fold_same_time() -> (
None
):
"""Test leaving daylight saving time for find_next_time_expression_time.""" """Test leaving daylight saving time for find_next_time_expression_time."""
tz = dt_util.get_time_zone("America/Chicago") tz = dt_util.get_time_zone("America/Chicago")
dt_util.set_default_time_zone(tz) dt_util.set_default_time_zone(tz)
@ -594,7 +600,9 @@ def test_find_next_time_expression_time_leave_dst_chicago_into_the_fold_same_tim
) )
def test_find_next_time_expression_time_leave_dst_chicago_into_the_fold_ahead_1_hour_10_min(): def test_find_next_time_expression_time_leave_dst_chicago_into_the_fold_ahead_1_hour_10_min() -> (
None
):
"""Test leaving daylight saving time for find_next_time_expression_time.""" """Test leaving daylight saving time for find_next_time_expression_time."""
tz = dt_util.get_time_zone("America/Chicago") tz = dt_util.get_time_zone("America/Chicago")
dt_util.set_default_time_zone(tz) dt_util.set_default_time_zone(tz)
@ -620,7 +628,9 @@ def test_find_next_time_expression_time_leave_dst_chicago_into_the_fold_ahead_1_
) )
def test_find_next_time_expression_time_leave_dst_chicago_inside_the_fold_ahead_10_min(): def test_find_next_time_expression_time_leave_dst_chicago_inside_the_fold_ahead_10_min() -> (
None
):
"""Test leaving daylight saving time for find_next_time_expression_time.""" """Test leaving daylight saving time for find_next_time_expression_time."""
tz = dt_util.get_time_zone("America/Chicago") tz = dt_util.get_time_zone("America/Chicago")
dt_util.set_default_time_zone(tz) dt_util.set_default_time_zone(tz)
@ -646,7 +656,9 @@ def test_find_next_time_expression_time_leave_dst_chicago_inside_the_fold_ahead_
) )
def test_find_next_time_expression_time_leave_dst_chicago_past_the_fold_ahead_2_hour_10_min(): def test_find_next_time_expression_time_leave_dst_chicago_past_the_fold_ahead_2_hour_10_min() -> (
None
):
"""Test leaving daylight saving time for find_next_time_expression_time.""" """Test leaving daylight saving time for find_next_time_expression_time."""
tz = dt_util.get_time_zone("America/Chicago") tz = dt_util.get_time_zone("America/Chicago")
dt_util.set_default_time_zone(tz) dt_util.set_default_time_zone(tz)
@ -672,7 +684,7 @@ def test_find_next_time_expression_time_leave_dst_chicago_past_the_fold_ahead_2_
) )
def test_find_next_time_expression_microseconds(): def test_find_next_time_expression_microseconds() -> None:
"""Test finding next time expression with microsecond clock drift.""" """Test finding next time expression with microsecond clock drift."""
hour_minute_second = (None, "5", "10") hour_minute_second = (None, "5", "10")
test_time = datetime(2022, 5, 13, 0, 5, 9, tzinfo=dt_util.UTC) test_time = datetime(2022, 5, 13, 0, 5, 9, tzinfo=dt_util.UTC)
@ -695,7 +707,9 @@ def test_find_next_time_expression_microseconds():
assert time_after == datetime(2022, 5, 13, 1, 5, 10, tzinfo=dt_util.UTC) assert time_after == datetime(2022, 5, 13, 1, 5, 10, tzinfo=dt_util.UTC)
def test_find_next_time_expression_tenth_second_pattern_does_not_drift_entering_dst(): def test_find_next_time_expression_tenth_second_pattern_does_not_drift_entering_dst() -> (
None
):
"""Test finding next time expression tenth second pattern does not drift entering dst.""" """Test finding next time expression tenth second pattern does not drift entering dst."""
tz = dt_util.get_time_zone("America/Chicago") tz = dt_util.get_time_zone("America/Chicago")
dt_util.set_default_time_zone(tz) dt_util.set_default_time_zone(tz)
@ -722,6 +736,6 @@ def test_find_next_time_expression_tenth_second_pattern_does_not_drift_entering_
prev_target = next_target prev_target = next_target
def test_monotonic_time_coarse(): def test_monotonic_time_coarse() -> None:
"""Test monotonic time coarse.""" """Test monotonic time coarse."""
assert abs(time.monotonic() - dt_util.monotonic_time_coarse()) < 1 assert abs(time.monotonic() - dt_util.monotonic_time_coarse()) < 1

View file

@ -8,7 +8,7 @@ from homeassistant import util
import homeassistant.util.dt as dt_util import homeassistant.util.dt as dt_util
def test_raise_if_invalid_filename(): def test_raise_if_invalid_filename() -> None:
"""Test raise_if_invalid_filename.""" """Test raise_if_invalid_filename."""
assert util.raise_if_invalid_filename("test") is None assert util.raise_if_invalid_filename("test") is None
@ -25,7 +25,7 @@ def test_raise_if_invalid_filename():
util.raise_if_invalid_filename("\\../test") util.raise_if_invalid_filename("\\../test")
def test_raise_if_invalid_path(): def test_raise_if_invalid_path() -> None:
"""Test raise_if_invalid_path.""" """Test raise_if_invalid_path."""
assert util.raise_if_invalid_path("test/path") is None assert util.raise_if_invalid_path("test/path") is None
@ -36,7 +36,7 @@ def test_raise_if_invalid_path():
assert util.raise_if_invalid_path("~/../test/path") assert util.raise_if_invalid_path("~/../test/path")
def test_slugify(): def test_slugify() -> None:
"""Test slugify.""" """Test slugify."""
assert util.slugify("T-!@#$!#@$!$est") == "t_est" assert util.slugify("T-!@#$!#@$!$est") == "t_est"
assert util.slugify("Test More") == "test_more" assert util.slugify("Test More") == "test_more"
@ -61,7 +61,7 @@ def test_slugify():
assert util.slugify(None) == "" assert util.slugify(None) == ""
def test_repr_helper(): def test_repr_helper() -> None:
"""Test repr_helper.""" """Test repr_helper."""
assert util.repr_helper("A") == "A" assert util.repr_helper("A") == "A"
assert util.repr_helper(5) == "5" assert util.repr_helper(5) == "5"
@ -76,7 +76,7 @@ def test_repr_helper():
) )
def test_convert(): def test_convert() -> None:
"""Test convert.""" """Test convert."""
assert util.convert("5", int) == 5 assert util.convert("5", int) == 5
assert util.convert("5", float) == 5.0 assert util.convert("5", float) == 5.0
@ -86,13 +86,13 @@ def test_convert():
assert util.convert(object, int, 1) == 1 assert util.convert(object, int, 1) == 1
def test_ensure_unique_string(): def test_ensure_unique_string() -> None:
"""Test ensure_unique_string.""" """Test ensure_unique_string."""
assert util.ensure_unique_string("Beer", ["Beer", "Beer_2"]) == "Beer_3" assert util.ensure_unique_string("Beer", ["Beer", "Beer_2"]) == "Beer_3"
assert util.ensure_unique_string("Beer", ["Wine", "Soda"]) == "Beer" assert util.ensure_unique_string("Beer", ["Wine", "Soda"]) == "Beer"
def test_throttle(): def test_throttle() -> None:
"""Test the add cooldown decorator.""" """Test the add cooldown decorator."""
calls1 = [] calls1 = []
calls2 = [] calls2 = []
@ -145,7 +145,7 @@ def test_throttle():
assert len(calls2) == 2 assert len(calls2) == 2
def test_throttle_per_instance(): def test_throttle_per_instance() -> None:
"""Test that the throttle method is done per instance of a class.""" """Test that the throttle method is done per instance of a class."""
class Tester: class Tester:
@ -160,7 +160,7 @@ def test_throttle_per_instance():
assert Tester().hello() assert Tester().hello()
def test_throttle_on_method(): def test_throttle_on_method() -> None:
"""Test that throttle works when wrapping a method.""" """Test that throttle works when wrapping a method."""
class Tester: class Tester:
@ -177,7 +177,7 @@ def test_throttle_on_method():
assert throttled() is None assert throttled() is None
def test_throttle_on_two_method(): def test_throttle_on_two_method() -> None:
"""Test that throttle works when wrapping two methods.""" """Test that throttle works when wrapping two methods."""
class Tester: class Tester:

View file

@ -44,7 +44,7 @@ def _path_for(leaf_name):
return os.path.join(TMP_DIR, f"{leaf_name}.json") return os.path.join(TMP_DIR, f"{leaf_name}.json")
def test_save_and_load(): def test_save_and_load() -> None:
"""Test saving and loading back.""" """Test saving and loading back."""
fname = _path_for("test1") fname = _path_for("test1")
save_json(fname, TEST_JSON_A) save_json(fname, TEST_JSON_A)
@ -52,7 +52,7 @@ def test_save_and_load():
assert data == TEST_JSON_A assert data == TEST_JSON_A
def test_save_and_load_int_keys(): def test_save_and_load_int_keys() -> None:
"""Test saving and loading back stringifies the keys.""" """Test saving and loading back stringifies the keys."""
fname = _path_for("test1") fname = _path_for("test1")
save_json(fname, {1: "a", 2: "b"}) save_json(fname, {1: "a", 2: "b"})
@ -60,7 +60,7 @@ def test_save_and_load_int_keys():
assert data == {"1": "a", "2": "b"} assert data == {"1": "a", "2": "b"}
def test_save_and_load_private(): def test_save_and_load_private() -> None:
"""Test we can load private files and that they are protected.""" """Test we can load private files and that they are protected."""
fname = _path_for("test2") fname = _path_for("test2")
save_json(fname, TEST_JSON_A, private=True) save_json(fname, TEST_JSON_A, private=True)
@ -80,7 +80,7 @@ def test_overwrite_and_reload(atomic_writes):
assert data == TEST_JSON_B assert data == TEST_JSON_B
def test_save_bad_data(): def test_save_bad_data() -> None:
"""Test error from trying to save unserializable data.""" """Test error from trying to save unserializable data."""
class CannotSerializeMe: class CannotSerializeMe:
@ -94,7 +94,7 @@ def test_save_bad_data():
) )
def test_load_bad_data(): def test_load_bad_data() -> None:
"""Test error from trying to load unserialisable data.""" """Test error from trying to load unserialisable data."""
fname = _path_for("test5") fname = _path_for("test5")
with open(fname, "w") as fh: with open(fname, "w") as fh:
@ -103,7 +103,7 @@ def test_load_bad_data():
load_json(fname) load_json(fname)
def test_custom_encoder(): def test_custom_encoder() -> None:
"""Test serializing with a custom encoder.""" """Test serializing with a custom encoder."""
class MockJSONEncoder(JSONEncoder): class MockJSONEncoder(JSONEncoder):
@ -119,7 +119,7 @@ def test_custom_encoder():
assert data == "9" assert data == "9"
def test_default_encoder_is_passed(): def test_default_encoder_is_passed() -> None:
"""Test we use orjson if they pass in the default encoder.""" """Test we use orjson if they pass in the default encoder."""
fname = _path_for("test6") fname = _path_for("test6")
with patch( with patch(
@ -134,7 +134,7 @@ def test_default_encoder_is_passed():
assert data == {"any": [1]} assert data == {"any": [1]}
def test_find_unserializable_data(): def test_find_unserializable_data() -> None:
"""Find unserializeable data.""" """Find unserializeable data."""
assert find_paths_unserializable_data(1) == {} assert find_paths_unserializable_data(1) == {}
assert find_paths_unserializable_data([1, 2]) == {} assert find_paths_unserializable_data([1, 2]) == {}

View file

@ -37,7 +37,7 @@ async def raising_session(event_loop):
return Mock(get=Mock(side_effect=aiohttp.ClientError)) return Mock(get=Mock(side_effect=aiohttp.ClientError))
def test_get_distance_to_same_place(): def test_get_distance_to_same_place() -> None:
"""Test getting the distance.""" """Test getting the distance."""
meters = location_util.distance( meters = location_util.distance(
COORDINATES_PARIS[0], COORDINATES_PARIS[0],
@ -49,7 +49,7 @@ def test_get_distance_to_same_place():
assert meters == 0 assert meters == 0
def test_get_distance(): def test_get_distance() -> None:
"""Test getting the distance.""" """Test getting the distance."""
meters = location_util.distance( meters = location_util.distance(
COORDINATES_PARIS[0], COORDINATES_PARIS[0],
@ -61,13 +61,13 @@ def test_get_distance():
assert meters / 1000 - DISTANCE_KM < 0.01 assert meters / 1000 - DISTANCE_KM < 0.01
def test_get_kilometers(): def test_get_kilometers() -> None:
"""Test getting the distance between given coordinates in km.""" """Test getting the distance between given coordinates in km."""
kilometers = location_util.vincenty(COORDINATES_PARIS, COORDINATES_NEW_YORK) kilometers = location_util.vincenty(COORDINATES_PARIS, COORDINATES_NEW_YORK)
assert round(kilometers, 2) == DISTANCE_KM assert round(kilometers, 2) == DISTANCE_KM
def test_get_miles(): def test_get_miles() -> None:
"""Test getting the distance between given coordinates in miles.""" """Test getting the distance between given coordinates in miles."""
miles = location_util.vincenty(COORDINATES_PARIS, COORDINATES_NEW_YORK, miles=True) miles = location_util.vincenty(COORDINATES_PARIS, COORDINATES_NEW_YORK, miles=True)
assert round(miles, 2) == DISTANCE_MILES assert round(miles, 2) == DISTANCE_MILES

View file

@ -11,7 +11,7 @@ from homeassistant.core import callback, is_callback
import homeassistant.util.logging as logging_util import homeassistant.util.logging as logging_util
def test_sensitive_data_filter(): def test_sensitive_data_filter() -> None:
"""Test the logging sensitive data filter.""" """Test the logging sensitive data filter."""
log_filter = logging_util.HideSensitiveDataFilter("mock_sensitive") log_filter = logging_util.HideSensitiveDataFilter("mock_sensitive")
@ -90,7 +90,7 @@ async def test_async_create_catching_coro(hass, caplog):
assert "in test_async_create_catching_coro" in caplog.text assert "in test_async_create_catching_coro" in caplog.text
def test_catch_log_exception(): def test_catch_log_exception() -> None:
"""Test it is still a callback after wrapping including partial.""" """Test it is still a callback after wrapping including partial."""
async def async_meth(): async def async_meth():

View file

@ -5,7 +5,7 @@ from ipaddress import ip_address
import homeassistant.util.network as network_util import homeassistant.util.network as network_util
def test_is_loopback(): def test_is_loopback() -> None:
"""Test loopback addresses.""" """Test loopback addresses."""
assert network_util.is_loopback(ip_address("127.0.0.2")) assert network_util.is_loopback(ip_address("127.0.0.2"))
assert network_util.is_loopback(ip_address("127.0.0.1")) assert network_util.is_loopback(ip_address("127.0.0.1"))
@ -17,7 +17,7 @@ def test_is_loopback():
assert not network_util.is_loopback(ip_address("2600:1404:400:1a4::356e")) assert not network_util.is_loopback(ip_address("2600:1404:400:1a4::356e"))
def test_is_private(): def test_is_private() -> None:
"""Test private addresses.""" """Test private addresses."""
assert network_util.is_private(ip_address("192.168.0.1")) assert network_util.is_private(ip_address("192.168.0.1"))
assert network_util.is_private(ip_address("172.16.12.0")) assert network_util.is_private(ip_address("172.16.12.0"))
@ -27,7 +27,7 @@ def test_is_private():
assert not network_util.is_private(ip_address("::1")) assert not network_util.is_private(ip_address("::1"))
def test_is_link_local(): def test_is_link_local() -> None:
"""Test link local addresses.""" """Test link local addresses."""
assert network_util.is_link_local(ip_address("169.254.12.3")) assert network_util.is_link_local(ip_address("169.254.12.3"))
assert network_util.is_link_local(ip_address("fe80::1234:5678:abcd")) assert network_util.is_link_local(ip_address("fe80::1234:5678:abcd"))
@ -35,13 +35,13 @@ def test_is_link_local():
assert not network_util.is_link_local(ip_address("::1")) assert not network_util.is_link_local(ip_address("::1"))
def test_is_invalid(): def test_is_invalid() -> None:
"""Test invalid address.""" """Test invalid address."""
assert network_util.is_invalid(ip_address("0.0.0.0")) assert network_util.is_invalid(ip_address("0.0.0.0"))
assert not network_util.is_invalid(ip_address("127.0.0.1")) assert not network_util.is_invalid(ip_address("127.0.0.1"))
def test_is_local(): def test_is_local() -> None:
"""Test local addresses.""" """Test local addresses."""
assert network_util.is_local(ip_address("192.168.0.1")) assert network_util.is_local(ip_address("192.168.0.1"))
assert network_util.is_local(ip_address("127.0.0.1")) assert network_util.is_local(ip_address("127.0.0.1"))
@ -54,7 +54,7 @@ def test_is_local():
assert not network_util.is_local(ip_address("::ffff:208.5.4.2")) assert not network_util.is_local(ip_address("::ffff:208.5.4.2"))
def test_is_ip_address(): def test_is_ip_address() -> None:
"""Test if strings are IP addresses.""" """Test if strings are IP addresses."""
assert network_util.is_ip_address("192.168.0.1") assert network_util.is_ip_address("192.168.0.1")
assert network_util.is_ip_address("8.8.8.8") assert network_util.is_ip_address("8.8.8.8")
@ -64,7 +64,7 @@ def test_is_ip_address():
assert not network_util.is_ip_address("example.com") assert not network_util.is_ip_address("example.com")
def test_is_ipv4_address(): def test_is_ipv4_address() -> None:
"""Test if strings are IPv4 addresses.""" """Test if strings are IPv4 addresses."""
assert network_util.is_ipv4_address("192.168.0.1") is True assert network_util.is_ipv4_address("192.168.0.1") is True
assert network_util.is_ipv4_address("8.8.8.8") is True assert network_util.is_ipv4_address("8.8.8.8") is True
@ -73,14 +73,14 @@ def test_is_ipv4_address():
assert network_util.is_ipv4_address("example.com") is False assert network_util.is_ipv4_address("example.com") is False
def test_is_ipv6_address(): def test_is_ipv6_address() -> None:
"""Test if strings are IPv6 addresses.""" """Test if strings are IPv6 addresses."""
assert network_util.is_ipv6_address("::1") is True assert network_util.is_ipv6_address("::1") is True
assert network_util.is_ipv6_address("8.8.8.8") is False assert network_util.is_ipv6_address("8.8.8.8") is False
assert network_util.is_ipv6_address("8.8.8.8") is False assert network_util.is_ipv6_address("8.8.8.8") is False
def test_is_valid_host(): def test_is_valid_host() -> None:
"""Test if strings are IPv6 addresses.""" """Test if strings are IPv6 addresses."""
assert network_util.is_host_valid("::1") assert network_util.is_host_valid("::1")
assert network_util.is_host_valid("::ffff:127.0.0.0") assert network_util.is_host_valid("::ffff:127.0.0.0")
@ -104,7 +104,7 @@ def test_is_valid_host():
assert not network_util.is_host_valid("verydeepdomain." * 18) assert not network_util.is_host_valid("verydeepdomain." * 18)
def test_normalize_url(): def test_normalize_url() -> None:
"""Test the normalizing of URLs.""" """Test the normalizing of URLs."""
assert network_util.normalize_url("http://example.com") == "http://example.com" assert network_util.normalize_url("http://example.com") == "http://example.com"
assert network_util.normalize_url("https://example.com") == "https://example.com" assert network_util.normalize_url("https://example.com") == "https://example.com"

View file

@ -237,7 +237,7 @@ async def test_async_get_user_site(mock_env_copy):
assert ret == os.path.join(deps_dir, "lib_dir") assert ret == os.path.join(deps_dir, "lib_dir")
def test_check_package_global(): def test_check_package_global() -> None:
"""Test for an installed package.""" """Test for an installed package."""
first_package = list(pkg_resources.working_set)[0] first_package = list(pkg_resources.working_set)[0]
installed_package = first_package.project_name installed_package = first_package.project_name
@ -250,12 +250,12 @@ def test_check_package_global():
assert not package.is_installed(f"{installed_package}<{installed_version}") assert not package.is_installed(f"{installed_package}<{installed_version}")
def test_check_package_zip(): def test_check_package_zip() -> None:
"""Test for an installed zip package.""" """Test for an installed zip package."""
assert not package.is_installed(TEST_ZIP_REQ) assert not package.is_installed(TEST_ZIP_REQ)
def test_get_distribution_falls_back_to_version(): def test_get_distribution_falls_back_to_version() -> None:
"""Test for get_distribution failing and fallback to version.""" """Test for get_distribution failing and fallback to version."""
first_package = list(pkg_resources.working_set)[0] first_package = list(pkg_resources.working_set)[0]
installed_package = first_package.project_name installed_package = first_package.project_name
@ -272,7 +272,7 @@ def test_get_distribution_falls_back_to_version():
assert not package.is_installed(f"{installed_package}<{installed_version}") assert not package.is_installed(f"{installed_package}<{installed_version}")
def test_check_package_previous_failed_install(): def test_check_package_previous_failed_install() -> None:
"""Test for when a previously install package failed and left cruft behind.""" """Test for when a previously install package failed and left cruft behind."""
first_package = list(pkg_resources.working_set)[0] first_package = list(pkg_resources.working_set)[0]
installed_package = first_package.project_name installed_package = first_package.project_name

View file

@ -15,7 +15,7 @@ def test_raise_deprecation_warning(caplog: pytest.LogCaptureFixture) -> None:
assert "use unit_conversion.PressureConverter instead" in caplog.text assert "use unit_conversion.PressureConverter instead" in caplog.text
def test_convert_same_unit(): def test_convert_same_unit() -> None:
"""Test conversion from any unit to same unit.""" """Test conversion from any unit to same unit."""
assert pressure_util.convert(2, UnitOfPressure.PA, UnitOfPressure.PA) == 2 assert pressure_util.convert(2, UnitOfPressure.PA, UnitOfPressure.PA) == 2
assert pressure_util.convert(3, UnitOfPressure.HPA, UnitOfPressure.HPA) == 3 assert pressure_util.convert(3, UnitOfPressure.HPA, UnitOfPressure.HPA) == 3
@ -26,7 +26,7 @@ def test_convert_same_unit():
assert pressure_util.convert(8, UnitOfPressure.MMHG, UnitOfPressure.MMHG) == 8 assert pressure_util.convert(8, UnitOfPressure.MMHG, UnitOfPressure.MMHG) == 8
def test_convert_invalid_unit(): def test_convert_invalid_unit() -> None:
"""Test exception is thrown for invalid units.""" """Test exception is thrown for invalid units."""
with pytest.raises(HomeAssistantError, match="is not a recognized .* unit"): with pytest.raises(HomeAssistantError, match="is not a recognized .* unit"):
pressure_util.convert(5, INVALID_SYMBOL, VALID_SYMBOL) pressure_util.convert(5, INVALID_SYMBOL, VALID_SYMBOL)
@ -35,13 +35,13 @@ def test_convert_invalid_unit():
pressure_util.convert(5, VALID_SYMBOL, INVALID_SYMBOL) pressure_util.convert(5, VALID_SYMBOL, INVALID_SYMBOL)
def test_convert_nonnumeric_value(): def test_convert_nonnumeric_value() -> None:
"""Test exception is thrown for nonnumeric type.""" """Test exception is thrown for nonnumeric type."""
with pytest.raises(TypeError): with pytest.raises(TypeError):
pressure_util.convert("a", UnitOfPressure.HPA, UnitOfPressure.INHG) pressure_util.convert("a", UnitOfPressure.HPA, UnitOfPressure.INHG)
def test_convert_from_hpascals(): def test_convert_from_hpascals() -> None:
"""Test conversion from hPA to other units.""" """Test conversion from hPA to other units."""
hpascals = 1000 hpascals = 1000
assert pressure_util.convert( assert pressure_util.convert(
@ -64,7 +64,7 @@ def test_convert_from_hpascals():
) == pytest.approx(100) ) == pytest.approx(100)
def test_convert_from_kpascals(): def test_convert_from_kpascals() -> None:
"""Test conversion from hPA to other units.""" """Test conversion from hPA to other units."""
kpascals = 100 kpascals = 100
assert pressure_util.convert( assert pressure_util.convert(
@ -87,7 +87,7 @@ def test_convert_from_kpascals():
) == pytest.approx(100) ) == pytest.approx(100)
def test_convert_from_inhg(): def test_convert_from_inhg() -> None:
"""Test conversion from inHg to other units.""" """Test conversion from inHg to other units."""
inhg = 30 inhg = 30
assert pressure_util.convert( assert pressure_util.convert(
@ -113,7 +113,7 @@ def test_convert_from_inhg():
) == pytest.approx(762) ) == pytest.approx(762)
def test_convert_from_mmhg(): def test_convert_from_mmhg() -> None:
"""Test conversion from mmHg to other units.""" """Test conversion from mmHg to other units."""
inhg = 30 inhg = 30
assert pressure_util.convert( assert pressure_util.convert(

View file

@ -6,7 +6,7 @@ import pytest
from homeassistant.util.read_only_dict import ReadOnlyDict from homeassistant.util.read_only_dict import ReadOnlyDict
def test_read_only_dict(): def test_read_only_dict() -> None:
"""Test read only dictionary.""" """Test read only dictionary."""
data = ReadOnlyDict({"hello": "world"}) data = ReadOnlyDict({"hello": "world"})

View file

@ -20,7 +20,7 @@ def test_raise_deprecation_warning(caplog: pytest.LogCaptureFixture) -> None:
assert "use unit_conversion.SpeedConverter instead" in caplog.text assert "use unit_conversion.SpeedConverter instead" in caplog.text
def test_convert_same_unit(): def test_convert_same_unit() -> None:
"""Test conversion from any unit to same unit.""" """Test conversion from any unit to same unit."""
assert speed_util.convert(2, SPEED_INCHES_PER_DAY, SPEED_INCHES_PER_DAY) == 2 assert speed_util.convert(2, SPEED_INCHES_PER_DAY, SPEED_INCHES_PER_DAY) == 2
assert speed_util.convert(3, SPEED_INCHES_PER_HOUR, SPEED_INCHES_PER_HOUR) == 3 assert speed_util.convert(3, SPEED_INCHES_PER_HOUR, SPEED_INCHES_PER_HOUR) == 3
@ -45,7 +45,7 @@ def test_convert_same_unit():
) )
def test_convert_invalid_unit(): def test_convert_invalid_unit() -> None:
"""Test exception is thrown for invalid units.""" """Test exception is thrown for invalid units."""
with pytest.raises(HomeAssistantError, match="is not a recognized .* unit"): with pytest.raises(HomeAssistantError, match="is not a recognized .* unit"):
speed_util.convert(5, INVALID_SYMBOL, VALID_SYMBOL) speed_util.convert(5, INVALID_SYMBOL, VALID_SYMBOL)
@ -54,7 +54,7 @@ def test_convert_invalid_unit():
speed_util.convert(5, VALID_SYMBOL, INVALID_SYMBOL) speed_util.convert(5, VALID_SYMBOL, INVALID_SYMBOL)
def test_convert_nonnumeric_value(): def test_convert_nonnumeric_value() -> None:
"""Test exception is thrown for nonnumeric type.""" """Test exception is thrown for nonnumeric type."""
with pytest.raises(TypeError): with pytest.raises(TypeError):
speed_util.convert( speed_util.convert(

View file

@ -32,14 +32,14 @@ def test_deprecated_functions(
assert convert(value) == expected assert convert(value) == expected
def test_convert_same_unit(): def test_convert_same_unit() -> None:
"""Test conversion from any unit to same unit.""" """Test conversion from any unit to same unit."""
assert temperature_util.convert(2, TEMP_CELSIUS, TEMP_CELSIUS) == 2 assert temperature_util.convert(2, TEMP_CELSIUS, TEMP_CELSIUS) == 2
assert temperature_util.convert(3, TEMP_FAHRENHEIT, TEMP_FAHRENHEIT) == 3 assert temperature_util.convert(3, TEMP_FAHRENHEIT, TEMP_FAHRENHEIT) == 3
assert temperature_util.convert(4, TEMP_KELVIN, TEMP_KELVIN) == 4 assert temperature_util.convert(4, TEMP_KELVIN, TEMP_KELVIN) == 4
def test_convert_invalid_unit(): def test_convert_invalid_unit() -> None:
"""Test exception is thrown for invalid units.""" """Test exception is thrown for invalid units."""
with pytest.raises(HomeAssistantError, match="is not a recognized .* unit"): with pytest.raises(HomeAssistantError, match="is not a recognized .* unit"):
temperature_util.convert(5, INVALID_SYMBOL, VALID_SYMBOL) temperature_util.convert(5, INVALID_SYMBOL, VALID_SYMBOL)
@ -48,13 +48,13 @@ def test_convert_invalid_unit():
temperature_util.convert(5, VALID_SYMBOL, INVALID_SYMBOL) temperature_util.convert(5, VALID_SYMBOL, INVALID_SYMBOL)
def test_convert_nonnumeric_value(): def test_convert_nonnumeric_value() -> None:
"""Test exception is thrown for nonnumeric type.""" """Test exception is thrown for nonnumeric type."""
with pytest.raises(TypeError): with pytest.raises(TypeError):
temperature_util.convert("a", TEMP_CELSIUS, TEMP_FAHRENHEIT) temperature_util.convert("a", TEMP_CELSIUS, TEMP_FAHRENHEIT)
def test_convert_from_celsius(): def test_convert_from_celsius() -> None:
"""Test conversion from C to other units.""" """Test conversion from C to other units."""
celsius = 100 celsius = 100
assert temperature_util.convert( assert temperature_util.convert(
@ -72,7 +72,7 @@ def test_convert_from_celsius():
) == pytest.approx(100) ) == pytest.approx(100)
def test_convert_from_fahrenheit(): def test_convert_from_fahrenheit() -> None:
"""Test conversion from F to other units.""" """Test conversion from F to other units."""
fahrenheit = 100 fahrenheit = 100
assert temperature_util.convert( assert temperature_util.convert(
@ -90,7 +90,7 @@ def test_convert_from_fahrenheit():
) == pytest.approx(55.55555555555556) ) == pytest.approx(55.55555555555556)
def test_convert_from_kelvin(): def test_convert_from_kelvin() -> None:
"""Test conversion from K to other units.""" """Test conversion from K to other units."""
kelvin = 100 kelvin = 100
assert temperature_util.convert(kelvin, TEMP_KELVIN, TEMP_CELSIUS) == pytest.approx( assert temperature_util.convert(kelvin, TEMP_KELVIN, TEMP_CELSIUS) == pytest.approx(

View file

@ -35,7 +35,7 @@ SYSTEM_NAME = "TEST"
INVALID_UNIT = "INVALID" INVALID_UNIT = "INVALID"
def test_invalid_units(): def test_invalid_units() -> None:
"""Test errors are raised when invalid units are passed in.""" """Test errors are raised when invalid units are passed in."""
with pytest.raises(ValueError): with pytest.raises(ValueError):
UnitSystem( UnitSystem(
@ -129,7 +129,7 @@ def test_invalid_units():
) )
def test_invalid_value(): def test_invalid_value() -> None:
"""Test no conversion happens if value is non-numeric.""" """Test no conversion happens if value is non-numeric."""
with pytest.raises(TypeError): with pytest.raises(TypeError):
METRIC_SYSTEM.length("25a", UnitOfLength.KILOMETERS) METRIC_SYSTEM.length("25a", UnitOfLength.KILOMETERS)
@ -145,7 +145,7 @@ def test_invalid_value():
METRIC_SYSTEM.accumulated_precipitation("50mm", UnitOfLength.MILLIMETERS) METRIC_SYSTEM.accumulated_precipitation("50mm", UnitOfLength.MILLIMETERS)
def test_as_dict(): def test_as_dict() -> None:
"""Test that the as_dict() method returns the expected dictionary.""" """Test that the as_dict() method returns the expected dictionary."""
expected = { expected = {
LENGTH: UnitOfLength.KILOMETERS, LENGTH: UnitOfLength.KILOMETERS,
@ -160,18 +160,18 @@ def test_as_dict():
assert expected == METRIC_SYSTEM.as_dict() assert expected == METRIC_SYSTEM.as_dict()
def test_temperature_same_unit(): def test_temperature_same_unit() -> None:
"""Test no conversion happens if to unit is same as from unit.""" """Test no conversion happens if to unit is same as from unit."""
assert METRIC_SYSTEM.temperature(5, METRIC_SYSTEM.temperature_unit) == 5 assert METRIC_SYSTEM.temperature(5, METRIC_SYSTEM.temperature_unit) == 5
def test_temperature_unknown_unit(): def test_temperature_unknown_unit() -> None:
"""Test no conversion happens if unknown unit.""" """Test no conversion happens if unknown unit."""
with pytest.raises(HomeAssistantError, match="is not a recognized .* unit"): with pytest.raises(HomeAssistantError, match="is not a recognized .* unit"):
METRIC_SYSTEM.temperature(5, "abc") METRIC_SYSTEM.temperature(5, "abc")
def test_temperature_to_metric(): def test_temperature_to_metric() -> None:
"""Test temperature conversion to metric system.""" """Test temperature conversion to metric system."""
assert METRIC_SYSTEM.temperature(25, METRIC_SYSTEM.temperature_unit) == 25 assert METRIC_SYSTEM.temperature(25, METRIC_SYSTEM.temperature_unit) == 25
assert ( assert (
@ -180,19 +180,19 @@ def test_temperature_to_metric():
) )
def test_temperature_to_imperial(): def test_temperature_to_imperial() -> None:
"""Test temperature conversion to imperial system.""" """Test temperature conversion to imperial system."""
assert IMPERIAL_SYSTEM.temperature(77, IMPERIAL_SYSTEM.temperature_unit) == 77 assert IMPERIAL_SYSTEM.temperature(77, IMPERIAL_SYSTEM.temperature_unit) == 77
assert IMPERIAL_SYSTEM.temperature(25, METRIC_SYSTEM.temperature_unit) == 77 assert IMPERIAL_SYSTEM.temperature(25, METRIC_SYSTEM.temperature_unit) == 77
def test_length_unknown_unit(): def test_length_unknown_unit() -> None:
"""Test length conversion with unknown from unit.""" """Test length conversion with unknown from unit."""
with pytest.raises(HomeAssistantError, match="is not a recognized .* unit"): with pytest.raises(HomeAssistantError, match="is not a recognized .* unit"):
METRIC_SYSTEM.length(5, "fr") METRIC_SYSTEM.length(5, "fr")
def test_length_to_metric(): def test_length_to_metric() -> None:
"""Test length conversion to metric system.""" """Test length conversion to metric system."""
assert METRIC_SYSTEM.length(100, METRIC_SYSTEM.length_unit) == 100 assert METRIC_SYSTEM.length(100, METRIC_SYSTEM.length_unit) == 100
assert METRIC_SYSTEM.length(5, IMPERIAL_SYSTEM.length_unit) == pytest.approx( assert METRIC_SYSTEM.length(5, IMPERIAL_SYSTEM.length_unit) == pytest.approx(
@ -200,7 +200,7 @@ def test_length_to_metric():
) )
def test_length_to_imperial(): def test_length_to_imperial() -> None:
"""Test length conversion to imperial system.""" """Test length conversion to imperial system."""
assert IMPERIAL_SYSTEM.length(100, IMPERIAL_SYSTEM.length_unit) == 100 assert IMPERIAL_SYSTEM.length(100, IMPERIAL_SYSTEM.length_unit) == 100
assert IMPERIAL_SYSTEM.length(5, METRIC_SYSTEM.length_unit) == pytest.approx( assert IMPERIAL_SYSTEM.length(5, METRIC_SYSTEM.length_unit) == pytest.approx(
@ -208,13 +208,13 @@ def test_length_to_imperial():
) )
def test_wind_speed_unknown_unit(): def test_wind_speed_unknown_unit() -> None:
"""Test wind_speed conversion with unknown from unit.""" """Test wind_speed conversion with unknown from unit."""
with pytest.raises(HomeAssistantError, match="is not a recognized .* unit"): with pytest.raises(HomeAssistantError, match="is not a recognized .* unit"):
METRIC_SYSTEM.length(5, "turtles") METRIC_SYSTEM.length(5, "turtles")
def test_wind_speed_to_metric(): def test_wind_speed_to_metric() -> None:
"""Test length conversion to metric system.""" """Test length conversion to metric system."""
assert METRIC_SYSTEM.wind_speed(100, METRIC_SYSTEM.wind_speed_unit) == 100 assert METRIC_SYSTEM.wind_speed(100, METRIC_SYSTEM.wind_speed_unit) == 100
# 1 m/s is about 2.237 mph # 1 m/s is about 2.237 mph
@ -223,7 +223,7 @@ def test_wind_speed_to_metric():
) == pytest.approx(1000, abs=0.1) ) == pytest.approx(1000, abs=0.1)
def test_wind_speed_to_imperial(): def test_wind_speed_to_imperial() -> None:
"""Test wind_speed conversion to imperial system.""" """Test wind_speed conversion to imperial system."""
assert IMPERIAL_SYSTEM.wind_speed(100, IMPERIAL_SYSTEM.wind_speed_unit) == 100 assert IMPERIAL_SYSTEM.wind_speed(100, IMPERIAL_SYSTEM.wind_speed_unit) == 100
assert IMPERIAL_SYSTEM.wind_speed( assert IMPERIAL_SYSTEM.wind_speed(
@ -231,18 +231,18 @@ def test_wind_speed_to_imperial():
) == pytest.approx(2237, abs=0.1) ) == pytest.approx(2237, abs=0.1)
def test_pressure_same_unit(): def test_pressure_same_unit() -> None:
"""Test no conversion happens if to unit is same as from unit.""" """Test no conversion happens if to unit is same as from unit."""
assert METRIC_SYSTEM.pressure(5, METRIC_SYSTEM.pressure_unit) == 5 assert METRIC_SYSTEM.pressure(5, METRIC_SYSTEM.pressure_unit) == 5
def test_pressure_unknown_unit(): def test_pressure_unknown_unit() -> None:
"""Test no conversion happens if unknown unit.""" """Test no conversion happens if unknown unit."""
with pytest.raises(HomeAssistantError, match="is not a recognized .* unit"): with pytest.raises(HomeAssistantError, match="is not a recognized .* unit"):
METRIC_SYSTEM.pressure(5, "K") METRIC_SYSTEM.pressure(5, "K")
def test_pressure_to_metric(): def test_pressure_to_metric() -> None:
"""Test pressure conversion to metric system.""" """Test pressure conversion to metric system."""
assert METRIC_SYSTEM.pressure(25, METRIC_SYSTEM.pressure_unit) == 25 assert METRIC_SYSTEM.pressure(25, METRIC_SYSTEM.pressure_unit) == 25
assert METRIC_SYSTEM.pressure(14.7, IMPERIAL_SYSTEM.pressure_unit) == pytest.approx( assert METRIC_SYSTEM.pressure(14.7, IMPERIAL_SYSTEM.pressure_unit) == pytest.approx(
@ -250,7 +250,7 @@ def test_pressure_to_metric():
) )
def test_pressure_to_imperial(): def test_pressure_to_imperial() -> None:
"""Test pressure conversion to imperial system.""" """Test pressure conversion to imperial system."""
assert IMPERIAL_SYSTEM.pressure(77, IMPERIAL_SYSTEM.pressure_unit) == 77 assert IMPERIAL_SYSTEM.pressure(77, IMPERIAL_SYSTEM.pressure_unit) == 77
assert IMPERIAL_SYSTEM.pressure( assert IMPERIAL_SYSTEM.pressure(
@ -258,7 +258,7 @@ def test_pressure_to_imperial():
) == pytest.approx(14.7, abs=1e-4) ) == pytest.approx(14.7, abs=1e-4)
def test_accumulated_precipitation_same_unit(): def test_accumulated_precipitation_same_unit() -> None:
"""Test no conversion happens if to unit is same as from unit.""" """Test no conversion happens if to unit is same as from unit."""
assert ( assert (
METRIC_SYSTEM.accumulated_precipitation( METRIC_SYSTEM.accumulated_precipitation(
@ -268,13 +268,13 @@ def test_accumulated_precipitation_same_unit():
) )
def test_accumulated_precipitation_unknown_unit(): def test_accumulated_precipitation_unknown_unit() -> None:
"""Test no conversion happens if unknown unit.""" """Test no conversion happens if unknown unit."""
with pytest.raises(HomeAssistantError, match="is not a recognized .* unit"): with pytest.raises(HomeAssistantError, match="is not a recognized .* unit"):
METRIC_SYSTEM.accumulated_precipitation(5, "K") METRIC_SYSTEM.accumulated_precipitation(5, "K")
def test_accumulated_precipitation_to_metric(): def test_accumulated_precipitation_to_metric() -> None:
"""Test accumulated_precipitation conversion to metric system.""" """Test accumulated_precipitation conversion to metric system."""
assert ( assert (
METRIC_SYSTEM.accumulated_precipitation( METRIC_SYSTEM.accumulated_precipitation(
@ -287,7 +287,7 @@ def test_accumulated_precipitation_to_metric():
) == pytest.approx(254, abs=1e-4) ) == pytest.approx(254, abs=1e-4)
def test_accumulated_precipitation_to_imperial(): def test_accumulated_precipitation_to_imperial() -> None:
"""Test accumulated_precipitation conversion to imperial system.""" """Test accumulated_precipitation conversion to imperial system."""
assert ( assert (
IMPERIAL_SYSTEM.accumulated_precipitation( IMPERIAL_SYSTEM.accumulated_precipitation(
@ -300,7 +300,7 @@ def test_accumulated_precipitation_to_imperial():
) == pytest.approx(10, abs=1e-4) ) == pytest.approx(10, abs=1e-4)
def test_properties(): def test_properties() -> None:
"""Test the unit properties are returned as expected.""" """Test the unit properties are returned as expected."""
assert METRIC_SYSTEM.length_unit == UnitOfLength.KILOMETERS assert METRIC_SYSTEM.length_unit == UnitOfLength.KILOMETERS
assert METRIC_SYSTEM.wind_speed_unit == UnitOfSpeed.METERS_PER_SECOND assert METRIC_SYSTEM.wind_speed_unit == UnitOfSpeed.METERS_PER_SECOND

View file

@ -40,7 +40,7 @@ def test_deprecated_functions(
assert convert(value) == expected assert convert(value) == expected
def test_convert_same_unit(): def test_convert_same_unit() -> None:
"""Test conversion from any unit to same unit.""" """Test conversion from any unit to same unit."""
assert volume_util.convert(2, VOLUME_LITERS, VOLUME_LITERS) == 2 assert volume_util.convert(2, VOLUME_LITERS, VOLUME_LITERS) == 2
assert volume_util.convert(3, VOLUME_MILLILITERS, VOLUME_MILLILITERS) == 3 assert volume_util.convert(3, VOLUME_MILLILITERS, VOLUME_MILLILITERS) == 3
@ -48,7 +48,7 @@ def test_convert_same_unit():
assert volume_util.convert(5, VOLUME_FLUID_OUNCE, VOLUME_FLUID_OUNCE) == 5 assert volume_util.convert(5, VOLUME_FLUID_OUNCE, VOLUME_FLUID_OUNCE) == 5
def test_convert_invalid_unit(): def test_convert_invalid_unit() -> None:
"""Test exception is thrown for invalid units.""" """Test exception is thrown for invalid units."""
with pytest.raises(HomeAssistantError, match="is not a recognized .* unit"): with pytest.raises(HomeAssistantError, match="is not a recognized .* unit"):
volume_util.convert(5, INVALID_SYMBOL, VALID_SYMBOL) volume_util.convert(5, INVALID_SYMBOL, VALID_SYMBOL)
@ -57,13 +57,13 @@ def test_convert_invalid_unit():
volume_util.convert(5, VALID_SYMBOL, INVALID_SYMBOL) volume_util.convert(5, VALID_SYMBOL, INVALID_SYMBOL)
def test_convert_nonnumeric_value(): def test_convert_nonnumeric_value() -> None:
"""Test exception is thrown for nonnumeric type.""" """Test exception is thrown for nonnumeric type."""
with pytest.raises(TypeError): with pytest.raises(TypeError):
volume_util.convert("a", VOLUME_GALLONS, VOLUME_LITERS) volume_util.convert("a", VOLUME_GALLONS, VOLUME_LITERS)
def test_convert_from_liters(): def test_convert_from_liters() -> None:
"""Test conversion from liters to other units.""" """Test conversion from liters to other units."""
liters = 5 liters = 5
assert volume_util.convert(liters, VOLUME_LITERS, VOLUME_GALLONS) == pytest.approx( assert volume_util.convert(liters, VOLUME_LITERS, VOLUME_GALLONS) == pytest.approx(
@ -71,7 +71,7 @@ def test_convert_from_liters():
) )
def test_convert_from_gallons(): def test_convert_from_gallons() -> None:
"""Test conversion from gallons to other units.""" """Test conversion from gallons to other units."""
gallons = 5 gallons = 5
assert volume_util.convert(gallons, VOLUME_GALLONS, VOLUME_LITERS) == pytest.approx( assert volume_util.convert(gallons, VOLUME_GALLONS, VOLUME_LITERS) == pytest.approx(
@ -79,7 +79,7 @@ def test_convert_from_gallons():
) )
def test_convert_from_cubic_meters(): def test_convert_from_cubic_meters() -> None:
"""Test conversion from cubic meter to other units.""" """Test conversion from cubic meter to other units."""
cubic_meters = 5 cubic_meters = 5
assert volume_util.convert( assert volume_util.convert(
@ -87,7 +87,7 @@ def test_convert_from_cubic_meters():
) == pytest.approx(176.5733335) ) == pytest.approx(176.5733335)
def test_convert_from_cubic_feet(): def test_convert_from_cubic_feet() -> None:
"""Test conversion from cubic feet to cubic meters to other units.""" """Test conversion from cubic feet to cubic meters to other units."""
cubic_feets = 500 cubic_feets = 500
assert volume_util.convert( assert volume_util.convert(

View file

@ -67,7 +67,7 @@ def test_simple_dict(try_both_loaders):
assert doc["key"] == "value" assert doc["key"] == "value"
def test_unhashable_key(): def test_unhashable_key() -> None:
"""Test an unhashable key.""" """Test an unhashable key."""
files = {YAML_CONFIG_FILE: "message:\n {{ states.state }}"} files = {YAML_CONFIG_FILE: "message:\n {{ states.state }}"}
with pytest.raises(HomeAssistantError), patch_yaml_files(files): with pytest.raises(HomeAssistantError), patch_yaml_files(files):
@ -477,7 +477,7 @@ def test_no_recursive_secrets(caplog, try_both_loaders):
assert e.value.args == ("Secrets not supported in this YAML file",) assert e.value.args == ("Secrets not supported in this YAML file",)
def test_input_class(): def test_input_class() -> None:
"""Test input class.""" """Test input class."""
input = yaml_loader.Input("hello") input = yaml_loader.Input("hello")
input2 = yaml_loader.Input("hello") input2 = yaml_loader.Input("hello")
@ -498,7 +498,7 @@ def test_input(try_both_loaders, try_both_dumpers):
not os.environ.get("HASS_CI"), not os.environ.get("HASS_CI"),
reason="This test validates that the CI has the C loader available", reason="This test validates that the CI has the C loader available",
) )
def test_c_loader_is_available_in_ci(): def test_c_loader_is_available_in_ci() -> None:
"""Verify we are testing the C loader in the CI.""" """Verify we are testing the C loader in the CI."""
assert yaml.loader.HAS_C_LOADER is True assert yaml.loader.HAS_C_LOADER is True

View file

@ -9,7 +9,7 @@ from homeassistant.util.yaml import (
) )
def test_extract_inputs(): def test_extract_inputs() -> None:
"""Test extracting inputs from data.""" """Test extracting inputs from data."""
assert extract_inputs(Input("hello")) == {"hello"} assert extract_inputs(Input("hello")) == {"hello"}
assert extract_inputs({"info": [1, Input("hello"), 2, Input("world")]}) == { assert extract_inputs({"info": [1, Input("hello"), 2, Input("world")]}) == {
@ -18,7 +18,7 @@ def test_extract_inputs():
} }
def test_substitute(): def test_substitute() -> None:
"""Test we can substitute.""" """Test we can substitute."""
assert substitute(Input("hello"), {"hello": 5}) == 5 assert substitute(Input("hello"), {"hello": 5}) == 5