Add type hints to integration tests (t-z) (#87707)

This commit is contained in:
epenet 2023-02-08 19:10:53 +01:00 committed by GitHub
parent f75ac17554
commit 278050a73f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
110 changed files with 961 additions and 606 deletions

View File

@ -1,11 +1,11 @@
"""The sensor tests for the tado platform.""" """The sensor tests for the tado platform."""
from homeassistant.const import STATE_OFF, STATE_ON from homeassistant.const import STATE_OFF, STATE_ON
from homeassistant.core import HomeAssistant
from .util import async_init_integration from .util import async_init_integration
async def test_air_con_create_binary_sensors(hass): async def test_air_con_create_binary_sensors(hass: HomeAssistant) -> None:
"""Test creation of aircon sensors.""" """Test creation of aircon sensors."""
await async_init_integration(hass) await async_init_integration(hass)
@ -23,7 +23,7 @@ async def test_air_con_create_binary_sensors(hass):
assert state.state == STATE_OFF assert state.state == STATE_OFF
async def test_heater_create_binary_sensors(hass): async def test_heater_create_binary_sensors(hass: HomeAssistant) -> None:
"""Test creation of heater sensors.""" """Test creation of heater sensors."""
await async_init_integration(hass) await async_init_integration(hass)
@ -44,7 +44,7 @@ async def test_heater_create_binary_sensors(hass):
assert state.state == STATE_OFF assert state.state == STATE_OFF
async def test_water_heater_create_binary_sensors(hass): async def test_water_heater_create_binary_sensors(hass: HomeAssistant) -> None:
"""Test creation of water heater sensors.""" """Test creation of water heater sensors."""
await async_init_integration(hass) await async_init_integration(hass)
@ -59,7 +59,7 @@ async def test_water_heater_create_binary_sensors(hass):
assert state.state == STATE_ON assert state.state == STATE_ON
async def test_home_create_binary_sensors(hass): async def test_home_create_binary_sensors(hass: HomeAssistant) -> None:
"""Test creation of home binary sensors.""" """Test creation of home binary sensors."""
await async_init_integration(hass) await async_init_integration(hass)

View File

@ -1,9 +1,10 @@
"""The sensor tests for the tado platform.""" """The sensor tests for the tado platform."""
from homeassistant.core import HomeAssistant
from .util import async_init_integration from .util import async_init_integration
async def test_air_con(hass): async def test_air_con(hass: HomeAssistant) -> None:
"""Test creation of aircon climate.""" """Test creation of aircon climate."""
await async_init_integration(hass) await async_init_integration(hass)
@ -32,7 +33,7 @@ async def test_air_con(hass):
assert all(item in state.attributes.items() for item in expected_attributes.items()) assert all(item in state.attributes.items() for item in expected_attributes.items())
async def test_heater(hass): async def test_heater(hass: HomeAssistant) -> None:
"""Test creation of heater climate.""" """Test creation of heater climate."""
await async_init_integration(hass) await async_init_integration(hass)
@ -59,7 +60,7 @@ async def test_heater(hass):
assert all(item in state.attributes.items() for item in expected_attributes.items()) assert all(item in state.attributes.items() for item in expected_attributes.items())
async def test_smartac_with_swing(hass): async def test_smartac_with_swing(hass: HomeAssistant) -> None:
"""Test creation of smart ac with swing climate.""" """Test creation of smart ac with swing climate."""
await async_init_integration(hass) await async_init_integration(hass)

View File

@ -8,6 +8,7 @@ from homeassistant import config_entries
from homeassistant.components import zeroconf from homeassistant.components import zeroconf
from homeassistant.components.tado.const import DOMAIN from homeassistant.components.tado.const import DOMAIN
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
from homeassistant.core import HomeAssistant
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
@ -21,7 +22,7 @@ def _get_mock_tado_api(getMe=None):
return mock_tado return mock_tado
async def test_form(hass): async def test_form(hass: HomeAssistant) -> None:
"""Test we can setup though the user path.""" """Test we can setup though the user path."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
@ -54,7 +55,7 @@ async def test_form(hass):
assert len(mock_setup_entry.mock_calls) == 1 assert len(mock_setup_entry.mock_calls) == 1
async def test_form_invalid_auth(hass): async def test_form_invalid_auth(hass: HomeAssistant) -> None:
"""Test we handle invalid auth.""" """Test we handle invalid auth."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER} DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -77,7 +78,7 @@ async def test_form_invalid_auth(hass):
assert result2["errors"] == {"base": "invalid_auth"} assert result2["errors"] == {"base": "invalid_auth"}
async def test_form_cannot_connect(hass): async def test_form_cannot_connect(hass: HomeAssistant) -> None:
"""Test we handle cannot connect error.""" """Test we handle cannot connect error."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER} DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -100,7 +101,7 @@ async def test_form_cannot_connect(hass):
assert result2["errors"] == {"base": "cannot_connect"} assert result2["errors"] == {"base": "cannot_connect"}
async def test_no_homes(hass): async def test_no_homes(hass: HomeAssistant) -> None:
"""Test we handle no homes error.""" """Test we handle no homes error."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER} DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -121,7 +122,7 @@ async def test_no_homes(hass):
assert result2["errors"] == {"base": "no_homes"} assert result2["errors"] == {"base": "no_homes"}
async def test_form_homekit(hass): async def test_form_homekit(hass: HomeAssistant) -> None:
"""Test that we abort from homekit if tado is already setup.""" """Test that we abort from homekit if tado is already setup."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(

View File

@ -1,9 +1,10 @@
"""The sensor tests for the tado platform.""" """The sensor tests for the tado platform."""
from homeassistant.core import HomeAssistant
from .util import async_init_integration from .util import async_init_integration
async def test_air_con_create_sensors(hass): async def test_air_con_create_sensors(hass: HomeAssistant) -> None:
"""Test creation of aircon sensors.""" """Test creation of aircon sensors."""
await async_init_integration(hass) await async_init_integration(hass)
@ -21,7 +22,7 @@ async def test_air_con_create_sensors(hass):
assert state.state == "60.9" assert state.state == "60.9"
async def test_home_create_sensors(hass): async def test_home_create_sensors(hass: HomeAssistant) -> None:
"""Test creation of home sensors.""" """Test creation of home sensors."""
await async_init_integration(hass) await async_init_integration(hass)
@ -36,7 +37,7 @@ async def test_home_create_sensors(hass):
assert state.state == "fog" assert state.state == "fog"
async def test_heater_create_sensors(hass): async def test_heater_create_sensors(hass: HomeAssistant) -> None:
"""Test creation of heater sensors.""" """Test creation of heater sensors."""
await async_init_integration(hass) await async_init_integration(hass)
@ -51,7 +52,7 @@ async def test_heater_create_sensors(hass):
assert state.state == "45.2" assert state.state == "45.2"
async def test_water_heater_create_sensors(hass): async def test_water_heater_create_sensors(hass: HomeAssistant) -> None:
"""Test creation of water heater sensors.""" """Test creation of water heater sensors."""
await async_init_integration(hass) await async_init_integration(hass)

View File

@ -1,9 +1,10 @@
"""The sensor tests for the tado platform.""" """The sensor tests for the tado platform."""
from homeassistant.core import HomeAssistant
from .util import async_init_integration from .util import async_init_integration
async def test_water_heater_create_sensors(hass): async def test_water_heater_create_sensors(hass: HomeAssistant) -> None:
"""Test creation of water heater.""" """Test creation of water heater."""
await async_init_integration(hass) await async_init_integration(hass)

View File

@ -5,12 +5,13 @@ from homeassistant import config as hass_config
import homeassistant.components.notify as notify import homeassistant.components.notify as notify
from homeassistant.components.telegram import DOMAIN from homeassistant.components.telegram import DOMAIN
from homeassistant.const import SERVICE_RELOAD from homeassistant.const import SERVICE_RELOAD
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from tests.common import get_fixture_path from tests.common import get_fixture_path
async def test_reload_notify(hass): async def test_reload_notify(hass: HomeAssistant) -> None:
"""Verify we can reload the notify service.""" """Verify we can reload the notify service."""
with patch("homeassistant.components.telegram_bot.async_setup", return_value=True): with patch("homeassistant.components.telegram_bot.async_setup", return_value=True):

View File

@ -1,8 +1,9 @@
"""Test Telegram broadcast.""" """Test Telegram broadcast."""
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
async def test_setup(hass): async def test_setup(hass: HomeAssistant) -> None:
"""Test setting up Telegram broadcast.""" """Test setting up Telegram broadcast."""
assert await async_setup_component( assert await async_setup_component(
hass, hass,

View File

@ -15,6 +15,7 @@ from homeassistant.components.tellduslive import (
) )
from homeassistant.config_entries import SOURCE_DISCOVERY from homeassistant.config_entries import SOURCE_DISCOVERY
from homeassistant.const import CONF_HOST from homeassistant.const import CONF_HOST
from homeassistant.core import HomeAssistant
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
@ -56,7 +57,7 @@ def mock_tellduslive(supports_local_api, authorize):
yield Session, tellduslive_supports_local_api yield Session, tellduslive_supports_local_api
async def test_abort_if_already_setup(hass): async def test_abort_if_already_setup(hass: HomeAssistant) -> None:
"""Test we abort if TelldusLive is already setup.""" """Test we abort if TelldusLive is already setup."""
flow = init_config_flow(hass) flow = init_config_flow(hass)

View File

@ -15,7 +15,7 @@ from homeassistant.const import (
STATE_UNAVAILABLE, STATE_UNAVAILABLE,
STATE_UNKNOWN, STATE_UNKNOWN,
) )
from homeassistant.core import Context, CoreState, State from homeassistant.core import Context, CoreState, HomeAssistant, State
from homeassistant.helpers import entity_registry from homeassistant.helpers import entity_registry
from homeassistant.helpers.entity_component import async_update_entity from homeassistant.helpers.entity_component import async_update_entity
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
@ -699,7 +699,9 @@ async def test_invalid_availability_template_keeps_component_available(
assert "UndefinedError: 'x' is undefined" in caplog_setup_text assert "UndefinedError: 'x' is undefined" in caplog_setup_text
async def test_no_update_template_match_all(hass, caplog): async def test_no_update_template_match_all(
hass: HomeAssistant, caplog: pytest.LogCaptureFixture
) -> None:
"""Test that we do not update sensors that match on all.""" """Test that we do not update sensors that match on all."""
hass.state = CoreState.not_running hass.state = CoreState.not_running

View File

@ -12,6 +12,7 @@ from homeassistant.const import (
CONF_ICON, CONF_ICON,
STATE_UNKNOWN, STATE_UNKNOWN,
) )
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_registry import async_get from homeassistant.helpers.entity_registry import async_get
from tests.common import assert_setup_component from tests.common import assert_setup_component
@ -20,7 +21,7 @@ _TEST_BUTTON = "button.template_button"
_TEST_OPTIONS_BUTTON = "button.test" _TEST_OPTIONS_BUTTON = "button.test"
async def test_missing_optional_config(hass): async def test_missing_optional_config(hass: HomeAssistant) -> None:
"""Test: missing optional template is ok.""" """Test: missing optional template is ok."""
with assert_setup_component(1, "template"): with assert_setup_component(1, "template"):
assert await setup.async_setup_component( assert await setup.async_setup_component(
@ -42,7 +43,7 @@ async def test_missing_optional_config(hass):
_verify(hass, STATE_UNKNOWN) _verify(hass, STATE_UNKNOWN)
async def test_missing_required_keys(hass): async def test_missing_required_keys(hass: HomeAssistant) -> None:
"""Test: missing required fields will fail.""" """Test: missing required fields will fail."""
with assert_setup_component(0, "template"): with assert_setup_component(0, "template"):
assert await setup.async_setup_component( assert await setup.async_setup_component(
@ -124,7 +125,7 @@ async def test_all_optional_config(hass, calls):
assert er.async_get_entity_id("button", "template", "test-test") assert er.async_get_entity_id("button", "template", "test-test")
async def test_name_template(hass): async def test_name_template(hass: HomeAssistant) -> None:
"""Test: name template.""" """Test: name template."""
with assert_setup_component(1, "template"): with assert_setup_component(1, "template"):
assert await setup.async_setup_component( assert await setup.async_setup_component(
@ -154,7 +155,7 @@ async def test_name_template(hass):
) )
async def test_unique_id(hass): async def test_unique_id(hass: HomeAssistant) -> None:
"""Test: unique id is ok.""" """Test: unique id is ok."""
with assert_setup_component(1, "template"): with assert_setup_component(1, "template"):
assert await setup.async_setup_component( assert await setup.async_setup_component(

View File

@ -1,5 +1,4 @@
"""The tests for the Template number platform.""" """The tests for the Template number platform."""
from homeassistant import setup from homeassistant import setup
from homeassistant.components.input_number import ( from homeassistant.components.input_number import (
ATTR_VALUE as INPUT_NUMBER_ATTR_VALUE, ATTR_VALUE as INPUT_NUMBER_ATTR_VALUE,
@ -15,7 +14,7 @@ from homeassistant.components.number import (
SERVICE_SET_VALUE as NUMBER_SERVICE_SET_VALUE, SERVICE_SET_VALUE as NUMBER_SERVICE_SET_VALUE,
) )
from homeassistant.const import ATTR_ICON, CONF_ENTITY_ID, STATE_UNKNOWN from homeassistant.const import ATTR_ICON, CONF_ENTITY_ID, STATE_UNKNOWN
from homeassistant.core import Context from homeassistant.core import Context, HomeAssistant
from homeassistant.helpers.entity_registry import async_get from homeassistant.helpers.entity_registry import async_get
from tests.common import assert_setup_component, async_capture_events from tests.common import assert_setup_component, async_capture_events
@ -42,7 +41,7 @@ _VALUE_INPUT_NUMBER_CONFIG = {
} }
async def test_missing_optional_config(hass): async def test_missing_optional_config(hass: HomeAssistant) -> None:
"""Test: missing optional template is ok.""" """Test: missing optional template is ok."""
with assert_setup_component(1, "template"): with assert_setup_component(1, "template"):
assert await setup.async_setup_component( assert await setup.async_setup_component(
@ -66,7 +65,7 @@ async def test_missing_optional_config(hass):
_verify(hass, 4, 1, 0.0, 100.0) _verify(hass, 4, 1, 0.0, 100.0)
async def test_missing_required_keys(hass): async def test_missing_required_keys(hass: HomeAssistant) -> None:
"""Test: missing required fields will fail.""" """Test: missing required fields will fail."""
with assert_setup_component(0, "template"): with assert_setup_component(0, "template"):
assert await setup.async_setup_component( assert await setup.async_setup_component(
@ -101,7 +100,7 @@ async def test_missing_required_keys(hass):
assert hass.states.async_all("number") == [] assert hass.states.async_all("number") == []
async def test_all_optional_config(hass): async def test_all_optional_config(hass: HomeAssistant) -> None:
"""Test: including all optional templates is ok.""" """Test: including all optional templates is ok."""
with assert_setup_component(1, "template"): with assert_setup_component(1, "template"):
assert await setup.async_setup_component( assert await setup.async_setup_component(
@ -264,7 +263,7 @@ async def test_templates_with_entities(hass, calls):
assert calls[-1].data["value"] == 2 assert calls[-1].data["value"] == 2
async def test_trigger_number(hass): async def test_trigger_number(hass: HomeAssistant) -> None:
"""Test trigger based template number.""" """Test trigger based template number."""
events = async_capture_events(hass, "test_number_event") events = async_capture_events(hass, "test_number_event")
assert await setup.async_setup_component( assert await setup.async_setup_component(
@ -346,7 +345,7 @@ def _verify(
assert attributes.get(ATTR_MIN) == float(expected_minimum) assert attributes.get(ATTR_MIN) == float(expected_minimum)
async def test_icon_template(hass): async def test_icon_template(hass: HomeAssistant) -> None:
"""Test template numbers with icon templates.""" """Test template numbers with icon templates."""
with assert_setup_component(1, "input_number"): with assert_setup_component(1, "input_number"):
assert await setup.async_setup_component( assert await setup.async_setup_component(
@ -403,7 +402,7 @@ async def test_icon_template(hass):
assert state.attributes[ATTR_ICON] == "mdi:greater" assert state.attributes[ATTR_ICON] == "mdi:greater"
async def test_icon_template_with_trigger(hass): async def test_icon_template_with_trigger(hass: HomeAssistant) -> None:
"""Test template numbers with icon templates.""" """Test template numbers with icon templates."""
with assert_setup_component(1, "input_number"): with assert_setup_component(1, "input_number"):
assert await setup.async_setup_component( assert await setup.async_setup_component(

View File

@ -14,7 +14,7 @@ from homeassistant.components.select import (
SERVICE_SELECT_OPTION as SELECT_SERVICE_SELECT_OPTION, SERVICE_SELECT_OPTION as SELECT_SERVICE_SELECT_OPTION,
) )
from homeassistant.const import ATTR_ICON, CONF_ENTITY_ID, STATE_UNKNOWN from homeassistant.const import ATTR_ICON, CONF_ENTITY_ID, STATE_UNKNOWN
from homeassistant.core import Context from homeassistant.core import Context, HomeAssistant
from homeassistant.helpers.entity_registry import async_get from homeassistant.helpers.entity_registry import async_get
from tests.common import assert_setup_component, async_capture_events from tests.common import assert_setup_component, async_capture_events
@ -24,7 +24,7 @@ _TEST_SELECT = "select.template_select"
_OPTION_INPUT_SELECT = "input_select.option" _OPTION_INPUT_SELECT = "input_select.option"
async def test_missing_optional_config(hass): async def test_missing_optional_config(hass: HomeAssistant) -> None:
"""Test: missing optional template is ok.""" """Test: missing optional template is ok."""
with assert_setup_component(1, "template"): with assert_setup_component(1, "template"):
assert await setup.async_setup_component( assert await setup.async_setup_component(
@ -48,7 +48,7 @@ async def test_missing_optional_config(hass):
_verify(hass, "a", ["a", "b"]) _verify(hass, "a", ["a", "b"])
async def test_multiple_configs(hass): async def test_multiple_configs(hass: HomeAssistant) -> None:
"""Test: multiple select entities get created.""" """Test: multiple select entities get created."""
with assert_setup_component(1, "template"): with assert_setup_component(1, "template"):
assert await setup.async_setup_component( assert await setup.async_setup_component(
@ -80,7 +80,7 @@ async def test_multiple_configs(hass):
_verify(hass, "a", ["a", "b"], f"{_TEST_SELECT}_2") _verify(hass, "a", ["a", "b"], f"{_TEST_SELECT}_2")
async def test_missing_required_keys(hass): async def test_missing_required_keys(hass: HomeAssistant) -> None:
"""Test: missing required fields will fail.""" """Test: missing required fields will fail."""
with assert_setup_component(0, "template"): with assert_setup_component(0, "template"):
assert await setup.async_setup_component( assert await setup.async_setup_component(
@ -229,7 +229,7 @@ async def test_templates_with_entities(hass, calls):
assert calls[-1].data["option"] == "c" assert calls[-1].data["option"] == "c"
async def test_trigger_select(hass): async def test_trigger_select(hass: HomeAssistant) -> None:
"""Test trigger based template select.""" """Test trigger based template select."""
events = async_capture_events(hass, "test_number_event") events = async_capture_events(hass, "test_number_event")
assert await setup.async_setup_component( assert await setup.async_setup_component(
@ -294,7 +294,7 @@ def _verify(hass, expected_current_option, expected_options, entity_name=_TEST_S
assert attributes.get(SELECT_ATTR_OPTIONS) == expected_options assert attributes.get(SELECT_ATTR_OPTIONS) == expected_options
async def test_template_icon_with_entities(hass): async def test_template_icon_with_entities(hass: HomeAssistant) -> None:
"""Test templates with values from other entities.""" """Test templates with values from other entities."""
with assert_setup_component(1, "input_select"): with assert_setup_component(1, "input_select"):
assert await setup.async_setup_component( assert await setup.async_setup_component(
@ -357,7 +357,7 @@ async def test_template_icon_with_entities(hass):
assert state.attributes[ATTR_ICON] == "mdi:less" assert state.attributes[ATTR_ICON] == "mdi:less"
async def test_template_icon_with_trigger(hass): async def test_template_icon_with_trigger(hass: HomeAssistant) -> None:
"""Test trigger based template select.""" """Test trigger based template select."""
with assert_setup_component(1, "input_select"): with assert_setup_component(1, "input_select"):
assert await setup.async_setup_component( assert await setup.async_setup_component(

View File

@ -17,7 +17,7 @@ from homeassistant.const import (
STATE_UNAVAILABLE, STATE_UNAVAILABLE,
STATE_UNKNOWN, STATE_UNKNOWN,
) )
from homeassistant.core import Context, CoreState, State, callback from homeassistant.core import Context, CoreState, HomeAssistant, State, callback
from homeassistant.helpers import entity_registry from homeassistant.helpers import entity_registry
from homeassistant.helpers.entity_component import async_update_entity from homeassistant.helpers.entity_component import async_update_entity
from homeassistant.helpers.template import Template from homeassistant.helpers.template import Template
@ -312,7 +312,7 @@ async def test_setup_valid_device_class(hass, start_ha):
@pytest.mark.parametrize("load_registries", [False]) @pytest.mark.parametrize("load_registries", [False])
async def test_creating_sensor_loads_group(hass): async def test_creating_sensor_loads_group(hass: HomeAssistant) -> None:
"""Test setting up template sensor loads group component first.""" """Test setting up template sensor loads group component first."""
order = [] order = []
after_dep_event = Event() after_dep_event = Event()
@ -445,7 +445,9 @@ async def test_invalid_availability_template_keeps_component_available(
assert "UndefinedError: 'x' is undefined" in caplog_setup_text assert "UndefinedError: 'x' is undefined" in caplog_setup_text
async def test_no_template_match_all(hass, caplog): async def test_no_template_match_all(
hass: HomeAssistant, caplog: pytest.LogCaptureFixture
) -> None:
"""Test that we allow static templates.""" """Test that we allow static templates."""
hass.states.async_set("sensor.test_sensor", "startup") hass.states.async_set("sensor.test_sensor", "startup")
@ -917,7 +919,9 @@ async def test_self_referencing_entity_picture_loop(hass, start_ha, caplog_setup
assert int(state.state) == 1 assert int(state.state) == 1
async def test_self_referencing_icon_with_no_loop(hass, caplog): async def test_self_referencing_icon_with_no_loop(
hass: HomeAssistant, caplog: pytest.LogCaptureFixture
) -> None:
"""Test a self referencing icon that does not loop.""" """Test a self referencing icon that does not loop."""
hass.states.async_set("sensor.heartworm_high_80", 10) hass.states.async_set("sensor.heartworm_high_80", 10)
@ -1214,7 +1218,7 @@ async def test_config_top_level(hass, start_ha):
assert state.attributes["state_class"] == "measurement" assert state.attributes["state_class"] == "measurement"
async def test_trigger_entity_available(hass): async def test_trigger_entity_available(hass: HomeAssistant) -> None:
"""Test trigger entity availability works.""" """Test trigger entity availability works."""
assert await async_setup_component( assert await async_setup_component(
hass, hass,
@ -1255,7 +1259,7 @@ async def test_trigger_entity_available(hass):
assert state.state == "unavailable" assert state.state == "unavailable"
async def test_trigger_entity_device_class_parsing_works(hass): async def test_trigger_entity_device_class_parsing_works(hass: HomeAssistant) -> None:
"""Test trigger entity device class parsing works.""" """Test trigger entity device class parsing works."""
assert await async_setup_component( assert await async_setup_component(
hass, hass,
@ -1299,7 +1303,7 @@ async def test_trigger_entity_device_class_parsing_works(hass):
assert ts_state.state == now.isoformat(timespec="seconds") assert ts_state.state == now.isoformat(timespec="seconds")
async def test_trigger_entity_device_class_errors_works(hass): async def test_trigger_entity_device_class_errors_works(hass: HomeAssistant) -> None:
"""Test trigger entity device class errors works.""" """Test trigger entity device class errors works."""
assert await async_setup_component( assert await async_setup_component(
hass, hass,
@ -1342,7 +1346,7 @@ async def test_trigger_entity_device_class_errors_works(hass):
assert ts_state.state == STATE_UNKNOWN assert ts_state.state == STATE_UNKNOWN
async def test_entity_device_class_parsing_works(hass): async def test_entity_device_class_parsing_works(hass: HomeAssistant) -> None:
"""Test entity device class parsing works.""" """Test entity device class parsing works."""
# State of timestamp sensors are always in UTC # State of timestamp sensors are always in UTC
now = dt_util.utcnow() now = dt_util.utcnow()
@ -1381,7 +1385,7 @@ async def test_entity_device_class_parsing_works(hass):
assert ts_state.state == now.isoformat(timespec="seconds") assert ts_state.state == now.isoformat(timespec="seconds")
async def test_entity_device_class_errors_works(hass): async def test_entity_device_class_errors_works(hass: HomeAssistant) -> None:
"""Test entity device class errors works.""" """Test entity device class errors works."""
assert await async_setup_component( assert await async_setup_component(
hass, hass,

View File

@ -1,5 +1,5 @@
"""The tests for the Template switch platform.""" """The tests for the Template switch platform."""
import pytest
from homeassistant import setup from homeassistant import setup
from homeassistant.components.switch import DOMAIN as SWITCH_DOMAIN from homeassistant.components.switch import DOMAIN as SWITCH_DOMAIN
@ -11,7 +11,7 @@ from homeassistant.const import (
STATE_ON, STATE_ON,
STATE_UNAVAILABLE, STATE_UNAVAILABLE,
) )
from homeassistant.core import CoreState, State from homeassistant.core import CoreState, HomeAssistant, State
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from tests.common import assert_setup_component, mock_component, mock_restore_cache from tests.common import assert_setup_component, mock_component, mock_restore_cache
@ -34,7 +34,7 @@ OPTIMISTIC_SWITCH_CONFIG = {
} }
async def test_template_state_text(hass): async def test_template_state_text(hass: HomeAssistant) -> None:
"""Test the state text of a template.""" """Test the state text of a template."""
with assert_setup_component(1, "switch"): with assert_setup_component(1, "switch"):
assert await async_setup_component( assert await async_setup_component(
@ -70,7 +70,7 @@ async def test_template_state_text(hass):
assert state.state == STATE_OFF assert state.state == STATE_OFF
async def test_template_state_boolean_on(hass): async def test_template_state_boolean_on(hass: HomeAssistant) -> None:
"""Test the setting of the state with boolean on.""" """Test the setting of the state with boolean on."""
with assert_setup_component(1, "switch"): with assert_setup_component(1, "switch"):
assert await async_setup_component( assert await async_setup_component(
@ -97,7 +97,7 @@ async def test_template_state_boolean_on(hass):
assert state.state == STATE_ON assert state.state == STATE_ON
async def test_template_state_boolean_off(hass): async def test_template_state_boolean_off(hass: HomeAssistant) -> None:
"""Test the setting of the state with off.""" """Test the setting of the state with off."""
with assert_setup_component(1, "switch"): with assert_setup_component(1, "switch"):
assert await async_setup_component( assert await async_setup_component(
@ -124,7 +124,7 @@ async def test_template_state_boolean_off(hass):
assert state.state == STATE_OFF assert state.state == STATE_OFF
async def test_icon_template(hass): async def test_icon_template(hass: HomeAssistant) -> None:
"""Test icon template.""" """Test icon template."""
with assert_setup_component(1, "switch"): with assert_setup_component(1, "switch"):
assert await async_setup_component( assert await async_setup_component(
@ -162,7 +162,7 @@ async def test_icon_template(hass):
assert state.attributes["icon"] == "mdi:check" assert state.attributes["icon"] == "mdi:check"
async def test_entity_picture_template(hass): async def test_entity_picture_template(hass: HomeAssistant) -> None:
"""Test entity_picture template.""" """Test entity_picture template."""
with assert_setup_component(1, "switch"): with assert_setup_component(1, "switch"):
assert await async_setup_component( assert await async_setup_component(
@ -200,7 +200,7 @@ async def test_entity_picture_template(hass):
assert state.attributes["entity_picture"] == "/local/switch.png" assert state.attributes["entity_picture"] == "/local/switch.png"
async def test_template_syntax_error(hass): async def test_template_syntax_error(hass: HomeAssistant) -> None:
"""Test templating syntax error.""" """Test templating syntax error."""
with assert_setup_component(0, "switch"): with assert_setup_component(0, "switch"):
assert await async_setup_component( assert await async_setup_component(
@ -226,7 +226,7 @@ async def test_template_syntax_error(hass):
assert hass.states.async_all("switch") == [] assert hass.states.async_all("switch") == []
async def test_invalid_name_does_not_create(hass): async def test_invalid_name_does_not_create(hass: HomeAssistant) -> None:
"""Test invalid name.""" """Test invalid name."""
with assert_setup_component(0, "switch"): with assert_setup_component(0, "switch"):
assert await async_setup_component( assert await async_setup_component(
@ -252,7 +252,7 @@ async def test_invalid_name_does_not_create(hass):
assert hass.states.async_all("switch") == [] assert hass.states.async_all("switch") == []
async def test_invalid_switch_does_not_create(hass): async def test_invalid_switch_does_not_create(hass: HomeAssistant) -> None:
"""Test invalid switch.""" """Test invalid switch."""
with assert_setup_component(0, "switch"): with assert_setup_component(0, "switch"):
assert await async_setup_component( assert await async_setup_component(
@ -273,7 +273,7 @@ async def test_invalid_switch_does_not_create(hass):
assert hass.states.async_all("switch") == [] assert hass.states.async_all("switch") == []
async def test_no_switches_does_not_create(hass): async def test_no_switches_does_not_create(hass: HomeAssistant) -> None:
"""Test if there are no switches no creation.""" """Test if there are no switches no creation."""
with assert_setup_component(0, "switch"): with assert_setup_component(0, "switch"):
assert await async_setup_component( assert await async_setup_component(
@ -287,7 +287,7 @@ async def test_no_switches_does_not_create(hass):
assert hass.states.async_all("switch") == [] assert hass.states.async_all("switch") == []
async def test_missing_on_does_not_create(hass): async def test_missing_on_does_not_create(hass: HomeAssistant) -> None:
"""Test missing on.""" """Test missing on."""
with assert_setup_component(0, "switch"): with assert_setup_component(0, "switch"):
assert await async_setup_component( assert await async_setup_component(
@ -320,7 +320,7 @@ async def test_missing_on_does_not_create(hass):
assert hass.states.async_all("switch") == [] assert hass.states.async_all("switch") == []
async def test_missing_off_does_not_create(hass): async def test_missing_off_does_not_create(hass: HomeAssistant) -> None:
"""Test missing off.""" """Test missing off."""
with assert_setup_component(0, "switch"): with assert_setup_component(0, "switch"):
assert await async_setup_component( assert await async_setup_component(
@ -515,7 +515,7 @@ async def test_off_action_optimistic(hass, calls):
assert calls[-1].data["caller"] == "switch.test_template_switch" assert calls[-1].data["caller"] == "switch.test_template_switch"
async def test_restore_state(hass): async def test_restore_state(hass: HomeAssistant) -> None:
"""Test state restoration.""" """Test state restoration."""
mock_restore_cache( mock_restore_cache(
hass, hass,
@ -556,7 +556,7 @@ async def test_restore_state(hass):
assert state.state == STATE_OFF assert state.state == STATE_OFF
async def test_available_template_with_entities(hass): async def test_available_template_with_entities(hass: HomeAssistant) -> None:
"""Test availability templates with values from other entities.""" """Test availability templates with values from other entities."""
await setup.async_setup_component( await setup.async_setup_component(
hass, hass,
@ -592,7 +592,9 @@ async def test_available_template_with_entities(hass):
assert hass.states.get("switch.test_template_switch").state == STATE_UNAVAILABLE assert hass.states.get("switch.test_template_switch").state == STATE_UNAVAILABLE
async def test_invalid_availability_template_keeps_component_available(hass, caplog): async def test_invalid_availability_template_keeps_component_available(
hass: HomeAssistant, caplog: pytest.LogCaptureFixture
) -> None:
"""Test that an invalid availability keeps the device available.""" """Test that an invalid availability keeps the device available."""
await setup.async_setup_component( await setup.async_setup_component(
hass, hass,
@ -619,7 +621,7 @@ async def test_invalid_availability_template_keeps_component_available(hass, cap
assert "UndefinedError: 'x' is undefined" in caplog.text assert "UndefinedError: 'x' is undefined" in caplog.text
async def test_unique_id(hass): async def test_unique_id(hass: HomeAssistant) -> None:
"""Test unique_id option only creates one switch per id.""" """Test unique_id option only creates one switch per id."""
await setup.async_setup_component( await setup.async_setup_component(
hass, hass,

View File

@ -2,10 +2,11 @@
import pytest import pytest
from homeassistant.components.template import template_entity from homeassistant.components.template import template_entity
from homeassistant.core import HomeAssistant
from homeassistant.helpers import template from homeassistant.helpers import template
async def test_template_entity_requires_hass_set(hass): async def test_template_entity_requires_hass_set(hass: HomeAssistant) -> None:
"""Test template entity requires hass to be set before accepting templates.""" """Test template entity requires hass to be set before accepting templates."""
entity = template_entity.TemplateEntity(hass) entity = template_entity.TemplateEntity(hass)

View File

@ -11,6 +11,7 @@ from homeassistant.components.vacuum import (
STATE_RETURNING, STATE_RETURNING,
) )
from homeassistant.const import STATE_OFF, STATE_ON, STATE_UNAVAILABLE, STATE_UNKNOWN from homeassistant.const import STATE_OFF, STATE_ON, STATE_UNAVAILABLE, STATE_UNKNOWN
from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity_component import async_update_entity from homeassistant.helpers.entity_component import async_update_entity
from tests.common import assert_setup_component from tests.common import assert_setup_component
@ -311,7 +312,7 @@ async def test_unique_id(hass, start_ha):
assert len(hass.states.async_all("vacuum")) == 1 assert len(hass.states.async_all("vacuum")) == 1
async def test_unused_services(hass): async def test_unused_services(hass: HomeAssistant) -> None:
"""Test calling unused services should not crash.""" """Test calling unused services should not crash."""
await _register_basic_vacuum(hass) await _register_basic_vacuum(hass)

View File

@ -24,7 +24,7 @@ async def test_init_while_offline(hass: HomeAssistant) -> None:
assert entry.state == config_entries.ConfigEntryState.SETUP_RETRY assert entry.state == config_entries.ConfigEntryState.SETUP_RETRY
async def test_load_unload(hass): async def test_load_unload(hass: HomeAssistant) -> None:
"""Config entry can be unloaded.""" """Config entry can be unloaded."""
entry = await create_wall_connector_entry(hass) entry = await create_wall_connector_entry(hass)

View File

@ -5,6 +5,7 @@ import voluptuous_serialize
import homeassistant.components.automation as automation import homeassistant.components.automation as automation
from homeassistant.components.device_automation import DeviceAutomationType from homeassistant.components.device_automation import DeviceAutomationType
from homeassistant.components.text import DOMAIN, device_action from homeassistant.components.text import DOMAIN, device_action
from homeassistant.core import HomeAssistant
from homeassistant.helpers import config_validation as cv, device_registry from homeassistant.helpers import config_validation as cv, device_registry
from homeassistant.helpers.entity import EntityCategory from homeassistant.helpers.entity import EntityCategory
from homeassistant.helpers.entity_registry import RegistryEntryHider from homeassistant.helpers.entity_registry import RegistryEntryHider
@ -130,7 +131,7 @@ async def test_get_action_no_state(hass, device_reg, entity_reg):
assert_lists_same(actions, expected_actions) assert_lists_same(actions, expected_actions)
async def test_action(hass): async def test_action(hass: HomeAssistant) -> None:
"""Test for actions.""" """Test for actions."""
hass.states.async_set("text.entity", 0.5, {"min_value": 0.0, "max_value": 1.0}) hass.states.async_set("text.entity", 0.5, {"min_value": 0.0, "max_value": 1.0})
@ -166,7 +167,7 @@ async def test_action(hass):
assert len(calls) == 1 assert len(calls) == 1
async def test_capabilities(hass): async def test_capabilities(hass: HomeAssistant) -> None:
"""Test getting capabilities.""" """Test getting capabilities."""
capabilities = await device_action.async_get_action_capabilities( capabilities = await device_action.async_get_action_capabilities(
hass, hass,

View File

@ -14,7 +14,7 @@ from homeassistant.components.text import (
_async_set_value, _async_set_value,
) )
from homeassistant.const import MAX_LENGTH_STATE_STATE from homeassistant.const import MAX_LENGTH_STATE_STATE
from homeassistant.core import ServiceCall, State from homeassistant.core import HomeAssistant, ServiceCall, State
from homeassistant.helpers.restore_state import STORAGE_KEY as RESTORE_STATE_KEY from homeassistant.helpers.restore_state import STORAGE_KEY as RESTORE_STATE_KEY
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
@ -41,7 +41,7 @@ class MockTextEntity(TextEntity):
self._attr_native_value = value self._attr_native_value = value
async def test_text_default(hass): async def test_text_default(hass: HomeAssistant) -> None:
"""Test text entity with defaults.""" """Test text entity with defaults."""
text = MockTextEntity() text = MockTextEntity()
text.hass = hass text.hass = hass
@ -56,7 +56,7 @@ async def test_text_default(hass):
assert text.state == "test" assert text.state == "test"
async def test_text_new_min_max_pattern(hass): async def test_text_new_min_max_pattern(hass: HomeAssistant) -> None:
"""Test text entity with new min, max, and pattern.""" """Test text entity with new min, max, and pattern."""
text = MockTextEntity(native_min=-1, native_max=500, pattern=r"[a-z]") text = MockTextEntity(native_min=-1, native_max=500, pattern=r"[a-z]")
text.hass = hass text.hass = hass
@ -69,7 +69,7 @@ async def test_text_new_min_max_pattern(hass):
} }
async def test_text_set_value(hass): async def test_text_set_value(hass: HomeAssistant) -> None:
"""Test text entity with set_value service.""" """Test text entity with set_value service."""
text = MockTextEntity(native_min=1, native_max=5, pattern=r"[a-z]") text = MockTextEntity(native_min=1, native_max=5, pattern=r"[a-z]")
text.hass = hass text.hass = hass
@ -96,7 +96,7 @@ async def test_text_set_value(hass):
assert text.state == "test2" assert text.state == "test2"
async def test_text_value_outside_bounds(hass): async def test_text_value_outside_bounds(hass: HomeAssistant) -> None:
"""Test text entity with value that is outside min and max.""" """Test text entity with value that is outside min and max."""
with pytest.raises(ValueError): with pytest.raises(ValueError):
_ = MockTextEntity( _ = MockTextEntity(

View File

@ -1,4 +1,6 @@
"""Test reproduce state for Text entities.""" """Test reproduce state for Text entities."""
import pytest
from homeassistant.components.text.const import ( from homeassistant.components.text.const import (
ATTR_MAX, ATTR_MAX,
ATTR_MIN, ATTR_MIN,
@ -7,7 +9,7 @@ from homeassistant.components.text.const import (
DOMAIN, DOMAIN,
SERVICE_SET_VALUE, SERVICE_SET_VALUE,
) )
from homeassistant.core import State from homeassistant.core import HomeAssistant, State
from homeassistant.helpers.state import async_reproduce_state from homeassistant.helpers.state import async_reproduce_state
from tests.common import async_mock_service from tests.common import async_mock_service
@ -16,7 +18,9 @@ VALID_TEXT1 = "Hello"
VALID_TEXT2 = "World" VALID_TEXT2 = "World"
async def test_reproducing_states(hass, caplog): async def test_reproducing_states(
hass: HomeAssistant, caplog: pytest.LogCaptureFixture
) -> None:
"""Test reproducing Text states.""" """Test reproducing Text states."""
hass.states.async_set( hass.states.async_set(

View File

@ -1,9 +1,9 @@
"""Test the ThermoBeacon config flow.""" """Test the ThermoBeacon config flow."""
from unittest.mock import patch from unittest.mock import patch
from homeassistant import config_entries from homeassistant import config_entries
from homeassistant.components.thermobeacon.const import DOMAIN from homeassistant.components.thermobeacon.const import DOMAIN
from homeassistant.core import HomeAssistant
from homeassistant.data_entry_flow import FlowResultType from homeassistant.data_entry_flow import FlowResultType
from . import NOT_THERMOBEACON_SERVICE_INFO, THERMOBEACON_SERVICE_INFO from . import NOT_THERMOBEACON_SERVICE_INFO, THERMOBEACON_SERVICE_INFO
@ -11,7 +11,7 @@ from . import NOT_THERMOBEACON_SERVICE_INFO, THERMOBEACON_SERVICE_INFO
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
async def test_async_step_bluetooth_valid_device(hass): async def test_async_step_bluetooth_valid_device(hass: HomeAssistant) -> None:
"""Test discovery via bluetooth with a valid device.""" """Test discovery via bluetooth with a valid device."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
@ -32,7 +32,7 @@ async def test_async_step_bluetooth_valid_device(hass):
assert result2["result"].unique_id == "aa:bb:cc:dd:ee:ff" assert result2["result"].unique_id == "aa:bb:cc:dd:ee:ff"
async def test_async_step_bluetooth_not_thermobeacon(hass): async def test_async_step_bluetooth_not_thermobeacon(hass: HomeAssistant) -> None:
"""Test discovery via bluetooth not thermobeacon.""" """Test discovery via bluetooth not thermobeacon."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
@ -43,7 +43,7 @@ async def test_async_step_bluetooth_not_thermobeacon(hass):
assert result["reason"] == "not_supported" assert result["reason"] == "not_supported"
async def test_async_step_user_no_devices_found(hass): async def test_async_step_user_no_devices_found(hass: HomeAssistant) -> None:
"""Test setup from service info cache with no devices found.""" """Test setup from service info cache with no devices found."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
@ -53,7 +53,7 @@ async def test_async_step_user_no_devices_found(hass):
assert result["reason"] == "no_devices_found" assert result["reason"] == "no_devices_found"
async def test_async_step_user_with_found_devices(hass): async def test_async_step_user_with_found_devices(hass: HomeAssistant) -> None:
"""Test setup from service info cache with devices found.""" """Test setup from service info cache with devices found."""
with patch( with patch(
"homeassistant.components.thermobeacon.config_flow.async_discovered_service_info", "homeassistant.components.thermobeacon.config_flow.async_discovered_service_info",
@ -78,7 +78,7 @@ async def test_async_step_user_with_found_devices(hass):
assert result2["result"].unique_id == "aa:bb:cc:dd:ee:ff" assert result2["result"].unique_id == "aa:bb:cc:dd:ee:ff"
async def test_async_step_user_device_added_between_steps(hass): async def test_async_step_user_device_added_between_steps(hass: HomeAssistant) -> None:
"""Test the device gets added via another flow between steps.""" """Test the device gets added via another flow between steps."""
with patch( with patch(
"homeassistant.components.thermobeacon.config_flow.async_discovered_service_info", "homeassistant.components.thermobeacon.config_flow.async_discovered_service_info",
@ -108,7 +108,9 @@ async def test_async_step_user_device_added_between_steps(hass):
assert result2["reason"] == "already_configured" assert result2["reason"] == "already_configured"
async def test_async_step_user_with_found_devices_already_setup(hass): async def test_async_step_user_with_found_devices_already_setup(
hass: HomeAssistant,
) -> None:
"""Test setup from service info cache with devices found.""" """Test setup from service info cache with devices found."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -128,7 +130,7 @@ async def test_async_step_user_with_found_devices_already_setup(hass):
assert result["reason"] == "no_devices_found" assert result["reason"] == "no_devices_found"
async def test_async_step_bluetooth_devices_already_setup(hass): async def test_async_step_bluetooth_devices_already_setup(hass: HomeAssistant) -> None:
"""Test we can't start a flow if there is already a config entry.""" """Test we can't start a flow if there is already a config entry."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -145,7 +147,7 @@ async def test_async_step_bluetooth_devices_already_setup(hass):
assert result["reason"] == "already_configured" assert result["reason"] == "already_configured"
async def test_async_step_bluetooth_already_in_progress(hass): async def test_async_step_bluetooth_already_in_progress(hass: HomeAssistant) -> None:
"""Test we can't start a flow for the same device twice.""" """Test we can't start a flow for the same device twice."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
@ -164,7 +166,9 @@ async def test_async_step_bluetooth_already_in_progress(hass):
assert result["reason"] == "already_in_progress" assert result["reason"] == "already_in_progress"
async def test_async_step_user_takes_precedence_over_discovery(hass): async def test_async_step_user_takes_precedence_over_discovery(
hass: HomeAssistant,
) -> None:
"""Test manual setup takes precedence over discovery.""" """Test manual setup takes precedence over discovery."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,

View File

@ -1,9 +1,8 @@
"""Test the ThermoBeacon sensors.""" """Test the ThermoBeacon sensors."""
from homeassistant.components.sensor import ATTR_STATE_CLASS from homeassistant.components.sensor import ATTR_STATE_CLASS
from homeassistant.components.thermobeacon.const import DOMAIN from homeassistant.components.thermobeacon.const import DOMAIN
from homeassistant.const import ATTR_FRIENDLY_NAME, ATTR_UNIT_OF_MEASUREMENT from homeassistant.const import ATTR_FRIENDLY_NAME, ATTR_UNIT_OF_MEASUREMENT
from homeassistant.core import HomeAssistant
from . import THERMOBEACON_SERVICE_INFO from . import THERMOBEACON_SERVICE_INFO
@ -11,7 +10,7 @@ from tests.common import MockConfigEntry
from tests.components.bluetooth import inject_bluetooth_service_info from tests.components.bluetooth import inject_bluetooth_service_info
async def test_sensors(hass): async def test_sensors(hass: HomeAssistant) -> None:
"""Test setting up creates the sensors.""" """Test setting up creates the sensors."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,

View File

@ -1,9 +1,9 @@
"""Test the ThermoPro config flow.""" """Test the ThermoPro config flow."""
from unittest.mock import patch from unittest.mock import patch
from homeassistant import config_entries from homeassistant import config_entries
from homeassistant.components.thermopro.const import DOMAIN from homeassistant.components.thermopro.const import DOMAIN
from homeassistant.core import HomeAssistant
from homeassistant.data_entry_flow import FlowResultType from homeassistant.data_entry_flow import FlowResultType
from . import NOT_THERMOPRO_SERVICE_INFO, TP357_SERVICE_INFO from . import NOT_THERMOPRO_SERVICE_INFO, TP357_SERVICE_INFO
@ -11,7 +11,7 @@ from . import NOT_THERMOPRO_SERVICE_INFO, TP357_SERVICE_INFO
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
async def test_async_step_bluetooth_valid_device(hass): async def test_async_step_bluetooth_valid_device(hass: HomeAssistant) -> None:
"""Test discovery via bluetooth with a valid device.""" """Test discovery via bluetooth with a valid device."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
@ -32,7 +32,7 @@ async def test_async_step_bluetooth_valid_device(hass):
assert result2["result"].unique_id == "4125DDBA-2774-4851-9889-6AADDD4CAC3D" assert result2["result"].unique_id == "4125DDBA-2774-4851-9889-6AADDD4CAC3D"
async def test_async_step_bluetooth_not_thermopro(hass): async def test_async_step_bluetooth_not_thermopro(hass: HomeAssistant) -> None:
"""Test discovery via bluetooth not thermopro.""" """Test discovery via bluetooth not thermopro."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
@ -43,7 +43,7 @@ async def test_async_step_bluetooth_not_thermopro(hass):
assert result["reason"] == "not_supported" assert result["reason"] == "not_supported"
async def test_async_step_user_no_devices_found(hass): async def test_async_step_user_no_devices_found(hass: HomeAssistant) -> None:
"""Test setup from service info cache with no devices found.""" """Test setup from service info cache with no devices found."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
@ -53,7 +53,7 @@ async def test_async_step_user_no_devices_found(hass):
assert result["reason"] == "no_devices_found" assert result["reason"] == "no_devices_found"
async def test_async_step_user_with_found_devices(hass): async def test_async_step_user_with_found_devices(hass: HomeAssistant) -> None:
"""Test setup from service info cache with devices found.""" """Test setup from service info cache with devices found."""
with patch( with patch(
"homeassistant.components.thermopro.config_flow.async_discovered_service_info", "homeassistant.components.thermopro.config_flow.async_discovered_service_info",
@ -78,7 +78,7 @@ async def test_async_step_user_with_found_devices(hass):
assert result2["result"].unique_id == "4125DDBA-2774-4851-9889-6AADDD4CAC3D" assert result2["result"].unique_id == "4125DDBA-2774-4851-9889-6AADDD4CAC3D"
async def test_async_step_user_device_added_between_steps(hass): async def test_async_step_user_device_added_between_steps(hass: HomeAssistant) -> None:
"""Test the device gets added via another flow between steps.""" """Test the device gets added via another flow between steps."""
with patch( with patch(
"homeassistant.components.thermopro.config_flow.async_discovered_service_info", "homeassistant.components.thermopro.config_flow.async_discovered_service_info",
@ -108,7 +108,9 @@ async def test_async_step_user_device_added_between_steps(hass):
assert result2["reason"] == "already_configured" assert result2["reason"] == "already_configured"
async def test_async_step_user_with_found_devices_already_setup(hass): async def test_async_step_user_with_found_devices_already_setup(
hass: HomeAssistant,
) -> None:
"""Test setup from service info cache with devices found.""" """Test setup from service info cache with devices found."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -128,7 +130,7 @@ async def test_async_step_user_with_found_devices_already_setup(hass):
assert result["reason"] == "no_devices_found" assert result["reason"] == "no_devices_found"
async def test_async_step_bluetooth_devices_already_setup(hass): async def test_async_step_bluetooth_devices_already_setup(hass: HomeAssistant) -> None:
"""Test we can't start a flow if there is already a config entry.""" """Test we can't start a flow if there is already a config entry."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -145,7 +147,7 @@ async def test_async_step_bluetooth_devices_already_setup(hass):
assert result["reason"] == "already_configured" assert result["reason"] == "already_configured"
async def test_async_step_bluetooth_already_in_progress(hass): async def test_async_step_bluetooth_already_in_progress(hass: HomeAssistant) -> None:
"""Test we can't start a flow for the same device twice.""" """Test we can't start a flow for the same device twice."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
@ -164,7 +166,9 @@ async def test_async_step_bluetooth_already_in_progress(hass):
assert result["reason"] == "already_in_progress" assert result["reason"] == "already_in_progress"
async def test_async_step_user_takes_precedence_over_discovery(hass): async def test_async_step_user_takes_precedence_over_discovery(
hass: HomeAssistant,
) -> None:
"""Test manual setup takes precedence over discovery.""" """Test manual setup takes precedence over discovery."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,

View File

@ -1,8 +1,8 @@
"""Test the ThermoPro config flow.""" """Test the ThermoPro config flow."""
from homeassistant.components.sensor import ATTR_STATE_CLASS from homeassistant.components.sensor import ATTR_STATE_CLASS
from homeassistant.components.thermopro.const import DOMAIN from homeassistant.components.thermopro.const import DOMAIN
from homeassistant.const import ATTR_FRIENDLY_NAME, ATTR_UNIT_OF_MEASUREMENT from homeassistant.const import ATTR_FRIENDLY_NAME, ATTR_UNIT_OF_MEASUREMENT
from homeassistant.core import HomeAssistant
from . import TP357_SERVICE_INFO from . import TP357_SERVICE_INFO
@ -10,7 +10,7 @@ from tests.common import MockConfigEntry
from tests.components.bluetooth import inject_bluetooth_service_info from tests.components.bluetooth import inject_bluetooth_service_info
async def test_sensors(hass): async def test_sensors(hass: HomeAssistant) -> None:
"""Test setting up creates the sensors.""" """Test setting up creates the sensors."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,

View File

@ -1,4 +1,5 @@
"""The test for the threshold sensor platform.""" """The test for the threshold sensor platform."""
import pytest
from homeassistant.const import ( from homeassistant.const import (
ATTR_UNIT_OF_MEASUREMENT, ATTR_UNIT_OF_MEASUREMENT,
@ -6,10 +7,11 @@ from homeassistant.const import (
STATE_UNKNOWN, STATE_UNKNOWN,
UnitOfTemperature, UnitOfTemperature,
) )
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
async def test_sensor_upper(hass): async def test_sensor_upper(hass: HomeAssistant) -> None:
"""Test if source is above threshold.""" """Test if source is above threshold."""
config = { config = {
"binary_sensor": { "binary_sensor": {
@ -55,7 +57,7 @@ async def test_sensor_upper(hass):
assert state.state == "off" assert state.state == "off"
async def test_sensor_lower(hass): async def test_sensor_lower(hass: HomeAssistant) -> None:
"""Test if source is below threshold.""" """Test if source is below threshold."""
config = { config = {
"binary_sensor": { "binary_sensor": {
@ -88,7 +90,7 @@ async def test_sensor_lower(hass):
assert state.state == "on" assert state.state == "on"
async def test_sensor_hysteresis(hass): async def test_sensor_hysteresis(hass: HomeAssistant) -> None:
"""Test if source is above threshold using hysteresis.""" """Test if source is above threshold using hysteresis."""
config = { config = {
"binary_sensor": { "binary_sensor": {
@ -143,7 +145,7 @@ async def test_sensor_hysteresis(hass):
assert state.state == "on" assert state.state == "on"
async def test_sensor_in_range_no_hysteresis(hass): async def test_sensor_in_range_no_hysteresis(hass: HomeAssistant) -> None:
"""Test if source is within the range.""" """Test if source is within the range."""
config = { config = {
"binary_sensor": { "binary_sensor": {
@ -193,7 +195,7 @@ async def test_sensor_in_range_no_hysteresis(hass):
assert state.state == "off" assert state.state == "off"
async def test_sensor_in_range_with_hysteresis(hass): async def test_sensor_in_range_with_hysteresis(hass: HomeAssistant) -> None:
"""Test if source is within the range.""" """Test if source is within the range."""
config = { config = {
"binary_sensor": { "binary_sensor": {
@ -294,7 +296,9 @@ async def test_sensor_in_range_with_hysteresis(hass):
assert state.state == "on" assert state.state == "on"
async def test_sensor_in_range_unknown_state(hass, caplog): async def test_sensor_in_range_unknown_state(
hass: HomeAssistant, caplog: pytest.LogCaptureFixture
) -> None:
"""Test if source is within the range.""" """Test if source is within the range."""
config = { config = {
"binary_sensor": { "binary_sensor": {
@ -346,7 +350,7 @@ async def test_sensor_in_range_unknown_state(hass, caplog):
assert "State is not numerical" not in caplog.text assert "State is not numerical" not in caplog.text
async def test_sensor_lower_zero_threshold(hass): async def test_sensor_lower_zero_threshold(hass: HomeAssistant) -> None:
"""Test if a lower threshold of zero is set.""" """Test if a lower threshold of zero is set."""
config = { config = {
"binary_sensor": { "binary_sensor": {
@ -377,7 +381,7 @@ async def test_sensor_lower_zero_threshold(hass):
assert state.state == "on" assert state.state == "on"
async def test_sensor_upper_zero_threshold(hass): async def test_sensor_upper_zero_threshold(hass: HomeAssistant) -> None:
"""Test if an upper threshold of zero is set.""" """Test if an upper threshold of zero is set."""
config = { config = {
"binary_sensor": { "binary_sensor": {

View File

@ -1,9 +1,9 @@
"""Test the Tilt config flow.""" """Test the Tilt config flow."""
from unittest.mock import patch from unittest.mock import patch
from homeassistant import config_entries from homeassistant import config_entries
from homeassistant.components.tilt_ble.const import DOMAIN from homeassistant.components.tilt_ble.const import DOMAIN
from homeassistant.core import HomeAssistant
from homeassistant.data_entry_flow import FlowResultType from homeassistant.data_entry_flow import FlowResultType
from . import NOT_TILT_SERVICE_INFO, TILT_GREEN_SERVICE_INFO from . import NOT_TILT_SERVICE_INFO, TILT_GREEN_SERVICE_INFO
@ -11,7 +11,7 @@ from . import NOT_TILT_SERVICE_INFO, TILT_GREEN_SERVICE_INFO
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
async def test_async_step_bluetooth_valid_device(hass): async def test_async_step_bluetooth_valid_device(hass: HomeAssistant) -> None:
"""Test discovery via bluetooth with a valid device.""" """Test discovery via bluetooth with a valid device."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
@ -32,7 +32,7 @@ async def test_async_step_bluetooth_valid_device(hass):
assert result2["result"].unique_id == "F6:0F:28:F2:1F:CB" assert result2["result"].unique_id == "F6:0F:28:F2:1F:CB"
async def test_async_step_bluetooth_not_tilt(hass): async def test_async_step_bluetooth_not_tilt(hass: HomeAssistant) -> None:
"""Test discovery via bluetooth not tilt.""" """Test discovery via bluetooth not tilt."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
@ -43,7 +43,7 @@ async def test_async_step_bluetooth_not_tilt(hass):
assert result["reason"] == "not_supported" assert result["reason"] == "not_supported"
async def test_async_step_user_no_devices_found(hass): async def test_async_step_user_no_devices_found(hass: HomeAssistant) -> None:
"""Test setup from service info cache with no devices found.""" """Test setup from service info cache with no devices found."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
@ -53,7 +53,7 @@ async def test_async_step_user_no_devices_found(hass):
assert result["reason"] == "no_devices_found" assert result["reason"] == "no_devices_found"
async def test_async_step_user_with_found_devices(hass): async def test_async_step_user_with_found_devices(hass: HomeAssistant) -> None:
"""Test setup from service info cache with devices found.""" """Test setup from service info cache with devices found."""
with patch( with patch(
"homeassistant.components.tilt_ble.config_flow.async_discovered_service_info", "homeassistant.components.tilt_ble.config_flow.async_discovered_service_info",
@ -78,7 +78,7 @@ async def test_async_step_user_with_found_devices(hass):
assert result2["result"].unique_id == "F6:0F:28:F2:1F:CB" assert result2["result"].unique_id == "F6:0F:28:F2:1F:CB"
async def test_async_step_user_device_added_between_steps(hass): async def test_async_step_user_device_added_between_steps(hass: HomeAssistant) -> None:
"""Test the device gets added via another flow between steps.""" """Test the device gets added via another flow between steps."""
with patch( with patch(
"homeassistant.components.tilt_ble.config_flow.async_discovered_service_info", "homeassistant.components.tilt_ble.config_flow.async_discovered_service_info",
@ -108,7 +108,9 @@ async def test_async_step_user_device_added_between_steps(hass):
assert result2["reason"] == "already_configured" assert result2["reason"] == "already_configured"
async def test_async_step_user_with_found_devices_already_setup(hass): async def test_async_step_user_with_found_devices_already_setup(
hass: HomeAssistant,
) -> None:
"""Test setup from service info cache with devices found.""" """Test setup from service info cache with devices found."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -128,7 +130,7 @@ async def test_async_step_user_with_found_devices_already_setup(hass):
assert result["reason"] == "no_devices_found" assert result["reason"] == "no_devices_found"
async def test_async_step_bluetooth_devices_already_setup(hass): async def test_async_step_bluetooth_devices_already_setup(hass: HomeAssistant) -> None:
"""Test we can't start a flow if there is already a config entry.""" """Test we can't start a flow if there is already a config entry."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -145,7 +147,7 @@ async def test_async_step_bluetooth_devices_already_setup(hass):
assert result["reason"] == "already_configured" assert result["reason"] == "already_configured"
async def test_async_step_bluetooth_already_in_progress(hass): async def test_async_step_bluetooth_already_in_progress(hass: HomeAssistant) -> None:
"""Test we can't start a flow for the same device twice.""" """Test we can't start a flow for the same device twice."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
@ -164,7 +166,9 @@ async def test_async_step_bluetooth_already_in_progress(hass):
assert result["reason"] == "already_in_progress" assert result["reason"] == "already_in_progress"
async def test_async_step_user_takes_precedence_over_discovery(hass): async def test_async_step_user_takes_precedence_over_discovery(
hass: HomeAssistant,
) -> None:
"""Test manual setup takes precedence over discovery.""" """Test manual setup takes precedence over discovery."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,

View File

@ -2,10 +2,11 @@
from unittest.mock import patch from unittest.mock import patch
import homeassistant.components.time_date.sensor as time_date import homeassistant.components.time_date.sensor as time_date
from homeassistant.core import HomeAssistant
import homeassistant.util.dt as dt_util import homeassistant.util.dt as dt_util
async def test_intervals(hass): async def test_intervals(hass: HomeAssistant) -> None:
"""Test timing intervals of sensors.""" """Test timing intervals of sensors."""
device = time_date.TimeDateSensor(hass, "time") device = time_date.TimeDateSensor(hass, "time")
now = dt_util.utc_from_timestamp(45.5) now = dt_util.utc_from_timestamp(45.5)
@ -31,7 +32,7 @@ async def test_intervals(hass):
assert next_time > now assert next_time > now
async def test_states(hass): async def test_states(hass: HomeAssistant) -> None:
"""Test states of sensors.""" """Test states of sensors."""
hass.config.set_time_zone("UTC") hass.config.set_time_zone("UTC")
@ -67,7 +68,7 @@ async def test_states(hass):
assert device.state == "2017-05-18T00:54:00" assert device.state == "2017-05-18T00:54:00"
async def test_states_non_default_timezone(hass): async def test_states_non_default_timezone(hass: HomeAssistant) -> None:
"""Test states of sensors in a timezone other than UTC.""" """Test states of sensors in a timezone other than UTC."""
hass.config.set_time_zone("America/New_York") hass.config.set_time_zone("America/New_York")
@ -102,7 +103,7 @@ async def test_states_non_default_timezone(hass):
# pylint: disable=no-member # pylint: disable=no-member
async def test_timezone_intervals(hass): async def test_timezone_intervals(hass: HomeAssistant) -> None:
"""Test date sensor behavior in a timezone besides UTC.""" """Test date sensor behavior in a timezone besides UTC."""
hass.config.set_time_zone("America/New_York") hass.config.set_time_zone("America/New_York")
@ -158,7 +159,7 @@ async def test_timezone_intervals_empty_parameter(utcnow_mock, hass):
assert next_time.timestamp() == dt_util.as_timestamp("2017-11-14 00:00:00-07:00") assert next_time.timestamp() == dt_util.as_timestamp("2017-11-14 00:00:00-07:00")
async def test_icons(hass): async def test_icons(hass: HomeAssistant) -> None:
"""Test attributes of sensors.""" """Test attributes of sensors."""
device = time_date.TimeDateSensor(hass, "time") device = time_date.TimeDateSensor(hass, "time")
assert device.icon == "mdi:clock" assert device.icon == "mdi:clock"

View File

@ -1,5 +1,4 @@
"""The tests for the timer component.""" """The tests for the timer component."""
from datetime import timedelta from datetime import timedelta
import logging import logging
from unittest.mock import patch from unittest.mock import patch
@ -43,7 +42,7 @@ from homeassistant.const import (
EVENT_STATE_CHANGED, EVENT_STATE_CHANGED,
SERVICE_RELOAD, SERVICE_RELOAD,
) )
from homeassistant.core import Context, CoreState, State from homeassistant.core import Context, CoreState, HomeAssistant, State
from homeassistant.exceptions import Unauthorized from homeassistant.exceptions import Unauthorized
from homeassistant.helpers import config_validation as cv, entity_registry as er from homeassistant.helpers import config_validation as cv, entity_registry as er
from homeassistant.helpers.restore_state import ( from homeassistant.helpers.restore_state import (
@ -92,7 +91,7 @@ def storage_setup(hass, hass_storage):
return _storage return _storage
async def test_config(hass): async def test_config(hass: HomeAssistant) -> None:
"""Test config.""" """Test config."""
invalid_configs = [None, 1, {}, {"name with space": None}] invalid_configs = [None, 1, {}, {"name with space": None}]
@ -100,7 +99,7 @@ async def test_config(hass):
assert not await async_setup_component(hass, DOMAIN, {DOMAIN: cfg}) assert not await async_setup_component(hass, DOMAIN, {DOMAIN: cfg})
async def test_config_options(hass): async def test_config_options(hass: HomeAssistant) -> None:
"""Test configuration options.""" """Test configuration options."""
count_start = len(hass.states.async_entity_ids()) count_start = len(hass.states.async_entity_ids())
@ -147,7 +146,7 @@ async def test_config_options(hass):
) )
async def test_methods_and_events(hass): async def test_methods_and_events(hass: HomeAssistant) -> None:
"""Test methods and events.""" """Test methods and events."""
hass.state = CoreState.starting hass.state = CoreState.starting
@ -202,7 +201,7 @@ async def test_methods_and_events(hass):
assert len(results) == expectedEvents assert len(results) == expectedEvents
async def test_start_service(hass): async def test_start_service(hass: HomeAssistant) -> None:
"""Test the start/stop service.""" """Test the start/stop service."""
await async_setup_component(hass, DOMAIN, {DOMAIN: {"test1": {CONF_DURATION: 10}}}) await async_setup_component(hass, DOMAIN, {DOMAIN: {"test1": {CONF_DURATION: 10}}})
@ -242,7 +241,7 @@ async def test_start_service(hass):
assert state.attributes[ATTR_REMAINING] == "0:00:15" assert state.attributes[ATTR_REMAINING] == "0:00:15"
async def test_wait_till_timer_expires(hass): async def test_wait_till_timer_expires(hass: HomeAssistant) -> None:
"""Test for a timer to end.""" """Test for a timer to end."""
hass.state = CoreState.starting hass.state = CoreState.starting
@ -286,7 +285,7 @@ async def test_wait_till_timer_expires(hass):
assert len(results) == 2 assert len(results) == 2
async def test_no_initial_state_and_no_restore_state(hass): async def test_no_initial_state_and_no_restore_state(hass: HomeAssistant) -> None:
"""Ensure that entity is create without initial and restore feature.""" """Ensure that entity is create without initial and restore feature."""
hass.state = CoreState.starting hass.state = CoreState.starting
@ -393,7 +392,7 @@ async def test_config_reload(hass, hass_admin_user, hass_read_only_user):
assert ATTR_FRIENDLY_NAME not in state_3.attributes assert ATTR_FRIENDLY_NAME not in state_3.attributes
async def test_timer_restarted_event(hass): async def test_timer_restarted_event(hass: HomeAssistant) -> None:
"""Ensure restarted event is called after starting a paused or running timer.""" """Ensure restarted event is called after starting a paused or running timer."""
hass.state = CoreState.starting hass.state = CoreState.starting
@ -460,7 +459,7 @@ async def test_timer_restarted_event(hass):
assert len(results) == 4 assert len(results) == 4
async def test_state_changed_when_timer_restarted(hass): async def test_state_changed_when_timer_restarted(hass: HomeAssistant) -> None:
"""Ensure timer's state changes when it restarted.""" """Ensure timer's state changes when it restarted."""
hass.state = CoreState.starting hass.state = CoreState.starting
@ -662,7 +661,7 @@ async def test_setup_no_config(hass, hass_admin_user):
assert count_start == len(hass.states.async_entity_ids()) assert count_start == len(hass.states.async_entity_ids())
async def test_restore_idle(hass): async def test_restore_idle(hass: HomeAssistant) -> None:
"""Test entity restore logic when timer is idle.""" """Test entity restore logic when timer is idle."""
utc_now = utcnow() utc_now = utcnow()
stored_state = StoredState( stored_state = StoredState(
@ -702,7 +701,7 @@ async def test_restore_idle(hass):
assert entity.extra_state_attributes[ATTR_RESTORE] assert entity.extra_state_attributes[ATTR_RESTORE]
async def test_restore_paused(hass): async def test_restore_paused(hass: HomeAssistant) -> None:
"""Test entity restore logic when timer is paused.""" """Test entity restore logic when timer is paused."""
utc_now = utcnow() utc_now = utcnow()
stored_state = StoredState( stored_state = StoredState(
@ -742,7 +741,7 @@ async def test_restore_paused(hass):
assert entity.extra_state_attributes[ATTR_RESTORE] assert entity.extra_state_attributes[ATTR_RESTORE]
async def test_restore_active_resume(hass): async def test_restore_active_resume(hass: HomeAssistant) -> None:
"""Test entity restore logic when timer is active and end time is after startup.""" """Test entity restore logic when timer is active and end time is after startup."""
events = async_capture_events(hass, EVENT_TIMER_RESTARTED) events = async_capture_events(hass, EVENT_TIMER_RESTARTED)
assert not events assert not events
@ -793,7 +792,7 @@ async def test_restore_active_resume(hass):
assert len(events) == 1 assert len(events) == 1
async def test_restore_active_finished_outside_grace(hass): async def test_restore_active_finished_outside_grace(hass: HomeAssistant) -> None:
"""Test entity restore logic: timer is active, ended while Home Assistant was stopped.""" """Test entity restore logic: timer is active, ended while Home Assistant was stopped."""
events = async_capture_events(hass, EVENT_TIMER_FINISHED) events = async_capture_events(hass, EVENT_TIMER_FINISHED)
assert not events assert not events

View File

@ -1,4 +1,6 @@
"""Test reproduce state for Timer.""" """Test reproduce state for Timer."""
import pytest
from homeassistant.components.timer import ( from homeassistant.components.timer import (
ATTR_DURATION, ATTR_DURATION,
SERVICE_CANCEL, SERVICE_CANCEL,
@ -8,13 +10,15 @@ from homeassistant.components.timer import (
STATUS_IDLE, STATUS_IDLE,
STATUS_PAUSED, STATUS_PAUSED,
) )
from homeassistant.core import State from homeassistant.core import HomeAssistant, State
from homeassistant.helpers.state import async_reproduce_state from homeassistant.helpers.state import async_reproduce_state
from tests.common import async_mock_service from tests.common import async_mock_service
async def test_reproducing_states(hass, caplog): async def test_reproducing_states(
hass: HomeAssistant, caplog: pytest.LogCaptureFixture
) -> None:
"""Test reproducing Timer states.""" """Test reproducing Timer states."""
hass.states.async_set("timer.entity_idle", STATUS_IDLE, {}) hass.states.async_set("timer.entity_idle", STATUS_IDLE, {})
hass.states.async_set("timer.entity_paused", STATUS_PAUSED, {}) hass.states.async_set("timer.entity_paused", STATUS_PAUSED, {})

View File

@ -34,7 +34,7 @@ def hass_tz_info(hass):
return dt_util.get_time_zone(hass.config.time_zone) return dt_util.get_time_zone(hass.config.time_zone)
async def test_setup(hass): async def test_setup(hass: HomeAssistant) -> None:
"""Test the setup.""" """Test the setup."""
config = { config = {
"binary_sensor": [ "binary_sensor": [
@ -58,7 +58,7 @@ async def test_setup(hass):
assert await async_setup_component(hass, "binary_sensor", config) assert await async_setup_component(hass, "binary_sensor", config)
async def test_setup_no_sensors(hass): async def test_setup_no_sensors(hass: HomeAssistant) -> None:
"""Test setup with no sensors.""" """Test setup with no sensors."""
with assert_setup_component(0): with assert_setup_component(0):
assert await async_setup_component( assert await async_setup_component(
@ -67,7 +67,7 @@ async def test_setup_no_sensors(hass):
@freeze_time("2019-01-10 18:43:00-08:00") @freeze_time("2019-01-10 18:43:00-08:00")
async def test_in_period_on_start(hass): async def test_in_period_on_start(hass: HomeAssistant) -> None:
"""Test simple setting.""" """Test simple setting."""
config = { config = {
"binary_sensor": [ "binary_sensor": [
@ -87,7 +87,9 @@ async def test_in_period_on_start(hass):
@freeze_time("2019-01-10 22:30:00-08:00") @freeze_time("2019-01-10 22:30:00-08:00")
async def test_midnight_turnover_before_midnight_inside_period(hass): async def test_midnight_turnover_before_midnight_inside_period(
hass: HomeAssistant,
) -> None:
"""Test midnight turnover setting before midnight inside period .""" """Test midnight turnover setting before midnight inside period ."""
config = { config = {
"binary_sensor": [ "binary_sensor": [
@ -129,7 +131,9 @@ async def test_midnight_turnover_after_midnight_inside_period(
@freeze_time("2019-01-10 20:30:00-08:00") @freeze_time("2019-01-10 20:30:00-08:00")
async def test_midnight_turnover_before_midnight_outside_period(hass): async def test_midnight_turnover_before_midnight_outside_period(
hass: HomeAssistant,
) -> None:
"""Test midnight turnover setting before midnight outside period.""" """Test midnight turnover setting before midnight outside period."""
config = { config = {
"binary_sensor": [ "binary_sensor": [
@ -144,7 +148,7 @@ async def test_midnight_turnover_before_midnight_outside_period(hass):
@freeze_time("2019-01-10 10:00:00-08:00") @freeze_time("2019-01-10 10:00:00-08:00")
async def test_after_happens_tomorrow(hass): async def test_after_happens_tomorrow(hass: HomeAssistant) -> None:
"""Test when both before and after are in the future, and after is later than before.""" """Test when both before and after are in the future, and after is later than before."""
config = { config = {
"binary_sensor": [ "binary_sensor": [
@ -624,7 +628,9 @@ async def test_dst(hass, freezer, hass_tz_info):
@freeze_time("2019-01-10 18:43:00") @freeze_time("2019-01-10 18:43:00")
@pytest.mark.parametrize("hass_time_zone", ("UTC",)) @pytest.mark.parametrize("hass_time_zone", ("UTC",))
async def test_simple_before_after_does_not_loop_utc_not_in_range(hass): async def test_simple_before_after_does_not_loop_utc_not_in_range(
hass: HomeAssistant,
) -> None:
"""Test simple before after.""" """Test simple before after."""
config = { config = {
"binary_sensor": [ "binary_sensor": [
@ -648,7 +654,9 @@ async def test_simple_before_after_does_not_loop_utc_not_in_range(hass):
@freeze_time("2019-01-10 22:43:00") @freeze_time("2019-01-10 22:43:00")
@pytest.mark.parametrize("hass_time_zone", ("UTC",)) @pytest.mark.parametrize("hass_time_zone", ("UTC",))
async def test_simple_before_after_does_not_loop_utc_in_range(hass): async def test_simple_before_after_does_not_loop_utc_in_range(
hass: HomeAssistant,
) -> None:
"""Test simple before after.""" """Test simple before after."""
config = { config = {
"binary_sensor": [ "binary_sensor": [
@ -672,7 +680,9 @@ async def test_simple_before_after_does_not_loop_utc_in_range(hass):
@freeze_time("2019-01-11 06:00:00") @freeze_time("2019-01-11 06:00:00")
@pytest.mark.parametrize("hass_time_zone", ("UTC",)) @pytest.mark.parametrize("hass_time_zone", ("UTC",))
async def test_simple_before_after_does_not_loop_utc_fire_at_before(hass): async def test_simple_before_after_does_not_loop_utc_fire_at_before(
hass: HomeAssistant,
) -> None:
"""Test simple before after.""" """Test simple before after."""
config = { config = {
"binary_sensor": [ "binary_sensor": [
@ -696,7 +706,9 @@ async def test_simple_before_after_does_not_loop_utc_fire_at_before(hass):
@freeze_time("2019-01-10 22:00:00") @freeze_time("2019-01-10 22:00:00")
@pytest.mark.parametrize("hass_time_zone", ("UTC",)) @pytest.mark.parametrize("hass_time_zone", ("UTC",))
async def test_simple_before_after_does_not_loop_utc_fire_at_after(hass): async def test_simple_before_after_does_not_loop_utc_fire_at_after(
hass: HomeAssistant,
) -> None:
"""Test simple before after.""" """Test simple before after."""
config = { config = {
"binary_sensor": [ "binary_sensor": [
@ -720,7 +732,9 @@ async def test_simple_before_after_does_not_loop_utc_fire_at_after(hass):
@freeze_time("2019-01-10 22:00:00") @freeze_time("2019-01-10 22:00:00")
@pytest.mark.parametrize("hass_time_zone", ("UTC",)) @pytest.mark.parametrize("hass_time_zone", ("UTC",))
async def test_simple_before_after_does_not_loop_utc_both_before_now(hass): async def test_simple_before_after_does_not_loop_utc_both_before_now(
hass: HomeAssistant,
) -> None:
"""Test simple before after.""" """Test simple before after."""
config = { config = {
"binary_sensor": [ "binary_sensor": [
@ -744,7 +758,9 @@ async def test_simple_before_after_does_not_loop_utc_both_before_now(hass):
@freeze_time("2019-01-10 17:43:00+01:00") @freeze_time("2019-01-10 17:43:00+01:00")
@pytest.mark.parametrize("hass_time_zone", ("Europe/Berlin",)) @pytest.mark.parametrize("hass_time_zone", ("Europe/Berlin",))
async def test_simple_before_after_does_not_loop_berlin_not_in_range(hass): async def test_simple_before_after_does_not_loop_berlin_not_in_range(
hass: HomeAssistant,
) -> None:
"""Test simple before after.""" """Test simple before after."""
config = { config = {
"binary_sensor": [ "binary_sensor": [
@ -768,7 +784,9 @@ async def test_simple_before_after_does_not_loop_berlin_not_in_range(hass):
@freeze_time("2019-01-11 00:43:00+01:00") @freeze_time("2019-01-11 00:43:00+01:00")
@pytest.mark.parametrize("hass_time_zone", ("Europe/Berlin",)) @pytest.mark.parametrize("hass_time_zone", ("Europe/Berlin",))
async def test_simple_before_after_does_not_loop_berlin_in_range(hass): async def test_simple_before_after_does_not_loop_berlin_in_range(
hass: HomeAssistant,
) -> None:
"""Test simple before after.""" """Test simple before after."""
config = { config = {
"binary_sensor": [ "binary_sensor": [

View File

@ -9,6 +9,7 @@ from homeassistant.components.toon.const import CONF_AGREEMENT, CONF_MIGRATE, DO
from homeassistant.config import async_process_ha_core_config from homeassistant.config import async_process_ha_core_config
from homeassistant.config_entries import SOURCE_IMPORT, SOURCE_USER from homeassistant.config_entries import SOURCE_IMPORT, SOURCE_USER
from homeassistant.const import CONF_CLIENT_ID, CONF_CLIENT_SECRET from homeassistant.const import CONF_CLIENT_ID, CONF_CLIENT_SECRET
from homeassistant.core import HomeAssistant
from homeassistant.helpers import config_entry_oauth2_flow from homeassistant.helpers import config_entry_oauth2_flow
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
@ -31,7 +32,7 @@ async def setup_component(hass):
await hass.async_block_till_done() await hass.async_block_till_done()
async def test_abort_if_no_configuration(hass): async def test_abort_if_no_configuration(hass: HomeAssistant) -> None:
"""Test abort if no app is configured.""" """Test abort if no app is configured."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": SOURCE_USER} DOMAIN, context={"source": SOURCE_USER}

View File

@ -29,7 +29,7 @@ from .common import (
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
async def test_user(hass): async def test_user(hass: HomeAssistant) -> None:
"""Test user step.""" """Test user step."""
# user starts with no data entered, so show the user form # user starts with no data entered, so show the user form
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
@ -42,7 +42,7 @@ async def test_user(hass):
assert result["step_id"] == "user" assert result["step_id"] == "user"
async def test_user_show_locations(hass): async def test_user_show_locations(hass: HomeAssistant) -> None:
"""Test user locations form.""" """Test user locations form."""
# user/pass provided, so check if valid then ask for usercodes on locations form # user/pass provided, so check if valid then ask for usercodes on locations form
responses = [ responses = [
@ -92,7 +92,7 @@ async def test_user_show_locations(hass):
assert mock_request.call_count == 6 assert mock_request.call_count == 6
async def test_abort_if_already_setup(hass): async def test_abort_if_already_setup(hass: HomeAssistant) -> None:
"""Test abort if the account is already setup.""" """Test abort if the account is already setup."""
MockConfigEntry( MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -112,7 +112,7 @@ async def test_abort_if_already_setup(hass):
assert result["reason"] == "already_configured" assert result["reason"] == "already_configured"
async def test_login_failed(hass): async def test_login_failed(hass: HomeAssistant) -> None:
"""Test when we have errors during login.""" """Test when we have errors during login."""
with patch( with patch(
"homeassistant.components.totalconnect.config_flow.TotalConnectClient" "homeassistant.components.totalconnect.config_flow.TotalConnectClient"
@ -128,7 +128,7 @@ async def test_login_failed(hass):
assert result["errors"] == {"base": "invalid_auth"} assert result["errors"] == {"base": "invalid_auth"}
async def test_reauth(hass): async def test_reauth(hass: HomeAssistant) -> None:
"""Test reauth.""" """Test reauth."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -171,7 +171,7 @@ async def test_reauth(hass):
assert len(hass.config_entries.async_entries()) == 1 assert len(hass.config_entries.async_entries()) == 1
async def test_no_locations(hass): async def test_no_locations(hass: HomeAssistant) -> None:
"""Test with no user locations.""" """Test with no user locations."""
responses = [ responses = [
RESPONSE_AUTHENTICATE, RESPONSE_AUTHENTICATE,

View File

@ -1,13 +1,16 @@
"""Test TotalConnect diagnostics.""" """Test TotalConnect diagnostics."""
from homeassistant.components.diagnostics import REDACTED from homeassistant.components.diagnostics import REDACTED
from homeassistant.core import HomeAssistant
from .common import LOCATION_ID, init_integration from .common import LOCATION_ID, init_integration
from tests.components.diagnostics import get_diagnostics_for_config_entry from tests.components.diagnostics import get_diagnostics_for_config_entry
from tests.typing import ClientSessionGenerator
async def test_entry_diagnostics(hass, hass_client): async def test_entry_diagnostics(
hass: HomeAssistant, hass_client: ClientSessionGenerator
) -> None:
"""Test config entry diagnostics.""" """Test config entry diagnostics."""
entry = await init_integration(hass) entry = await init_integration(hass)

View File

@ -5,6 +5,7 @@ from total_connect_client.exceptions import AuthenticationError
from homeassistant.components.totalconnect.const import DOMAIN from homeassistant.components.totalconnect.const import DOMAIN
from homeassistant.config_entries import ConfigEntryState from homeassistant.config_entries import ConfigEntryState
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from .common import CONFIG_DATA from .common import CONFIG_DATA
@ -12,7 +13,7 @@ from .common import CONFIG_DATA
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
async def test_reauth_started(hass): async def test_reauth_started(hass: HomeAssistant) -> None:
"""Test that reauth is started when we have login errors.""" """Test that reauth is started when we have login errors."""
mock_entry = MockConfigEntry( mock_entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,

View File

@ -246,7 +246,7 @@ async def test_manual_no_capabilities(hass: HomeAssistant):
} }
async def test_discovered_by_discovery_and_dhcp(hass): async def test_discovered_by_discovery_and_dhcp(hass: HomeAssistant) -> None:
"""Test we get the form with discovery and abort for dhcp source when we get both.""" """Test we get the form with discovery and abort for dhcp source when we get both."""
with _patch_discovery(), _patch_single_discovery(): with _patch_discovery(), _patch_single_discovery():

View File

@ -25,7 +25,7 @@ from . import (
from tests.common import MockConfigEntry, async_fire_time_changed from tests.common import MockConfigEntry, async_fire_time_changed
async def test_configuring_tplink_causes_discovery(hass): async def test_configuring_tplink_causes_discovery(hass: HomeAssistant) -> None:
"""Test that specifying empty config does discovery.""" """Test that specifying empty config does discovery."""
with patch("homeassistant.components.tplink.Discover.discover") as discover: with patch("homeassistant.components.tplink.Discover.discover") as discover:
discover.return_value = {MagicMock(): MagicMock()} discover.return_value = {MagicMock(): MagicMock()}
@ -47,7 +47,7 @@ async def test_configuring_tplink_causes_discovery(hass):
assert len(discover.mock_calls) == call_count * 4 assert len(discover.mock_calls) == call_count * 4
async def test_config_entry_reload(hass): async def test_config_entry_reload(hass: HomeAssistant) -> None:
"""Test that a config entry can be reloaded.""" """Test that a config entry can be reloaded."""
already_migrated_config_entry = MockConfigEntry( already_migrated_config_entry = MockConfigEntry(
domain=DOMAIN, data={}, unique_id=MAC_ADDRESS domain=DOMAIN, data={}, unique_id=MAC_ADDRESS
@ -62,7 +62,7 @@ async def test_config_entry_reload(hass):
assert already_migrated_config_entry.state == ConfigEntryState.NOT_LOADED assert already_migrated_config_entry.state == ConfigEntryState.NOT_LOADED
async def test_config_entry_retry(hass): async def test_config_entry_retry(hass: HomeAssistant) -> None:
"""Test that a config entry can be retried.""" """Test that a config entry can be retried."""
already_migrated_config_entry = MockConfigEntry( already_migrated_config_entry = MockConfigEntry(
domain=DOMAIN, data={CONF_HOST: IP_ADDRESS}, unique_id=MAC_ADDRESS domain=DOMAIN, data={CONF_HOST: IP_ADDRESS}, unique_id=MAC_ADDRESS

View File

@ -15,12 +15,13 @@ from homeassistant.const import (
CONF_PLATFORM, CONF_PLATFORM,
CONF_USERNAME, CONF_USERNAME,
) )
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from tests.common import async_capture_events from tests.common import async_capture_events
async def test_import_events_catch_all(hass): async def test_import_events_catch_all(hass: HomeAssistant) -> None:
"""Test importing all events and firing them in HA using their event types.""" """Test importing all events and firing them in HA using their event types."""
conf_dict = { conf_dict = {
DOMAIN: TRACCAR_PLATFORM_SCHEMA( DOMAIN: TRACCAR_PLATFORM_SCHEMA(

View File

@ -98,7 +98,7 @@ async def test_flow_entry_already_exists(hass: HomeAssistant) -> None:
assert result["reason"] == "already_configured" assert result["reason"] == "already_configured"
async def test_reauthentication(hass): async def test_reauthentication(hass: HomeAssistant) -> None:
"""Test Tractive reauthentication.""" """Test Tractive reauthentication."""
old_entry = MockConfigEntry( old_entry = MockConfigEntry(
domain="tractive", domain="tractive",
@ -136,7 +136,7 @@ async def test_reauthentication(hass):
assert len(mock_setup_entry.mock_calls) == 1 assert len(mock_setup_entry.mock_calls) == 1
async def test_reauthentication_failure(hass): async def test_reauthentication_failure(hass: HomeAssistant) -> None:
"""Test Tractive reauthentication failure.""" """Test Tractive reauthentication failure."""
old_entry = MockConfigEntry( old_entry = MockConfigEntry(
domain="tractive", domain="tractive",
@ -174,7 +174,7 @@ async def test_reauthentication_failure(hass):
assert result2["errors"]["base"] == "invalid_auth" assert result2["errors"]["base"] == "invalid_auth"
async def test_reauthentication_unknown_failure(hass): async def test_reauthentication_unknown_failure(hass: HomeAssistant) -> None:
"""Test Tractive reauthentication failure.""" """Test Tractive reauthentication failure."""
old_entry = MockConfigEntry( old_entry = MockConfigEntry(
domain="tractive", domain="tractive",
@ -212,7 +212,7 @@ async def test_reauthentication_unknown_failure(hass):
assert result2["errors"]["base"] == "unknown" assert result2["errors"]["base"] == "unknown"
async def test_reauthentication_failure_no_existing_entry(hass): async def test_reauthentication_failure_no_existing_entry(hass: HomeAssistant) -> None:
"""Test Tractive reauthentication with no existing entry.""" """Test Tractive reauthentication with no existing entry."""
old_entry = MockConfigEntry( old_entry = MockConfigEntry(
domain="tractive", domain="tractive",

View File

@ -6,6 +6,7 @@ import pytest
from homeassistant import config_entries, data_entry_flow from homeassistant import config_entries, data_entry_flow
from homeassistant.components import zeroconf from homeassistant.components import zeroconf
from homeassistant.components.tradfri import config_flow from homeassistant.components.tradfri import config_flow
from homeassistant.core import HomeAssistant
from . import TRADFRI_PATH from . import TRADFRI_PATH
@ -128,7 +129,7 @@ async def test_discovery_connection(hass, mock_auth, mock_entry_setup):
} }
async def test_discovery_duplicate_aborted(hass): async def test_discovery_duplicate_aborted(hass: HomeAssistant) -> None:
"""Test a duplicate discovery host aborts and updates existing entry.""" """Test a duplicate discovery host aborts and updates existing entry."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain="tradfri", data={"host": "some-host"}, unique_id="homekit-id" domain="tradfri", data={"host": "some-host"}, unique_id="homekit-id"
@ -155,7 +156,7 @@ async def test_discovery_duplicate_aborted(hass):
assert entry.data["host"] == "new-host" assert entry.data["host"] == "new-host"
async def test_import_duplicate_aborted(hass): async def test_import_duplicate_aborted(hass: HomeAssistant) -> None:
"""Test a duplicate import host is ignored.""" """Test a duplicate import host is ignored."""
MockConfigEntry(domain="tradfri", data={"host": "some-host"}).add_to_hass(hass) MockConfigEntry(domain="tradfri", data={"host": "some-host"}).add_to_hass(hass)
@ -204,7 +205,7 @@ async def test_duplicate_discovery(hass, mock_auth, mock_entry_setup):
assert result2["type"] == data_entry_flow.FlowResultType.ABORT assert result2["type"] == data_entry_flow.FlowResultType.ABORT
async def test_discovery_updates_unique_id(hass): async def test_discovery_updates_unique_id(hass: HomeAssistant) -> None:
"""Test a duplicate discovery host aborts and updates existing entry.""" """Test a duplicate discovery host aborts and updates existing entry."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain="tradfri", domain="tradfri",

View File

@ -67,7 +67,7 @@ async def test_device_already_configured(
assert result2["reason"] == "already_configured" assert result2["reason"] == "already_configured"
async def test_name_already_configured(hass): async def test_name_already_configured(hass: HomeAssistant) -> None:
"""Test name is already configured.""" """Test name is already configured."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=transmission.DOMAIN, domain=transmission.DOMAIN,

View File

@ -5,6 +5,7 @@ from unittest.mock import patch
from homeassistant import config as hass_config, setup from homeassistant import config as hass_config, setup
from homeassistant.components.trend.const import DOMAIN from homeassistant.components.trend.const import DOMAIN
from homeassistant.const import SERVICE_RELOAD, STATE_UNKNOWN from homeassistant.const import SERVICE_RELOAD, STATE_UNKNOWN
from homeassistant.core import HomeAssistant
import homeassistant.util.dt as dt_util import homeassistant.util.dt as dt_util
from tests.common import ( from tests.common import (
@ -378,7 +379,7 @@ class TestTrendBinarySensor:
assert self.hass.states.all("binary_sensor") == [] assert self.hass.states.all("binary_sensor") == []
async def test_reload(hass): async def test_reload(hass: HomeAssistant) -> None:
"""Verify we can reload trend sensors.""" """Verify we can reload trend sensors."""
hass.states.async_set("sensor.test_state", 1234) hass.states.async_set("sensor.test_state", 1234)

View File

@ -16,11 +16,13 @@ from homeassistant.components.media_player import (
MediaType, MediaType,
) )
from homeassistant.config import async_process_ha_core_config from homeassistant.config import async_process_ha_core_config
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from homeassistant.util.network import normalize_url from homeassistant.util.network import normalize_url
from tests.common import assert_setup_component, async_mock_service from tests.common import assert_setup_component, async_mock_service
from tests.typing import ClientSessionGenerator
ORIG_WRITE_TAGS = tts.SpeechManager.write_tags ORIG_WRITE_TAGS = tts.SpeechManager.write_tags
@ -176,7 +178,9 @@ async def test_setup_component_and_test_service_with_config_language_special(
).is_file() ).is_file()
async def test_setup_component_and_test_service_with_wrong_conf_language(hass): async def test_setup_component_and_test_service_with_wrong_conf_language(
hass: HomeAssistant,
) -> None:
"""Set up the demo platform and call service with wrong config.""" """Set up the demo platform and call service with wrong config."""
config = {tts.DOMAIN: {"platform": "demo", "language": "ru"}} config = {tts.DOMAIN: {"platform": "demo", "language": "ru"}}
@ -352,7 +356,9 @@ async def test_setup_component_and_test_service_with_service_options_wrong(
).is_file() ).is_file()
async def test_setup_component_and_test_service_with_base_url_set(hass): async def test_setup_component_and_test_service_with_base_url_set(
hass: HomeAssistant,
) -> None:
"""Set up the demo platform with ``base_url`` set and call service.""" """Set up the demo platform with ``base_url`` set and call service."""
calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA) calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA)
@ -498,7 +504,9 @@ async def test_setup_component_and_test_service_with_receive_voice_german(
assert await req.read() == demo_data assert await req.read() == demo_data
async def test_setup_component_and_web_view_wrong_file(hass, hass_client): async def test_setup_component_and_web_view_wrong_file(
hass: HomeAssistant, hass_client: ClientSessionGenerator
) -> None:
"""Set up the demo platform and receive wrong file from web.""" """Set up the demo platform and receive wrong file from web."""
config = {tts.DOMAIN: {"platform": "demo"}} config = {tts.DOMAIN: {"platform": "demo"}}
@ -513,7 +521,9 @@ async def test_setup_component_and_web_view_wrong_file(hass, hass_client):
assert req.status == HTTPStatus.NOT_FOUND assert req.status == HTTPStatus.NOT_FOUND
async def test_setup_component_and_web_view_wrong_filename(hass, hass_client): async def test_setup_component_and_web_view_wrong_filename(
hass: HomeAssistant, hass_client: ClientSessionGenerator
) -> None:
"""Set up the demo platform and receive wrong filename from web.""" """Set up the demo platform and receive wrong filename from web."""
config = {tts.DOMAIN: {"platform": "demo"}} config = {tts.DOMAIN: {"platform": "demo"}}
@ -620,7 +630,7 @@ async def test_setup_component_test_with_cache_dir(
) )
async def test_setup_component_test_with_error_on_get_tts(hass): async def test_setup_component_test_with_error_on_get_tts(hass: HomeAssistant) -> None:
"""Set up demo platform with wrong get_tts_audio.""" """Set up demo platform with wrong get_tts_audio."""
config = {tts.DOMAIN: {"platform": "demo"}} config = {tts.DOMAIN: {"platform": "demo"}}
@ -657,7 +667,9 @@ async def test_setup_component_load_cache_retrieve_without_mem_cache(
assert await req.read() == demo_data assert await req.read() == demo_data
async def test_setup_component_and_web_get_url(hass, hass_client): async def test_setup_component_and_web_get_url(
hass: HomeAssistant, hass_client: ClientSessionGenerator
) -> None:
"""Set up the demo platform and receive file from web.""" """Set up the demo platform and receive file from web."""
config = {tts.DOMAIN: {"platform": "demo"}} config = {tts.DOMAIN: {"platform": "demo"}}
@ -677,7 +689,9 @@ async def test_setup_component_and_web_get_url(hass, hass_client):
} }
async def test_setup_component_and_web_get_url_bad_config(hass, hass_client): async def test_setup_component_and_web_get_url_bad_config(
hass: HomeAssistant, hass_client: ClientSessionGenerator
) -> None:
"""Set up the demo platform and receive wrong file from web.""" """Set up the demo platform and receive wrong file from web."""
config = {tts.DOMAIN: {"platform": "demo"}} config = {tts.DOMAIN: {"platform": "demo"}}

View File

@ -5,6 +5,7 @@ import pytest
from homeassistant.components import media_source from homeassistant.components import media_source
from homeassistant.components.media_player.errors import BrowseError from homeassistant.components.media_player.errors import BrowseError
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
@ -29,7 +30,7 @@ async def mock_get_tts_audio(hass):
yield mock_get_tts yield mock_get_tts
async def test_browsing(hass): async def test_browsing(hass: HomeAssistant) -> None:
"""Test browsing TTS media source.""" """Test browsing TTS media source."""
item = await media_source.async_browse_media(hass, "media-source://tts") item = await media_source.async_browse_media(hass, "media-source://tts")
assert item is not None assert item is not None
@ -96,7 +97,7 @@ async def test_resolving(hass, mock_get_tts_audio):
assert mock_get_tts_audio.mock_calls[0][2]["options"] == {"voice": "Paulus"} assert mock_get_tts_audio.mock_calls[0][2]["options"] == {"voice": "Paulus"}
async def test_resolving_errors(hass): async def test_resolving_errors(hass: HomeAssistant) -> None:
"""Test resolving.""" """Test resolving."""
# No message added # No message added
with pytest.raises(media_source.Unresolvable): with pytest.raises(media_source.Unresolvable):

View File

@ -10,6 +10,7 @@ from homeassistant.components.media_player import (
import homeassistant.components.notify as notify import homeassistant.components.notify as notify
import homeassistant.components.tts as tts import homeassistant.components.tts as tts
from homeassistant.config import async_process_ha_core_config from homeassistant.config import async_process_ha_core_config
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from tests.common import assert_setup_component, async_mock_service from tests.common import assert_setup_component, async_mock_service
@ -29,7 +30,7 @@ async def internal_url_mock(hass):
) )
async def test_setup_platform(hass): async def test_setup_platform(hass: HomeAssistant) -> None:
"""Set up the tts platform .""" """Set up the tts platform ."""
config = { config = {
notify.DOMAIN: { notify.DOMAIN: {
@ -45,7 +46,7 @@ async def test_setup_platform(hass):
assert hass.services.has_service(notify.DOMAIN, "tts_test") assert hass.services.has_service(notify.DOMAIN, "tts_test")
async def test_setup_component_and_test_service(hass): async def test_setup_component_and_test_service(hass: HomeAssistant) -> None:
"""Set up the demo platform and call service.""" """Set up the demo platform and call service."""
calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA) calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA)

View File

@ -2,10 +2,14 @@
from homeassistant import config_entries, data_entry_flow from homeassistant import config_entries, data_entry_flow
from homeassistant.components import twilio from homeassistant.components import twilio
from homeassistant.config import async_process_ha_core_config from homeassistant.config import async_process_ha_core_config
from homeassistant.core import callback from homeassistant.core import HomeAssistant, callback
from tests.typing import ClientSessionGenerator
async def test_config_flow_registers_webhook(hass, hass_client_no_auth): async def test_config_flow_registers_webhook(
hass: HomeAssistant, hass_client_no_auth: ClientSessionGenerator
) -> None:
"""Test setting up Twilio and sending webhook.""" """Test setting up Twilio and sending webhook."""
await async_process_ha_core_config( await async_process_ha_core_config(
hass, hass,

View File

@ -10,13 +10,14 @@ from homeassistant.components.twinkly.const import (
DOMAIN as TWINKLY_DOMAIN, DOMAIN as TWINKLY_DOMAIN,
) )
from homeassistant.const import CONF_MODEL from homeassistant.const import CONF_MODEL
from homeassistant.core import HomeAssistant
from . import TEST_MODEL, ClientMock from . import TEST_MODEL, ClientMock
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
async def test_invalid_host(hass): async def test_invalid_host(hass: HomeAssistant) -> None:
"""Test the failure when invalid host provided.""" """Test the failure when invalid host provided."""
client = ClientMock() client = ClientMock()
client.is_offline = True client.is_offline = True
@ -39,7 +40,7 @@ async def test_invalid_host(hass):
assert result["errors"] == {CONF_HOST: "cannot_connect"} assert result["errors"] == {CONF_HOST: "cannot_connect"}
async def test_success_flow(hass): async def test_success_flow(hass: HomeAssistant) -> None:
"""Test that an entity is created when the flow completes.""" """Test that an entity is created when the flow completes."""
client = ClientMock() client = ClientMock()
with patch( with patch(
@ -68,7 +69,7 @@ async def test_success_flow(hass):
} }
async def test_dhcp_can_confirm(hass): async def test_dhcp_can_confirm(hass: HomeAssistant) -> None:
"""Test DHCP discovery flow can confirm right away.""" """Test DHCP discovery flow can confirm right away."""
client = ClientMock() client = ClientMock()
with patch( with patch(
@ -89,7 +90,7 @@ async def test_dhcp_can_confirm(hass):
assert result["step_id"] == "discovery_confirm" assert result["step_id"] == "discovery_confirm"
async def test_dhcp_success(hass): async def test_dhcp_success(hass: HomeAssistant) -> None:
"""Test DHCP discovery flow success.""" """Test DHCP discovery flow success."""
client = ClientMock() client = ClientMock()
with patch( with patch(
@ -121,7 +122,7 @@ async def test_dhcp_success(hass):
} }
async def test_dhcp_already_exists(hass): async def test_dhcp_already_exists(hass: HomeAssistant) -> None:
"""Test DHCP discovery flow that fails to connect.""" """Test DHCP discovery flow that fails to connect."""
client = ClientMock() client = ClientMock()

View File

@ -3,6 +3,7 @@ from unittest.mock import MagicMock, patch
from homeassistant.components import sensor from homeassistant.components import sensor
from homeassistant.const import CONF_CLIENT_ID, CONF_CLIENT_SECRET from homeassistant.const import CONF_CLIENT_ID, CONF_CLIENT_SECRET
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
ENTITY_ID = "sensor.channel123" ENTITY_ID = "sensor.channel123"
@ -48,7 +49,7 @@ def make_data(data):
return {"data": data, "total": len(data)} return {"data": data, "total": len(data)}
async def test_init(hass): async def test_init(hass: HomeAssistant) -> None:
"""Test initial config.""" """Test initial config."""
twitch_mock = MagicMock() twitch_mock = MagicMock()
@ -72,7 +73,7 @@ async def test_init(hass):
assert sensor_state.attributes["followers"] == 24 assert sensor_state.attributes["followers"] == 24
async def test_offline(hass): async def test_offline(hass: HomeAssistant) -> None:
"""Test offline state.""" """Test offline state."""
twitch_mock = MagicMock() twitch_mock = MagicMock()
@ -93,7 +94,7 @@ async def test_offline(hass):
assert sensor_state.attributes["entity_picture"] == "logo.png" assert sensor_state.attributes["entity_picture"] == "logo.png"
async def test_streaming(hass): async def test_streaming(hass: HomeAssistant) -> None:
"""Test streaming state.""" """Test streaming state."""
twitch_mock = MagicMock() twitch_mock = MagicMock()
@ -116,7 +117,7 @@ async def test_streaming(hass):
assert sensor_state.attributes["title"] == "Title" assert sensor_state.attributes["title"] == "Title"
async def test_oauth_without_sub_and_follow(hass): async def test_oauth_without_sub_and_follow(hass: HomeAssistant) -> None:
"""Test state with oauth.""" """Test state with oauth."""
twitch_mock = MagicMock() twitch_mock = MagicMock()
@ -145,7 +146,7 @@ async def test_oauth_without_sub_and_follow(hass):
assert sensor_state.attributes["following"] is False assert sensor_state.attributes["following"] is False
async def test_oauth_with_sub(hass): async def test_oauth_with_sub(hass: HomeAssistant) -> None:
"""Test state with oauth and sub.""" """Test state with oauth and sub."""
twitch_mock = MagicMock() twitch_mock = MagicMock()
@ -177,7 +178,7 @@ async def test_oauth_with_sub(hass):
assert sensor_state.attributes["following"] is False assert sensor_state.attributes["following"] is False
async def test_oauth_with_follow(hass): async def test_oauth_with_follow(hass: HomeAssistant) -> None:
"""Test state with oauth and follow.""" """Test state with oauth and follow."""
twitch_mock = MagicMock() twitch_mock = MagicMock()

View File

@ -16,6 +16,7 @@ from homeassistant.components.uk_transport.sensor import (
CONF_API_APP_KEY, CONF_API_APP_KEY,
UkTransportSensor, UkTransportSensor,
) )
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from homeassistant.util.dt import now from homeassistant.util.dt import now
@ -43,7 +44,7 @@ VALID_CONFIG = {
} }
async def test_bus(hass): async def test_bus(hass: HomeAssistant) -> None:
"""Test for operational uk_transport sensor with proper attributes.""" """Test for operational uk_transport sensor with proper attributes."""
with requests_mock.Mocker() as mock_req: with requests_mock.Mocker() as mock_req:
uri = re.compile(UkTransportSensor.TRANSPORT_API_URL_BASE + "*") uri = re.compile(UkTransportSensor.TRANSPORT_API_URL_BASE + "*")
@ -65,7 +66,7 @@ async def test_bus(hass):
assert None is not direction_re.search(bus["direction"]) assert None is not direction_re.search(bus["direction"])
async def test_train(hass): async def test_train(hass: HomeAssistant) -> None:
"""Test for operational uk_transport sensor with proper attributes.""" """Test for operational uk_transport sensor with proper attributes."""
with requests_mock.Mocker() as mock_req, patch( with requests_mock.Mocker() as mock_req, patch(
"homeassistant.util.dt.now", return_value=now().replace(hour=13) "homeassistant.util.dt.now", return_value=now().replace(hour=13)

View File

@ -1,5 +1,4 @@
"""Test UniFi Network config flow.""" """Test UniFi Network config flow."""
import socket import socket
from unittest.mock import patch from unittest.mock import patch
@ -31,10 +30,12 @@ from homeassistant.const import (
CONF_VERIFY_SSL, CONF_VERIFY_SSL,
CONTENT_TYPE_JSON, CONTENT_TYPE_JSON,
) )
from homeassistant.core import HomeAssistant
from .test_controller import setup_unifi_integration from .test_controller import setup_unifi_integration
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
from tests.test_util.aiohttp import AiohttpClientMocker
CLIENTS = [{"mac": "00:00:00:00:00:01"}] CLIENTS = [{"mac": "00:00:00:00:00:01"}]
@ -162,7 +163,9 @@ async def test_flow_works_negative_discovery(hass, aioclient_mock, mock_discover
} }
async def test_flow_multiple_sites(hass, aioclient_mock): async def test_flow_multiple_sites(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test config flow works when finding multiple sites.""" """Test config flow works when finding multiple sites."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
UNIFI_DOMAIN, context={"source": config_entries.SOURCE_USER} UNIFI_DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -208,7 +211,9 @@ async def test_flow_multiple_sites(hass, aioclient_mock):
assert result["data_schema"]({"site": "2"}) assert result["data_schema"]({"site": "2"})
async def test_flow_raise_already_configured(hass, aioclient_mock): async def test_flow_raise_already_configured(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test config flow aborts since a connected config entry already exists.""" """Test config flow aborts since a connected config entry already exists."""
await setup_unifi_integration(hass, aioclient_mock) await setup_unifi_integration(hass, aioclient_mock)
@ -255,7 +260,9 @@ async def test_flow_raise_already_configured(hass, aioclient_mock):
assert result["reason"] == "already_configured" assert result["reason"] == "already_configured"
async def test_flow_aborts_configuration_updated(hass, aioclient_mock): async def test_flow_aborts_configuration_updated(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test config flow aborts since a connected config entry already exists.""" """Test config flow aborts since a connected config entry already exists."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=UNIFI_DOMAIN, data={"host": "1.2.3.4", "site": "office"}, unique_id="2" domain=UNIFI_DOMAIN, data={"host": "1.2.3.4", "site": "office"}, unique_id="2"
@ -309,7 +316,9 @@ async def test_flow_aborts_configuration_updated(hass, aioclient_mock):
assert result["reason"] == "configuration_updated" assert result["reason"] == "configuration_updated"
async def test_flow_fails_user_credentials_faulty(hass, aioclient_mock): async def test_flow_fails_user_credentials_faulty(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test config flow.""" """Test config flow."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
UNIFI_DOMAIN, context={"source": config_entries.SOURCE_USER} UNIFI_DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -336,7 +345,9 @@ async def test_flow_fails_user_credentials_faulty(hass, aioclient_mock):
assert result["errors"] == {"base": "faulty_credentials"} assert result["errors"] == {"base": "faulty_credentials"}
async def test_flow_fails_controller_unavailable(hass, aioclient_mock): async def test_flow_fails_controller_unavailable(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test config flow.""" """Test config flow."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
UNIFI_DOMAIN, context={"source": config_entries.SOURCE_USER} UNIFI_DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -363,7 +374,9 @@ async def test_flow_fails_controller_unavailable(hass, aioclient_mock):
assert result["errors"] == {"base": "service_unavailable"} assert result["errors"] == {"base": "service_unavailable"}
async def test_reauth_flow_update_configuration(hass, aioclient_mock): async def test_reauth_flow_update_configuration(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Verify reauth flow can update controller configuration.""" """Verify reauth flow can update controller configuration."""
config_entry = await setup_unifi_integration(hass, aioclient_mock) config_entry = await setup_unifi_integration(hass, aioclient_mock)
controller = hass.data[UNIFI_DOMAIN][config_entry.entry_id] controller = hass.data[UNIFI_DOMAIN][config_entry.entry_id]
@ -421,7 +434,9 @@ async def test_reauth_flow_update_configuration(hass, aioclient_mock):
assert config_entry.data[CONF_PASSWORD] == "new_pass" assert config_entry.data[CONF_PASSWORD] == "new_pass"
async def test_advanced_option_flow(hass, aioclient_mock): async def test_advanced_option_flow(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test advanced config flow options.""" """Test advanced config flow options."""
config_entry = await setup_unifi_integration( config_entry = await setup_unifi_integration(
hass, hass,
@ -494,7 +509,9 @@ async def test_advanced_option_flow(hass, aioclient_mock):
} }
async def test_simple_option_flow(hass, aioclient_mock): async def test_simple_option_flow(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test simple config flow options.""" """Test simple config flow options."""
config_entry = await setup_unifi_integration( config_entry = await setup_unifi_integration(
hass, hass,
@ -530,7 +547,9 @@ async def test_simple_option_flow(hass, aioclient_mock):
} }
async def test_option_flow_integration_not_setup(hass, aioclient_mock): async def test_option_flow_integration_not_setup(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test advanced config flow options.""" """Test advanced config flow options."""
config_entry = await setup_unifi_integration(hass, aioclient_mock) config_entry = await setup_unifi_integration(hass, aioclient_mock)
@ -541,7 +560,7 @@ async def test_option_flow_integration_not_setup(hass, aioclient_mock):
assert result["reason"] == "integration_not_setup" assert result["reason"] == "integration_not_setup"
async def test_form_ssdp(hass): async def test_form_ssdp(hass: HomeAssistant) -> None:
"""Test we get the form with ssdp source.""" """Test we get the form with ssdp source."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
@ -581,7 +600,7 @@ async def test_form_ssdp(hass):
} }
async def test_form_ssdp_aborts_if_host_already_exists(hass): async def test_form_ssdp_aborts_if_host_already_exists(hass: HomeAssistant) -> None:
"""Test we abort if the host is already configured.""" """Test we abort if the host is already configured."""
entry = MockConfigEntry( entry = MockConfigEntry(
@ -607,7 +626,7 @@ async def test_form_ssdp_aborts_if_host_already_exists(hass):
assert result["reason"] == "already_configured" assert result["reason"] == "already_configured"
async def test_form_ssdp_aborts_if_serial_already_exists(hass): async def test_form_ssdp_aborts_if_serial_already_exists(hass: HomeAssistant) -> None:
"""Test we abort if the serial is already configured.""" """Test we abort if the serial is already configured."""
entry = MockConfigEntry( entry = MockConfigEntry(
@ -634,7 +653,7 @@ async def test_form_ssdp_aborts_if_serial_already_exists(hass):
assert result["reason"] == "already_configured" assert result["reason"] == "already_configured"
async def test_form_ssdp_gets_form_with_ignored_entry(hass): async def test_form_ssdp_gets_form_with_ignored_entry(hass: HomeAssistant) -> None:
"""Test we can still setup if there is an ignored entry.""" """Test we can still setup if there is an ignored entry."""
entry = MockConfigEntry( entry = MockConfigEntry(
@ -671,13 +690,13 @@ async def test_form_ssdp_gets_form_with_ignored_entry(hass):
} }
async def test_discover_unifi_positive(hass): async def test_discover_unifi_positive(hass: HomeAssistant) -> None:
"""Verify positive run of UniFi discovery.""" """Verify positive run of UniFi discovery."""
with patch("socket.gethostbyname", return_value=True): with patch("socket.gethostbyname", return_value=True):
assert await _async_discover_unifi(hass) assert await _async_discover_unifi(hass)
async def test_discover_unifi_negative(hass): async def test_discover_unifi_negative(hass: HomeAssistant) -> None:
"""Verify negative run of UniFi discovery.""" """Verify negative run of UniFi discovery."""
with patch("socket.gethostbyname", side_effect=socket.gaierror): with patch("socket.gethostbyname", side_effect=socket.gaierror):
assert await _async_discover_unifi(hass) is None assert await _async_discover_unifi(hass) is None

View File

@ -1,5 +1,4 @@
"""Test UniFi Network.""" """Test UniFi Network."""
import asyncio import asyncio
from copy import deepcopy from copy import deepcopy
from datetime import timedelta from datetime import timedelta
@ -39,6 +38,7 @@ from homeassistant.const import (
CONF_VERIFY_SSL, CONF_VERIFY_SSL,
CONTENT_TYPE_JSON, CONTENT_TYPE_JSON,
) )
from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr from homeassistant.helpers import device_registry as dr
from homeassistant.helpers.device_registry import CONNECTION_NETWORK_MAC from homeassistant.helpers.device_registry import CONNECTION_NETWORK_MAC
from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.dispatcher import async_dispatcher_connect
@ -46,6 +46,7 @@ from homeassistant.setup import async_setup_component
import homeassistant.util.dt as dt_util import homeassistant.util.dt as dt_util
from tests.common import MockConfigEntry, async_fire_time_changed from tests.common import MockConfigEntry, async_fire_time_changed
from tests.test_util.aiohttp import AiohttpClientMocker
DEFAULT_CONFIG_ENTRY_ID = "1" DEFAULT_CONFIG_ENTRY_ID = "1"
DEFAULT_HOST = "1.2.3.4" DEFAULT_HOST = "1.2.3.4"
@ -209,7 +210,9 @@ async def setup_unifi_integration(
return config_entry return config_entry
async def test_controller_setup(hass, aioclient_mock): async def test_controller_setup(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Successful setup.""" """Successful setup."""
with patch( with patch(
"homeassistant.config_entries.ConfigEntries.async_forward_entry_setup", "homeassistant.config_entries.ConfigEntries.async_forward_entry_setup",
@ -247,7 +250,9 @@ async def test_controller_setup(hass, aioclient_mock):
assert controller.signal_heartbeat_missed == "unifi-heartbeat-missed" assert controller.signal_heartbeat_missed == "unifi-heartbeat-missed"
async def test_controller_mac(hass, aioclient_mock): async def test_controller_mac(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test that it is possible to identify controller mac.""" """Test that it is possible to identify controller mac."""
config_entry = await setup_unifi_integration( config_entry = await setup_unifi_integration(
hass, aioclient_mock, clients_response=[CONTROLLER_HOST] hass, aioclient_mock, clients_response=[CONTROLLER_HOST]
@ -264,7 +269,7 @@ async def test_controller_mac(hass, aioclient_mock):
assert device_entry.configuration_url == controller.api.url assert device_entry.configuration_url == controller.api.url
async def test_controller_not_accessible(hass): async def test_controller_not_accessible(hass: HomeAssistant) -> None:
"""Retry to login gets scheduled when connection fails.""" """Retry to login gets scheduled when connection fails."""
with patch( with patch(
"homeassistant.components.unifi.controller.get_unifi_controller", "homeassistant.components.unifi.controller.get_unifi_controller",
@ -274,7 +279,7 @@ async def test_controller_not_accessible(hass):
assert hass.data[UNIFI_DOMAIN] == {} assert hass.data[UNIFI_DOMAIN] == {}
async def test_controller_trigger_reauth_flow(hass): async def test_controller_trigger_reauth_flow(hass: HomeAssistant) -> None:
"""Failed authentication trigger a reauthentication flow.""" """Failed authentication trigger a reauthentication flow."""
with patch( with patch(
"homeassistant.components.unifi.get_unifi_controller", "homeassistant.components.unifi.get_unifi_controller",
@ -285,7 +290,7 @@ async def test_controller_trigger_reauth_flow(hass):
assert hass.data[UNIFI_DOMAIN] == {} assert hass.data[UNIFI_DOMAIN] == {}
async def test_controller_unknown_error(hass): async def test_controller_unknown_error(hass: HomeAssistant) -> None:
"""Unknown errors are handled.""" """Unknown errors are handled."""
with patch( with patch(
"homeassistant.components.unifi.controller.get_unifi_controller", "homeassistant.components.unifi.controller.get_unifi_controller",
@ -295,7 +300,9 @@ async def test_controller_unknown_error(hass):
assert hass.data[UNIFI_DOMAIN] == {} assert hass.data[UNIFI_DOMAIN] == {}
async def test_config_entry_updated(hass, aioclient_mock): async def test_config_entry_updated(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Calling reset when the entry has been setup.""" """Calling reset when the entry has been setup."""
config_entry = await setup_unifi_integration(hass, aioclient_mock) config_entry = await setup_unifi_integration(hass, aioclient_mock)
controller = hass.data[UNIFI_DOMAIN][config_entry.entry_id] controller = hass.data[UNIFI_DOMAIN][config_entry.entry_id]
@ -316,7 +323,9 @@ async def test_config_entry_updated(hass, aioclient_mock):
unsub() unsub()
async def test_reset_after_successful_setup(hass, aioclient_mock): async def test_reset_after_successful_setup(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Calling reset when the entry has been setup.""" """Calling reset when the entry has been setup."""
config_entry = await setup_unifi_integration(hass, aioclient_mock) config_entry = await setup_unifi_integration(hass, aioclient_mock)
controller = hass.data[UNIFI_DOMAIN][config_entry.entry_id] controller = hass.data[UNIFI_DOMAIN][config_entry.entry_id]
@ -327,7 +336,9 @@ async def test_reset_after_successful_setup(hass, aioclient_mock):
assert result is True assert result is True
async def test_reset_fails(hass, aioclient_mock): async def test_reset_fails(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Calling reset when the entry has been setup can return false.""" """Calling reset when the entry has been setup can return false."""
config_entry = await setup_unifi_integration(hass, aioclient_mock) config_entry = await setup_unifi_integration(hass, aioclient_mock)
controller = hass.data[UNIFI_DOMAIN][config_entry.entry_id] controller = hass.data[UNIFI_DOMAIN][config_entry.entry_id]
@ -459,7 +470,7 @@ async def test_reconnect_mechanism_exceptions(
mock_reconnect.assert_called_once() mock_reconnect.assert_called_once()
async def test_get_unifi_controller(hass): async def test_get_unifi_controller(hass: HomeAssistant) -> None:
"""Successful call.""" """Successful call."""
with patch("aiounifi.Controller.check_unifi_os", return_value=True), patch( with patch("aiounifi.Controller.check_unifi_os", return_value=True), patch(
"aiounifi.Controller.login", return_value=True "aiounifi.Controller.login", return_value=True
@ -467,7 +478,7 @@ async def test_get_unifi_controller(hass):
assert await get_unifi_controller(hass, ENTRY_CONFIG) assert await get_unifi_controller(hass, ENTRY_CONFIG)
async def test_get_unifi_controller_verify_ssl_false(hass): async def test_get_unifi_controller_verify_ssl_false(hass: HomeAssistant) -> None:
"""Successful call with verify ssl set to false.""" """Successful call with verify ssl set to false."""
controller_data = dict(ENTRY_CONFIG) controller_data = dict(ENTRY_CONFIG)
controller_data[CONF_VERIFY_SSL] = False controller_data[CONF_VERIFY_SSL] = False

View File

@ -1,5 +1,4 @@
"""The tests for the UniFi Network device tracker platform.""" """The tests for the UniFi Network device tracker platform."""
from datetime import timedelta from datetime import timedelta
from unittest.mock import patch from unittest.mock import patch
@ -18,15 +17,19 @@ from homeassistant.components.unifi.const import (
DOMAIN as UNIFI_DOMAIN, DOMAIN as UNIFI_DOMAIN,
) )
from homeassistant.const import STATE_HOME, STATE_NOT_HOME, STATE_UNAVAILABLE from homeassistant.const import STATE_HOME, STATE_NOT_HOME, STATE_UNAVAILABLE
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er from homeassistant.helpers import entity_registry as er
import homeassistant.util.dt as dt_util import homeassistant.util.dt as dt_util
from .test_controller import ENTRY_CONFIG, setup_unifi_integration from .test_controller import ENTRY_CONFIG, setup_unifi_integration
from tests.common import async_fire_time_changed from tests.common import async_fire_time_changed
from tests.test_util.aiohttp import AiohttpClientMocker
async def test_no_entities(hass, aioclient_mock): async def test_no_entities(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test the update_clients function when no clients are found.""" """Test the update_clients function when no clients are found."""
await setup_unifi_integration(hass, aioclient_mock) await setup_unifi_integration(hass, aioclient_mock)

View File

@ -4,26 +4,30 @@ from unittest.mock import patch
from homeassistant.components import unifi from homeassistant.components import unifi
from homeassistant.components.unifi.const import DOMAIN as UNIFI_DOMAIN from homeassistant.components.unifi.const import DOMAIN as UNIFI_DOMAIN
from homeassistant.components.unifi.errors import AuthenticationRequired, CannotConnect from homeassistant.components.unifi.errors import AuthenticationRequired, CannotConnect
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from .test_controller import DEFAULT_CONFIG_ENTRY_ID, setup_unifi_integration from .test_controller import DEFAULT_CONFIG_ENTRY_ID, setup_unifi_integration
from tests.common import flush_store from tests.common import flush_store
from tests.test_util.aiohttp import AiohttpClientMocker
async def test_setup_with_no_config(hass): async def test_setup_with_no_config(hass: HomeAssistant) -> None:
"""Test that we do not discover anything or try to set up a controller.""" """Test that we do not discover anything or try to set up a controller."""
assert await async_setup_component(hass, UNIFI_DOMAIN, {}) is True assert await async_setup_component(hass, UNIFI_DOMAIN, {}) is True
assert UNIFI_DOMAIN not in hass.data assert UNIFI_DOMAIN not in hass.data
async def test_successful_config_entry(hass, aioclient_mock): async def test_successful_config_entry(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test that configured options for a host are loaded via config entry.""" """Test that configured options for a host are loaded via config entry."""
await setup_unifi_integration(hass, aioclient_mock, unique_id=None) await setup_unifi_integration(hass, aioclient_mock, unique_id=None)
assert hass.data[UNIFI_DOMAIN] assert hass.data[UNIFI_DOMAIN]
async def test_setup_entry_fails_config_entry_not_ready(hass): async def test_setup_entry_fails_config_entry_not_ready(hass: HomeAssistant) -> None:
"""Failed authentication trigger a reauthentication flow.""" """Failed authentication trigger a reauthentication flow."""
with patch( with patch(
"homeassistant.components.unifi.get_unifi_controller", "homeassistant.components.unifi.get_unifi_controller",
@ -34,7 +38,7 @@ async def test_setup_entry_fails_config_entry_not_ready(hass):
assert hass.data[UNIFI_DOMAIN] == {} assert hass.data[UNIFI_DOMAIN] == {}
async def test_setup_entry_fails_trigger_reauth_flow(hass): async def test_setup_entry_fails_trigger_reauth_flow(hass: HomeAssistant) -> None:
"""Failed authentication trigger a reauthentication flow.""" """Failed authentication trigger a reauthentication flow."""
with patch( with patch(
"homeassistant.components.unifi.get_unifi_controller", "homeassistant.components.unifi.get_unifi_controller",
@ -46,7 +50,9 @@ async def test_setup_entry_fails_trigger_reauth_flow(hass):
assert hass.data[UNIFI_DOMAIN] == {} assert hass.data[UNIFI_DOMAIN] == {}
async def test_unload_entry(hass, aioclient_mock): async def test_unload_entry(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test being able to unload an entry.""" """Test being able to unload an entry."""
config_entry = await setup_unifi_integration(hass, aioclient_mock) config_entry = await setup_unifi_integration(hass, aioclient_mock)
assert hass.data[UNIFI_DOMAIN] assert hass.data[UNIFI_DOMAIN]

View File

@ -1,5 +1,4 @@
"""UniFi Network sensor platform tests.""" """UniFi Network sensor platform tests."""
from copy import deepcopy from copy import deepcopy
from datetime import datetime, timedelta from datetime import datetime, timedelta
from unittest.mock import patch from unittest.mock import patch
@ -18,6 +17,7 @@ from homeassistant.components.unifi.const import (
) )
from homeassistant.config_entries import RELOAD_AFTER_UPDATE_DELAY from homeassistant.config_entries import RELOAD_AFTER_UPDATE_DELAY
from homeassistant.const import ATTR_DEVICE_CLASS, STATE_UNAVAILABLE from homeassistant.const import ATTR_DEVICE_CLASS, STATE_UNAVAILABLE
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er from homeassistant.helpers import entity_registry as er
from homeassistant.helpers.entity import EntityCategory from homeassistant.helpers.entity import EntityCategory
from homeassistant.helpers.entity_registry import RegistryEntryDisabler from homeassistant.helpers.entity_registry import RegistryEntryDisabler
@ -26,6 +26,7 @@ import homeassistant.util.dt as dt_util
from .test_controller import setup_unifi_integration from .test_controller import setup_unifi_integration
from tests.common import async_fire_time_changed from tests.common import async_fire_time_changed
from tests.test_util.aiohttp import AiohttpClientMocker
DEVICE_1 = { DEVICE_1 = {
"board_rev": 2, "board_rev": 2,
@ -96,7 +97,9 @@ DEVICE_1 = {
} }
async def test_no_clients(hass, aioclient_mock): async def test_no_clients(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test the update_clients function when no clients are found.""" """Test the update_clients function when no clients are found."""
await setup_unifi_integration( await setup_unifi_integration(
hass, hass,

View File

@ -1,5 +1,4 @@
"""deCONZ service tests.""" """deCONZ service tests."""
from unittest.mock import patch from unittest.mock import patch
from homeassistant.components.unifi.const import DOMAIN as UNIFI_DOMAIN from homeassistant.components.unifi.const import DOMAIN as UNIFI_DOMAIN
@ -9,12 +8,17 @@ from homeassistant.components.unifi.services import (
SUPPORTED_SERVICES, SUPPORTED_SERVICES,
) )
from homeassistant.const import ATTR_DEVICE_ID from homeassistant.const import ATTR_DEVICE_ID
from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr from homeassistant.helpers import device_registry as dr
from .test_controller import setup_unifi_integration from .test_controller import setup_unifi_integration
from tests.test_util.aiohttp import AiohttpClientMocker
async def test_service_setup_and_unload(hass, aioclient_mock):
async def test_service_setup_and_unload(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Verify service setup works.""" """Verify service setup works."""
config_entry = await setup_unifi_integration(hass, aioclient_mock) config_entry = await setup_unifi_integration(hass, aioclient_mock)
for service in SUPPORTED_SERVICES: for service in SUPPORTED_SERVICES:
@ -44,7 +48,9 @@ async def test_service_setup_and_unload_not_called_if_multiple_integrations_dete
assert remove_service_mock.call_count == 2 assert remove_service_mock.call_count == 2
async def test_reconnect_client(hass, aioclient_mock): async def test_reconnect_client(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Verify call to reconnect client is performed as expected.""" """Verify call to reconnect client is performed as expected."""
clients = [ clients = [
{ {
@ -77,7 +83,9 @@ async def test_reconnect_client(hass, aioclient_mock):
assert aioclient_mock.call_count == 1 assert aioclient_mock.call_count == 1
async def test_reconnect_non_existant_device(hass, aioclient_mock): async def test_reconnect_non_existant_device(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Verify no call is made if device does not exist.""" """Verify no call is made if device does not exist."""
await setup_unifi_integration(hass, aioclient_mock) await setup_unifi_integration(hass, aioclient_mock)
@ -92,7 +100,9 @@ async def test_reconnect_non_existant_device(hass, aioclient_mock):
assert aioclient_mock.call_count == 0 assert aioclient_mock.call_count == 0
async def test_reconnect_device_without_mac(hass, aioclient_mock): async def test_reconnect_device_without_mac(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Verify no call is made if device does not have a known mac.""" """Verify no call is made if device does not have a known mac."""
config_entry = await setup_unifi_integration(hass, aioclient_mock) config_entry = await setup_unifi_integration(hass, aioclient_mock)
@ -113,7 +123,9 @@ async def test_reconnect_device_without_mac(hass, aioclient_mock):
assert aioclient_mock.call_count == 0 assert aioclient_mock.call_count == 0
async def test_reconnect_client_controller_unavailable(hass, aioclient_mock): async def test_reconnect_client_controller_unavailable(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Verify no call is made if controller is unavailable.""" """Verify no call is made if controller is unavailable."""
clients = [ clients = [
{ {
@ -147,7 +159,9 @@ async def test_reconnect_client_controller_unavailable(hass, aioclient_mock):
assert aioclient_mock.call_count == 0 assert aioclient_mock.call_count == 0
async def test_reconnect_client_unknown_mac(hass, aioclient_mock): async def test_reconnect_client_unknown_mac(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Verify no call is made if trying to reconnect a mac unknown to controller.""" """Verify no call is made if trying to reconnect a mac unknown to controller."""
config_entry = await setup_unifi_integration(hass, aioclient_mock) config_entry = await setup_unifi_integration(hass, aioclient_mock)
@ -168,7 +182,9 @@ async def test_reconnect_client_unknown_mac(hass, aioclient_mock):
assert aioclient_mock.call_count == 0 assert aioclient_mock.call_count == 0
async def test_reconnect_wired_client(hass, aioclient_mock): async def test_reconnect_wired_client(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Verify no call is made if client is wired.""" """Verify no call is made if client is wired."""
clients = [ clients = [
{ {
@ -197,7 +213,9 @@ async def test_reconnect_wired_client(hass, aioclient_mock):
assert aioclient_mock.call_count == 0 assert aioclient_mock.call_count == 0
async def test_remove_clients(hass, aioclient_mock): async def test_remove_clients(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Verify removing different variations of clients work.""" """Verify removing different variations of clients work."""
clients = [ clients = [
{ {
@ -251,7 +269,9 @@ async def test_remove_clients(hass, aioclient_mock):
assert await hass.config_entries.async_unload(config_entry.entry_id) assert await hass.config_entries.async_unload(config_entry.entry_id)
async def test_remove_clients_controller_unavailable(hass, aioclient_mock): async def test_remove_clients_controller_unavailable(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Verify no call is made if controller is unavailable.""" """Verify no call is made if controller is unavailable."""
clients = [ clients = [
{ {
@ -272,7 +292,9 @@ async def test_remove_clients_controller_unavailable(hass, aioclient_mock):
assert aioclient_mock.call_count == 0 assert aioclient_mock.call_count == 0
async def test_remove_clients_no_call_on_empty_list(hass, aioclient_mock): async def test_remove_clients_no_call_on_empty_list(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Verify no call is made if no fitting client has been added to the list.""" """Verify no call is made if no fitting client has been added to the list."""
clients = [ clients = [
{ {

View File

@ -1,5 +1,4 @@
"""UniFi Network switch platform tests.""" """UniFi Network switch platform tests."""
from copy import deepcopy from copy import deepcopy
from datetime import timedelta from datetime import timedelta
@ -28,6 +27,7 @@ from homeassistant.const import (
STATE_ON, STATE_ON,
STATE_UNAVAILABLE, STATE_UNAVAILABLE,
) )
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er from homeassistant.helpers import entity_registry as er
from homeassistant.helpers.dispatcher import async_dispatcher_send from homeassistant.helpers.dispatcher import async_dispatcher_send
from homeassistant.helpers.entity import EntityCategory from homeassistant.helpers.entity import EntityCategory
@ -42,6 +42,7 @@ from .test_controller import (
) )
from tests.common import async_fire_time_changed from tests.common import async_fire_time_changed
from tests.test_util.aiohttp import AiohttpClientMocker
CLIENT_1 = { CLIENT_1 = {
"hostname": "client_1", "hostname": "client_1",
@ -576,7 +577,9 @@ OUTLET_UP1 = {
} }
async def test_no_clients(hass, aioclient_mock): async def test_no_clients(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test the update_clients function when no clients are found.""" """Test the update_clients function when no clients are found."""
await setup_unifi_integration( await setup_unifi_integration(
hass, hass,
@ -592,7 +595,9 @@ async def test_no_clients(hass, aioclient_mock):
assert len(hass.states.async_entity_ids(SWITCH_DOMAIN)) == 0 assert len(hass.states.async_entity_ids(SWITCH_DOMAIN)) == 0
async def test_controller_not_client(hass, aioclient_mock): async def test_controller_not_client(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test that the controller doesn't become a switch.""" """Test that the controller doesn't become a switch."""
await setup_unifi_integration( await setup_unifi_integration(
hass, hass,
@ -607,7 +612,9 @@ async def test_controller_not_client(hass, aioclient_mock):
assert cloudkey is None assert cloudkey is None
async def test_not_admin(hass, aioclient_mock): async def test_not_admin(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test that switch platform only work on an admin account.""" """Test that switch platform only work on an admin account."""
description = deepcopy(DESCRIPTION) description = deepcopy(DESCRIPTION)
description[0]["site_role"] = "not admin" description[0]["site_role"] = "not admin"
@ -623,7 +630,9 @@ async def test_not_admin(hass, aioclient_mock):
assert len(hass.states.async_entity_ids(SWITCH_DOMAIN)) == 0 assert len(hass.states.async_entity_ids(SWITCH_DOMAIN)) == 0
async def test_switches(hass, aioclient_mock): async def test_switches(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test the update_items function with some clients.""" """Test the update_items function with some clients."""
config_entry = await setup_unifi_integration( config_entry = await setup_unifi_integration(
hass, hass,
@ -1017,7 +1026,9 @@ async def test_new_client_discovered_on_block_control(
assert hass.states.get("switch.block_client_1") is not None assert hass.states.get("switch.block_client_1") is not None
async def test_option_block_clients(hass, aioclient_mock): async def test_option_block_clients(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test the changes to option reflects accordingly.""" """Test the changes to option reflects accordingly."""
config_entry = await setup_unifi_integration( config_entry = await setup_unifi_integration(
hass, hass,
@ -1060,7 +1071,9 @@ async def test_option_block_clients(hass, aioclient_mock):
assert len(hass.states.async_entity_ids(SWITCH_DOMAIN)) == 0 assert len(hass.states.async_entity_ids(SWITCH_DOMAIN)) == 0
async def test_option_remove_switches(hass, aioclient_mock): async def test_option_remove_switches(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test removal of DPI switch when options updated.""" """Test removal of DPI switch when options updated."""
config_entry = await setup_unifi_integration( config_entry = await setup_unifi_integration(
hass, hass,
@ -1177,7 +1190,9 @@ async def test_poe_port_switches(hass, aioclient_mock, mock_unifi_websocket):
assert hass.states.get("switch.mock_name_port_1_poe").state == STATE_OFF assert hass.states.get("switch.mock_name_port_1_poe").state == STATE_OFF
async def test_remove_poe_client_switches(hass, aioclient_mock): async def test_remove_poe_client_switches(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test old PoE client switches are removed.""" """Test old PoE client switches are removed."""
config_entry = config_entries.ConfigEntry( config_entry = config_entries.ConfigEntry(

View File

@ -24,9 +24,12 @@ from homeassistant.const import (
STATE_ON, STATE_ON,
STATE_UNAVAILABLE, STATE_UNAVAILABLE,
) )
from homeassistant.core import HomeAssistant
from .test_controller import DESCRIPTION, setup_unifi_integration from .test_controller import DESCRIPTION, setup_unifi_integration
from tests.test_util.aiohttp import AiohttpClientMocker
DEVICE_1 = { DEVICE_1 = {
"board_rev": 3, "board_rev": 3,
"device_id": "mock-id", "device_id": "mock-id",
@ -57,7 +60,9 @@ DEVICE_2 = {
} }
async def test_no_entities(hass, aioclient_mock): async def test_no_entities(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test the update_clients function when no clients are found.""" """Test the update_clients function when no clients are found."""
await setup_unifi_integration(hass, aioclient_mock) await setup_unifi_integration(hass, aioclient_mock)
@ -125,7 +130,9 @@ async def test_device_updates(hass, aioclient_mock, mock_unifi_websocket):
assert device_1_state.attributes[ATTR_IN_PROGRESS] is False assert device_1_state.attributes[ATTR_IN_PROGRESS] is False
async def test_not_admin(hass, aioclient_mock): async def test_not_admin(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test that the INSTALL feature is not available on a non-admin account.""" """Test that the INSTALL feature is not available on a non-admin account."""
description = deepcopy(DESCRIPTION) description = deepcopy(DESCRIPTION)
description[0]["site_role"] = "not admin" description[0]["site_role"] = "not admin"
@ -145,7 +152,9 @@ async def test_not_admin(hass, aioclient_mock):
) )
async def test_install(hass, aioclient_mock): async def test_install(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test the device update install call.""" """Test the device update install call."""
config_entry = await setup_unifi_integration( config_entry = await setup_unifi_integration(
hass, aioclient_mock, devices_response=[DEVICE_1] hass, aioclient_mock, devices_response=[DEVICE_1]

View File

@ -20,7 +20,7 @@ from homeassistant.const import (
STATE_PLAYING, STATE_PLAYING,
STATE_UNKNOWN, STATE_UNKNOWN,
) )
from homeassistant.core import Context, callback from homeassistant.core import Context, HomeAssistant, callback
from homeassistant.helpers import entity_registry from homeassistant.helpers import entity_registry
from homeassistant.helpers.event import async_track_state_change_event from homeassistant.helpers.event import async_track_state_change_event
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
@ -277,7 +277,7 @@ def config_children_and_attr(mock_states):
} }
async def test_config_children_only(hass): async def test_config_children_only(hass: HomeAssistant) -> None:
"""Check config with only children.""" """Check config with only children."""
config_start = copy(CONFIG_CHILDREN_ONLY) config_start = copy(CONFIG_CHILDREN_ONLY)
del config_start["platform"] del config_start["platform"]
@ -298,7 +298,7 @@ async def test_config_children_and_attr(hass, config_children_and_attr):
assert config_start == config assert config_start == config
async def test_config_no_name(hass): async def test_config_no_name(hass: HomeAssistant) -> None:
"""Check config with no Name entry.""" """Check config with no Name entry."""
response = True response = True
try: try:
@ -308,7 +308,7 @@ async def test_config_no_name(hass):
assert not response assert not response
async def test_config_bad_children(hass): async def test_config_bad_children(hass: HomeAssistant) -> None:
"""Check config with bad children entry.""" """Check config with bad children entry."""
config_no_children = {"name": "test", "platform": "universal"} config_no_children = {"name": "test", "platform": "universal"}
config_bad_children = {"name": "test", "children": {}, "platform": "universal"} config_bad_children = {"name": "test", "children": {}, "platform": "universal"}
@ -320,7 +320,7 @@ async def test_config_bad_children(hass):
assert [] == config_bad_children["children"] assert [] == config_bad_children["children"]
async def test_config_bad_commands(hass): async def test_config_bad_commands(hass: HomeAssistant) -> None:
"""Check config with bad commands entry.""" """Check config with bad commands entry."""
config = {"name": "test", "platform": "universal"} config = {"name": "test", "platform": "universal"}
@ -328,7 +328,7 @@ async def test_config_bad_commands(hass):
assert {} == config["commands"] assert {} == config["commands"]
async def test_config_bad_attributes(hass): async def test_config_bad_attributes(hass: HomeAssistant) -> None:
"""Check config with bad attributes.""" """Check config with bad attributes."""
config = {"name": "test", "platform": "universal"} config = {"name": "test", "platform": "universal"}
@ -336,7 +336,7 @@ async def test_config_bad_attributes(hass):
assert {} == config["attributes"] assert {} == config["attributes"]
async def test_config_bad_key(hass): async def test_config_bad_key(hass: HomeAssistant) -> None:
"""Check config with bad key.""" """Check config with bad key."""
config = {"name": "test", "asdf": 5, "platform": "universal"} config = {"name": "test", "asdf": 5, "platform": "universal"}
@ -344,7 +344,7 @@ async def test_config_bad_key(hass):
assert "asdf" not in config assert "asdf" not in config
async def test_platform_setup(hass): async def test_platform_setup(hass: HomeAssistant) -> None:
"""Test platform setup.""" """Test platform setup."""
config = {"name": "test", "platform": "universal"} config = {"name": "test", "platform": "universal"}
bad_config = {"platform": "universal"} bad_config = {"platform": "universal"}
@ -370,7 +370,7 @@ async def test_platform_setup(hass):
assert entities[0].name == "test" assert entities[0].name == "test"
async def test_master_state(hass): async def test_master_state(hass: HomeAssistant) -> None:
"""Test master state property.""" """Test master state property."""
config = validate_config(CONFIG_CHILDREN_ONLY) config = validate_config(CONFIG_CHILDREN_ONLY)
@ -442,7 +442,7 @@ async def test_active_child_state(hass, mock_states):
assert mock_states.mock_mp_2.entity_id == ump._child_state.entity_id assert mock_states.mock_mp_2.entity_id == ump._child_state.entity_id
async def test_name(hass): async def test_name(hass: HomeAssistant) -> None:
"""Test name property.""" """Test name property."""
config = validate_config(CONFIG_CHILDREN_ONLY) config = validate_config(CONFIG_CHILDREN_ONLY)
@ -451,7 +451,7 @@ async def test_name(hass):
assert config["name"] == ump.name assert config["name"] == ump.name
async def test_polling(hass): async def test_polling(hass: HomeAssistant) -> None:
"""Test should_poll property.""" """Test should_poll property."""
config = validate_config(CONFIG_CHILDREN_ONLY) config = validate_config(CONFIG_CHILDREN_ONLY)
@ -1048,7 +1048,7 @@ async def test_service_call_to_command(hass, mock_states):
assert len(service) == 1 assert len(service) == 1
async def test_state_template(hass): async def test_state_template(hass: HomeAssistant) -> None:
"""Test with a simple valid state template.""" """Test with a simple valid state template."""
hass.states.async_set("sensor.test_sensor", STATE_ON) hass.states.async_set("sensor.test_sensor", STATE_ON)
@ -1074,7 +1074,7 @@ async def test_state_template(hass):
assert hass.states.get("media_player.tv").state == STATE_OFF assert hass.states.get("media_player.tv").state == STATE_OFF
async def test_device_class(hass): async def test_device_class(hass: HomeAssistant) -> None:
"""Test device_class property.""" """Test device_class property."""
hass.states.async_set("sensor.test_sensor", "on") hass.states.async_set("sensor.test_sensor", "on")
@ -1093,7 +1093,7 @@ async def test_device_class(hass):
assert hass.states.get("media_player.tv").attributes["device_class"] == "tv" assert hass.states.get("media_player.tv").attributes["device_class"] == "tv"
async def test_unique_id(hass): async def test_unique_id(hass: HomeAssistant) -> None:
"""Test unique_id property.""" """Test unique_id property."""
hass.states.async_set("sensor.test_sensor", "on") hass.states.async_set("sensor.test_sensor", "on")
@ -1113,7 +1113,7 @@ async def test_unique_id(hass):
assert er.async_get("media_player.tv").unique_id == "universal_master_bed_tv" assert er.async_get("media_player.tv").unique_id == "universal_master_bed_tv"
async def test_invalid_state_template(hass): async def test_invalid_state_template(hass: HomeAssistant) -> None:
"""Test invalid state template sets state to None.""" """Test invalid state template sets state to None."""
hass.states.async_set("sensor.test_sensor", "on") hass.states.async_set("sensor.test_sensor", "on")
@ -1139,7 +1139,7 @@ async def test_invalid_state_template(hass):
assert hass.states.get("media_player.tv").state == STATE_UNKNOWN assert hass.states.get("media_player.tv").state == STATE_UNKNOWN
async def test_master_state_with_template(hass): async def test_master_state_with_template(hass: HomeAssistant) -> None:
"""Test the state_template option.""" """Test the state_template option."""
hass.states.async_set("input_boolean.test", STATE_OFF) hass.states.async_set("input_boolean.test", STATE_OFF)
hass.states.async_set("media_player.mock1", STATE_OFF) hass.states.async_set("media_player.mock1", STATE_OFF)
@ -1182,7 +1182,7 @@ async def test_master_state_with_template(hass):
assert events[0].context == context assert events[0].context == context
async def test_reload(hass): async def test_reload(hass: HomeAssistant) -> None:
"""Test reloading the media player from yaml.""" """Test reloading the media player from yaml."""
hass.states.async_set("input_boolean.test", STATE_OFF) hass.states.async_set("input_boolean.test", STATE_OFF)
hass.states.async_set("media_player.mock1", STATE_OFF) hass.states.async_set("media_player.mock1", STATE_OFF)

View File

@ -1,9 +1,9 @@
"""Test the UPB Control config flow.""" """Test the UPB Control config flow."""
from unittest.mock import MagicMock, PropertyMock, patch from unittest.mock import MagicMock, PropertyMock, patch
from homeassistant import config_entries from homeassistant import config_entries
from homeassistant.components.upb.const import DOMAIN from homeassistant.components.upb.const import DOMAIN
from homeassistant.core import HomeAssistant
def mocked_upb(sync_complete=True, config_ok=True): def mocked_upb(sync_complete=True, config_ok=True):
@ -38,7 +38,7 @@ async def valid_tcp_flow(hass, sync_complete=True, config_ok=True):
return result return result
async def test_full_upb_flow_with_serial_port(hass): async def test_full_upb_flow_with_serial_port(hass: HomeAssistant) -> None:
"""Test a full UPB config flow with serial port.""" """Test a full UPB config flow with serial port."""
with mocked_upb(), patch( with mocked_upb(), patch(
@ -69,7 +69,7 @@ async def test_full_upb_flow_with_serial_port(hass):
assert len(mock_setup_entry.mock_calls) == 1 assert len(mock_setup_entry.mock_calls) == 1
async def test_form_user_with_tcp_upb(hass): async def test_form_user_with_tcp_upb(hass: HomeAssistant) -> None:
"""Test we can setup a serial upb.""" """Test we can setup a serial upb."""
result = await valid_tcp_flow(hass) result = await valid_tcp_flow(hass)
assert result["type"] == "create_entry" assert result["type"] == "create_entry"
@ -77,7 +77,7 @@ async def test_form_user_with_tcp_upb(hass):
await hass.async_block_till_done() await hass.async_block_till_done()
async def test_form_cannot_connect(hass): async def test_form_cannot_connect(hass: HomeAssistant) -> None:
"""Test we handle cannot connect error.""" """Test we handle cannot connect error."""
from asyncio import TimeoutError from asyncio import TimeoutError
@ -91,14 +91,14 @@ async def test_form_cannot_connect(hass):
assert result["errors"] == {"base": "cannot_connect"} assert result["errors"] == {"base": "cannot_connect"}
async def test_form_missing_upb_file(hass): async def test_form_missing_upb_file(hass: HomeAssistant) -> None:
"""Test we handle cannot connect error.""" """Test we handle cannot connect error."""
result = await valid_tcp_flow(hass, config_ok=False) result = await valid_tcp_flow(hass, config_ok=False)
assert result["type"] == "form" assert result["type"] == "form"
assert result["errors"] == {"base": "invalid_upb_file"} assert result["errors"] == {"base": "invalid_upb_file"}
async def test_form_user_with_already_configured(hass): async def test_form_user_with_already_configured(hass: HomeAssistant) -> None:
"""Test we can setup a TCP upb.""" """Test we can setup a TCP upb."""
_ = await valid_tcp_flow(hass) _ = await valid_tcp_flow(hass)
result2 = await valid_tcp_flow(hass) result2 = await valid_tcp_flow(hass)
@ -107,7 +107,7 @@ async def test_form_user_with_already_configured(hass):
await hass.async_block_till_done() await hass.async_block_till_done()
async def test_form_import(hass): async def test_form_import(hass: HomeAssistant) -> None:
"""Test we get the form with import source.""" """Test we get the form with import source."""
with mocked_upb(), patch( with mocked_upb(), patch(
@ -127,7 +127,7 @@ async def test_form_import(hass):
assert len(mock_setup_entry.mock_calls) == 1 assert len(mock_setup_entry.mock_calls) == 1
async def test_form_junk_input(hass): async def test_form_junk_input(hass: HomeAssistant) -> None:
"""Test we get the form with import source.""" """Test we get the form with import source."""
with mocked_upb(): with mocked_upb():

View File

@ -1,5 +1,4 @@
"""Tests for the UpCloud config flow.""" """Tests for the UpCloud config flow."""
from unittest.mock import patch from unittest.mock import patch
import requests.exceptions import requests.exceptions
@ -9,6 +8,7 @@ from upcloud_api import UpCloudAPIError
from homeassistant import config_entries, data_entry_flow from homeassistant import config_entries, data_entry_flow
from homeassistant.components.upcloud.const import DOMAIN from homeassistant.components.upcloud.const import DOMAIN
from homeassistant.const import CONF_PASSWORD, CONF_SCAN_INTERVAL, CONF_USERNAME from homeassistant.const import CONF_PASSWORD, CONF_SCAN_INTERVAL, CONF_USERNAME
from homeassistant.core import HomeAssistant
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
@ -22,7 +22,7 @@ FIXTURE_USER_INPUT_OPTIONS = {
} }
async def test_show_set_form(hass): async def test_show_set_form(hass: HomeAssistant) -> None:
"""Test that the setup form is served.""" """Test that the setup form is served."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER}, data=None DOMAIN, context={"source": config_entries.SOURCE_USER}, data=None
@ -75,7 +75,7 @@ async def test_success(hass, requests_mock):
assert result["data"][CONF_PASSWORD] == FIXTURE_USER_INPUT[CONF_PASSWORD] assert result["data"][CONF_PASSWORD] == FIXTURE_USER_INPUT[CONF_PASSWORD]
async def test_options(hass): async def test_options(hass: HomeAssistant) -> None:
"""Test options produce expected data.""" """Test options produce expected data."""
config_entry = MockConfigEntry( config_entry = MockConfigEntry(

View File

@ -7,10 +7,13 @@ import pytest
from homeassistant.components import usb from homeassistant.components import usb
from homeassistant.const import EVENT_HOMEASSISTANT_STARTED, EVENT_HOMEASSISTANT_STOP from homeassistant.const import EVENT_HOMEASSISTANT_STARTED, EVENT_HOMEASSISTANT_STOP
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from . import conbee_device, slae_sh_device from . import conbee_device, slae_sh_device
from tests.typing import WebSocketGenerator
@pytest.fixture(name="operating_system") @pytest.fixture(name="operating_system")
def mock_operating_system(): def mock_operating_system():
@ -156,7 +159,9 @@ async def test_removal_by_observer_before_started(hass, operating_system):
await hass.async_block_till_done() await hass.async_block_till_done()
async def test_discovered_by_websocket_scan(hass, hass_ws_client): async def test_discovered_by_websocket_scan(
hass: HomeAssistant, hass_ws_client: WebSocketGenerator
) -> None:
"""Test a device is discovered from websocket scan.""" """Test a device is discovered from websocket scan."""
new_usb = [{"domain": "test1", "vid": "3039", "pid": "3039"}] new_usb = [{"domain": "test1", "vid": "3039", "pid": "3039"}]
@ -232,7 +237,9 @@ async def test_discovered_by_websocket_scan_limited_by_description_matcher(
assert mock_config_flow.mock_calls[0][1][0] == "test1" assert mock_config_flow.mock_calls[0][1][0] == "test1"
async def test_most_targeted_matcher_wins(hass, hass_ws_client): async def test_most_targeted_matcher_wins(
hass: HomeAssistant, hass_ws_client: WebSocketGenerator
) -> None:
"""Test that the most targeted matcher is used.""" """Test that the most targeted matcher is used."""
new_usb = [ new_usb = [
{"domain": "less", "vid": "3039", "pid": "3039"}, {"domain": "less", "vid": "3039", "pid": "3039"},
@ -522,7 +529,9 @@ async def test_discovered_by_websocket_rejected_with_empty_serial_number_only(
assert len(mock_config_flow.mock_calls) == 0 assert len(mock_config_flow.mock_calls) == 0
async def test_discovered_by_websocket_scan_match_vid_only(hass, hass_ws_client): async def test_discovered_by_websocket_scan_match_vid_only(
hass: HomeAssistant, hass_ws_client: WebSocketGenerator
) -> None:
"""Test a device is discovered from websocket scan only matching vid.""" """Test a device is discovered from websocket scan only matching vid."""
new_usb = [{"domain": "test1", "vid": "3039"}] new_usb = [{"domain": "test1", "vid": "3039"}]
@ -558,7 +567,9 @@ async def test_discovered_by_websocket_scan_match_vid_only(hass, hass_ws_client)
assert mock_config_flow.mock_calls[0][1][0] == "test1" assert mock_config_flow.mock_calls[0][1][0] == "test1"
async def test_discovered_by_websocket_scan_match_vid_wrong_pid(hass, hass_ws_client): async def test_discovered_by_websocket_scan_match_vid_wrong_pid(
hass: HomeAssistant, hass_ws_client: WebSocketGenerator
) -> None:
"""Test a device is discovered from websocket scan only matching vid but wrong pid.""" """Test a device is discovered from websocket scan only matching vid but wrong pid."""
new_usb = [{"domain": "test1", "vid": "3039", "pid": "9999"}] new_usb = [{"domain": "test1", "vid": "3039", "pid": "9999"}]
@ -593,7 +604,9 @@ async def test_discovered_by_websocket_scan_match_vid_wrong_pid(hass, hass_ws_cl
assert len(mock_config_flow.mock_calls) == 0 assert len(mock_config_flow.mock_calls) == 0
async def test_discovered_by_websocket_no_vid_pid(hass, hass_ws_client): async def test_discovered_by_websocket_no_vid_pid(
hass: HomeAssistant, hass_ws_client: WebSocketGenerator
) -> None:
"""Test a device is discovered from websocket scan with no vid or pid.""" """Test a device is discovered from websocket scan with no vid or pid."""
new_usb = [{"domain": "test1", "vid": "3039", "pid": "9999"}] new_usb = [{"domain": "test1", "vid": "3039", "pid": "9999"}]
@ -835,7 +848,9 @@ def test_human_readable_device_name() -> None:
assert "8A2A" in name assert "8A2A" in name
async def test_async_is_plugged_in(hass, hass_ws_client): async def test_async_is_plugged_in(
hass: HomeAssistant, hass_ws_client: WebSocketGenerator
) -> None:
"""Test async_is_plugged_in.""" """Test async_is_plugged_in."""
new_usb = [{"domain": "test1", "vid": "3039", "pid": "3039"}] new_usb = [{"domain": "test1", "vid": "3039", "pid": "3039"}]
@ -906,7 +921,9 @@ async def test_async_is_plugged_in_case_enforcement(hass, matcher):
usb.async_is_plugged_in(hass, matcher) usb.async_is_plugged_in(hass, matcher)
async def test_web_socket_triggers_discovery_request_callbacks(hass, hass_ws_client): async def test_web_socket_triggers_discovery_request_callbacks(
hass: HomeAssistant, hass_ws_client: WebSocketGenerator
) -> None:
"""Test the websocket call triggers a discovery request callback.""" """Test the websocket call triggers a discovery request callback."""
mock_callback = Mock() mock_callback = Mock()
@ -938,7 +955,9 @@ async def test_web_socket_triggers_discovery_request_callbacks(hass, hass_ws_cli
assert len(mock_callback.mock_calls) == 1 assert len(mock_callback.mock_calls) == 1
async def test_initial_scan_callback(hass, hass_ws_client): async def test_initial_scan_callback(
hass: HomeAssistant, hass_ws_client: WebSocketGenerator
) -> None:
"""Test it's possible to register a callback when the initial scan is done.""" """Test it's possible to register a callback when the initial scan is done."""
mock_callback_1 = Mock() mock_callback_1 = Mock()
mock_callback_2 = Mock() mock_callback_2 = Mock()
@ -971,7 +990,9 @@ async def test_initial_scan_callback(hass, hass_ws_client):
cancel_2() cancel_2()
async def test_cancel_initial_scan_callback(hass, hass_ws_client): async def test_cancel_initial_scan_callback(
hass: HomeAssistant, hass_ws_client: WebSocketGenerator
) -> None:
"""Test it's possible to cancel an initial scan callback.""" """Test it's possible to cancel an initial scan callback."""
mock_callback = Mock() mock_callback = Mock()

View File

@ -32,6 +32,7 @@ from homeassistant.const import (
EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_START,
UnitOfLength, UnitOfLength,
) )
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
import homeassistant.util.dt as dt_util import homeassistant.util.dt as dt_util
@ -91,7 +92,7 @@ def _generate_mock_feed_entry(
return feed_entry return feed_entry
async def test_setup(hass): async def test_setup(hass: HomeAssistant) -> None:
"""Test the general setup of the platform.""" """Test the general setup of the platform."""
# Set up some mock feed entries for this test. # Set up some mock feed entries for this test.
mock_entry_1 = _generate_mock_feed_entry( mock_entry_1 = _generate_mock_feed_entry(
@ -216,7 +217,7 @@ async def test_setup(hass):
assert len(all_states) == 0 assert len(all_states) == 0
async def test_setup_with_custom_location(hass): async def test_setup_with_custom_location(hass: HomeAssistant) -> None:
"""Test the setup with a custom location.""" """Test the setup with a custom location."""
# Set up some mock feed entries for this test. # Set up some mock feed entries for this test.
mock_entry_1 = _generate_mock_feed_entry("1234", "Title 1", 20.5, (-31.1, 150.1)) mock_entry_1 = _generate_mock_feed_entry("1234", "Title 1", 20.5, (-31.1, 150.1))

View File

@ -30,7 +30,7 @@ import homeassistant.util.dt as dt_util
from tests.common import MockConfigEntry, mock_restore_cache from tests.common import MockConfigEntry, mock_restore_cache
async def test_restore_state(hass): async def test_restore_state(hass: HomeAssistant) -> None:
"""Test utility sensor restore state.""" """Test utility sensor restore state."""
config = { config = {
"utility_meter": { "utility_meter": {
@ -175,7 +175,7 @@ async def test_services(hass, meter):
assert state.state == "4" assert state.state == "4"
async def test_services_config_entry(hass): async def test_services_config_entry(hass: HomeAssistant) -> None:
"""Test energy sensor reset service.""" """Test energy sensor reset service."""
config_entry = MockConfigEntry( config_entry = MockConfigEntry(
data={}, data={},
@ -299,7 +299,7 @@ async def test_services_config_entry(hass):
assert state.state == "4" assert state.state == "4"
async def test_cron(hass): async def test_cron(hass: HomeAssistant) -> None:
"""Test cron pattern.""" """Test cron pattern."""
config = { config = {
@ -314,7 +314,7 @@ async def test_cron(hass):
assert await async_setup_component(hass, DOMAIN, config) assert await async_setup_component(hass, DOMAIN, config)
async def test_cron_and_meter(hass): async def test_cron_and_meter(hass: HomeAssistant) -> None:
"""Test cron pattern and meter type fails.""" """Test cron pattern and meter type fails."""
config = { config = {
"utility_meter": { "utility_meter": {
@ -329,7 +329,7 @@ async def test_cron_and_meter(hass):
assert not await async_setup_component(hass, DOMAIN, config) assert not await async_setup_component(hass, DOMAIN, config)
async def test_both_cron_and_meter(hass): async def test_both_cron_and_meter(hass: HomeAssistant) -> None:
"""Test cron pattern and meter type passes in different meter.""" """Test cron pattern and meter type passes in different meter."""
config = { config = {
"utility_meter": { "utility_meter": {
@ -347,7 +347,7 @@ async def test_both_cron_and_meter(hass):
assert await async_setup_component(hass, DOMAIN, config) assert await async_setup_component(hass, DOMAIN, config)
async def test_cron_and_offset(hass): async def test_cron_and_offset(hass: HomeAssistant) -> None:
"""Test cron pattern and offset fails.""" """Test cron pattern and offset fails."""
config = { config = {
@ -363,7 +363,7 @@ async def test_cron_and_offset(hass):
assert not await async_setup_component(hass, DOMAIN, config) assert not await async_setup_component(hass, DOMAIN, config)
async def test_bad_cron(hass): async def test_bad_cron(hass: HomeAssistant) -> None:
"""Test bad cron pattern.""" """Test bad cron pattern."""
config = { config = {
@ -373,7 +373,7 @@ async def test_bad_cron(hass):
assert not await async_setup_component(hass, DOMAIN, config) assert not await async_setup_component(hass, DOMAIN, config)
async def test_setup_missing_discovery(hass): async def test_setup_missing_discovery(hass: HomeAssistant) -> None:
"""Test setup with configuration missing discovery_info.""" """Test setup with configuration missing discovery_info."""
assert not await um_select.async_setup_platform(hass, {CONF_PLATFORM: DOMAIN}, None) assert not await um_select.async_setup_platform(hass, {CONF_PLATFORM: DOMAIN}, None)
assert not await um_sensor.async_setup_platform(hass, {CONF_PLATFORM: DOMAIN}, None) assert not await um_sensor.async_setup_platform(hass, {CONF_PLATFORM: DOMAIN}, None)

View File

@ -37,7 +37,7 @@ from homeassistant.const import (
STATE_UNKNOWN, STATE_UNKNOWN,
UnitOfEnergy, UnitOfEnergy,
) )
from homeassistant.core import CoreState, State from homeassistant.core import CoreState, HomeAssistant, State
from homeassistant.helpers import entity_registry from homeassistant.helpers import entity_registry
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
import homeassistant.util.dt as dt_util import homeassistant.util.dt as dt_util
@ -324,7 +324,7 @@ async def test_init(hass, yaml_config, config_entry_config):
assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UnitOfEnergy.KILO_WATT_HOUR assert state.attributes.get(ATTR_UNIT_OF_MEASUREMENT) == UnitOfEnergy.KILO_WATT_HOUR
async def test_unique_id(hass): async def test_unique_id(hass: HomeAssistant) -> None:
"""Test unique_id configuration option.""" """Test unique_id configuration option."""
yaml_config = { yaml_config = {
"utility_meter": { "utility_meter": {
@ -993,7 +993,7 @@ async def _test_self_reset(hass, config, start_time, expect_reset=True):
assert state.state == "9" assert state.state == "9"
async def test_self_reset_cron_pattern(hass): async def test_self_reset_cron_pattern(hass: HomeAssistant) -> None:
"""Test cron pattern reset of meter.""" """Test cron pattern reset of meter."""
config = { config = {
"utility_meter": { "utility_meter": {
@ -1004,70 +1004,70 @@ async def test_self_reset_cron_pattern(hass):
await _test_self_reset(hass, config, "2017-01-31T23:59:00.000000+00:00") await _test_self_reset(hass, config, "2017-01-31T23:59:00.000000+00:00")
async def test_self_reset_quarter_hourly(hass): async def test_self_reset_quarter_hourly(hass: HomeAssistant) -> None:
"""Test quarter-hourly reset of meter.""" """Test quarter-hourly reset of meter."""
await _test_self_reset( await _test_self_reset(
hass, gen_config("quarter-hourly"), "2017-12-31T23:59:00.000000+00:00" hass, gen_config("quarter-hourly"), "2017-12-31T23:59:00.000000+00:00"
) )
async def test_self_reset_quarter_hourly_first_quarter(hass): async def test_self_reset_quarter_hourly_first_quarter(hass: HomeAssistant) -> None:
"""Test quarter-hourly reset of meter.""" """Test quarter-hourly reset of meter."""
await _test_self_reset( await _test_self_reset(
hass, gen_config("quarter-hourly"), "2017-12-31T23:14:00.000000+00:00" hass, gen_config("quarter-hourly"), "2017-12-31T23:14:00.000000+00:00"
) )
async def test_self_reset_quarter_hourly_second_quarter(hass): async def test_self_reset_quarter_hourly_second_quarter(hass: HomeAssistant) -> None:
"""Test quarter-hourly reset of meter.""" """Test quarter-hourly reset of meter."""
await _test_self_reset( await _test_self_reset(
hass, gen_config("quarter-hourly"), "2017-12-31T23:29:00.000000+00:00" hass, gen_config("quarter-hourly"), "2017-12-31T23:29:00.000000+00:00"
) )
async def test_self_reset_quarter_hourly_third_quarter(hass): async def test_self_reset_quarter_hourly_third_quarter(hass: HomeAssistant) -> None:
"""Test quarter-hourly reset of meter.""" """Test quarter-hourly reset of meter."""
await _test_self_reset( await _test_self_reset(
hass, gen_config("quarter-hourly"), "2017-12-31T23:44:00.000000+00:00" hass, gen_config("quarter-hourly"), "2017-12-31T23:44:00.000000+00:00"
) )
async def test_self_reset_hourly(hass): async def test_self_reset_hourly(hass: HomeAssistant) -> None:
"""Test hourly reset of meter.""" """Test hourly reset of meter."""
await _test_self_reset( await _test_self_reset(
hass, gen_config("hourly"), "2017-12-31T23:59:00.000000+00:00" hass, gen_config("hourly"), "2017-12-31T23:59:00.000000+00:00"
) )
async def test_self_reset_daily(hass): async def test_self_reset_daily(hass: HomeAssistant) -> None:
"""Test daily reset of meter.""" """Test daily reset of meter."""
await _test_self_reset( await _test_self_reset(
hass, gen_config("daily"), "2017-12-31T23:59:00.000000+00:00" hass, gen_config("daily"), "2017-12-31T23:59:00.000000+00:00"
) )
async def test_self_reset_weekly(hass): async def test_self_reset_weekly(hass: HomeAssistant) -> None:
"""Test weekly reset of meter.""" """Test weekly reset of meter."""
await _test_self_reset( await _test_self_reset(
hass, gen_config("weekly"), "2017-12-31T23:59:00.000000+00:00" hass, gen_config("weekly"), "2017-12-31T23:59:00.000000+00:00"
) )
async def test_self_reset_monthly(hass): async def test_self_reset_monthly(hass: HomeAssistant) -> None:
"""Test monthly reset of meter.""" """Test monthly reset of meter."""
await _test_self_reset( await _test_self_reset(
hass, gen_config("monthly"), "2017-12-31T23:59:00.000000+00:00" hass, gen_config("monthly"), "2017-12-31T23:59:00.000000+00:00"
) )
async def test_self_reset_bimonthly(hass): async def test_self_reset_bimonthly(hass: HomeAssistant) -> None:
"""Test bimonthly reset of meter occurs on even months.""" """Test bimonthly reset of meter occurs on even months."""
await _test_self_reset( await _test_self_reset(
hass, gen_config("bimonthly"), "2017-12-31T23:59:00.000000+00:00" hass, gen_config("bimonthly"), "2017-12-31T23:59:00.000000+00:00"
) )
async def test_self_no_reset_bimonthly(hass): async def test_self_no_reset_bimonthly(hass: HomeAssistant) -> None:
"""Test bimonthly reset of meter does not occur on odd months.""" """Test bimonthly reset of meter does not occur on odd months."""
await _test_self_reset( await _test_self_reset(
hass, hass,
@ -1077,21 +1077,21 @@ async def test_self_no_reset_bimonthly(hass):
) )
async def test_self_reset_quarterly(hass): async def test_self_reset_quarterly(hass: HomeAssistant) -> None:
"""Test quarterly reset of meter.""" """Test quarterly reset of meter."""
await _test_self_reset( await _test_self_reset(
hass, gen_config("quarterly"), "2017-03-31T23:59:00.000000+00:00" hass, gen_config("quarterly"), "2017-03-31T23:59:00.000000+00:00"
) )
async def test_self_reset_yearly(hass): async def test_self_reset_yearly(hass: HomeAssistant) -> None:
"""Test yearly reset of meter.""" """Test yearly reset of meter."""
await _test_self_reset( await _test_self_reset(
hass, gen_config("yearly"), "2017-12-31T23:59:00.000000+00:00" hass, gen_config("yearly"), "2017-12-31T23:59:00.000000+00:00"
) )
async def test_self_no_reset_yearly(hass): async def test_self_no_reset_yearly(hass: HomeAssistant) -> None:
"""Test yearly reset of meter does not occur after 1st January.""" """Test yearly reset of meter does not occur after 1st January."""
await _test_self_reset( await _test_self_reset(
hass, hass,
@ -1101,7 +1101,7 @@ async def test_self_no_reset_yearly(hass):
) )
async def test_reset_yearly_offset(hass): async def test_reset_yearly_offset(hass: HomeAssistant) -> None:
"""Test yearly reset of meter.""" """Test yearly reset of meter."""
await _test_self_reset( await _test_self_reset(
hass, hass,
@ -1110,7 +1110,7 @@ async def test_reset_yearly_offset(hass):
) )
async def test_no_reset_yearly_offset(hass): async def test_no_reset_yearly_offset(hass: HomeAssistant) -> None:
"""Test yearly reset of meter.""" """Test yearly reset of meter."""
await _test_self_reset( await _test_self_reset(
hass, hass,
@ -1120,7 +1120,7 @@ async def test_no_reset_yearly_offset(hass):
) )
async def test_bad_offset(hass): async def test_bad_offset(hass: HomeAssistant) -> None:
"""Test bad offset of meter.""" """Test bad offset of meter."""
assert not await async_setup_component( assert not await async_setup_component(
hass, DOMAIN, gen_config("monthly", timedelta(days=31)) hass, DOMAIN, gen_config("monthly", timedelta(days=31))

View File

@ -4,6 +4,7 @@ import pytest
import homeassistant.components.automation as automation import homeassistant.components.automation as automation
from homeassistant.components.device_automation import DeviceAutomationType from homeassistant.components.device_automation import DeviceAutomationType
from homeassistant.components.vacuum import DOMAIN from homeassistant.components.vacuum import DOMAIN
from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry from homeassistant.helpers import device_registry
from homeassistant.helpers.entity import EntityCategory from homeassistant.helpers.entity import EntityCategory
from homeassistant.helpers.entity_registry import RegistryEntryHider from homeassistant.helpers.entity_registry import RegistryEntryHider
@ -106,7 +107,7 @@ async def test_get_actions_hidden_auxiliary(
assert_lists_same(actions, expected_actions) assert_lists_same(actions, expected_actions)
async def test_action(hass): async def test_action(hass: HomeAssistant) -> None:
"""Test for turn_on and turn_off actions.""" """Test for turn_on and turn_off actions."""
assert await async_setup_component( assert await async_setup_component(
hass, hass,

View File

@ -1,4 +1,6 @@
"""Test reproduce state for Vacuum.""" """Test reproduce state for Vacuum."""
import pytest
from homeassistant.components.vacuum import ( from homeassistant.components.vacuum import (
ATTR_FAN_SPEED, ATTR_FAN_SPEED,
SERVICE_PAUSE, SERVICE_PAUSE,
@ -18,7 +20,7 @@ from homeassistant.const import (
STATE_ON, STATE_ON,
STATE_PAUSED, STATE_PAUSED,
) )
from homeassistant.core import State from homeassistant.core import HomeAssistant, State
from homeassistant.helpers.state import async_reproduce_state from homeassistant.helpers.state import async_reproduce_state
from tests.common import async_mock_service from tests.common import async_mock_service
@ -27,7 +29,9 @@ FAN_SPEED_LOW = "low"
FAN_SPEED_HIGH = "high" FAN_SPEED_HIGH = "high"
async def test_reproducing_states(hass, caplog): async def test_reproducing_states(
hass: HomeAssistant, caplog: pytest.LogCaptureFixture
) -> None:
"""Test reproducing Vacuum states.""" """Test reproducing Vacuum states."""
hass.states.async_set("vacuum.entity_off", STATE_OFF, {}) hass.states.async_set("vacuum.entity_off", STATE_OFF, {})
hass.states.async_set("vacuum.entity_on", STATE_ON, {}) hass.states.async_set("vacuum.entity_on", STATE_ON, {})

View File

@ -2,6 +2,7 @@
from unittest.mock import patch from unittest.mock import patch
from homeassistant.components.climate import ClimateEntityFeature from homeassistant.components.climate import ClimateEntityFeature
from homeassistant.core import HomeAssistant
from .util import async_init_integration, mock_venstar_devices from .util import async_init_integration, mock_venstar_devices
@ -13,7 +14,7 @@ EXPECTED_BASE_SUPPORTED_FEATURES = (
@mock_venstar_devices @mock_venstar_devices
async def test_colortouch(hass): async def test_colortouch(hass: HomeAssistant) -> None:
"""Test interfacing with a venstar colortouch with attached humidifier.""" """Test interfacing with a venstar colortouch with attached humidifier."""
with patch("homeassistant.components.venstar.VENSTAR_SLEEP", new=0): with patch("homeassistant.components.venstar.VENSTAR_SLEEP", new=0):
@ -49,7 +50,7 @@ async def test_colortouch(hass):
@mock_venstar_devices @mock_venstar_devices
async def test_t2000(hass): async def test_t2000(hass: HomeAssistant) -> None:
"""Test interfacing with a venstar T2000 presently turned off.""" """Test interfacing with a venstar T2000 presently turned off."""
with patch("homeassistant.components.venstar.VENSTAR_SLEEP", new=0): with patch("homeassistant.components.venstar.VENSTAR_SLEEP", new=0):

View File

@ -124,7 +124,7 @@ async def test_async_step_finish_error(hass: HomeAssistant) -> None:
} }
async def test_options(hass): async def test_options(hass: HomeAssistant) -> None:
"""Test updating options.""" """Test updating options."""
base_url = "http://127.0.0.1/" base_url = "http://127.0.0.1/"
entry = MockConfigEntry( entry = MockConfigEntry(

View File

@ -4,11 +4,12 @@ from unittest.mock import patch
from homeassistant import data_entry_flow from homeassistant import data_entry_flow
from homeassistant.components.vesync import DOMAIN, config_flow from homeassistant.components.vesync import DOMAIN, config_flow
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
from homeassistant.core import HomeAssistant
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
async def test_abort_already_setup(hass): async def test_abort_already_setup(hass: HomeAssistant) -> None:
"""Test if we abort because component is already setup.""" """Test if we abort because component is already setup."""
flow = config_flow.VeSyncFlowHandler() flow = config_flow.VeSyncFlowHandler()
flow.hass = hass flow.hass = hass
@ -21,7 +22,7 @@ async def test_abort_already_setup(hass):
assert result["reason"] == "single_instance_allowed" assert result["reason"] == "single_instance_allowed"
async def test_invalid_login_error(hass): async def test_invalid_login_error(hass: HomeAssistant) -> None:
"""Test if we return error for invalid username and password.""" """Test if we return error for invalid username and password."""
test_dict = {CONF_USERNAME: "user", CONF_PASSWORD: "pass"} test_dict = {CONF_USERNAME: "user", CONF_PASSWORD: "pass"}
flow = config_flow.VeSyncFlowHandler() flow = config_flow.VeSyncFlowHandler()
@ -33,7 +34,7 @@ async def test_invalid_login_error(hass):
assert result["errors"] == {"base": "invalid_auth"} assert result["errors"] == {"base": "invalid_auth"}
async def test_config_flow_user_input(hass): async def test_config_flow_user_input(hass: HomeAssistant) -> None:
"""Test config flow with user input.""" """Test config flow with user input."""
flow = config_flow.VeSyncFlowHandler() flow = config_flow.VeSyncFlowHandler()
flow.hass = hass flow.hass = hass

View File

@ -14,7 +14,7 @@ from . import ENTRY_CONFIG, MOCK_MAC
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
async def test_form(hass): async def test_form(hass: HomeAssistant) -> None:
"""Test we get the form.""" """Test we get the form."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER} DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -70,7 +70,7 @@ async def test_invalid_login(hass: HomeAssistant) -> None:
assert result2["errors"] == {"base": "invalid_auth"} assert result2["errors"] == {"base": "invalid_auth"}
async def test_form_dhcp(hass): async def test_form_dhcp(hass: HomeAssistant) -> None:
"""Test we can setup from dhcp.""" """Test we can setup from dhcp."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
@ -109,7 +109,7 @@ async def test_form_dhcp(hass):
assert len(mock_setup_entry.mock_calls) == 1 assert len(mock_setup_entry.mock_calls) == 1
async def test_dhcp_single_instance_allowed(hass): async def test_dhcp_single_instance_allowed(hass: HomeAssistant) -> None:
"""Test that configuring more than one instance is rejected.""" """Test that configuring more than one instance is rejected."""
mock_entry = MockConfigEntry( mock_entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -130,7 +130,7 @@ async def test_dhcp_single_instance_allowed(hass):
assert result["reason"] == "single_instance_allowed" assert result["reason"] == "single_instance_allowed"
async def test_user_input_single_instance_allowed(hass): async def test_user_input_single_instance_allowed(hass: HomeAssistant) -> None:
"""Test that configuring more than one instance is rejected.""" """Test that configuring more than one instance is rejected."""
mock_entry = MockConfigEntry( mock_entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,

View File

@ -6,9 +6,10 @@ import vilfo
from homeassistant import config_entries, data_entry_flow from homeassistant import config_entries, data_entry_flow
from homeassistant.components.vilfo.const import DOMAIN from homeassistant.components.vilfo.const import DOMAIN
from homeassistant.const import CONF_ACCESS_TOKEN, CONF_HOST, CONF_ID, CONF_MAC from homeassistant.const import CONF_ACCESS_TOKEN, CONF_HOST, CONF_ID, CONF_MAC
from homeassistant.core import HomeAssistant
async def test_form(hass): async def test_form(hass: HomeAssistant) -> None:
"""Test we get the form.""" """Test we get the form."""
mock_mac = "FF-00-00-00-00-00" mock_mac = "FF-00-00-00-00-00"
@ -39,7 +40,7 @@ async def test_form(hass):
assert len(mock_setup_entry.mock_calls) == 1 assert len(mock_setup_entry.mock_calls) == 1
async def test_form_invalid_auth(hass): async def test_form_invalid_auth(hass: HomeAssistant) -> None:
"""Test we handle invalid auth.""" """Test we handle invalid auth."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER} DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -60,7 +61,7 @@ async def test_form_invalid_auth(hass):
assert result2["errors"] == {"base": "invalid_auth"} assert result2["errors"] == {"base": "invalid_auth"}
async def test_form_cannot_connect(hass): async def test_form_cannot_connect(hass: HomeAssistant) -> None:
"""Test we handle cannot connect error.""" """Test we handle cannot connect error."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER} DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -89,7 +90,7 @@ async def test_form_cannot_connect(hass):
assert result3["errors"] == {"base": "cannot_connect"} assert result3["errors"] == {"base": "cannot_connect"}
async def test_form_wrong_host(hass): async def test_form_wrong_host(hass: HomeAssistant) -> None:
"""Test we handle wrong host errors.""" """Test we handle wrong host errors."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
@ -100,7 +101,7 @@ async def test_form_wrong_host(hass):
assert result["errors"] == {"host": "wrong_host"} assert result["errors"] == {"host": "wrong_host"}
async def test_form_already_configured(hass): async def test_form_already_configured(hass: HomeAssistant) -> None:
"""Test that we handle already configured exceptions appropriately.""" """Test that we handle already configured exceptions appropriately."""
first_flow_result1 = await hass.config_entries.flow.async_init( first_flow_result1 = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER} DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -133,7 +134,7 @@ async def test_form_already_configured(hass):
assert second_flow_result2["reason"] == "already_configured" assert second_flow_result2["reason"] == "already_configured"
async def test_form_unexpected_exception(hass): async def test_form_unexpected_exception(hass: HomeAssistant) -> None:
"""Test that we handle unexpected exceptions.""" """Test that we handle unexpected exceptions."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER} DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -151,7 +152,7 @@ async def test_form_unexpected_exception(hass):
assert result2["errors"] == {"base": "unknown"} assert result2["errors"] == {"base": "unknown"}
async def test_validate_input_returns_data(hass): async def test_validate_input_returns_data(hass: HomeAssistant) -> None:
"""Test we handle the MAC address being resolved or not.""" """Test we handle the MAC address being resolved or not."""
mock_data = {"host": "testadmin.vilfo.com", "access_token": "test-token"} mock_data = {"host": "testadmin.vilfo.com", "access_token": "test-token"}
mock_data_with_ip = {"host": "192.168.0.1", "access_token": "test-token"} mock_data_with_ip = {"host": "192.168.0.1", "access_token": "test-token"}

View File

@ -12,11 +12,13 @@ from homeassistant.components.media_player import (
DOMAIN as DOMAIN_MP, DOMAIN as DOMAIN_MP,
SERVICE_PLAY_MEDIA, SERVICE_PLAY_MEDIA,
) )
from homeassistant.core import HomeAssistant
from homeassistant.exceptions import HomeAssistantError from homeassistant.exceptions import HomeAssistantError
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from tests.common import assert_setup_component, async_mock_service from tests.common import assert_setup_component, async_mock_service
from tests.components.tts.conftest import mutagen_mock # noqa: F401 from tests.components.tts.conftest import mutagen_mock # noqa: F401
from tests.test_util.aiohttp import AiohttpClientMocker
URL = "https://api.voicerss.org/" URL = "https://api.voicerss.org/"
FORM_DATA = { FORM_DATA = {
@ -46,7 +48,7 @@ def cleanup_cache(hass):
shutil.rmtree(default_tts) shutil.rmtree(default_tts)
async def test_setup_component(hass): async def test_setup_component(hass: HomeAssistant) -> None:
"""Test setup component.""" """Test setup component."""
config = {tts.DOMAIN: {"platform": "voicerss", "api_key": "1234567xx"}} config = {tts.DOMAIN: {"platform": "voicerss", "api_key": "1234567xx"}}
@ -55,7 +57,7 @@ async def test_setup_component(hass):
await hass.async_block_till_done() await hass.async_block_till_done()
async def test_setup_component_without_api_key(hass): async def test_setup_component_without_api_key(hass: HomeAssistant) -> None:
"""Test setup component without api key.""" """Test setup component without api key."""
config = {tts.DOMAIN: {"platform": "voicerss"}} config = {tts.DOMAIN: {"platform": "voicerss"}}
@ -64,7 +66,9 @@ async def test_setup_component_without_api_key(hass):
await hass.async_block_till_done() await hass.async_block_till_done()
async def test_service_say(hass, aioclient_mock): async def test_service_say(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test service call say.""" """Test service call say."""
calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA) calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA)
@ -93,7 +97,9 @@ async def test_service_say(hass, aioclient_mock):
assert aioclient_mock.mock_calls[0][2] == FORM_DATA assert aioclient_mock.mock_calls[0][2] == FORM_DATA
async def test_service_say_german_config(hass, aioclient_mock): async def test_service_say_german_config(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test service call say with german code in the config.""" """Test service call say with german code in the config."""
calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA) calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA)
@ -128,7 +134,9 @@ async def test_service_say_german_config(hass, aioclient_mock):
assert aioclient_mock.mock_calls[0][2] == form_data assert aioclient_mock.mock_calls[0][2] == form_data
async def test_service_say_german_service(hass, aioclient_mock): async def test_service_say_german_service(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test service call say with german code in the service.""" """Test service call say with german code in the service."""
calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA) calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA)
@ -158,7 +166,9 @@ async def test_service_say_german_service(hass, aioclient_mock):
assert aioclient_mock.mock_calls[0][2] == form_data assert aioclient_mock.mock_calls[0][2] == form_data
async def test_service_say_error(hass, aioclient_mock): async def test_service_say_error(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test service call say with http response 400.""" """Test service call say with http response 400."""
calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA) calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA)
@ -186,7 +196,9 @@ async def test_service_say_error(hass, aioclient_mock):
assert aioclient_mock.mock_calls[0][2] == FORM_DATA assert aioclient_mock.mock_calls[0][2] == FORM_DATA
async def test_service_say_timeout(hass, aioclient_mock): async def test_service_say_timeout(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test service call say with http timeout.""" """Test service call say with http timeout."""
calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA) calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA)
@ -214,7 +226,9 @@ async def test_service_say_timeout(hass, aioclient_mock):
assert aioclient_mock.mock_calls[0][2] == FORM_DATA assert aioclient_mock.mock_calls[0][2] == FORM_DATA
async def test_service_say_error_msg(hass, aioclient_mock): async def test_service_say_error_msg(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test service call say with http error api message.""" """Test service call say with http error api message."""
calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA) calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA)

View File

@ -5,6 +5,7 @@ from homeassistant import config_entries
from homeassistant.components import zeroconf from homeassistant.components import zeroconf
from homeassistant.components.volumio.config_flow import CannotConnectError from homeassistant.components.volumio.config_flow import CannotConnectError
from homeassistant.components.volumio.const import DOMAIN from homeassistant.components.volumio.const import DOMAIN
from homeassistant.core import HomeAssistant
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
@ -35,7 +36,7 @@ TEST_DISCOVERY_RESULT = {
} }
async def test_form(hass): async def test_form(hass: HomeAssistant) -> None:
"""Test we get the form.""" """Test we get the form."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER} DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -63,7 +64,7 @@ async def test_form(hass):
assert len(mock_setup_entry.mock_calls) == 1 assert len(mock_setup_entry.mock_calls) == 1
async def test_form_updates_unique_id(hass): async def test_form_updates_unique_id(hass: HomeAssistant) -> None:
"""Test a duplicate id aborts and updates existing entry.""" """Test a duplicate id aborts and updates existing entry."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -100,7 +101,7 @@ async def test_form_updates_unique_id(hass):
assert entry.data == {**TEST_SYSTEM_INFO, **TEST_CONNECTION} assert entry.data == {**TEST_SYSTEM_INFO, **TEST_CONNECTION}
async def test_empty_system_info(hass): async def test_empty_system_info(hass: HomeAssistant) -> None:
"""Test old volumio versions with empty system info.""" """Test old volumio versions with empty system info."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER} DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -133,7 +134,7 @@ async def test_empty_system_info(hass):
assert len(mock_setup_entry.mock_calls) == 1 assert len(mock_setup_entry.mock_calls) == 1
async def test_form_cannot_connect(hass): async def test_form_cannot_connect(hass: HomeAssistant) -> None:
"""Test we handle cannot connect error.""" """Test we handle cannot connect error."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER} DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -152,7 +153,7 @@ async def test_form_cannot_connect(hass):
assert result2["errors"] == {"base": "cannot_connect"} assert result2["errors"] == {"base": "cannot_connect"}
async def test_form_exception(hass): async def test_form_exception(hass: HomeAssistant) -> None:
"""Test we handle generic error.""" """Test we handle generic error."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER} DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -171,7 +172,7 @@ async def test_form_exception(hass):
assert result2["errors"] == {"base": "unknown"} assert result2["errors"] == {"base": "unknown"}
async def test_discovery(hass): async def test_discovery(hass: HomeAssistant) -> None:
"""Test discovery flow works.""" """Test discovery flow works."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
@ -201,7 +202,7 @@ async def test_discovery(hass):
assert len(mock_setup_entry.mock_calls) == 1 assert len(mock_setup_entry.mock_calls) == 1
async def test_discovery_cannot_connect(hass): async def test_discovery_cannot_connect(hass: HomeAssistant) -> None:
"""Test discovery aborts if cannot connect.""" """Test discovery aborts if cannot connect."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
@ -221,7 +222,7 @@ async def test_discovery_cannot_connect(hass):
assert result2["reason"] == "cannot_connect" assert result2["reason"] == "cannot_connect"
async def test_discovery_duplicate_data(hass): async def test_discovery_duplicate_data(hass: HomeAssistant) -> None:
"""Test discovery aborts if same mDNS packet arrives.""" """Test discovery aborts if same mDNS packet arrives."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_ZEROCONF}, data=TEST_DISCOVERY DOMAIN, context={"source": config_entries.SOURCE_ZEROCONF}, data=TEST_DISCOVERY
@ -236,7 +237,7 @@ async def test_discovery_duplicate_data(hass):
assert result["reason"] == "already_in_progress" assert result["reason"] == "already_in_progress"
async def test_discovery_updates_unique_id(hass): async def test_discovery_updates_unique_id(hass: HomeAssistant) -> None:
"""Test a duplicate discovery id aborts and updates existing entry.""" """Test a duplicate discovery id aborts and updates existing entry."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,

View File

@ -17,6 +17,7 @@ from homeassistant import config_entries, data_entry_flow
from homeassistant.components.vulcan import config_flow, const, register from homeassistant.components.vulcan import config_flow, const, register
from homeassistant.components.vulcan.config_flow import ClientConnectionError, Keystore from homeassistant.components.vulcan.config_flow import ClientConnectionError, Keystore
from homeassistant.const import CONF_PIN, CONF_REGION, CONF_TOKEN from homeassistant.const import CONF_PIN, CONF_REGION, CONF_TOKEN
from homeassistant.core import HomeAssistant
from tests.common import MockConfigEntry, load_fixture from tests.common import MockConfigEntry, load_fixture
@ -29,7 +30,7 @@ fake_account = Account(
) )
async def test_show_form(hass): async def test_show_form(hass: HomeAssistant) -> None:
"""Test that the form is served with no input.""" """Test that the form is served with no input."""
flow = config_flow.VulcanFlowHandler() flow = config_flow.VulcanFlowHandler()
flow.hass = hass flow.hass = hass
@ -519,7 +520,9 @@ async def test_multiple_config_entries_using_saved_credentials_4(mock_student, h
assert len(mock_setup_entry.mock_calls) == 3 assert len(mock_setup_entry.mock_calls) == 3
async def test_multiple_config_entries_without_valid_saved_credentials(hass): async def test_multiple_config_entries_without_valid_saved_credentials(
hass: HomeAssistant,
) -> None:
"""Test a unsuccessful config flow for multiple config entries without valid saved credentials.""" """Test a unsuccessful config flow for multiple config entries without valid saved credentials."""
MockConfigEntry( MockConfigEntry(
entry_id="456", entry_id="456",
@ -613,7 +616,9 @@ async def test_multiple_config_entries_using_saved_credentials_with_connections_
assert result["errors"] == {"base": "cannot_connect"} assert result["errors"] == {"base": "cannot_connect"}
async def test_multiple_config_entries_using_saved_credentials_with_unknown_error(hass): async def test_multiple_config_entries_using_saved_credentials_with_unknown_error(
hass: HomeAssistant,
) -> None:
"""Test a unsuccessful config flow for multiple config entries without valid saved credentials.""" """Test a unsuccessful config flow for multiple config entries without valid saved credentials."""
MockConfigEntry( MockConfigEntry(
entry_id="456", entry_id="456",

View File

@ -4,6 +4,7 @@ import pytest
import homeassistant.components.automation as automation import homeassistant.components.automation as automation
from homeassistant.components.device_automation import DeviceAutomationType from homeassistant.components.device_automation import DeviceAutomationType
from homeassistant.components.water_heater import DOMAIN from homeassistant.components.water_heater import DOMAIN
from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry from homeassistant.helpers import device_registry
from homeassistant.helpers.entity import EntityCategory from homeassistant.helpers.entity import EntityCategory
from homeassistant.helpers.entity_registry import RegistryEntryHider from homeassistant.helpers.entity_registry import RegistryEntryHider
@ -106,7 +107,7 @@ async def test_get_actions_hidden_auxiliary(
assert_lists_same(actions, expected_actions) assert_lists_same(actions, expected_actions)
async def test_action(hass): async def test_action(hass: HomeAssistant) -> None:
"""Test for turn_on and turn_off actions.""" """Test for turn_on and turn_off actions."""
assert await async_setup_component( assert await async_setup_component(
hass, hass,

View File

@ -1,4 +1,6 @@
"""Test reproduce state for Water heater.""" """Test reproduce state for Water heater."""
import pytest
from homeassistant.components.water_heater import ( from homeassistant.components.water_heater import (
ATTR_AWAY_MODE, ATTR_AWAY_MODE,
ATTR_OPERATION_MODE, ATTR_OPERATION_MODE,
@ -10,13 +12,15 @@ from homeassistant.components.water_heater import (
STATE_GAS, STATE_GAS,
) )
from homeassistant.const import SERVICE_TURN_OFF, SERVICE_TURN_ON, STATE_OFF, STATE_ON from homeassistant.const import SERVICE_TURN_OFF, SERVICE_TURN_ON, STATE_OFF, STATE_ON
from homeassistant.core import State from homeassistant.core import HomeAssistant, State
from homeassistant.helpers.state import async_reproduce_state from homeassistant.helpers.state import async_reproduce_state
from tests.common import async_mock_service from tests.common import async_mock_service
async def test_reproducing_states(hass, caplog): async def test_reproducing_states(
hass: HomeAssistant, caplog: pytest.LogCaptureFixture
) -> None:
"""Test reproducing Water heater states.""" """Test reproducing Water heater states."""
hass.states.async_set("water_heater.entity_off", STATE_OFF, {}) hass.states.async_set("water_heater.entity_off", STATE_OFF, {})
hass.states.async_set("water_heater.entity_on", STATE_ON, {ATTR_TEMPERATURE: 45}) hass.states.async_set("water_heater.entity_on", STATE_ON, {ATTR_TEMPERATURE: 45})

View File

@ -1,5 +1,4 @@
"""Test Waze Travel Time sensors.""" """Test Waze Travel Time sensors."""
from WazeRouteCalculator import WRCError from WazeRouteCalculator import WRCError
import pytest import pytest
@ -14,6 +13,7 @@ from homeassistant.components.waze_travel_time.const import (
DOMAIN, DOMAIN,
IMPERIAL_UNITS, IMPERIAL_UNITS,
) )
from homeassistant.core import HomeAssistant
from .const import MOCK_CONFIG from .const import MOCK_CONFIG
@ -53,7 +53,7 @@ def mock_update_keyerror_fixture(mock_wrc):
[(MOCK_CONFIG, DEFAULT_OPTIONS)], [(MOCK_CONFIG, DEFAULT_OPTIONS)],
) )
@pytest.mark.usefixtures("mock_update", "mock_config") @pytest.mark.usefixtures("mock_update", "mock_config")
async def test_sensor(hass): async def test_sensor(hass: HomeAssistant) -> None:
"""Test that sensor works.""" """Test that sensor works."""
assert hass.states.get("sensor.waze_travel_time").state == "150" assert hass.states.get("sensor.waze_travel_time").state == "150"
assert ( assert (
@ -94,7 +94,7 @@ async def test_sensor(hass):
], ],
) )
@pytest.mark.usefixtures("mock_update", "mock_config") @pytest.mark.usefixtures("mock_update", "mock_config")
async def test_imperial(hass): async def test_imperial(hass: HomeAssistant) -> None:
"""Test that the imperial option works.""" """Test that the imperial option works."""
assert hass.states.get("sensor.waze_travel_time").attributes[ assert hass.states.get("sensor.waze_travel_time").attributes[
"distance" "distance"
@ -102,7 +102,9 @@ async def test_imperial(hass):
@pytest.mark.usefixtures("mock_update_wrcerror") @pytest.mark.usefixtures("mock_update_wrcerror")
async def test_sensor_failed_wrcerror(hass, caplog): async def test_sensor_failed_wrcerror(
hass: HomeAssistant, caplog: pytest.LogCaptureFixture
) -> None:
"""Test that sensor update fails with log message.""" """Test that sensor update fails with log message."""
config_entry = MockConfigEntry( config_entry = MockConfigEntry(
domain=DOMAIN, data=MOCK_CONFIG, options=DEFAULT_OPTIONS, entry_id="test" domain=DOMAIN, data=MOCK_CONFIG, options=DEFAULT_OPTIONS, entry_id="test"
@ -116,7 +118,9 @@ async def test_sensor_failed_wrcerror(hass, caplog):
@pytest.mark.usefixtures("mock_update_keyerror") @pytest.mark.usefixtures("mock_update_keyerror")
async def test_sensor_failed_keyerror(hass, caplog): async def test_sensor_failed_keyerror(
hass: HomeAssistant, caplog: pytest.LogCaptureFixture
) -> None:
"""Test that sensor update fails with log message.""" """Test that sensor update fails with log message."""
config_entry = MockConfigEntry( config_entry = MockConfigEntry(
domain=DOMAIN, data=MOCK_CONFIG, options=DEFAULT_OPTIONS, entry_id="test" domain=DOMAIN, data=MOCK_CONFIG, options=DEFAULT_OPTIONS, entry_id="test"

View File

@ -8,6 +8,7 @@ import pytest
from homeassistant.components import webhook from homeassistant.components import webhook
from homeassistant.config import async_process_ha_core_config from homeassistant.config import async_process_ha_core_config
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
@ -40,7 +41,7 @@ async def test_unregistering_webhook(hass, mock_client):
assert len(hooks) == 1 assert len(hooks) == 1
async def test_generate_webhook_url(hass): async def test_generate_webhook_url(hass: HomeAssistant) -> None:
"""Test we generate a webhook url correctly.""" """Test we generate a webhook url correctly."""
await async_process_ha_core_config( await async_process_ha_core_config(
hass, hass,
@ -51,7 +52,7 @@ async def test_generate_webhook_url(hass):
assert url == "https://example.com/api/webhook/some_id" assert url == "https://example.com/api/webhook/some_id"
async def test_async_generate_path(hass): async def test_async_generate_path(hass: HomeAssistant) -> None:
"""Test generating just the path component of the url correctly.""" """Test generating just the path component of the url correctly."""
path = webhook.async_generate_path("some_id") path = webhook.async_generate_path("some_id")
assert path == "/api/webhook/some_id" assert path == "/api/webhook/some_id"

View File

@ -3,10 +3,11 @@ from unittest.mock import patch
import pytest import pytest
from homeassistant.core import callback from homeassistant.core import HomeAssistant, callback
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from tests.components.blueprint.conftest import stub_blueprint_populate # noqa: F401 from tests.components.blueprint.conftest import stub_blueprint_populate # noqa: F401
from tests.typing import ClientSessionGenerator
@pytest.fixture(autouse=True) @pytest.fixture(autouse=True)
@ -17,7 +18,9 @@ async def setup_http(hass):
await hass.async_block_till_done() await hass.async_block_till_done()
async def test_webhook_json(hass, hass_client_no_auth): async def test_webhook_json(
hass: HomeAssistant, hass_client_no_auth: ClientSessionGenerator
) -> None:
"""Test triggering with a JSON webhook.""" """Test triggering with a JSON webhook."""
events = [] events = []
@ -56,7 +59,9 @@ async def test_webhook_json(hass, hass_client_no_auth):
assert events[0].data["id"] == 0 assert events[0].data["id"] == 0
async def test_webhook_post(hass, hass_client_no_auth): async def test_webhook_post(
hass: HomeAssistant, hass_client_no_auth: ClientSessionGenerator
) -> None:
"""Test triggering with a POST webhook.""" """Test triggering with a POST webhook."""
events = [] events = []
@ -91,7 +96,9 @@ async def test_webhook_post(hass, hass_client_no_auth):
assert events[0].data["hello"] == "yo world" assert events[0].data["hello"] == "yo world"
async def test_webhook_query(hass, hass_client_no_auth): async def test_webhook_query(
hass: HomeAssistant, hass_client_no_auth: ClientSessionGenerator
) -> None:
"""Test triggering with a query POST webhook.""" """Test triggering with a query POST webhook."""
events = [] events = []
@ -126,7 +133,9 @@ async def test_webhook_query(hass, hass_client_no_auth):
assert events[0].data["hello"] == "yo world" assert events[0].data["hello"] == "yo world"
async def test_webhook_multiple(hass, hass_client_no_auth): async def test_webhook_multiple(
hass: HomeAssistant, hass_client_no_auth: ClientSessionGenerator
) -> None:
"""Test triggering multiple triggers with a POST webhook.""" """Test triggering multiple triggers with a POST webhook."""
events1 = [] events1 = []
events2 = [] events2 = []
@ -181,7 +190,9 @@ async def test_webhook_multiple(hass, hass_client_no_auth):
assert events2[0].data["hello"] == "yo2 world" assert events2[0].data["hello"] == "yo2 world"
async def test_webhook_reload(hass, hass_client_no_auth): async def test_webhook_reload(
hass: HomeAssistant, hass_client_no_auth: ClientSessionGenerator
) -> None:
"""Test reloading a webhook.""" """Test reloading a webhook."""
events = [] events = []

View File

@ -11,6 +11,7 @@ from homeassistant.components.notify import (
) )
from homeassistant.components.webostv import DOMAIN from homeassistant.components.webostv import DOMAIN
from homeassistant.const import ATTR_ICON from homeassistant.const import ATTR_ICON
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from . import setup_webostv from . import setup_webostv
@ -146,7 +147,9 @@ async def test_connection_errors(hass, caplog, client, monkeypatch, side_effect,
assert error in caplog.text assert error in caplog.text
async def test_no_discovery_info(hass, caplog): async def test_no_discovery_info(
hass: HomeAssistant, caplog: pytest.LogCaptureFixture
) -> None:
"""Test setup without discovery info.""" """Test setup without discovery info."""
assert NOTIFY_DOMAIN not in hass.config.components assert NOTIFY_DOMAIN not in hass.config.components
assert await async_setup_component( assert await async_setup_component(

View File

@ -15,11 +15,12 @@ from homeassistant.components.websocket_api.const import (
SIGNAL_WEBSOCKET_DISCONNECTED, SIGNAL_WEBSOCKET_DISCONNECTED,
URL, URL,
) )
from homeassistant.core import callback from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers.dispatcher import async_dispatcher_connect from homeassistant.helpers.dispatcher import async_dispatcher_connect
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from tests.common import mock_coro from tests.common import mock_coro
from tests.typing import ClientSessionGenerator
@pytest.fixture @pytest.fixture
@ -138,7 +139,9 @@ async def test_auth_active_user_inactive(hass, hass_client_no_auth, hass_access_
assert auth_msg["type"] == TYPE_AUTH_INVALID assert auth_msg["type"] == TYPE_AUTH_INVALID
async def test_auth_active_with_password_not_allow(hass, hass_client_no_auth): async def test_auth_active_with_password_not_allow(
hass: HomeAssistant, hass_client_no_auth: ClientSessionGenerator
) -> None:
"""Test authenticating with a token.""" """Test authenticating with a token."""
assert await async_setup_component(hass, "websocket_api", {}) assert await async_setup_component(hass, "websocket_api", {})
await hass.async_block_till_done() await hass.async_block_till_done()
@ -174,7 +177,9 @@ async def test_auth_legacy_support_with_password(
assert auth_msg["type"] == TYPE_AUTH_INVALID assert auth_msg["type"] == TYPE_AUTH_INVALID
async def test_auth_with_invalid_token(hass, hass_client_no_auth): async def test_auth_with_invalid_token(
hass: HomeAssistant, hass_client_no_auth: ClientSessionGenerator
) -> None:
"""Test authenticating with a token.""" """Test authenticating with a token."""
assert await async_setup_component(hass, "websocket_api", {}) assert await async_setup_component(hass, "websocket_api", {})
await hass.async_block_till_done() await hass.async_block_till_done()

View File

@ -24,6 +24,7 @@ from homeassistant.loader import async_get_integration
from homeassistant.setup import DATA_SETUP_TIME, async_setup_component from homeassistant.setup import DATA_SETUP_TIME, async_setup_component
from tests.common import MockEntity, MockEntityPlatform, async_mock_service from tests.common import MockEntity, MockEntityPlatform, async_mock_service
from tests.typing import WebSocketGenerator
STATE_KEY_SHORT_NAMES = { STATE_KEY_SHORT_NAMES = {
"entity_id": "e", "entity_id": "e",
@ -1974,7 +1975,9 @@ async def test_client_message_coalescing(hass, websocket_client, hass_admin_user
await hass.async_block_till_done() await hass.async_block_till_done()
async def test_integration_descriptions(hass, hass_ws_client): async def test_integration_descriptions(
hass: HomeAssistant, hass_ws_client: WebSocketGenerator
) -> None:
"""Test we can get integration descriptions.""" """Test we can get integration descriptions."""
assert await async_setup_component(hass, "config", {}) assert await async_setup_component(hass, "config", {})
ws_client = await hass_ws_client(hass) ws_client = await hass_ws_client(hass)

View File

@ -1,15 +1,14 @@
"""Test Websocket API messages module.""" """Test Websocket API messages module."""
from homeassistant.components.websocket_api.messages import ( from homeassistant.components.websocket_api.messages import (
_cached_event_message as lru_event_cache, _cached_event_message as lru_event_cache,
cached_event_message, cached_event_message,
message_to_json, message_to_json,
) )
from homeassistant.const import EVENT_STATE_CHANGED from homeassistant.const import EVENT_STATE_CHANGED
from homeassistant.core import callback from homeassistant.core import HomeAssistant, callback
async def test_cached_event_message(hass): async def test_cached_event_message(hass: HomeAssistant) -> None:
"""Test that we cache event messages.""" """Test that we cache event messages."""
events = [] events = []
@ -47,7 +46,7 @@ async def test_cached_event_message(hass):
assert cache_info.currsize == 2 assert cache_info.currsize == 2
async def test_cached_event_message_with_different_idens(hass): async def test_cached_event_message_with_different_idens(hass: HomeAssistant) -> None:
"""Test that we cache event messages when the subscrition idens differ.""" """Test that we cache event messages when the subscrition idens differ."""
events = [] events = []

View File

@ -13,6 +13,7 @@ from homeassistant.const import (
CONF_TYPE, CONF_TYPE,
Platform, Platform,
) )
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from tests.common import ( from tests.common import (
@ -98,7 +99,7 @@ async def test_get_triggers(hass, wemo_entity):
assert_lists_same(triggers, expected_triggers) assert_lists_same(triggers, expected_triggers)
async def test_fires_on_long_press(hass): async def test_fires_on_long_press(hass: HomeAssistant) -> None:
"""Test wemo long press trigger firing.""" """Test wemo long press trigger firing."""
assert await setup_automation(hass, MOCK_DEVICE_ID, EVENT_TYPE_LONG_PRESS) assert await setup_automation(hass, MOCK_DEVICE_ID, EVENT_TYPE_LONG_PRESS)
calls = async_mock_service(hass, "test", "automation") calls = async_mock_service(hass, "test", "automation")

View File

@ -6,6 +6,7 @@ import pywemo
from homeassistant.components.wemo import CONF_DISCOVERY, CONF_STATIC, WemoDiscovery from homeassistant.components.wemo import CONF_DISCOVERY, CONF_STATIC, WemoDiscovery
from homeassistant.components.wemo.const import DOMAIN from homeassistant.components.wemo.const import DOMAIN
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er from homeassistant.helpers import entity_registry as er
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from homeassistant.util import dt from homeassistant.util import dt
@ -21,12 +22,12 @@ from .conftest import (
from tests.common import async_fire_time_changed from tests.common import async_fire_time_changed
async def test_config_no_config(hass): async def test_config_no_config(hass: HomeAssistant) -> None:
"""Component setup succeeds when there are no config entry for the domain.""" """Component setup succeeds when there are no config entry for the domain."""
assert await async_setup_component(hass, DOMAIN, {}) assert await async_setup_component(hass, DOMAIN, {})
async def test_config_no_static(hass): async def test_config_no_static(hass: HomeAssistant) -> None:
"""Component setup succeeds when there are no static config entries.""" """Component setup succeeds when there are no static config entries."""
assert await async_setup_component(hass, DOMAIN, {DOMAIN: {CONF_DISCOVERY: False}}) assert await async_setup_component(hass, DOMAIN, {DOMAIN: {CONF_DISCOVERY: False}})
@ -89,7 +90,7 @@ async def test_static_config_without_port(hass, pywemo_device):
assert len(entity_entries) == 1 assert len(entity_entries) == 1
async def test_static_config_with_invalid_host(hass): async def test_static_config_with_invalid_host(hass: HomeAssistant) -> None:
"""Component setup fails if a static host is invalid.""" """Component setup fails if a static host is invalid."""
setup_success = await async_setup_component( setup_success = await async_setup_component(
hass, hass,

View File

@ -7,6 +7,7 @@ import pytest
from homeassistant import config_entries, data_entry_flow from homeassistant import config_entries, data_entry_flow
from homeassistant.components.wiffi.const import DOMAIN from homeassistant.components.wiffi.const import DOMAIN
from homeassistant.const import CONF_PORT, CONF_TIMEOUT from homeassistant.const import CONF_PORT, CONF_TIMEOUT
from homeassistant.core import HomeAssistant
from homeassistant.data_entry_flow import FlowResultType from homeassistant.data_entry_flow import FlowResultType
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
@ -112,7 +113,7 @@ async def test_form_start_server_failed(hass, start_server_failed):
assert result2["reason"] == "start_server_failed" assert result2["reason"] == "start_server_failed"
async def test_option_flow(hass): async def test_option_flow(hass: HomeAssistant) -> None:
"""Test option flow.""" """Test option flow."""
entry = MockConfigEntry(domain=DOMAIN, data=MOCK_CONFIG) entry = MockConfigEntry(domain=DOMAIN, data=MOCK_CONFIG)
entry.add_to_hass(hass) entry.add_to_hass(hass)

View File

@ -9,6 +9,7 @@ from homeassistant.components import dhcp
from homeassistant.components.wiz.config_flow import CONF_DEVICE from homeassistant.components.wiz.config_flow import CONF_DEVICE
from homeassistant.components.wiz.const import DOMAIN from homeassistant.components.wiz.const import DOMAIN
from homeassistant.const import CONF_HOST from homeassistant.const import CONF_HOST
from homeassistant.core import HomeAssistant
from homeassistant.data_entry_flow import FlowResultType from homeassistant.data_entry_flow import FlowResultType
from . import ( from . import (
@ -42,7 +43,7 @@ INTEGRATION_DISCOVERY = {
} }
async def test_form(hass): async def test_form(hass: HomeAssistant) -> None:
"""Test we get the form.""" """Test we get the form."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER} DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -71,7 +72,7 @@ async def test_form(hass):
assert len(mock_setup_entry.mock_calls) == 1 assert len(mock_setup_entry.mock_calls) == 1
async def test_user_flow_enters_dns_name(hass): async def test_user_flow_enters_dns_name(hass: HomeAssistant) -> None:
"""Test we reject dns names and want ips.""" """Test we reject dns names and want ips."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER} DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -137,7 +138,7 @@ async def test_user_form_exceptions(hass, side_effect, error_base):
assert result2["errors"] == {"base": error_base} assert result2["errors"] == {"base": error_base}
async def test_form_updates_unique_id(hass): async def test_form_updates_unique_id(hass: HomeAssistant) -> None:
"""Test a duplicate id aborts and updates existing entry.""" """Test a duplicate id aborts and updates existing entry."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -340,7 +341,7 @@ async def test_discovered_by_dhcp_or_integration_discovery_avoid_waiting_for_ret
assert entry.state is config_entries.ConfigEntryState.LOADED assert entry.state is config_entries.ConfigEntryState.LOADED
async def test_setup_via_discovery(hass): async def test_setup_via_discovery(hass: HomeAssistant) -> None:
"""Test setting up via discovery.""" """Test setting up via discovery."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER} DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -409,7 +410,7 @@ async def test_setup_via_discovery(hass):
assert result2["reason"] == "no_devices_found" assert result2["reason"] == "no_devices_found"
async def test_setup_via_discovery_cannot_connect(hass): async def test_setup_via_discovery_cannot_connect(hass: HomeAssistant) -> None:
"""Test setting up via discovery and we fail to connect to the discovered device.""" """Test setting up via discovery and we fail to connect to the discovered device."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER} DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -441,7 +442,7 @@ async def test_setup_via_discovery_cannot_connect(hass):
assert result3["reason"] == "cannot_connect" assert result3["reason"] == "cannot_connect"
async def test_setup_via_discovery_exception_finds_nothing(hass): async def test_setup_via_discovery_exception_finds_nothing(hass: HomeAssistant) -> None:
"""Test we do not find anything if discovery throws.""" """Test we do not find anything if discovery throws."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER} DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -462,7 +463,7 @@ async def test_setup_via_discovery_exception_finds_nothing(hass):
assert result2["reason"] == "no_devices_found" assert result2["reason"] == "no_devices_found"
async def test_discovery_with_firmware_update(hass): async def test_discovery_with_firmware_update(hass: HomeAssistant) -> None:
"""Test we check the device again between first discovery and config entry creation.""" """Test we check the device again between first discovery and config entry creation."""
with _patch_wizlight( with _patch_wizlight(
device=None, device=None,

View File

@ -1,10 +1,15 @@
"""Test WiZ diagnostics.""" """Test WiZ diagnostics."""
from homeassistant.core import HomeAssistant
from . import async_setup_integration from . import async_setup_integration
from tests.components.diagnostics import get_diagnostics_for_config_entry from tests.components.diagnostics import get_diagnostics_for_config_entry
from tests.typing import ClientSessionGenerator
async def test_diagnostics(hass, hass_client): async def test_diagnostics(
hass: HomeAssistant, hass_client: ClientSessionGenerator
) -> None:
"""Test generating diagnostics for a config entry.""" """Test generating diagnostics for a config entry."""
_, entry = await async_setup_integration(hass) _, entry = await async_setup_integration(hass)
diag = await get_diagnostics_for_config_entry(hass, hass_client, entry) diag = await get_diagnostics_for_config_entry(hass, hass_client, entry)

View File

@ -13,6 +13,7 @@ from homeassistant.components.wolflink.const import (
DOMAIN, DOMAIN,
) )
from homeassistant.const import CONF_PASSWORD, CONF_USERNAME from homeassistant.const import CONF_PASSWORD, CONF_USERNAME
from homeassistant.core import HomeAssistant
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
@ -32,7 +33,7 @@ INPUT_CONFIG = {
DEVICE = Device(CONFIG[DEVICE_ID], CONFIG[DEVICE_GATEWAY], CONFIG[DEVICE_NAME]) DEVICE = Device(CONFIG[DEVICE_ID], CONFIG[DEVICE_GATEWAY], CONFIG[DEVICE_NAME])
async def test_show_form(hass): async def test_show_form(hass: HomeAssistant) -> None:
"""Test we get the form.""" """Test we get the form."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
@ -42,7 +43,7 @@ async def test_show_form(hass):
assert result["step_id"] == "user" assert result["step_id"] == "user"
async def test_device_step_form(hass): async def test_device_step_form(hass: HomeAssistant) -> None:
"""Test we get the second step of config.""" """Test we get the second step of config."""
with patch( with patch(
"homeassistant.components.wolflink.config_flow.WolfClient.fetch_system_list", "homeassistant.components.wolflink.config_flow.WolfClient.fetch_system_list",
@ -56,7 +57,7 @@ async def test_device_step_form(hass):
assert result["step_id"] == "device" assert result["step_id"] == "device"
async def test_create_entry(hass): async def test_create_entry(hass: HomeAssistant) -> None:
"""Test entity creation from device step.""" """Test entity creation from device step."""
with patch( with patch(
"homeassistant.components.wolflink.config_flow.WolfClient.fetch_system_list", "homeassistant.components.wolflink.config_flow.WolfClient.fetch_system_list",
@ -76,7 +77,7 @@ async def test_create_entry(hass):
assert result_create_entry["data"] == CONFIG assert result_create_entry["data"] == CONFIG
async def test_form_invalid_auth(hass): async def test_form_invalid_auth(hass: HomeAssistant) -> None:
"""Test we handle invalid auth.""" """Test we handle invalid auth."""
with patch( with patch(
"homeassistant.components.wolflink.config_flow.WolfClient.fetch_system_list", "homeassistant.components.wolflink.config_flow.WolfClient.fetch_system_list",
@ -90,7 +91,7 @@ async def test_form_invalid_auth(hass):
assert result["errors"] == {"base": "invalid_auth"} assert result["errors"] == {"base": "invalid_auth"}
async def test_form_cannot_connect(hass): async def test_form_cannot_connect(hass: HomeAssistant) -> None:
"""Test we handle cannot connect error.""" """Test we handle cannot connect error."""
with patch( with patch(
"homeassistant.components.wolflink.config_flow.WolfClient.fetch_system_list", "homeassistant.components.wolflink.config_flow.WolfClient.fetch_system_list",
@ -104,7 +105,7 @@ async def test_form_cannot_connect(hass):
assert result["errors"] == {"base": "cannot_connect"} assert result["errors"] == {"base": "cannot_connect"}
async def test_form_unknown_exception(hass): async def test_form_unknown_exception(hass: HomeAssistant) -> None:
"""Test we handle cannot connect error.""" """Test we handle cannot connect error."""
with patch( with patch(
"homeassistant.components.wolflink.config_flow.WolfClient.fetch_system_list", "homeassistant.components.wolflink.config_flow.WolfClient.fetch_system_list",
@ -118,7 +119,7 @@ async def test_form_unknown_exception(hass):
assert result["errors"] == {"base": "unknown"} assert result["errors"] == {"base": "unknown"}
async def test_already_configured_error(hass): async def test_already_configured_error(hass: HomeAssistant) -> None:
"""Test already configured while creating entry.""" """Test already configured while creating entry."""
with patch( with patch(
"homeassistant.components.wolflink.config_flow.WolfClient.fetch_system_list", "homeassistant.components.wolflink.config_flow.WolfClient.fetch_system_list",

View File

@ -14,6 +14,7 @@ from homeassistant.components.ws66i.const import (
INIT_OPTIONS_DEFAULT, INIT_OPTIONS_DEFAULT,
) )
from homeassistant.const import CONF_IP_ADDRESS from homeassistant.const import CONF_IP_ADDRESS
from homeassistant.core import HomeAssistant
from .test_media_player import AttrDict from .test_media_player import AttrDict
@ -22,7 +23,7 @@ from tests.common import MockConfigEntry
CONFIG = {CONF_IP_ADDRESS: "1.1.1.1"} CONFIG = {CONF_IP_ADDRESS: "1.1.1.1"}
async def test_form(hass): async def test_form(hass: HomeAssistant) -> None:
"""Test we get the form.""" """Test we get the form."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER} DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -53,7 +54,7 @@ async def test_form(hass):
assert len(mock_setup_entry.mock_calls) == 1 assert len(mock_setup_entry.mock_calls) == 1
async def test_form_cannot_connect(hass): async def test_form_cannot_connect(hass: HomeAssistant) -> None:
"""Test cannot connect error.""" """Test cannot connect error."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER} DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -70,7 +71,7 @@ async def test_form_cannot_connect(hass):
assert result2["errors"] == {"base": "cannot_connect"} assert result2["errors"] == {"base": "cannot_connect"}
async def test_form_wrong_ip(hass): async def test_form_wrong_ip(hass: HomeAssistant) -> None:
"""Test cannot connect error with bad IP.""" """Test cannot connect error with bad IP."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER} DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -87,7 +88,7 @@ async def test_form_wrong_ip(hass):
assert result2["errors"] == {"base": "cannot_connect"} assert result2["errors"] == {"base": "cannot_connect"}
async def test_generic_exception(hass): async def test_generic_exception(hass: HomeAssistant) -> None:
"""Test generic exception.""" """Test generic exception."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER} DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -104,7 +105,7 @@ async def test_generic_exception(hass):
assert result2["errors"] == {"base": "unknown"} assert result2["errors"] == {"base": "unknown"}
async def test_options_flow(hass): async def test_options_flow(hass: HomeAssistant) -> None:
"""Test config flow options.""" """Test config flow options."""
conf = {CONF_IP_ADDRESS: "1.1.1.1", CONF_SOURCES: INIT_OPTIONS_DEFAULT} conf = {CONF_IP_ADDRESS: "1.1.1.1", CONF_SOURCES: INIT_OPTIONS_DEFAULT}

View File

@ -3,6 +3,7 @@ from unittest.mock import patch
from homeassistant.components.ws66i.const import DOMAIN from homeassistant.components.ws66i.const import DOMAIN
from homeassistant.config_entries import ConfigEntryState from homeassistant.config_entries import ConfigEntryState
from homeassistant.core import HomeAssistant
from .test_media_player import ( from .test_media_player import (
MOCK_CONFIG, MOCK_CONFIG,
@ -16,7 +17,7 @@ from tests.common import MockConfigEntry
ZONE_1_ID = "media_player.zone_11" ZONE_1_ID = "media_player.zone_11"
async def test_cannot_connect(hass): async def test_cannot_connect(hass: HomeAssistant) -> None:
"""Test connection error.""" """Test connection error."""
config_entry = MockConfigEntry( config_entry = MockConfigEntry(
domain=DOMAIN, data=MOCK_CONFIG, options=MOCK_OPTIONS domain=DOMAIN, data=MOCK_CONFIG, options=MOCK_OPTIONS
@ -34,7 +35,7 @@ async def test_cannot_connect(hass):
assert hass.states.get(ZONE_1_ID) is None assert hass.states.get(ZONE_1_ID) is None
async def test_cannot_connect_2(hass): async def test_cannot_connect_2(hass: HomeAssistant) -> None:
"""Test connection error pt 2.""" """Test connection error pt 2."""
# Another way to test same case as test_cannot_connect # Another way to test same case as test_cannot_connect
ws66i = MockWs66i() ws66i = MockWs66i()
@ -55,7 +56,7 @@ async def test_cannot_connect_2(hass):
assert hass.states.get(ZONE_1_ID) is None assert hass.states.get(ZONE_1_ID) is None
async def test_unload_config_entry(hass): async def test_unload_config_entry(hass: HomeAssistant) -> None:
"""Test unloading config entry.""" """Test unloading config entry."""
config_entry = MockConfigEntry( config_entry = MockConfigEntry(
domain=DOMAIN, data=MOCK_CONFIG, options=MOCK_OPTIONS domain=DOMAIN, data=MOCK_CONFIG, options=MOCK_OPTIONS

View File

@ -29,6 +29,7 @@ from homeassistant.const import (
STATE_ON, STATE_ON,
STATE_UNAVAILABLE, STATE_UNAVAILABLE,
) )
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry as er from homeassistant.helpers import entity_registry as er
from homeassistant.util.dt import utcnow from homeassistant.util.dt import utcnow
@ -117,7 +118,7 @@ class MockWs66i:
self.zones[zone.zone] = AttrDict(zone) self.zones[zone.zone] = AttrDict(zone)
async def test_setup_success(hass): async def test_setup_success(hass: HomeAssistant) -> None:
"""Test connection success.""" """Test connection success."""
config_entry = MockConfigEntry( config_entry = MockConfigEntry(
domain=DOMAIN, data=MOCK_CONFIG, options=MOCK_OPTIONS domain=DOMAIN, data=MOCK_CONFIG, options=MOCK_OPTIONS
@ -173,7 +174,7 @@ async def _call_media_player_service(hass, name, data):
) )
async def test_update(hass): async def test_update(hass: HomeAssistant) -> None:
"""Test updating values from ws66i.""" """Test updating values from ws66i."""
ws66i = MockWs66i() ws66i = MockWs66i()
_ = await _setup_ws66i_with_options(hass, ws66i) _ = await _setup_ws66i_with_options(hass, ws66i)
@ -202,7 +203,7 @@ async def test_update(hass):
assert state.attributes[ATTR_INPUT_SOURCE] == "three" assert state.attributes[ATTR_INPUT_SOURCE] == "three"
async def test_failed_update(hass): async def test_failed_update(hass: HomeAssistant) -> None:
"""Test updating failure from ws66i.""" """Test updating failure from ws66i."""
ws66i = MockWs66i() ws66i = MockWs66i()
_ = await _setup_ws66i_with_options(hass, ws66i) _ = await _setup_ws66i_with_options(hass, ws66i)
@ -245,7 +246,7 @@ async def test_failed_update(hass):
assert state.attributes[ATTR_INPUT_SOURCE] == "three" assert state.attributes[ATTR_INPUT_SOURCE] == "three"
async def test_supported_features(hass): async def test_supported_features(hass: HomeAssistant) -> None:
"""Test supported features property.""" """Test supported features property."""
await _setup_ws66i(hass, MockWs66i()) await _setup_ws66i(hass, MockWs66i())
@ -261,7 +262,7 @@ async def test_supported_features(hass):
) )
async def test_source_list(hass): async def test_source_list(hass: HomeAssistant) -> None:
"""Test source list property.""" """Test source list property."""
await _setup_ws66i(hass, MockWs66i()) await _setup_ws66i(hass, MockWs66i())
@ -272,7 +273,7 @@ async def test_source_list(hass):
) )
async def test_source_list_with_options(hass): async def test_source_list_with_options(hass: HomeAssistant) -> None:
"""Test source list property.""" """Test source list property."""
await _setup_ws66i_with_options(hass, MockWs66i()) await _setup_ws66i_with_options(hass, MockWs66i())
@ -281,7 +282,7 @@ async def test_source_list_with_options(hass):
assert state.attributes[ATTR_INPUT_SOURCE_LIST] == list(MOCK_SOURCE_DIC.values()) assert state.attributes[ATTR_INPUT_SOURCE_LIST] == list(MOCK_SOURCE_DIC.values())
async def test_select_source(hass): async def test_select_source(hass: HomeAssistant) -> None:
"""Test source selection methods.""" """Test source selection methods."""
ws66i = MockWs66i() ws66i = MockWs66i()
await _setup_ws66i_with_options(hass, ws66i) await _setup_ws66i_with_options(hass, ws66i)
@ -294,7 +295,7 @@ async def test_select_source(hass):
assert ws66i.zones[11].source == 3 assert ws66i.zones[11].source == 3
async def test_source_select(hass): async def test_source_select(hass: HomeAssistant) -> None:
"""Test source selection simulated from keypad.""" """Test source selection simulated from keypad."""
ws66i = MockWs66i() ws66i = MockWs66i()
_ = await _setup_ws66i_with_options(hass, ws66i) _ = await _setup_ws66i_with_options(hass, ws66i)
@ -309,7 +310,7 @@ async def test_source_select(hass):
assert state.attributes.get(ATTR_INPUT_SOURCE) == "five" assert state.attributes.get(ATTR_INPUT_SOURCE) == "five"
async def test_turn_on_off(hass): async def test_turn_on_off(hass: HomeAssistant) -> None:
"""Test turning on the zone.""" """Test turning on the zone."""
ws66i = MockWs66i() ws66i = MockWs66i()
await _setup_ws66i(hass, ws66i) await _setup_ws66i(hass, ws66i)
@ -321,7 +322,7 @@ async def test_turn_on_off(hass):
assert ws66i.zones[11].power assert ws66i.zones[11].power
async def test_mute_volume(hass): async def test_mute_volume(hass: HomeAssistant) -> None:
"""Test mute functionality.""" """Test mute functionality."""
ws66i = MockWs66i() ws66i = MockWs66i()
await _setup_ws66i(hass, ws66i) await _setup_ws66i(hass, ws66i)
@ -340,7 +341,7 @@ async def test_mute_volume(hass):
assert ws66i.zones[11].mute assert ws66i.zones[11].mute
async def test_volume_up_down(hass): async def test_volume_up_down(hass: HomeAssistant) -> None:
"""Test increasing volume by one.""" """Test increasing volume by one."""
ws66i = MockWs66i() ws66i = MockWs66i()
_ = await _setup_ws66i(hass, ws66i) _ = await _setup_ws66i(hass, ws66i)
@ -383,7 +384,7 @@ async def test_volume_up_down(hass):
assert ws66i.zones[11].volume == MAX_VOL - 1 assert ws66i.zones[11].volume == MAX_VOL - 1
async def test_volume_while_mute(hass): async def test_volume_while_mute(hass: HomeAssistant) -> None:
"""Test increasing volume by one.""" """Test increasing volume by one."""
ws66i = MockWs66i() ws66i = MockWs66i()
_ = await _setup_ws66i(hass, ws66i) _ = await _setup_ws66i(hass, ws66i)
@ -438,7 +439,7 @@ async def test_volume_while_mute(hass):
assert not ws66i.zones[11].mute assert not ws66i.zones[11].mute
async def test_first_run_with_available_zones(hass): async def test_first_run_with_available_zones(hass: HomeAssistant) -> None:
"""Test first run with all zones available.""" """Test first run with all zones available."""
ws66i = MockWs66i() ws66i = MockWs66i()
await _setup_ws66i(hass, ws66i) await _setup_ws66i(hass, ws66i)
@ -449,7 +450,7 @@ async def test_first_run_with_available_zones(hass):
assert not entry.disabled assert not entry.disabled
async def test_first_run_with_failing_zones(hass): async def test_first_run_with_failing_zones(hass: HomeAssistant) -> None:
"""Test first run with failed zones.""" """Test first run with failed zones."""
ws66i = MockWs66i() ws66i = MockWs66i()
@ -465,7 +466,7 @@ async def test_first_run_with_failing_zones(hass):
assert entry is None assert entry is None
async def test_register_all_entities(hass): async def test_register_all_entities(hass: HomeAssistant) -> None:
"""Test run with all entities registered.""" """Test run with all entities registered."""
ws66i = MockWs66i() ws66i = MockWs66i()
await _setup_ws66i(hass, ws66i) await _setup_ws66i(hass, ws66i)
@ -479,7 +480,7 @@ async def test_register_all_entities(hass):
assert not entry.disabled assert not entry.disabled
async def test_register_entities_in_1_amp_only(hass): async def test_register_entities_in_1_amp_only(hass: HomeAssistant) -> None:
"""Test run with only zones 11-16 registered.""" """Test run with only zones 11-16 registered."""
ws66i = MockWs66i(fail_zone_check=[21]) ws66i = MockWs66i(fail_zone_check=[21])
await _setup_ws66i(hass, ws66i) await _setup_ws66i(hass, ws66i)

View File

@ -13,6 +13,7 @@ from homeassistant.components.wsdot.sensor import (
RESOURCE, RESOURCE,
SCAN_INTERVAL, SCAN_INTERVAL,
) )
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from tests.common import load_fixture from tests.common import load_fixture
@ -24,7 +25,7 @@ config = {
} }
async def test_setup_with_config(hass): async def test_setup_with_config(hass: HomeAssistant) -> None:
"""Test the platform setup with configuration.""" """Test the platform setup with configuration."""
assert await async_setup_component(hass, "sensor", {"wsdot": config}) assert await async_setup_component(hass, "sensor", {"wsdot": config})

View File

@ -4,6 +4,7 @@ from unittest.mock import patch
from homeassistant import config_entries, data_entry_flow, setup from homeassistant import config_entries, data_entry_flow, setup
from homeassistant.components.xbox.const import DOMAIN, OAUTH2_AUTHORIZE, OAUTH2_TOKEN from homeassistant.components.xbox.const import DOMAIN, OAUTH2_AUTHORIZE, OAUTH2_TOKEN
from homeassistant.core import HomeAssistant
from homeassistant.helpers import config_entry_oauth2_flow from homeassistant.helpers import config_entry_oauth2_flow
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
@ -12,7 +13,7 @@ CLIENT_ID = "1234"
CLIENT_SECRET = "5678" CLIENT_SECRET = "5678"
async def test_abort_if_existing_entry(hass): async def test_abort_if_existing_entry(hass: HomeAssistant) -> None:
"""Check flow abort when an entry already exist.""" """Check flow abort when an entry already exist."""
MockConfigEntry(domain=DOMAIN).add_to_hass(hass) MockConfigEntry(domain=DOMAIN).add_to_hass(hass)

View File

@ -8,6 +8,7 @@ from homeassistant import config_entries
from homeassistant.components import zeroconf from homeassistant.components import zeroconf
from homeassistant.components.xiaomi_aqara import config_flow, const from homeassistant.components.xiaomi_aqara import config_flow, const
from homeassistant.const import CONF_HOST, CONF_MAC, CONF_NAME, CONF_PORT, CONF_PROTOCOL from homeassistant.const import CONF_HOST, CONF_MAC, CONF_NAME, CONF_PORT, CONF_PROTOCOL
from homeassistant.core import HomeAssistant
ZEROCONF_NAME = "name" ZEROCONF_NAME = "name"
ZEROCONF_PROP = "properties" ZEROCONF_PROP = "properties"
@ -76,7 +77,7 @@ def get_mock_discovery(
return gateway_discovery return gateway_discovery
async def test_config_flow_user_success(hass): async def test_config_flow_user_success(hass: HomeAssistant) -> None:
"""Test a successful config flow initialized by the user.""" """Test a successful config flow initialized by the user."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
const.DOMAIN, context={"source": config_entries.SOURCE_USER} const.DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -113,7 +114,7 @@ async def test_config_flow_user_success(hass):
} }
async def test_config_flow_user_multiple_success(hass): async def test_config_flow_user_multiple_success(hass: HomeAssistant) -> None:
"""Test a successful config flow initialized by the user with multiple gateways discovered.""" """Test a successful config flow initialized by the user with multiple gateways discovered."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
const.DOMAIN, context={"source": config_entries.SOURCE_USER} const.DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -165,7 +166,7 @@ async def test_config_flow_user_multiple_success(hass):
} }
async def test_config_flow_user_no_key_success(hass): async def test_config_flow_user_no_key_success(hass: HomeAssistant) -> None:
"""Test a successful config flow initialized by the user without a key.""" """Test a successful config flow initialized by the user without a key."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
const.DOMAIN, context={"source": config_entries.SOURCE_USER} const.DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -202,7 +203,7 @@ async def test_config_flow_user_no_key_success(hass):
} }
async def test_config_flow_user_host_mac_success(hass): async def test_config_flow_user_host_mac_success(hass: HomeAssistant) -> None:
"""Test a successful config flow initialized by the user with a host and mac specified.""" """Test a successful config flow initialized by the user with a host and mac specified."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
const.DOMAIN, context={"source": config_entries.SOURCE_USER} const.DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -249,7 +250,7 @@ async def test_config_flow_user_host_mac_success(hass):
} }
async def test_config_flow_user_discovery_error(hass): async def test_config_flow_user_discovery_error(hass: HomeAssistant) -> None:
"""Test a failed config flow initialized by the user with no gateways discovered.""" """Test a failed config flow initialized by the user with no gateways discovered."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
const.DOMAIN, context={"source": config_entries.SOURCE_USER} const.DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -275,7 +276,7 @@ async def test_config_flow_user_discovery_error(hass):
assert result["errors"] == {"base": "discovery_error"} assert result["errors"] == {"base": "discovery_error"}
async def test_config_flow_user_invalid_interface(hass): async def test_config_flow_user_invalid_interface(hass: HomeAssistant) -> None:
"""Test a failed config flow initialized by the user with an invalid interface.""" """Test a failed config flow initialized by the user with an invalid interface."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
const.DOMAIN, context={"source": config_entries.SOURCE_USER} const.DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -301,7 +302,7 @@ async def test_config_flow_user_invalid_interface(hass):
assert result["errors"] == {const.CONF_INTERFACE: "invalid_interface"} assert result["errors"] == {const.CONF_INTERFACE: "invalid_interface"}
async def test_config_flow_user_invalid_host(hass): async def test_config_flow_user_invalid_host(hass: HomeAssistant) -> None:
"""Test a failed config flow initialized by the user with an invalid host.""" """Test a failed config flow initialized by the user with an invalid host."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
const.DOMAIN, context={"source": config_entries.SOURCE_USER} const.DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -331,7 +332,7 @@ async def test_config_flow_user_invalid_host(hass):
assert result["errors"] == {"host": "invalid_host"} assert result["errors"] == {"host": "invalid_host"}
async def test_config_flow_user_invalid_mac(hass): async def test_config_flow_user_invalid_mac(hass: HomeAssistant) -> None:
"""Test a failed config flow initialized by the user with an invalid mac.""" """Test a failed config flow initialized by the user with an invalid mac."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
const.DOMAIN, context={"source": config_entries.SOURCE_USER} const.DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -361,7 +362,7 @@ async def test_config_flow_user_invalid_mac(hass):
assert result["errors"] == {"mac": "invalid_mac"} assert result["errors"] == {"mac": "invalid_mac"}
async def test_config_flow_user_invalid_key(hass): async def test_config_flow_user_invalid_key(hass: HomeAssistant) -> None:
"""Test a failed config flow initialized by the user with an invalid key.""" """Test a failed config flow initialized by the user with an invalid key."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
const.DOMAIN, context={"source": config_entries.SOURCE_USER} const.DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -396,7 +397,7 @@ async def test_config_flow_user_invalid_key(hass):
assert result["errors"] == {const.CONF_KEY: "invalid_key"} assert result["errors"] == {const.CONF_KEY: "invalid_key"}
async def test_zeroconf_success(hass): async def test_zeroconf_success(hass: HomeAssistant) -> None:
"""Test a successful zeroconf discovery of a xiaomi aqara gateway.""" """Test a successful zeroconf discovery of a xiaomi aqara gateway."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
const.DOMAIN, const.DOMAIN,
@ -443,7 +444,7 @@ async def test_zeroconf_success(hass):
} }
async def test_zeroconf_missing_data(hass): async def test_zeroconf_missing_data(hass: HomeAssistant) -> None:
"""Test a failed zeroconf discovery because of missing data.""" """Test a failed zeroconf discovery because of missing data."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
const.DOMAIN, const.DOMAIN,
@ -463,7 +464,7 @@ async def test_zeroconf_missing_data(hass):
assert result["reason"] == "not_xiaomi_aqara" assert result["reason"] == "not_xiaomi_aqara"
async def test_zeroconf_unknown_device(hass): async def test_zeroconf_unknown_device(hass: HomeAssistant) -> None:
"""Test a failed zeroconf discovery because of a unknown device.""" """Test a failed zeroconf discovery because of a unknown device."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
const.DOMAIN, const.DOMAIN,

View File

@ -1,7 +1,7 @@
"""Test Xiaomi binary sensors.""" """Test Xiaomi binary sensors."""
from homeassistant.components.xiaomi_ble.const import DOMAIN from homeassistant.components.xiaomi_ble.const import DOMAIN
from homeassistant.const import ATTR_FRIENDLY_NAME from homeassistant.const import ATTR_FRIENDLY_NAME
from homeassistant.core import HomeAssistant
from . import make_advertisement from . import make_advertisement
@ -9,7 +9,7 @@ from tests.common import MockConfigEntry
from tests.components.bluetooth import inject_bluetooth_service_info_bleak from tests.components.bluetooth import inject_bluetooth_service_info_bleak
async def test_door_problem_sensors(hass): async def test_door_problem_sensors(hass: HomeAssistant) -> None:
"""Test setting up a door binary sensor with additional problem sensors.""" """Test setting up a door binary sensor with additional problem sensors."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -53,7 +53,7 @@ async def test_door_problem_sensors(hass):
await hass.async_block_till_done() await hass.async_block_till_done()
async def test_light_motion(hass): async def test_light_motion(hass: HomeAssistant) -> None:
"""Test setting up a light and motion binary sensor.""" """Test setting up a light and motion binary sensor."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -89,7 +89,7 @@ async def test_light_motion(hass):
await hass.async_block_till_done() await hass.async_block_till_done()
async def test_moisture(hass): async def test_moisture(hass: HomeAssistant) -> None:
"""Test setting up a moisture binary sensor.""" """Test setting up a moisture binary sensor."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -123,7 +123,7 @@ async def test_moisture(hass):
await hass.async_block_till_done() await hass.async_block_till_done()
async def test_opening(hass): async def test_opening(hass: HomeAssistant) -> None:
"""Test setting up a opening binary sensor.""" """Test setting up a opening binary sensor."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -158,7 +158,7 @@ async def test_opening(hass):
await hass.async_block_till_done() await hass.async_block_till_done()
async def test_opening_problem_sensors(hass): async def test_opening_problem_sensors(hass: HomeAssistant) -> None:
"""Test setting up a opening binary sensor with additional problem sensors.""" """Test setting up a opening binary sensor with additional problem sensors."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -213,7 +213,7 @@ async def test_opening_problem_sensors(hass):
await hass.async_block_till_done() await hass.async_block_till_done()
async def test_smoke(hass): async def test_smoke(hass: HomeAssistant) -> None:
"""Test setting up a smoke binary sensor.""" """Test setting up a smoke binary sensor."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,

View File

@ -1,5 +1,4 @@
"""Test the Xiaomi config flow.""" """Test the Xiaomi config flow."""
import asyncio import asyncio
from unittest.mock import patch from unittest.mock import patch
@ -8,6 +7,7 @@ from xiaomi_ble import XiaomiBluetoothDeviceData as DeviceData
from homeassistant import config_entries from homeassistant import config_entries
from homeassistant.components.bluetooth import BluetoothChange from homeassistant.components.bluetooth import BluetoothChange
from homeassistant.components.xiaomi_ble.const import DOMAIN from homeassistant.components.xiaomi_ble.const import DOMAIN
from homeassistant.core import HomeAssistant
from homeassistant.data_entry_flow import FlowResultType from homeassistant.data_entry_flow import FlowResultType
from . import ( from . import (
@ -23,7 +23,7 @@ from . import (
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
async def test_async_step_bluetooth_valid_device(hass): async def test_async_step_bluetooth_valid_device(hass: HomeAssistant) -> None:
"""Test discovery via bluetooth with a valid device.""" """Test discovery via bluetooth with a valid device."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
@ -44,7 +44,9 @@ async def test_async_step_bluetooth_valid_device(hass):
assert result2["result"].unique_id == "00:81:F9:DD:6F:C1" assert result2["result"].unique_id == "00:81:F9:DD:6F:C1"
async def test_async_step_bluetooth_valid_device_but_missing_payload(hass): async def test_async_step_bluetooth_valid_device_but_missing_payload(
hass: HomeAssistant,
) -> None:
"""Test discovery via bluetooth with a valid device but missing payload.""" """Test discovery via bluetooth with a valid device but missing payload."""
with patch( with patch(
"homeassistant.components.xiaomi_ble.config_flow.async_process_advertisements", "homeassistant.components.xiaomi_ble.config_flow.async_process_advertisements",
@ -70,7 +72,9 @@ async def test_async_step_bluetooth_valid_device_but_missing_payload(hass):
assert result2["result"].unique_id == "A4:C1:38:56:53:84" assert result2["result"].unique_id == "A4:C1:38:56:53:84"
async def test_async_step_bluetooth_valid_device_but_missing_payload_then_full(hass): async def test_async_step_bluetooth_valid_device_but_missing_payload_then_full(
hass: HomeAssistant,
) -> None:
"""Test discovering a valid device. Payload is too short, but later we get full one.""" """Test discovering a valid device. Payload is too short, but later we get full one."""
async def _async_process_advertisements( async def _async_process_advertisements(
@ -108,7 +112,7 @@ async def test_async_step_bluetooth_valid_device_but_missing_payload_then_full(h
assert result2["result"].unique_id == "A4:C1:38:56:53:84" assert result2["result"].unique_id == "A4:C1:38:56:53:84"
async def test_async_step_bluetooth_during_onboarding(hass): async def test_async_step_bluetooth_during_onboarding(hass: HomeAssistant) -> None:
"""Test discovery via bluetooth during onboarding.""" """Test discovery via bluetooth during onboarding."""
with patch( with patch(
"homeassistant.components.xiaomi_ble.async_setup_entry", return_value=True "homeassistant.components.xiaomi_ble.async_setup_entry", return_value=True
@ -130,7 +134,9 @@ async def test_async_step_bluetooth_during_onboarding(hass):
assert len(mock_onboarding.mock_calls) == 1 assert len(mock_onboarding.mock_calls) == 1
async def test_async_step_bluetooth_valid_device_legacy_encryption(hass): async def test_async_step_bluetooth_valid_device_legacy_encryption(
hass: HomeAssistant,
) -> None:
"""Test discovery via bluetooth with a valid device, with legacy encryption.""" """Test discovery via bluetooth with a valid device, with legacy encryption."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
@ -153,7 +159,9 @@ async def test_async_step_bluetooth_valid_device_legacy_encryption(hass):
assert result2["result"].unique_id == "F8:24:41:C5:98:8B" assert result2["result"].unique_id == "F8:24:41:C5:98:8B"
async def test_async_step_bluetooth_valid_device_legacy_encryption_wrong_key(hass): async def test_async_step_bluetooth_valid_device_legacy_encryption_wrong_key(
hass: HomeAssistant,
) -> None:
"""Test discovery via bluetooth with a valid device, with legacy encryption and invalid key.""" """Test discovery via bluetooth with a valid device, with legacy encryption and invalid key."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
@ -219,7 +227,9 @@ async def test_async_step_bluetooth_valid_device_legacy_encryption_wrong_key_len
assert result2["result"].unique_id == "F8:24:41:C5:98:8B" assert result2["result"].unique_id == "F8:24:41:C5:98:8B"
async def test_async_step_bluetooth_valid_device_v4_encryption(hass): async def test_async_step_bluetooth_valid_device_v4_encryption(
hass: HomeAssistant,
) -> None:
"""Test discovery via bluetooth with a valid device, with v4 encryption.""" """Test discovery via bluetooth with a valid device, with v4 encryption."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
@ -243,7 +253,9 @@ async def test_async_step_bluetooth_valid_device_v4_encryption(hass):
assert result2["result"].unique_id == "54:EF:44:E3:9C:BC" assert result2["result"].unique_id == "54:EF:44:E3:9C:BC"
async def test_async_step_bluetooth_valid_device_v4_encryption_wrong_key(hass): async def test_async_step_bluetooth_valid_device_v4_encryption_wrong_key(
hass: HomeAssistant,
) -> None:
"""Test discovery via bluetooth with a valid device, with v4 encryption and wrong key.""" """Test discovery via bluetooth with a valid device, with v4 encryption and wrong key."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
@ -277,7 +289,9 @@ async def test_async_step_bluetooth_valid_device_v4_encryption_wrong_key(hass):
assert result2["result"].unique_id == "54:EF:44:E3:9C:BC" assert result2["result"].unique_id == "54:EF:44:E3:9C:BC"
async def test_async_step_bluetooth_valid_device_v4_encryption_wrong_key_length(hass): async def test_async_step_bluetooth_valid_device_v4_encryption_wrong_key_length(
hass: HomeAssistant,
) -> None:
"""Test discovery via bluetooth with a valid device, with v4 encryption and wrong key length.""" """Test discovery via bluetooth with a valid device, with v4 encryption and wrong key length."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
@ -311,7 +325,7 @@ async def test_async_step_bluetooth_valid_device_v4_encryption_wrong_key_length(
assert result2["result"].unique_id == "54:EF:44:E3:9C:BC" assert result2["result"].unique_id == "54:EF:44:E3:9C:BC"
async def test_async_step_bluetooth_not_xiaomi(hass): async def test_async_step_bluetooth_not_xiaomi(hass: HomeAssistant) -> None:
"""Test discovery via bluetooth not xiaomi.""" """Test discovery via bluetooth not xiaomi."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
@ -322,7 +336,7 @@ async def test_async_step_bluetooth_not_xiaomi(hass):
assert result["reason"] == "not_supported" assert result["reason"] == "not_supported"
async def test_async_step_user_no_devices_found(hass): async def test_async_step_user_no_devices_found(hass: HomeAssistant) -> None:
"""Test setup from service info cache with no devices found.""" """Test setup from service info cache with no devices found."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
@ -332,7 +346,7 @@ async def test_async_step_user_no_devices_found(hass):
assert result["reason"] == "no_devices_found" assert result["reason"] == "no_devices_found"
async def test_async_step_user_no_devices_found_2(hass): async def test_async_step_user_no_devices_found_2(hass: HomeAssistant) -> None:
"""Test setup from service info cache with no devices found. """Test setup from service info cache with no devices found.
This variant tests with a non-Xiaomi device known to us. This variant tests with a non-Xiaomi device known to us.
@ -349,7 +363,7 @@ async def test_async_step_user_no_devices_found_2(hass):
assert result["reason"] == "no_devices_found" assert result["reason"] == "no_devices_found"
async def test_async_step_user_with_found_devices(hass): async def test_async_step_user_with_found_devices(hass: HomeAssistant) -> None:
"""Test setup from service info cache with devices found.""" """Test setup from service info cache with devices found."""
with patch( with patch(
"homeassistant.components.xiaomi_ble.config_flow.async_discovered_service_info", "homeassistant.components.xiaomi_ble.config_flow.async_discovered_service_info",
@ -374,7 +388,7 @@ async def test_async_step_user_with_found_devices(hass):
assert result2["result"].unique_id == "58:2D:34:35:93:21" assert result2["result"].unique_id == "58:2D:34:35:93:21"
async def test_async_step_user_short_payload(hass): async def test_async_step_user_short_payload(hass: HomeAssistant) -> None:
"""Test setup from service info cache with devices found but short payloads.""" """Test setup from service info cache with devices found but short payloads."""
with patch( with patch(
"homeassistant.components.xiaomi_ble.config_flow.async_discovered_service_info", "homeassistant.components.xiaomi_ble.config_flow.async_discovered_service_info",
@ -409,7 +423,7 @@ async def test_async_step_user_short_payload(hass):
assert result3["result"].unique_id == "A4:C1:38:56:53:84" assert result3["result"].unique_id == "A4:C1:38:56:53:84"
async def test_async_step_user_short_payload_then_full(hass): async def test_async_step_user_short_payload_then_full(hass: HomeAssistant) -> None:
"""Test setup from service info cache with devices found.""" """Test setup from service info cache with devices found."""
with patch( with patch(
"homeassistant.components.xiaomi_ble.config_flow.async_discovered_service_info", "homeassistant.components.xiaomi_ble.config_flow.async_discovered_service_info",
@ -456,7 +470,9 @@ async def test_async_step_user_short_payload_then_full(hass):
assert result2["data"] == {"bindkey": "a115210eed7a88e50ad52662e732a9fb"} assert result2["data"] == {"bindkey": "a115210eed7a88e50ad52662e732a9fb"}
async def test_async_step_user_with_found_devices_v4_encryption(hass): async def test_async_step_user_with_found_devices_v4_encryption(
hass: HomeAssistant,
) -> None:
"""Test setup from service info cache with devices found, with v4 encryption.""" """Test setup from service info cache with devices found, with v4 encryption."""
with patch( with patch(
"homeassistant.components.xiaomi_ble.config_flow.async_discovered_service_info", "homeassistant.components.xiaomi_ble.config_flow.async_discovered_service_info",
@ -490,7 +506,9 @@ async def test_async_step_user_with_found_devices_v4_encryption(hass):
assert result2["result"].unique_id == "54:EF:44:E3:9C:BC" assert result2["result"].unique_id == "54:EF:44:E3:9C:BC"
async def test_async_step_user_with_found_devices_v4_encryption_wrong_key(hass): async def test_async_step_user_with_found_devices_v4_encryption_wrong_key(
hass: HomeAssistant,
) -> None:
"""Test setup from service info cache with devices found, with v4 encryption and wrong key.""" """Test setup from service info cache with devices found, with v4 encryption and wrong key."""
# Get a list of devices # Get a list of devices
with patch( with patch(
@ -536,7 +554,9 @@ async def test_async_step_user_with_found_devices_v4_encryption_wrong_key(hass):
assert result2["result"].unique_id == "54:EF:44:E3:9C:BC" assert result2["result"].unique_id == "54:EF:44:E3:9C:BC"
async def test_async_step_user_with_found_devices_v4_encryption_wrong_key_length(hass): async def test_async_step_user_with_found_devices_v4_encryption_wrong_key_length(
hass: HomeAssistant,
) -> None:
"""Test setup from service info cache with devices found, with v4 encryption and wrong key length.""" """Test setup from service info cache with devices found, with v4 encryption and wrong key length."""
# Get a list of devices # Get a list of devices
with patch( with patch(
@ -584,7 +604,9 @@ async def test_async_step_user_with_found_devices_v4_encryption_wrong_key_length
assert result2["result"].unique_id == "54:EF:44:E3:9C:BC" assert result2["result"].unique_id == "54:EF:44:E3:9C:BC"
async def test_async_step_user_with_found_devices_legacy_encryption(hass): async def test_async_step_user_with_found_devices_legacy_encryption(
hass: HomeAssistant,
) -> None:
"""Test setup from service info cache with devices found, with legacy encryption.""" """Test setup from service info cache with devices found, with legacy encryption."""
with patch( with patch(
"homeassistant.components.xiaomi_ble.config_flow.async_discovered_service_info", "homeassistant.components.xiaomi_ble.config_flow.async_discovered_service_info",
@ -707,7 +729,7 @@ async def test_async_step_user_with_found_devices_legacy_encryption_wrong_key_le
assert result2["result"].unique_id == "F8:24:41:C5:98:8B" assert result2["result"].unique_id == "F8:24:41:C5:98:8B"
async def test_async_step_user_device_added_between_steps(hass): async def test_async_step_user_device_added_between_steps(hass: HomeAssistant) -> None:
"""Test the device gets added via another flow between steps.""" """Test the device gets added via another flow between steps."""
with patch( with patch(
"homeassistant.components.xiaomi_ble.config_flow.async_discovered_service_info", "homeassistant.components.xiaomi_ble.config_flow.async_discovered_service_info",
@ -737,7 +759,9 @@ async def test_async_step_user_device_added_between_steps(hass):
assert result2["reason"] == "already_configured" assert result2["reason"] == "already_configured"
async def test_async_step_user_with_found_devices_already_setup(hass): async def test_async_step_user_with_found_devices_already_setup(
hass: HomeAssistant,
) -> None:
"""Test setup from service info cache with devices found.""" """Test setup from service info cache with devices found."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -757,7 +781,7 @@ async def test_async_step_user_with_found_devices_already_setup(hass):
assert result["reason"] == "no_devices_found" assert result["reason"] == "no_devices_found"
async def test_async_step_bluetooth_devices_already_setup(hass): async def test_async_step_bluetooth_devices_already_setup(hass: HomeAssistant) -> None:
"""Test we can't start a flow if there is already a config entry.""" """Test we can't start a flow if there is already a config entry."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -774,7 +798,7 @@ async def test_async_step_bluetooth_devices_already_setup(hass):
assert result["reason"] == "already_configured" assert result["reason"] == "already_configured"
async def test_async_step_bluetooth_already_in_progress(hass): async def test_async_step_bluetooth_already_in_progress(hass: HomeAssistant) -> None:
"""Test we can't start a flow for the same device twice.""" """Test we can't start a flow for the same device twice."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
@ -793,7 +817,9 @@ async def test_async_step_bluetooth_already_in_progress(hass):
assert result["reason"] == "already_in_progress" assert result["reason"] == "already_in_progress"
async def test_async_step_user_takes_precedence_over_discovery(hass): async def test_async_step_user_takes_precedence_over_discovery(
hass: HomeAssistant,
) -> None:
"""Test manual setup takes precedence over discovery.""" """Test manual setup takes precedence over discovery."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, DOMAIN,
@ -829,7 +855,7 @@ async def test_async_step_user_takes_precedence_over_discovery(hass):
assert not hass.config_entries.flow.async_progress(DOMAIN) assert not hass.config_entries.flow.async_progress(DOMAIN)
async def test_async_step_reauth_legacy(hass): async def test_async_step_reauth_legacy(hass: HomeAssistant) -> None:
"""Test reauth with a legacy key.""" """Test reauth with a legacy key."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -878,7 +904,7 @@ async def test_async_step_reauth_legacy(hass):
assert result2["reason"] == "reauth_successful" assert result2["reason"] == "reauth_successful"
async def test_async_step_reauth_legacy_wrong_key(hass): async def test_async_step_reauth_legacy_wrong_key(hass: HomeAssistant) -> None:
"""Test reauth with a bad legacy key, and that we can recover.""" """Test reauth with a bad legacy key, and that we can recover."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -935,7 +961,7 @@ async def test_async_step_reauth_legacy_wrong_key(hass):
assert result2["reason"] == "reauth_successful" assert result2["reason"] == "reauth_successful"
async def test_async_step_reauth_v4(hass): async def test_async_step_reauth_v4(hass: HomeAssistant) -> None:
"""Test reauth with a v4 key.""" """Test reauth with a v4 key."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -984,7 +1010,7 @@ async def test_async_step_reauth_v4(hass):
assert result2["reason"] == "reauth_successful" assert result2["reason"] == "reauth_successful"
async def test_async_step_reauth_v4_wrong_key(hass): async def test_async_step_reauth_v4_wrong_key(hass: HomeAssistant) -> None:
"""Test reauth for v4 with a bad key, and that we can recover.""" """Test reauth for v4 with a bad key, and that we can recover."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -1041,7 +1067,7 @@ async def test_async_step_reauth_v4_wrong_key(hass):
assert result2["reason"] == "reauth_successful" assert result2["reason"] == "reauth_successful"
async def test_async_step_reauth_abort_early(hass): async def test_async_step_reauth_abort_early(hass: HomeAssistant) -> None:
"""Test we can abort the reauth if there is no encryption. """Test we can abort the reauth if there is no encryption.
(This can't currently happen in practice). (This can't currently happen in practice).

View File

@ -18,7 +18,7 @@ from homeassistant.const import (
CONF_PLATFORM, CONF_PLATFORM,
CONF_TYPE, CONF_TYPE,
) )
from homeassistant.core import callback from homeassistant.core import HomeAssistant, callback
from homeassistant.helpers import device_registry from homeassistant.helpers import device_registry
from homeassistant.helpers.device_registry import async_get as async_get_dev_reg from homeassistant.helpers.device_registry import async_get as async_get_dev_reg
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
@ -59,7 +59,7 @@ async def _async_setup_xiaomi_device(hass, mac: str):
return config_entry return config_entry
async def test_event_motion_detected(hass): async def test_event_motion_detected(hass: HomeAssistant) -> None:
"""Make sure that a motion detected event is fired.""" """Make sure that a motion detected event is fired."""
mac = "DE:70:E8:B2:39:0C" mac = "DE:70:E8:B2:39:0C"
entry = await _async_setup_xiaomi_device(hass, mac) entry = await _async_setup_xiaomi_device(hass, mac)
@ -82,7 +82,7 @@ async def test_event_motion_detected(hass):
await hass.async_block_till_done() await hass.async_block_till_done()
async def test_get_triggers(hass): async def test_get_triggers(hass: HomeAssistant) -> None:
"""Test that we get the expected triggers from a Xiaomi BLE motion sensor.""" """Test that we get the expected triggers from a Xiaomi BLE motion sensor."""
mac = "DE:70:E8:B2:39:0C" mac = "DE:70:E8:B2:39:0C"
entry = await _async_setup_xiaomi_device(hass, mac) entry = await _async_setup_xiaomi_device(hass, mac)
@ -118,7 +118,7 @@ async def test_get_triggers(hass):
await hass.async_block_till_done() await hass.async_block_till_done()
async def test_get_triggers_for_invalid_xiami_ble_device(hass): async def test_get_triggers_for_invalid_xiami_ble_device(hass: HomeAssistant) -> None:
"""Test that we don't get triggers for an invalid device.""" """Test that we don't get triggers for an invalid device."""
mac = "DE:70:E8:B2:39:0C" mac = "DE:70:E8:B2:39:0C"
entry = await _async_setup_xiaomi_device(hass, mac) entry = await _async_setup_xiaomi_device(hass, mac)
@ -149,7 +149,7 @@ async def test_get_triggers_for_invalid_xiami_ble_device(hass):
await hass.async_block_till_done() await hass.async_block_till_done()
async def test_get_triggers_for_invalid_device_id(hass): async def test_get_triggers_for_invalid_device_id(hass: HomeAssistant) -> None:
"""Test that we don't get triggers when using an invalid device_id.""" """Test that we don't get triggers when using an invalid device_id."""
mac = "DE:70:E8:B2:39:0C" mac = "DE:70:E8:B2:39:0C"
entry = await _async_setup_xiaomi_device(hass, mac) entry = await _async_setup_xiaomi_device(hass, mac)
@ -236,7 +236,9 @@ async def test_if_fires_on_motion_detected(hass, calls):
await hass.async_block_till_done() await hass.async_block_till_done()
async def test_automation_with_invalid_trigger_type(hass, caplog): async def test_automation_with_invalid_trigger_type(
hass: HomeAssistant, caplog: pytest.LogCaptureFixture
) -> None:
"""Test for automation with invalid trigger type.""" """Test for automation with invalid trigger type."""
mac = "DE:70:E8:B2:39:0C" mac = "DE:70:E8:B2:39:0C"
entry = await _async_setup_xiaomi_device(hass, mac) entry = await _async_setup_xiaomi_device(hass, mac)
@ -282,7 +284,9 @@ async def test_automation_with_invalid_trigger_type(hass, caplog):
await hass.async_block_till_done() await hass.async_block_till_done()
async def test_automation_with_invalid_trigger_event_property(hass, caplog): async def test_automation_with_invalid_trigger_event_property(
hass: HomeAssistant, caplog: pytest.LogCaptureFixture
) -> None:
"""Test for automation with invalid trigger event property.""" """Test for automation with invalid trigger event property."""
mac = "DE:70:E8:B2:39:0C" mac = "DE:70:E8:B2:39:0C"
entry = await _async_setup_xiaomi_device(hass, mac) entry = await _async_setup_xiaomi_device(hass, mac)

View File

@ -1,8 +1,8 @@
"""Test Xiaomi BLE sensors.""" """Test Xiaomi BLE sensors."""
from homeassistant.components.sensor import ATTR_STATE_CLASS from homeassistant.components.sensor import ATTR_STATE_CLASS
from homeassistant.components.xiaomi_ble.const import DOMAIN from homeassistant.components.xiaomi_ble.const import DOMAIN
from homeassistant.const import ATTR_FRIENDLY_NAME, ATTR_UNIT_OF_MEASUREMENT from homeassistant.const import ATTR_FRIENDLY_NAME, ATTR_UNIT_OF_MEASUREMENT
from homeassistant.core import HomeAssistant
from . import HHCCJCY10_SERVICE_INFO, MMC_T201_1_SERVICE_INFO, make_advertisement from . import HHCCJCY10_SERVICE_INFO, MMC_T201_1_SERVICE_INFO, make_advertisement
@ -10,7 +10,7 @@ from tests.common import MockConfigEntry
from tests.components.bluetooth import inject_bluetooth_service_info_bleak from tests.components.bluetooth import inject_bluetooth_service_info_bleak
async def test_sensors(hass): async def test_sensors(hass: HomeAssistant) -> None:
"""Test setting up creates the sensors.""" """Test setting up creates the sensors."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -39,7 +39,7 @@ async def test_sensors(hass):
await hass.async_block_till_done() await hass.async_block_till_done()
async def test_xiaomi_formaldeyhde(hass): async def test_xiaomi_formaldeyhde(hass: HomeAssistant) -> None:
"""Make sure that formldehyde sensors are correctly mapped.""" """Make sure that formldehyde sensors are correctly mapped."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -75,7 +75,7 @@ async def test_xiaomi_formaldeyhde(hass):
await hass.async_block_till_done() await hass.async_block_till_done()
async def test_xiaomi_consumable(hass): async def test_xiaomi_consumable(hass: HomeAssistant) -> None:
"""Make sure that consumable sensors are correctly mapped.""" """Make sure that consumable sensors are correctly mapped."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -111,7 +111,7 @@ async def test_xiaomi_consumable(hass):
await hass.async_block_till_done() await hass.async_block_till_done()
async def test_xiaomi_battery_voltage(hass): async def test_xiaomi_battery_voltage(hass: HomeAssistant) -> None:
"""Make sure that battery voltage sensors are correctly mapped.""" """Make sure that battery voltage sensors are correctly mapped."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -152,7 +152,7 @@ async def test_xiaomi_battery_voltage(hass):
await hass.async_block_till_done() await hass.async_block_till_done()
async def test_xiaomi_HHCCJCY01(hass): async def test_xiaomi_HHCCJCY01(hass: HomeAssistant) -> None:
"""This device has multiple advertisements before all sensors are visible. Test that this works.""" """This device has multiple advertisements before all sensors are visible. Test that this works."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -230,7 +230,7 @@ async def test_xiaomi_HHCCJCY01(hass):
await hass.async_block_till_done() await hass.async_block_till_done()
async def test_xiaomi_HHCCJCY01_not_connectable(hass): async def test_xiaomi_HHCCJCY01_not_connectable(hass: HomeAssistant) -> None:
"""This device has multiple advertisements before all sensors are visible but not connectable.""" """This device has multiple advertisements before all sensors are visible but not connectable."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -311,7 +311,9 @@ async def test_xiaomi_HHCCJCY01_not_connectable(hass):
await hass.async_block_till_done() await hass.async_block_till_done()
async def test_xiaomi_HHCCJCY01_only_some_sources_connectable(hass): async def test_xiaomi_HHCCJCY01_only_some_sources_connectable(
hass: HomeAssistant,
) -> None:
"""This device has multiple advertisements before all sensors are visible and some sources are connectable.""" """This device has multiple advertisements before all sensors are visible and some sources are connectable."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -397,7 +399,7 @@ async def test_xiaomi_HHCCJCY01_only_some_sources_connectable(hass):
await hass.async_block_till_done() await hass.async_block_till_done()
async def test_xiaomi_CGDK2(hass): async def test_xiaomi_CGDK2(hass: HomeAssistant) -> None:
"""This device has encrypion so we need to retrieve its bindkey from the configentry.""" """This device has encrypion so we need to retrieve its bindkey from the configentry."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -434,7 +436,7 @@ async def test_xiaomi_CGDK2(hass):
await hass.async_block_till_done() await hass.async_block_till_done()
async def test_hhcc_HHCCJCY10(hass): async def test_hhcc_HHCCJCY10(hass: HomeAssistant) -> None:
"""This device used a different UUID compared to the other Xiaomi sensors.""" """This device used a different UUID compared to the other Xiaomi sensors."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,

View File

@ -10,6 +10,7 @@ from homeassistant import config_entries, data_entry_flow
from homeassistant.components import zeroconf from homeassistant.components import zeroconf
from homeassistant.components.xiaomi_miio import const from homeassistant.components.xiaomi_miio import const
from homeassistant.const import CONF_HOST, CONF_MODEL, CONF_TOKEN from homeassistant.const import CONF_HOST, CONF_MODEL, CONF_TOKEN
from homeassistant.core import HomeAssistant
from . import TEST_MAC from . import TEST_MAC
@ -103,7 +104,7 @@ def get_mock_info(
return gateway_info return gateway_info
async def test_config_flow_step_gateway_connect_error(hass): async def test_config_flow_step_gateway_connect_error(hass: HomeAssistant) -> None:
"""Test config flow, gateway connection error.""" """Test config flow, gateway connection error."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
const.DOMAIN, context={"source": config_entries.SOURCE_USER} const.DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -136,7 +137,7 @@ async def test_config_flow_step_gateway_connect_error(hass):
assert result["errors"] == {"base": "cannot_connect"} assert result["errors"] == {"base": "cannot_connect"}
async def test_config_flow_gateway_success(hass): async def test_config_flow_gateway_success(hass: HomeAssistant) -> None:
"""Test a successful config flow.""" """Test a successful config flow."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
const.DOMAIN, context={"source": config_entries.SOURCE_USER} const.DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -174,7 +175,7 @@ async def test_config_flow_gateway_success(hass):
} }
async def test_config_flow_gateway_cloud_success(hass): async def test_config_flow_gateway_cloud_success(hass: HomeAssistant) -> None:
"""Test a successful config flow using cloud.""" """Test a successful config flow using cloud."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
const.DOMAIN, context={"source": config_entries.SOURCE_USER} const.DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -207,7 +208,7 @@ async def test_config_flow_gateway_cloud_success(hass):
} }
async def test_config_flow_gateway_cloud_multiple_success(hass): async def test_config_flow_gateway_cloud_multiple_success(hass: HomeAssistant) -> None:
"""Test a successful config flow using cloud with multiple devices.""" """Test a successful config flow using cloud with multiple devices."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
const.DOMAIN, context={"source": config_entries.SOURCE_USER} const.DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -253,7 +254,7 @@ async def test_config_flow_gateway_cloud_multiple_success(hass):
} }
async def test_config_flow_gateway_cloud_incomplete(hass): async def test_config_flow_gateway_cloud_incomplete(hass: HomeAssistant) -> None:
"""Test a failed config flow using incomplete cloud credentials.""" """Test a failed config flow using incomplete cloud credentials."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
const.DOMAIN, context={"source": config_entries.SOURCE_USER} const.DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -276,7 +277,7 @@ async def test_config_flow_gateway_cloud_incomplete(hass):
assert result["errors"] == {"base": "cloud_credentials_incomplete"} assert result["errors"] == {"base": "cloud_credentials_incomplete"}
async def test_config_flow_gateway_cloud_login_error(hass): async def test_config_flow_gateway_cloud_login_error(hass: HomeAssistant) -> None:
"""Test a failed config flow using cloud login error.""" """Test a failed config flow using cloud login error."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
const.DOMAIN, context={"source": config_entries.SOURCE_USER} const.DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -337,7 +338,7 @@ async def test_config_flow_gateway_cloud_login_error(hass):
assert result["reason"] == "unknown" assert result["reason"] == "unknown"
async def test_config_flow_gateway_cloud_no_devices(hass): async def test_config_flow_gateway_cloud_no_devices(hass: HomeAssistant) -> None:
"""Test a failed config flow using cloud with no devices.""" """Test a failed config flow using cloud with no devices."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
const.DOMAIN, context={"source": config_entries.SOURCE_USER} const.DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -381,7 +382,7 @@ async def test_config_flow_gateway_cloud_no_devices(hass):
assert result["reason"] == "unknown" assert result["reason"] == "unknown"
async def test_config_flow_gateway_cloud_missing_token(hass): async def test_config_flow_gateway_cloud_missing_token(hass: HomeAssistant) -> None:
"""Test a failed config flow using cloud with a missing token.""" """Test a failed config flow using cloud with a missing token."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
const.DOMAIN, context={"source": config_entries.SOURCE_USER} const.DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -419,7 +420,7 @@ async def test_config_flow_gateway_cloud_missing_token(hass):
assert result["reason"] == "incomplete_info" assert result["reason"] == "incomplete_info"
async def test_zeroconf_gateway_success(hass): async def test_zeroconf_gateway_success(hass: HomeAssistant) -> None:
"""Test a successful zeroconf discovery of a gateway.""" """Test a successful zeroconf discovery of a gateway."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
const.DOMAIN, const.DOMAIN,
@ -462,7 +463,7 @@ async def test_zeroconf_gateway_success(hass):
} }
async def test_zeroconf_unknown_device(hass): async def test_zeroconf_unknown_device(hass: HomeAssistant) -> None:
"""Test a failed zeroconf discovery because of a unknown device.""" """Test a failed zeroconf discovery because of a unknown device."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
const.DOMAIN, const.DOMAIN,
@ -482,7 +483,7 @@ async def test_zeroconf_unknown_device(hass):
assert result["reason"] == "not_xiaomi_miio" assert result["reason"] == "not_xiaomi_miio"
async def test_zeroconf_no_data(hass): async def test_zeroconf_no_data(hass: HomeAssistant) -> None:
"""Test a failed zeroconf discovery because of no data.""" """Test a failed zeroconf discovery because of no data."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
const.DOMAIN, const.DOMAIN,
@ -502,7 +503,7 @@ async def test_zeroconf_no_data(hass):
assert result["reason"] == "not_xiaomi_miio" assert result["reason"] == "not_xiaomi_miio"
async def test_zeroconf_missing_data(hass): async def test_zeroconf_missing_data(hass: HomeAssistant) -> None:
"""Test a failed zeroconf discovery because of missing data.""" """Test a failed zeroconf discovery because of missing data."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
const.DOMAIN, const.DOMAIN,
@ -522,7 +523,7 @@ async def test_zeroconf_missing_data(hass):
assert result["reason"] == "not_xiaomi_miio" assert result["reason"] == "not_xiaomi_miio"
async def test_config_flow_step_device_connect_error(hass): async def test_config_flow_step_device_connect_error(hass: HomeAssistant) -> None:
"""Test config flow, device connection error.""" """Test config flow, device connection error."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
const.DOMAIN, context={"source": config_entries.SOURCE_USER} const.DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -555,7 +556,7 @@ async def test_config_flow_step_device_connect_error(hass):
assert result["errors"] == {"base": "cannot_connect"} assert result["errors"] == {"base": "cannot_connect"}
async def test_config_flow_step_unknown_device(hass): async def test_config_flow_step_unknown_device(hass: HomeAssistant) -> None:
"""Test config flow, unknown device error.""" """Test config flow, unknown device error."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
const.DOMAIN, context={"source": config_entries.SOURCE_USER} const.DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -590,7 +591,7 @@ async def test_config_flow_step_unknown_device(hass):
assert result["errors"] == {"base": "unknown_device"} assert result["errors"] == {"base": "unknown_device"}
async def test_config_flow_step_device_manual_model_error(hass): async def test_config_flow_step_device_manual_model_error(hass: HomeAssistant) -> None:
"""Test config flow, device connection error, model None.""" """Test config flow, device connection error, model None."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
const.DOMAIN, context={"source": config_entries.SOURCE_USER} const.DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -635,7 +636,7 @@ async def test_config_flow_step_device_manual_model_error(hass):
assert result["reason"] == "unknown" assert result["reason"] == "unknown"
async def test_config_flow_step_device_manual_model_succes(hass): async def test_config_flow_step_device_manual_model_succes(hass: HomeAssistant) -> None:
"""Test config flow, device connection error, manual model.""" """Test config flow, device connection error, manual model."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
const.DOMAIN, context={"source": config_entries.SOURCE_USER} const.DOMAIN, context={"source": config_entries.SOURCE_USER}
@ -838,33 +839,33 @@ async def zeroconf_device_success(hass, zeroconf_name_to_test, model_to_test):
} }
async def test_config_flow_plug_success(hass): async def test_config_flow_plug_success(hass: HomeAssistant) -> None:
"""Test a successful config flow for a plug.""" """Test a successful config flow for a plug."""
test_plug_model = const.MODELS_SWITCH[0] test_plug_model = const.MODELS_SWITCH[0]
await config_flow_device_success(hass, test_plug_model) await config_flow_device_success(hass, test_plug_model)
async def test_zeroconf_plug_success(hass): async def test_zeroconf_plug_success(hass: HomeAssistant) -> None:
"""Test a successful zeroconf discovery of a plug.""" """Test a successful zeroconf discovery of a plug."""
test_plug_model = const.MODELS_SWITCH[0] test_plug_model = const.MODELS_SWITCH[0]
test_zeroconf_name = const.MODELS_SWITCH[0].replace(".", "-") test_zeroconf_name = const.MODELS_SWITCH[0].replace(".", "-")
await zeroconf_device_success(hass, test_zeroconf_name, test_plug_model) await zeroconf_device_success(hass, test_zeroconf_name, test_plug_model)
async def test_config_flow_vacuum_success(hass): async def test_config_flow_vacuum_success(hass: HomeAssistant) -> None:
"""Test a successful config flow for a vacuum.""" """Test a successful config flow for a vacuum."""
test_vacuum_model = const.MODELS_VACUUM[0] test_vacuum_model = const.MODELS_VACUUM[0]
await config_flow_device_success(hass, test_vacuum_model) await config_flow_device_success(hass, test_vacuum_model)
async def test_zeroconf_vacuum_success(hass): async def test_zeroconf_vacuum_success(hass: HomeAssistant) -> None:
"""Test a successful zeroconf discovery of a vacuum.""" """Test a successful zeroconf discovery of a vacuum."""
test_vacuum_model = const.MODELS_VACUUM[0] test_vacuum_model = const.MODELS_VACUUM[0]
test_zeroconf_name = const.MODELS_VACUUM[0].replace(".", "-") test_zeroconf_name = const.MODELS_VACUUM[0].replace(".", "-")
await zeroconf_device_success(hass, test_zeroconf_name, test_vacuum_model) await zeroconf_device_success(hass, test_zeroconf_name, test_vacuum_model)
async def test_options_flow(hass): async def test_options_flow(hass: HomeAssistant) -> None:
"""Test specifying non default settings using options flow.""" """Test specifying non default settings using options flow."""
config_entry = MockConfigEntry( config_entry = MockConfigEntry(
domain=const.DOMAIN, domain=const.DOMAIN,
@ -904,7 +905,7 @@ async def test_options_flow(hass):
} }
async def test_options_flow_incomplete(hass): async def test_options_flow_incomplete(hass: HomeAssistant) -> None:
"""Test specifying incomplete settings using options flow.""" """Test specifying incomplete settings using options flow."""
config_entry = MockConfigEntry( config_entry = MockConfigEntry(
domain=const.DOMAIN, domain=const.DOMAIN,
@ -942,7 +943,7 @@ async def test_options_flow_incomplete(hass):
assert result["errors"] == {"base": "cloud_credentials_incomplete"} assert result["errors"] == {"base": "cloud_credentials_incomplete"}
async def test_reauth(hass): async def test_reauth(hass: HomeAssistant) -> None:
"""Test a reauth flow.""" """Test a reauth flow."""
config_entry = MockConfigEntry( config_entry = MockConfigEntry(
domain=const.DOMAIN, domain=const.DOMAIN,

View File

@ -12,12 +12,14 @@ from homeassistant.components.media_player import (
DOMAIN as DOMAIN_MP, DOMAIN as DOMAIN_MP,
SERVICE_PLAY_MEDIA, SERVICE_PLAY_MEDIA,
) )
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from tests.common import assert_setup_component, async_mock_service from tests.common import assert_setup_component, async_mock_service
from tests.components.tts.conftest import ( # noqa: F401, pylint: disable=unused-import from tests.components.tts.conftest import ( # noqa: F401, pylint: disable=unused-import
mutagen_mock, mutagen_mock,
) )
from tests.test_util.aiohttp import AiohttpClientMocker
URL = "https://tts.voicetech.yandex.net/generate?" URL = "https://tts.voicetech.yandex.net/generate?"
@ -40,7 +42,7 @@ def cleanup_cache(hass):
shutil.rmtree(default_tts) shutil.rmtree(default_tts)
async def test_setup_component(hass): async def test_setup_component(hass: HomeAssistant) -> None:
"""Test setup component.""" """Test setup component."""
config = {tts.DOMAIN: {"platform": "yandextts", "api_key": "1234567xx"}} config = {tts.DOMAIN: {"platform": "yandextts", "api_key": "1234567xx"}}
@ -49,7 +51,7 @@ async def test_setup_component(hass):
await hass.async_block_till_done() await hass.async_block_till_done()
async def test_setup_component_without_api_key(hass): async def test_setup_component_without_api_key(hass: HomeAssistant) -> None:
"""Test setup component without api key.""" """Test setup component without api key."""
config = {tts.DOMAIN: {"platform": "yandextts"}} config = {tts.DOMAIN: {"platform": "yandextts"}}
@ -58,7 +60,9 @@ async def test_setup_component_without_api_key(hass):
await hass.async_block_till_done() await hass.async_block_till_done()
async def test_service_say(hass, aioclient_mock): async def test_service_say(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test service call say.""" """Test service call say."""
calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA) calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA)
@ -90,7 +94,9 @@ async def test_service_say(hass, aioclient_mock):
assert len(aioclient_mock.mock_calls) == 1 assert len(aioclient_mock.mock_calls) == 1
async def test_service_say_russian_config(hass, aioclient_mock): async def test_service_say_russian_config(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test service call say.""" """Test service call say."""
calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA) calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA)
@ -129,7 +135,9 @@ async def test_service_say_russian_config(hass, aioclient_mock):
assert len(aioclient_mock.mock_calls) == 1 assert len(aioclient_mock.mock_calls) == 1
async def test_service_say_russian_service(hass, aioclient_mock): async def test_service_say_russian_service(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test service call say.""" """Test service call say."""
calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA) calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA)
@ -165,7 +173,9 @@ async def test_service_say_russian_service(hass, aioclient_mock):
assert len(aioclient_mock.mock_calls) == 1 assert len(aioclient_mock.mock_calls) == 1
async def test_service_say_timeout(hass, aioclient_mock): async def test_service_say_timeout(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test service call say.""" """Test service call say."""
calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA) calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA)
@ -205,7 +215,9 @@ async def test_service_say_timeout(hass, aioclient_mock):
assert len(aioclient_mock.mock_calls) == 1 assert len(aioclient_mock.mock_calls) == 1
async def test_service_say_http_error(hass, aioclient_mock): async def test_service_say_http_error(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test service call say.""" """Test service call say."""
calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA) calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA)
@ -243,7 +255,9 @@ async def test_service_say_http_error(hass, aioclient_mock):
await get_media_source_url(hass, calls[0].data[ATTR_MEDIA_CONTENT_ID]) await get_media_source_url(hass, calls[0].data[ATTR_MEDIA_CONTENT_ID])
async def test_service_say_specified_speaker(hass, aioclient_mock): async def test_service_say_specified_speaker(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test service call say.""" """Test service call say."""
calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA) calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA)
@ -281,7 +295,9 @@ async def test_service_say_specified_speaker(hass, aioclient_mock):
assert len(aioclient_mock.mock_calls) == 1 assert len(aioclient_mock.mock_calls) == 1
async def test_service_say_specified_emotion(hass, aioclient_mock): async def test_service_say_specified_emotion(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test service call say.""" """Test service call say."""
calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA) calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA)
@ -320,7 +336,9 @@ async def test_service_say_specified_emotion(hass, aioclient_mock):
assert len(aioclient_mock.mock_calls) == 1 assert len(aioclient_mock.mock_calls) == 1
async def test_service_say_specified_low_speed(hass, aioclient_mock): async def test_service_say_specified_low_speed(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test service call say.""" """Test service call say."""
calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA) calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA)
@ -355,7 +373,9 @@ async def test_service_say_specified_low_speed(hass, aioclient_mock):
assert len(aioclient_mock.mock_calls) == 1 assert len(aioclient_mock.mock_calls) == 1
async def test_service_say_specified_speed(hass, aioclient_mock): async def test_service_say_specified_speed(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test service call say.""" """Test service call say."""
calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA) calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA)
@ -388,7 +408,9 @@ async def test_service_say_specified_speed(hass, aioclient_mock):
assert len(aioclient_mock.mock_calls) == 1 assert len(aioclient_mock.mock_calls) == 1
async def test_service_say_specified_options(hass, aioclient_mock): async def test_service_say_specified_options(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test service call say with options.""" """Test service call say with options."""
calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA) calls = async_mock_service(hass, DOMAIN_MP, SERVICE_PLAY_MEDIA)

Some files were not shown because too many files have changed in this diff Show More