Add type hints to integration tests (part 8) (#87982)

This commit is contained in:
epenet 2023-02-13 11:13:48 +01:00 committed by GitHub
parent 575f7c4205
commit 89e4ee5320
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
50 changed files with 696 additions and 339 deletions

View file

@ -1,5 +1,4 @@
"""Test buttons.""" """Test buttons."""
from unittest.mock import patch from unittest.mock import patch
import pytest import pytest
@ -14,7 +13,7 @@ from .test_http import DUMMY_CONFIG
from tests.common import MockUser from tests.common import MockUser
async def test_sync_button(hass: HomeAssistant, hass_owner_user: MockUser): async def test_sync_button(hass: HomeAssistant, hass_owner_user: MockUser) -> None:
"""Test sync button.""" """Test sync button."""
await async_setup_component( await async_setup_component(

View file

@ -1,8 +1,9 @@
"""Test diagnostics.""" """Test diagnostics."""
from unittest.mock import ANY from unittest.mock import ANY
from homeassistant import core, setup from homeassistant import setup
from homeassistant.components import google_assistant as ga, switch from homeassistant.components import google_assistant as ga, switch
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from .test_http import DUMMY_CONFIG from .test_http import DUMMY_CONFIG
@ -12,8 +13,8 @@ from tests.typing import ClientSessionGenerator
async def test_diagnostics( async def test_diagnostics(
hass: core.HomeAssistant, hass_client: ClientSessionGenerator hass: HomeAssistant, hass_client: ClientSessionGenerator
): ) -> None:
"""Test diagnostics v1.""" """Test diagnostics v1."""
await setup.async_setup_component( await setup.async_setup_component(

View file

@ -127,8 +127,8 @@ def hass_fixture(event_loop, hass):
async def test_sync_request( async def test_sync_request(
hass_fixture, assistant_client, auth_header, entity_registry hass_fixture, assistant_client, auth_header, entity_registry: er.EntityRegistry
): ) -> None:
"""Test a sync request.""" """Test a sync request."""
entity_entry1 = entity_registry.async_get_or_create( entity_entry1 = entity_registry.async_get_or_create(
"switch", "switch",
@ -192,7 +192,7 @@ async def test_sync_request(
assert dev["type"] == demo["type"] assert dev["type"] == demo["type"]
async def test_query_request(hass_fixture, assistant_client, auth_header): async def test_query_request(hass_fixture, assistant_client, auth_header) -> None:
"""Test a query request.""" """Test a query request."""
reqid = "5711642932632160984" reqid = "5711642932632160984"
data = { data = {
@ -233,7 +233,9 @@ async def test_query_request(hass_fixture, assistant_client, auth_header):
assert devices["media_player.lounge_room"]["on"] is True assert devices["media_player.lounge_room"]["on"] is True
async def test_query_climate_request(hass_fixture, assistant_client, auth_header): async def test_query_climate_request(
hass_fixture, assistant_client, auth_header
) -> None:
"""Test a query request.""" """Test a query request."""
reqid = "5711642932632160984" reqid = "5711642932632160984"
data = { data = {
@ -285,7 +287,9 @@ async def test_query_climate_request(hass_fixture, assistant_client, auth_header
} }
async def test_query_climate_request_f(hass_fixture, assistant_client, auth_header): async def test_query_climate_request_f(
hass_fixture, assistant_client, auth_header
) -> None:
"""Test a query request.""" """Test a query request."""
# Mock demo devices as fahrenheit to see if we convert to celsius # Mock demo devices as fahrenheit to see if we convert to celsius
hass_fixture.config.units.temperature_unit = UnitOfTemperature.FAHRENHEIT hass_fixture.config.units.temperature_unit = UnitOfTemperature.FAHRENHEIT
@ -345,7 +349,9 @@ async def test_query_climate_request_f(hass_fixture, assistant_client, auth_head
hass_fixture.config.units.temperature_unit = UnitOfTemperature.CELSIUS hass_fixture.config.units.temperature_unit = UnitOfTemperature.CELSIUS
async def test_query_humidifier_request(hass_fixture, assistant_client, auth_header): async def test_query_humidifier_request(
hass_fixture, assistant_client, auth_header
) -> None:
"""Test a query request.""" """Test a query request."""
reqid = "5711642932632160984" reqid = "5711642932632160984"
data = { data = {
@ -391,7 +397,7 @@ async def test_query_humidifier_request(hass_fixture, assistant_client, auth_hea
} }
async def test_execute_request(hass_fixture, assistant_client, auth_header): async def test_execute_request(hass_fixture, assistant_client, auth_header) -> None:
"""Test an execute request.""" """Test an execute request."""
reqid = "5711642932632160985" reqid = "5711642932632160985"
data = { data = {

View file

@ -219,7 +219,7 @@ async def test_config_local_sdk_if_ssl_enabled(
assert await resp.read() == b"" assert await resp.read() == b""
async def test_agent_user_id_storage(hass, hass_storage): async def test_agent_user_id_storage(hass: HomeAssistant, hass_storage) -> None:
"""Test a disconnect message.""" """Test a disconnect message."""
hass_storage["google_assistant"] = { hass_storage["google_assistant"] = {
@ -302,7 +302,7 @@ async def test_agent_user_id_connect() -> None:
@pytest.mark.parametrize("agents", [{}, {"1"}, {"1", "2"}]) @pytest.mark.parametrize("agents", [{}, {"1"}, {"1", "2"}])
async def test_report_state_all(agents): async def test_report_state_all(agents) -> None:
"""Test a disconnect message.""" """Test a disconnect message."""
config = MockConfig(agent_user_ids=agents) config = MockConfig(agent_user_ids=agents)
data = {} data = {}
@ -315,7 +315,7 @@ async def test_report_state_all(agents):
"agents, result", "agents, result",
[({}, 204), ({"1": 200}, 200), ({"1": 200, "2": 300}, 300)], [({}, 204), ({"1": 200}, 200), ({"1": 200, "2": 300}, 300)],
) )
async def test_sync_entities_all(agents, result): async def test_sync_entities_all(agents, result) -> None:
"""Test sync entities .""" """Test sync entities ."""
config = MockConfig(agent_user_ids=set(agents.keys())) config = MockConfig(agent_user_ids=set(agents.keys()))
with patch.object( with patch.object(
@ -328,7 +328,7 @@ async def test_sync_entities_all(agents, result):
assert res == result assert res == result
def test_supported_features_string(caplog): def test_supported_features_string(caplog: pytest.LogCaptureFixture) -> None:
"""Test bad supported features.""" """Test bad supported features."""
entity = helpers.GoogleEntity( entity = helpers.GoogleEntity(
None, None,
@ -353,7 +353,11 @@ def test_request_data() -> None:
assert data.is_local_request is False assert data.is_local_request is False
async def test_config_local_sdk_allow_min_version(hass, hass_client, caplog): async def test_config_local_sdk_allow_min_version(
hass: HomeAssistant,
hass_client: ClientSessionGenerator,
caplog: pytest.LogCaptureFixture,
) -> None:
"""Test the local SDK.""" """Test the local SDK."""
version = str(helpers.LOCAL_SDK_MIN_VERSION) version = str(helpers.LOCAL_SDK_MIN_VERSION)
assert await async_setup_component(hass, "webhook", {}) assert await async_setup_component(hass, "webhook", {})
@ -393,7 +397,12 @@ async def test_config_local_sdk_allow_min_version(hass, hass_client, caplog):
@pytest.mark.parametrize("version", (None, "2.1.4")) @pytest.mark.parametrize("version", (None, "2.1.4"))
async def test_config_local_sdk_warn_version(hass, hass_client, caplog, version): async def test_config_local_sdk_warn_version(
hass: HomeAssistant,
hass_client: ClientSessionGenerator,
caplog: pytest.LogCaptureFixture,
version,
) -> None:
"""Test the local SDK.""" """Test the local SDK."""
assert await async_setup_component(hass, "webhook", {}) assert await async_setup_component(hass, "webhook", {})

View file

@ -3,6 +3,8 @@ from datetime import datetime, timedelta, timezone
from http import HTTPStatus from http import HTTPStatus
from unittest.mock import ANY, patch from unittest.mock import ANY, patch
import pytest
from homeassistant.components.google_assistant import GOOGLE_ASSISTANT_SCHEMA from homeassistant.components.google_assistant import GOOGLE_ASSISTANT_SCHEMA
from homeassistant.components.google_assistant.const import ( from homeassistant.components.google_assistant.const import (
DOMAIN, DOMAIN,
@ -23,6 +25,7 @@ from homeassistant.setup import async_setup_component
from tests.common import async_capture_events, async_mock_service from tests.common import async_capture_events, async_mock_service
from tests.test_util.aiohttp import AiohttpClientMocker from tests.test_util.aiohttp import AiohttpClientMocker
from tests.typing import ClientSessionGenerator
DUMMY_CONFIG = GOOGLE_ASSISTANT_SCHEMA( DUMMY_CONFIG = GOOGLE_ASSISTANT_SCHEMA(
{ {
@ -109,7 +112,12 @@ async def test_update_access_token(hass: HomeAssistant) -> None:
mock_get_token.assert_called_once() mock_get_token.assert_called_once()
async def test_call_homegraph_api(hass, aioclient_mock, hass_storage, caplog): async def test_call_homegraph_api(
hass: HomeAssistant,
aioclient_mock: AiohttpClientMocker,
hass_storage,
caplog: pytest.LogCaptureFixture,
) -> None:
"""Test the function to call the homegraph api.""" """Test the function to call the homegraph api."""
config = GoogleConfig(hass, DUMMY_CONFIG) config = GoogleConfig(hass, DUMMY_CONFIG)
await config.async_initialize() await config.async_initialize()
@ -132,7 +140,9 @@ async def test_call_homegraph_api(hass, aioclient_mock, hass_storage, caplog):
assert call[3] == MOCK_HEADER assert call[3] == MOCK_HEADER
async def test_call_homegraph_api_retry(hass, aioclient_mock, hass_storage): async def test_call_homegraph_api_retry(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker, hass_storage
) -> None:
"""Test the that the calls get retried with new token on 401.""" """Test the that the calls get retried with new token on 401."""
config = GoogleConfig(hass, DUMMY_CONFIG) config = GoogleConfig(hass, DUMMY_CONFIG)
await config.async_initialize() await config.async_initialize()
@ -157,7 +167,9 @@ async def test_call_homegraph_api_retry(hass, aioclient_mock, hass_storage):
assert call[3] == MOCK_HEADER assert call[3] == MOCK_HEADER
async def test_report_state(hass, aioclient_mock, hass_storage): async def test_report_state(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker, hass_storage
) -> None:
"""Test the report state function.""" """Test the report state function."""
agent_user_id = "user" agent_user_id = "user"
config = GoogleConfig(hass, DUMMY_CONFIG) config = GoogleConfig(hass, DUMMY_CONFIG)
@ -178,7 +190,9 @@ async def test_report_state(hass, aioclient_mock, hass_storage):
) )
async def test_google_config_local_fulfillment(hass, aioclient_mock, hass_storage): async def test_google_config_local_fulfillment(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker, hass_storage
) -> None:
"""Test the google config for local fulfillment.""" """Test the google config for local fulfillment."""
agent_user_id = "user" agent_user_id = "user"
local_webhook_id = "webhook" local_webhook_id = "webhook"
@ -270,7 +284,12 @@ async def test_missing_service_account(hass: HomeAssistant) -> None:
assert config._access_token_renew is renew assert config._access_token_renew is renew
async def test_async_enable_local_sdk(hass, hass_client, hass_storage, caplog): async def test_async_enable_local_sdk(
hass: HomeAssistant,
hass_client: ClientSessionGenerator,
hass_storage,
caplog: pytest.LogCaptureFixture,
) -> None:
"""Test the google config enable and disable local sdk.""" """Test the google config enable and disable local sdk."""
command_events = async_capture_events(hass, EVENT_COMMAND_RECEIVED) command_events = async_capture_events(hass, EVENT_COMMAND_RECEIVED)
turn_on_calls = async_mock_service(hass, "light", "turn_on") turn_on_calls = async_mock_service(hass, "light", "turn_on")

View file

@ -8,9 +8,10 @@ from homeassistant.setup import async_setup_component
from .test_http import DUMMY_CONFIG from .test_http import DUMMY_CONFIG
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
from tests.test_util.aiohttp import AiohttpClientMocker
async def test_import(hass: HomeAssistant): async def test_import(hass: HomeAssistant) -> None:
"""Test import.""" """Test import."""
await async_setup_component( await async_setup_component(
@ -24,7 +25,7 @@ async def test_import(hass: HomeAssistant):
assert entries[0].data[ga.const.CONF_PROJECT_ID] == "1234" assert entries[0].data[ga.const.CONF_PROJECT_ID] == "1234"
async def test_import_changed(hass: HomeAssistant): async def test_import_changed(hass: HomeAssistant) -> None:
"""Test import with changed project id.""" """Test import with changed project id."""
old_entry = MockConfigEntry( old_entry = MockConfigEntry(
@ -44,7 +45,9 @@ async def test_import_changed(hass: HomeAssistant):
assert entries[0].data[ga.const.CONF_PROJECT_ID] == "1234" assert entries[0].data[ga.const.CONF_PROJECT_ID] == "1234"
async def test_request_sync_service(aioclient_mock, hass): async def test_request_sync_service(
aioclient_mock: AiohttpClientMocker, hass: HomeAssistant
) -> None:
"""Test that it posts to the request_sync url.""" """Test that it posts to the request_sync url."""
aioclient_mock.post( aioclient_mock.post(
ga.const.HOMEGRAPH_TOKEN_URL, ga.const.HOMEGRAPH_TOKEN_URL,

View file

@ -102,7 +102,7 @@ async def test_async_handle_message(hass: HomeAssistant) -> None:
await hass.async_block_till_done() await hass.async_block_till_done()
async def test_sync_message(hass, registries): async def test_sync_message(hass: HomeAssistant, registries) -> None:
"""Test a sync message.""" """Test a sync message."""
entity = registries.entity.async_get_or_create( entity = registries.entity.async_get_or_create(
"light", "light",
@ -229,7 +229,7 @@ async def test_sync_message(hass, registries):
@pytest.mark.parametrize("area_on_device", [True, False]) @pytest.mark.parametrize("area_on_device", [True, False])
async def test_sync_in_area(area_on_device, hass, registries): async def test_sync_in_area(area_on_device, hass: HomeAssistant, registries) -> None:
"""Test a sync message where room hint comes from area.""" """Test a sync message where room hint comes from area."""
area = registries.area.async_create("Living Room") area = registries.area.async_create("Living Room")
@ -443,7 +443,9 @@ async def test_query_message(hass: HomeAssistant) -> None:
@pytest.mark.parametrize( @pytest.mark.parametrize(
"report_state,on,brightness,value", [(False, True, 20, 0.2), (True, ANY, ANY, ANY)] "report_state,on,brightness,value", [(False, True, 20, 0.2), (True, ANY, ANY, ANY)]
) )
async def test_execute(hass, report_state, on, brightness, value): async def test_execute(
hass: HomeAssistant, report_state, on, brightness, value
) -> None:
"""Test an execute command.""" """Test an execute command."""
await async_setup_component(hass, "light", {"light": {"platform": "demo"}}) await async_setup_component(hass, "light", {"light": {"platform": "demo"}})
await hass.async_block_till_done() await hass.async_block_till_done()
@ -620,7 +622,9 @@ async def test_execute(hass, report_state, on, brightness, value):
@pytest.mark.parametrize("report_state,on,brightness,value", [(False, False, ANY, ANY)]) @pytest.mark.parametrize("report_state,on,brightness,value", [(False, False, ANY, ANY)])
async def test_execute_times_out(hass, report_state, on, brightness, value): async def test_execute_times_out(
hass: HomeAssistant, report_state, on, brightness, value
) -> None:
"""Test an execute command which times out.""" """Test an execute command which times out."""
orig_execute_limit = sh.EXECUTE_LIMIT orig_execute_limit = sh.EXECUTE_LIMIT
sh.EXECUTE_LIMIT = 0.02 # Decrease timeout to 20ms sh.EXECUTE_LIMIT = 0.02 # Decrease timeout to 20ms
@ -1001,7 +1005,9 @@ async def test_unavailable_state_does_sync(hass: HomeAssistant) -> None:
("outlet", "action.devices.types.OUTLET"), ("outlet", "action.devices.types.OUTLET"),
], ],
) )
async def test_device_class_switch(hass, device_class, google_type): async def test_device_class_switch(
hass: HomeAssistant, device_class, google_type
) -> None:
"""Test that a cover entity syncs to the correct device type.""" """Test that a cover entity syncs to the correct device type."""
sensor = DemoSwitch( sensor = DemoSwitch(
None, None,
@ -1051,7 +1057,9 @@ async def test_device_class_switch(hass, device_class, google_type):
("window", "action.devices.types.WINDOW"), ("window", "action.devices.types.WINDOW"),
], ],
) )
async def test_device_class_binary_sensor(hass, device_class, google_type): async def test_device_class_binary_sensor(
hass: HomeAssistant, device_class, google_type
) -> None:
"""Test that a binary entity syncs to the correct device type.""" """Test that a binary entity syncs to the correct device type."""
sensor = DemoBinarySensor( sensor = DemoBinarySensor(
None, "Demo Sensor", state=False, device_class=device_class None, "Demo Sensor", state=False, device_class=device_class
@ -1101,7 +1109,9 @@ async def test_device_class_binary_sensor(hass, device_class, google_type):
("curtain", "action.devices.types.CURTAIN"), ("curtain", "action.devices.types.CURTAIN"),
], ],
) )
async def test_device_class_cover(hass, device_class, google_type): async def test_device_class_cover(
hass: HomeAssistant, device_class, google_type
) -> None:
"""Test that a cover entity syncs to the correct device type.""" """Test that a cover entity syncs to the correct device type."""
sensor = DemoCover(None, hass, "Demo Sensor", device_class=device_class) sensor = DemoCover(None, hass, "Demo Sensor", device_class=device_class)
sensor.hass = hass sensor.hass = hass
@ -1146,7 +1156,9 @@ async def test_device_class_cover(hass, device_class, google_type):
("receiver", "action.devices.types.AUDIO_VIDEO_RECEIVER"), ("receiver", "action.devices.types.AUDIO_VIDEO_RECEIVER"),
], ],
) )
async def test_device_media_player(hass, device_class, google_type): async def test_device_media_player(
hass: HomeAssistant, device_class, google_type
) -> None:
"""Test that a binary entity syncs to the correct device type.""" """Test that a binary entity syncs to the correct device type."""
sensor = AbstractDemoPlayer("Demo", device_class=device_class) sensor = AbstractDemoPlayer("Demo", device_class=device_class)
sensor.hass = hass sensor.hass = hass

View file

@ -82,7 +82,7 @@ PIN_DATA = helpers.RequestData(
@pytest.mark.parametrize( @pytest.mark.parametrize(
"supported_color_modes", [["brightness"], ["hs"], ["color_temp"]] "supported_color_modes", [["brightness"], ["hs"], ["color_temp"]]
) )
async def test_brightness_light(hass, supported_color_modes): async def test_brightness_light(hass: HomeAssistant, supported_color_modes) -> None:
"""Test brightness trait support for light domain.""" """Test brightness trait support for light domain."""
assert helpers.get_google_type(light.DOMAIN, None) is not None assert helpers.get_google_type(light.DOMAIN, None) is not None
assert trait.BrightnessTrait.supported( assert trait.BrightnessTrait.supported(
@ -563,7 +563,9 @@ async def test_startstop_cover_assumed(hass: HomeAssistant) -> None:
@pytest.mark.parametrize("supported_color_modes", [["hs"], ["rgb"], ["xy"]]) @pytest.mark.parametrize("supported_color_modes", [["hs"], ["rgb"], ["xy"]])
async def test_color_setting_color_light(hass, supported_color_modes): async def test_color_setting_color_light(
hass: HomeAssistant, supported_color_modes
) -> None:
"""Test ColorSpectrum trait support for light domain.""" """Test ColorSpectrum trait support for light domain."""
assert helpers.get_google_type(light.DOMAIN, None) is not None assert helpers.get_google_type(light.DOMAIN, None) is not None
assert not trait.ColorSettingTrait.supported(light.DOMAIN, 0, None, {}) assert not trait.ColorSettingTrait.supported(light.DOMAIN, 0, None, {})
@ -774,7 +776,7 @@ async def test_light_modes(hass: HomeAssistant) -> None:
"component", "component",
[button, input_button], [button, input_button],
) )
async def test_scene_button(hass, component): async def test_scene_button(hass: HomeAssistant, component) -> None:
"""Test Scene trait support for the (input) button domain.""" """Test Scene trait support for the (input) button domain."""
assert helpers.get_google_type(component.DOMAIN, None) is not None assert helpers.get_google_type(component.DOMAIN, None) is not None
assert trait.SceneTrait.supported(component.DOMAIN, 0, None, None) assert trait.SceneTrait.supported(component.DOMAIN, 0, None, None)
@ -1763,7 +1765,9 @@ async def test_fan_speed_ordered(
(None, fan.DIRECTION_FORWARD), (None, fan.DIRECTION_FORWARD),
], ],
) )
async def test_fan_reverse(hass, direction_state, direction_call): async def test_fan_reverse(
hass: HomeAssistant, direction_state, direction_call
) -> None:
"""Test FanSpeed trait speed control support for fan domain.""" """Test FanSpeed trait speed control support for fan domain."""
calls = async_mock_service(hass, fan.DOMAIN, fan.SERVICE_SET_DIRECTION) calls = async_mock_service(hass, fan.DOMAIN, fan.SERVICE_SET_DIRECTION)
@ -1938,7 +1942,9 @@ async def test_inputselector(hass: HomeAssistant) -> None:
(["a", "b", "c"], "a", "b", "c"), (["a", "b", "c"], "a", "b", "c"),
], ],
) )
async def test_inputselector_nextprev(hass, sources, source, source_next, source_prev): async def test_inputselector_nextprev(
hass: HomeAssistant, sources, source, source_next, source_prev
) -> None:
"""Test input selector trait.""" """Test input selector trait."""
trt = trait.InputSelectorTrait( trt = trait.InputSelectorTrait(
hass, hass,
@ -1986,7 +1992,9 @@ async def test_inputselector_nextprev(hass, sources, source, source_next, source
@pytest.mark.parametrize( @pytest.mark.parametrize(
"sources,source", [(None, "a"), (["a", "b"], None), (["a", "b"], "c")] "sources,source", [(None, "a"), (["a", "b"], None), (["a", "b"], "c")]
) )
async def test_inputselector_nextprev_invalid(hass, sources, source): async def test_inputselector_nextprev_invalid(
hass: HomeAssistant, sources, source
) -> None:
"""Test input selector trait.""" """Test input selector trait."""
trt = trait.InputSelectorTrait( trt = trait.InputSelectorTrait(
hass, hass,
@ -2606,7 +2614,7 @@ async def test_openclose_cover_no_position(hass: HomeAssistant) -> None:
cover.CoverDeviceClass.GATE, cover.CoverDeviceClass.GATE,
), ),
) )
async def test_openclose_cover_secure(hass, device_class): async def test_openclose_cover_secure(hass: HomeAssistant, device_class) -> None:
"""Test OpenClose trait support for cover domain.""" """Test OpenClose trait support for cover domain."""
assert helpers.get_google_type(cover.DOMAIN, device_class) is not None assert helpers.get_google_type(cover.DOMAIN, device_class) is not None
assert trait.OpenCloseTrait.supported( assert trait.OpenCloseTrait.supported(
@ -2674,7 +2682,7 @@ async def test_openclose_cover_secure(hass, device_class):
binary_sensor.BinarySensorDeviceClass.WINDOW, binary_sensor.BinarySensorDeviceClass.WINDOW,
), ),
) )
async def test_openclose_binary_sensor(hass, device_class): async def test_openclose_binary_sensor(hass: HomeAssistant, device_class) -> None:
"""Test OpenClose trait support for binary_sensor domain.""" """Test OpenClose trait support for binary_sensor domain."""
assert helpers.get_google_type(binary_sensor.DOMAIN, device_class) is not None assert helpers.get_google_type(binary_sensor.DOMAIN, device_class) is not None
assert trait.OpenCloseTrait.supported(binary_sensor.DOMAIN, 0, device_class, None) assert trait.OpenCloseTrait.supported(binary_sensor.DOMAIN, 0, device_class, None)
@ -2916,7 +2924,9 @@ async def test_temperature_control_sensor(hass: HomeAssistant) -> None:
(UnitOfTemperature.FAHRENHEIT, "F", "unknown", None), (UnitOfTemperature.FAHRENHEIT, "F", "unknown", None),
], ],
) )
async def test_temperature_control_sensor_data(hass, unit_in, unit_out, state, ambient): async def test_temperature_control_sensor_data(
hass: HomeAssistant, unit_in, unit_out, state, ambient
) -> None:
"""Test TemperatureControl trait support for temperature sensor.""" """Test TemperatureControl trait support for temperature sensor."""
hass.config.units.temperature_unit = unit_in hass.config.units.temperature_unit = unit_in
@ -2963,7 +2973,9 @@ async def test_humidity_setting_sensor(hass: HomeAssistant) -> None:
@pytest.mark.parametrize( @pytest.mark.parametrize(
"state,ambient", [("70", 70), ("unavailable", None), ("unknown", None)] "state,ambient", [("70", 70), ("unavailable", None), ("unknown", None)]
) )
async def test_humidity_setting_sensor_data(hass, state, ambient): async def test_humidity_setting_sensor_data(
hass: HomeAssistant, state, ambient
) -> None:
"""Test HumiditySetting trait support for humidity sensor.""" """Test HumiditySetting trait support for humidity sensor."""
trt = trait.HumiditySettingTrait( trt = trait.HumiditySettingTrait(
hass, hass,
@ -3116,7 +3128,7 @@ async def test_transport_control(hass: HomeAssistant) -> None:
STATE_UNKNOWN, STATE_UNKNOWN,
), ),
) )
async def test_media_state(hass, state): async def test_media_state(hass: HomeAssistant, state) -> None:
"""Test the MediaStateTrait.""" """Test the MediaStateTrait."""
assert helpers.get_google_type(media_player.DOMAIN, None) is not None assert helpers.get_google_type(media_player.DOMAIN, None) is not None

View file

@ -9,6 +9,8 @@ from homeassistant.helpers import config_entry_oauth2_flow
from .conftest import CLIENT_ID, ComponentSetup from .conftest import CLIENT_ID, ComponentSetup
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
from tests.test_util.aiohttp import AiohttpClientMocker
from tests.typing import ClientSessionGenerator
GOOGLE_AUTH_URI = "https://accounts.google.com/o/oauth2/v2/auth" GOOGLE_AUTH_URI = "https://accounts.google.com/o/oauth2/v2/auth"
GOOGLE_TOKEN_URI = "https://oauth2.googleapis.com/token" GOOGLE_TOKEN_URI = "https://oauth2.googleapis.com/token"
@ -17,9 +19,9 @@ TITLE = "Google Assistant SDK"
async def test_full_flow( async def test_full_flow(
hass: HomeAssistant, hass: HomeAssistant,
hass_client_no_auth, hass_client_no_auth: ClientSessionGenerator,
aioclient_mock, aioclient_mock: AiohttpClientMocker,
current_request_with_host, current_request_with_host: None,
setup_credentials, setup_credentials,
) -> None: ) -> None:
"""Check full flow.""" """Check full flow."""
@ -78,9 +80,9 @@ async def test_full_flow(
async def test_reauth( async def test_reauth(
hass: HomeAssistant, hass: HomeAssistant,
hass_client_no_auth, hass_client_no_auth: ClientSessionGenerator,
aioclient_mock, aioclient_mock: AiohttpClientMocker,
current_request_with_host, current_request_with_host: None,
setup_credentials, setup_credentials,
) -> None: ) -> None:
"""Test the reauthentication case updates the existing config entry.""" """Test the reauthentication case updates the existing config entry."""
@ -153,9 +155,9 @@ async def test_reauth(
async def test_single_instance_allowed( async def test_single_instance_allowed(
hass: HomeAssistant, hass: HomeAssistant,
hass_client_no_auth, hass_client_no_auth: ClientSessionGenerator,
aioclient_mock, aioclient_mock: AiohttpClientMocker,
current_request_with_host, current_request_with_host: None,
setup_credentials, setup_credentials,
) -> None: ) -> None:
"""Test case where config flow allows a single test.""" """Test case where config flow allows a single test."""

View file

@ -17,6 +17,7 @@ from .conftest import ComponentSetup, ExpectedCredentials
from tests.common import async_fire_time_changed, async_mock_service from tests.common import async_fire_time_changed, async_mock_service
from tests.test_util.aiohttp import AiohttpClientMocker from tests.test_util.aiohttp import AiohttpClientMocker
from tests.typing import ClientSessionGenerator
async def fetch_api_url(hass_client, url): async def fetch_api_url(hass_client, url):
@ -232,7 +233,9 @@ async def test_send_text_command_expired_token_refresh_failure(
async def test_send_text_command_media_player( async def test_send_text_command_media_player(
hass: HomeAssistant, setup_integration: ComponentSetup, hass_client hass: HomeAssistant,
setup_integration: ComponentSetup,
hass_client: ClientSessionGenerator,
) -> None: ) -> None:
"""Test send_text_command with media_player.""" """Test send_text_command with media_player."""
await setup_integration() await setup_integration()

View file

@ -13,12 +13,13 @@ from .conftest import CLIENT_ID, GOOGLE_AUTH_URI, GOOGLE_TOKEN_URI, SCOPES, TITL
from tests.common import MockConfigEntry, load_fixture from tests.common import MockConfigEntry, load_fixture
from tests.test_util.aiohttp import AiohttpClientMocker from tests.test_util.aiohttp import AiohttpClientMocker
from tests.typing import ClientSessionGenerator
async def test_full_flow( async def test_full_flow(
hass: HomeAssistant, hass: HomeAssistant,
hass_client_no_auth, hass_client_no_auth: ClientSessionGenerator,
current_request_with_host, current_request_with_host: None,
) -> None: ) -> None:
"""Check full flow.""" """Check full flow."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
@ -166,8 +167,8 @@ async def test_reauth(
async def test_already_configured( async def test_already_configured(
hass: HomeAssistant, hass: HomeAssistant,
hass_client_no_auth, hass_client_no_auth: ClientSessionGenerator,
current_request_with_host, current_request_with_host: None,
config_entry: MockConfigEntry, config_entry: MockConfigEntry,
) -> None: ) -> None:
"""Test case where config flow discovers unique id was already configured.""" """Test case where config flow discovers unique id was already configured."""

View file

@ -9,7 +9,7 @@ import pytest
import homeassistant.components.google_pubsub as google_pubsub import homeassistant.components.google_pubsub as google_pubsub
from homeassistant.components.google_pubsub import DateTimeJSONEncoder as victim from homeassistant.components.google_pubsub import DateTimeJSONEncoder as victim
from homeassistant.const import EVENT_STATE_CHANGED from homeassistant.const import EVENT_STATE_CHANGED
from homeassistant.core import split_entity_id from homeassistant.core import HomeAssistant, split_entity_id
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
GOOGLE_PUBSUB_PATH = "homeassistant.components.google_pubsub" GOOGLE_PUBSUB_PATH = "homeassistant.components.google_pubsub"
@ -68,7 +68,7 @@ def mock_bus_and_json(hass, monkeypatch):
) )
async def test_minimal_config(hass, mock_client): async def test_minimal_config(hass: HomeAssistant, mock_client) -> None:
"""Test the minimal config and defaults of component.""" """Test the minimal config and defaults of component."""
config = { config = {
google_pubsub.DOMAIN: { google_pubsub.DOMAIN: {
@ -88,7 +88,7 @@ async def test_minimal_config(hass, mock_client):
) )
async def test_full_config(hass, mock_client): async def test_full_config(hass: HomeAssistant, mock_client) -> None:
"""Test the full config of the component.""" """Test the full config of the component."""
config = { config = {
google_pubsub.DOMAIN: { google_pubsub.DOMAIN: {
@ -143,7 +143,7 @@ async def _setup(hass, filter_config):
return hass.bus.listen.call_args_list[0][0][1] return hass.bus.listen.call_args_list[0][0][1]
async def test_allowlist(hass, mock_client): async def test_allowlist(hass: HomeAssistant, mock_client) -> None:
"""Test an allowlist only config.""" """Test an allowlist only config."""
handler_method = await _setup( handler_method = await _setup(
hass, hass,
@ -173,7 +173,7 @@ async def test_allowlist(hass, mock_client):
publish_client.publish.reset_mock() publish_client.publish.reset_mock()
async def test_denylist(hass, mock_client): async def test_denylist(hass: HomeAssistant, mock_client) -> None:
"""Test a denylist only config.""" """Test a denylist only config."""
handler_method = await _setup( handler_method = await _setup(
hass, hass,
@ -203,7 +203,7 @@ async def test_denylist(hass, mock_client):
publish_client.publish.reset_mock() publish_client.publish.reset_mock()
async def test_filtered_allowlist(hass, mock_client): async def test_filtered_allowlist(hass: HomeAssistant, mock_client) -> None:
"""Test an allowlist config with a filtering denylist.""" """Test an allowlist config with a filtering denylist."""
handler_method = await _setup( handler_method = await _setup(
hass, hass,
@ -234,7 +234,7 @@ async def test_filtered_allowlist(hass, mock_client):
publish_client.publish.reset_mock() publish_client.publish.reset_mock()
async def test_filtered_denylist(hass, mock_client): async def test_filtered_denylist(hass: HomeAssistant, mock_client) -> None:
"""Test a denylist config with a filtering allowlist.""" """Test a denylist config with a filtering allowlist."""
handler_method = await _setup( handler_method = await _setup(
hass, hass,

View file

@ -1,5 +1,4 @@
"""Test the Google Sheets config flow.""" """Test the Google Sheets config flow."""
from collections.abc import Generator from collections.abc import Generator
from unittest.mock import Mock, patch from unittest.mock import Mock, patch
@ -17,6 +16,8 @@ from homeassistant.helpers import config_entry_oauth2_flow
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
from tests.test_util.aiohttp import AiohttpClientMocker
from tests.typing import ClientSessionGenerator
CLIENT_ID = "1234" CLIENT_ID = "1234"
CLIENT_SECRET = "5678" CLIENT_SECRET = "5678"
@ -48,9 +49,9 @@ async def mock_client() -> Generator[Mock, None, None]:
async def test_full_flow( async def test_full_flow(
hass: HomeAssistant, hass: HomeAssistant,
hass_client_no_auth, hass_client_no_auth: ClientSessionGenerator,
aioclient_mock, aioclient_mock: AiohttpClientMocker,
current_request_with_host, current_request_with_host: None,
setup_credentials, setup_credentials,
mock_client, mock_client,
) -> None: ) -> None:
@ -115,9 +116,9 @@ async def test_full_flow(
async def test_create_sheet_error( async def test_create_sheet_error(
hass: HomeAssistant, hass: HomeAssistant,
hass_client_no_auth, hass_client_no_auth: ClientSessionGenerator,
aioclient_mock, aioclient_mock: AiohttpClientMocker,
current_request_with_host, current_request_with_host: None,
setup_credentials, setup_credentials,
mock_client, mock_client,
) -> None: ) -> None:
@ -167,9 +168,9 @@ async def test_create_sheet_error(
async def test_reauth( async def test_reauth(
hass: HomeAssistant, hass: HomeAssistant,
hass_client_no_auth, hass_client_no_auth: ClientSessionGenerator,
aioclient_mock, aioclient_mock: AiohttpClientMocker,
current_request_with_host, current_request_with_host: None,
setup_credentials, setup_credentials,
mock_client, mock_client,
) -> None: ) -> None:
@ -248,9 +249,9 @@ async def test_reauth(
async def test_reauth_abort( async def test_reauth_abort(
hass: HomeAssistant, hass: HomeAssistant,
hass_client_no_auth, hass_client_no_auth: ClientSessionGenerator,
aioclient_mock, aioclient_mock: AiohttpClientMocker,
current_request_with_host, current_request_with_host: None,
setup_credentials, setup_credentials,
mock_client, mock_client,
) -> None: ) -> None:
@ -317,9 +318,9 @@ async def test_reauth_abort(
async def test_already_configured( async def test_already_configured(
hass: HomeAssistant, hass: HomeAssistant,
hass_client_no_auth, hass_client_no_auth: ClientSessionGenerator,
aioclient_mock, aioclient_mock: AiohttpClientMocker,
current_request_with_host, current_request_with_host: None,
setup_credentials, setup_credentials,
mock_client, mock_client,
) -> None: ) -> None:

View file

@ -13,6 +13,7 @@ from homeassistant.components.media_player import (
SERVICE_PLAY_MEDIA, SERVICE_PLAY_MEDIA,
) )
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
@ -59,7 +60,7 @@ def mock_gtts():
yield mock_gtts yield mock_gtts
async def test_service_say(hass, mock_gtts, calls): async def test_service_say(hass: HomeAssistant, mock_gtts, calls) -> None:
"""Test service call say.""" """Test service call say."""
await async_setup_component( await async_setup_component(
@ -88,7 +89,7 @@ async def test_service_say(hass, mock_gtts, calls):
} }
async def test_service_say_german_config(hass, mock_gtts, calls): async def test_service_say_german_config(hass: HomeAssistant, mock_gtts, calls) -> None:
"""Test service call say with german code in the config.""" """Test service call say with german code in the config."""
await async_setup_component( await async_setup_component(
@ -117,7 +118,9 @@ async def test_service_say_german_config(hass, mock_gtts, calls):
} }
async def test_service_say_german_service(hass, mock_gtts, calls): async def test_service_say_german_service(
hass: HomeAssistant, mock_gtts, calls
) -> None:
"""Test service call say with german code in the service.""" """Test service call say with german code in the service."""
config = { config = {
@ -147,7 +150,7 @@ async def test_service_say_german_service(hass, mock_gtts, calls):
} }
async def test_service_say_en_uk_config(hass, mock_gtts, calls): async def test_service_say_en_uk_config(hass: HomeAssistant, mock_gtts, calls) -> None:
"""Test service call say with en-uk code in the config.""" """Test service call say with en-uk code in the config."""
await async_setup_component( await async_setup_component(
@ -176,7 +179,7 @@ async def test_service_say_en_uk_config(hass, mock_gtts, calls):
} }
async def test_service_say_en_uk_service(hass, mock_gtts, calls): async def test_service_say_en_uk_service(hass: HomeAssistant, mock_gtts, calls) -> None:
"""Test service call say with en-uk code in the config.""" """Test service call say with en-uk code in the config."""
await async_setup_component( await async_setup_component(
@ -206,7 +209,7 @@ async def test_service_say_en_uk_service(hass, mock_gtts, calls):
} }
async def test_service_say_en_couk(hass, mock_gtts, calls): async def test_service_say_en_couk(hass: HomeAssistant, mock_gtts, calls) -> None:
"""Test service call say in co.uk tld accent.""" """Test service call say in co.uk tld accent."""
await async_setup_component( await async_setup_component(
@ -236,7 +239,7 @@ async def test_service_say_en_couk(hass, mock_gtts, calls):
} }
async def test_service_say_error(hass, mock_gtts, calls): async def test_service_say_error(hass: HomeAssistant, mock_gtts, calls) -> None:
"""Test service call say with http response 400.""" """Test service call say with http response 400."""
mock_gtts.return_value.write_to_fp.side_effect = gTTSError mock_gtts.return_value.write_to_fp.side_effect = gTTSError
await async_setup_component( await async_setup_component(

View file

@ -148,7 +148,7 @@ async def test_malformed_api_key(hass: HomeAssistant) -> None:
], ],
) )
@pytest.mark.usefixtures("validate_config_entry") @pytest.mark.usefixtures("validate_config_entry")
async def test_options_flow(hass, mock_config): async def test_options_flow(hass: HomeAssistant, mock_config) -> None:
"""Test options flow.""" """Test options flow."""
result = await hass.config_entries.options.async_init( result = await hass.config_entries.options.async_init(
mock_config.entry_id, data=None mock_config.entry_id, data=None
@ -209,7 +209,7 @@ async def test_options_flow(hass, mock_config):
], ],
) )
@pytest.mark.usefixtures("validate_config_entry") @pytest.mark.usefixtures("validate_config_entry")
async def test_options_flow_departure_time(hass, mock_config): async def test_options_flow_departure_time(hass: HomeAssistant, mock_config) -> None:
"""Test options flow with departure time.""" """Test options flow with departure time."""
result = await hass.config_entries.options.async_init( result = await hass.config_entries.options.async_init(
mock_config.entry_id, data=None mock_config.entry_id, data=None

View file

@ -3,7 +3,10 @@ from datetime import datetime, timedelta
from http import HTTPStatus from http import HTTPStatus
from unittest.mock import Mock, patch from unittest.mock import Mock, patch
import requests_mock
import homeassistant.components.google_wifi.sensor as google_wifi import homeassistant.components.google_wifi.sensor as google_wifi
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from homeassistant.util import dt as dt_util from homeassistant.util import dt as dt_util
@ -30,7 +33,9 @@ MOCK_DATA_NEXT = (
MOCK_DATA_MISSING = '{"software": {},' '"system": {},' '"wan": {}}' MOCK_DATA_MISSING = '{"software": {},' '"system": {},' '"wan": {}}'
async def test_setup_minimum(hass, requests_mock): async def test_setup_minimum(
hass: HomeAssistant, requests_mock: requests_mock.Mocker
) -> None:
"""Test setup with minimum configuration.""" """Test setup with minimum configuration."""
resource = f"http://{google_wifi.DEFAULT_HOST}{google_wifi.ENDPOINT}" resource = f"http://{google_wifi.DEFAULT_HOST}{google_wifi.ENDPOINT}"
requests_mock.get(resource, status_code=HTTPStatus.OK) requests_mock.get(resource, status_code=HTTPStatus.OK)
@ -42,7 +47,9 @@ async def test_setup_minimum(hass, requests_mock):
assert_setup_component(1, "sensor") assert_setup_component(1, "sensor")
async def test_setup_get(hass, requests_mock): async def test_setup_get(
hass: HomeAssistant, requests_mock: requests_mock.Mocker
) -> None:
"""Test setup with full configuration.""" """Test setup with full configuration."""
resource = f"http://localhost{google_wifi.ENDPOINT}" resource = f"http://localhost{google_wifi.ENDPOINT}"
requests_mock.get(resource, status_code=HTTPStatus.OK) requests_mock.get(resource, status_code=HTTPStatus.OK)
@ -98,7 +105,7 @@ def fake_delay(hass, ha_delay):
async_fire_time_changed(hass, shifted_time) async_fire_time_changed(hass, shifted_time)
def test_name(requests_mock): def test_name(requests_mock: requests_mock.Mocker) -> None:
"""Test the name.""" """Test the name."""
api, sensor_dict = setup_api(None, MOCK_DATA, requests_mock) api, sensor_dict = setup_api(None, MOCK_DATA, requests_mock)
for name in sensor_dict: for name in sensor_dict:
@ -107,7 +114,9 @@ def test_name(requests_mock):
assert test_name == sensor.name assert test_name == sensor.name
def test_unit_of_measurement(hass, requests_mock): def test_unit_of_measurement(
hass: HomeAssistant, requests_mock: requests_mock.Mocker
) -> None:
"""Test the unit of measurement.""" """Test the unit of measurement."""
api, sensor_dict = setup_api(hass, MOCK_DATA, requests_mock) api, sensor_dict = setup_api(hass, MOCK_DATA, requests_mock)
for name in sensor_dict: for name in sensor_dict:
@ -115,7 +124,7 @@ def test_unit_of_measurement(hass, requests_mock):
assert sensor_dict[name]["units"] == sensor.unit_of_measurement assert sensor_dict[name]["units"] == sensor.unit_of_measurement
def test_icon(requests_mock): def test_icon(requests_mock: requests_mock.Mocker) -> None:
"""Test the icon.""" """Test the icon."""
api, sensor_dict = setup_api(None, MOCK_DATA, requests_mock) api, sensor_dict = setup_api(None, MOCK_DATA, requests_mock)
for name in sensor_dict: for name in sensor_dict:
@ -123,7 +132,7 @@ def test_icon(requests_mock):
assert sensor_dict[name]["icon"] == sensor.icon assert sensor_dict[name]["icon"] == sensor.icon
def test_state(hass, requests_mock): def test_state(hass: HomeAssistant, requests_mock: requests_mock.Mocker) -> None:
"""Test the initial state.""" """Test the initial state."""
api, sensor_dict = setup_api(hass, MOCK_DATA, requests_mock) api, sensor_dict = setup_api(hass, MOCK_DATA, requests_mock)
now = datetime(1970, month=1, day=1) now = datetime(1970, month=1, day=1)
@ -142,7 +151,9 @@ def test_state(hass, requests_mock):
assert sensor.state == "initial" assert sensor.state == "initial"
def test_update_when_value_is_none(hass, requests_mock): def test_update_when_value_is_none(
hass: HomeAssistant, requests_mock: requests_mock.Mocker
) -> None:
"""Test state gets updated to unknown when sensor returns no data.""" """Test state gets updated to unknown when sensor returns no data."""
api, sensor_dict = setup_api(hass, None, requests_mock) api, sensor_dict = setup_api(hass, None, requests_mock)
for name in sensor_dict: for name in sensor_dict:
@ -152,7 +163,9 @@ def test_update_when_value_is_none(hass, requests_mock):
assert sensor.state is None assert sensor.state is None
def test_update_when_value_changed(hass, requests_mock): def test_update_when_value_changed(
hass: HomeAssistant, requests_mock: requests_mock.Mocker
) -> None:
"""Test state gets updated when sensor returns a new status.""" """Test state gets updated when sensor returns a new status."""
api, sensor_dict = setup_api(hass, MOCK_DATA_NEXT, requests_mock) api, sensor_dict = setup_api(hass, MOCK_DATA_NEXT, requests_mock)
now = datetime(1970, month=1, day=1) now = datetime(1970, month=1, day=1)
@ -175,7 +188,9 @@ def test_update_when_value_changed(hass, requests_mock):
assert sensor.state == "next" assert sensor.state == "next"
def test_when_api_data_missing(hass, requests_mock): def test_when_api_data_missing(
hass: HomeAssistant, requests_mock: requests_mock.Mocker
) -> None:
"""Test state logs an error when data is missing.""" """Test state logs an error when data is missing."""
api, sensor_dict = setup_api(hass, MOCK_DATA_MISSING, requests_mock) api, sensor_dict = setup_api(hass, MOCK_DATA_MISSING, requests_mock)
now = datetime(1970, month=1, day=1) now = datetime(1970, month=1, day=1)
@ -187,7 +202,9 @@ def test_when_api_data_missing(hass, requests_mock):
assert sensor.state is None assert sensor.state is None
def test_update_when_unavailable(hass, requests_mock): def test_update_when_unavailable(
hass: HomeAssistant, requests_mock: requests_mock.Mocker
) -> None:
"""Test state updates when Google Wifi unavailable.""" """Test state updates when Google Wifi unavailable."""
api, sensor_dict = setup_api(hass, None, requests_mock) api, sensor_dict = setup_api(hass, None, requests_mock)
api.update = Mock( api.update = Mock(

View file

@ -10,6 +10,7 @@ from homeassistant.components.device_tracker import DOMAIN as DEVICE_TRACKER_DOM
from homeassistant.components.gpslogger import DOMAIN, TRACKER_UPDATE from homeassistant.components.gpslogger import DOMAIN, TRACKER_UPDATE
from homeassistant.config import async_process_ha_core_config from homeassistant.config import async_process_ha_core_config
from homeassistant.const import STATE_HOME, STATE_NOT_HOME from homeassistant.const import STATE_HOME, STATE_NOT_HOME
from homeassistant.core import HomeAssistant
from homeassistant.helpers import device_registry as dr, entity_registry as er from homeassistant.helpers import device_registry as dr, entity_registry as er
from homeassistant.helpers.dispatcher import DATA_DISPATCHER from homeassistant.helpers.dispatcher import DATA_DISPATCHER
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
@ -72,7 +73,7 @@ async def webhook_id(hass, gpslogger_client):
return result["result"].data["webhook_id"] return result["result"].data["webhook_id"]
async def test_missing_data(hass, gpslogger_client, webhook_id): async def test_missing_data(hass: HomeAssistant, gpslogger_client, webhook_id) -> None:
"""Test missing data.""" """Test missing data."""
url = f"/api/webhook/{webhook_id}" url = f"/api/webhook/{webhook_id}"
@ -98,7 +99,9 @@ async def test_missing_data(hass, gpslogger_client, webhook_id):
assert req.status == HTTPStatus.UNPROCESSABLE_ENTITY assert req.status == HTTPStatus.UNPROCESSABLE_ENTITY
async def test_enter_and_exit(hass, gpslogger_client, webhook_id): async def test_enter_and_exit(
hass: HomeAssistant, gpslogger_client, webhook_id
) -> None:
"""Test when there is a known zone.""" """Test when there is a known zone."""
url = f"/api/webhook/{webhook_id}" url = f"/api/webhook/{webhook_id}"
@ -135,7 +138,9 @@ async def test_enter_and_exit(hass, gpslogger_client, webhook_id):
assert len(ent_reg.entities) == 1 assert len(ent_reg.entities) == 1
async def test_enter_with_attrs(hass, gpslogger_client, webhook_id): async def test_enter_with_attrs(
hass: HomeAssistant, gpslogger_client, webhook_id
) -> None:
"""Test when additional attributes are present.""" """Test when additional attributes are present."""
url = f"/api/webhook/{webhook_id}" url = f"/api/webhook/{webhook_id}"
@ -195,7 +200,9 @@ async def test_enter_with_attrs(hass, gpslogger_client, webhook_id):
@pytest.mark.xfail( @pytest.mark.xfail(
reason="The device_tracker component does not support unloading yet." reason="The device_tracker component does not support unloading yet."
) )
async def test_load_unload_entry(hass, gpslogger_client, webhook_id): async def test_load_unload_entry(
hass: HomeAssistant, gpslogger_client, webhook_id
) -> None:
"""Test that the appropriate dispatch signals are added and removed.""" """Test that the appropriate dispatch signals are added and removed."""
url = f"/api/webhook/{webhook_id}" url = f"/api/webhook/{webhook_id}"
data = {"latitude": HOME_LATITUDE, "longitude": HOME_LONGITUDE, "device": "123"} data = {"latitude": HOME_LATITUDE, "longitude": HOME_LONGITUDE, "device": "123"}

View file

@ -8,6 +8,7 @@ import pytest
from homeassistant.components import graphite from homeassistant.components import graphite
from homeassistant.const import STATE_OFF, STATE_ON from homeassistant.const import STATE_OFF, STATE_ON
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
@ -32,14 +33,14 @@ def fixture_mock_time():
yield mock_time yield mock_time
async def test_setup(hass, mock_socket): async def test_setup(hass: HomeAssistant, mock_socket) -> None:
"""Test setup.""" """Test setup."""
assert await async_setup_component(hass, graphite.DOMAIN, {"graphite": {}}) assert await async_setup_component(hass, graphite.DOMAIN, {"graphite": {}})
assert mock_socket.call_count == 1 assert mock_socket.call_count == 1
assert mock_socket.call_args == mock.call(socket.AF_INET, socket.SOCK_STREAM) assert mock_socket.call_args == mock.call(socket.AF_INET, socket.SOCK_STREAM)
async def test_setup_failure(hass, mock_socket): async def test_setup_failure(hass: HomeAssistant, mock_socket) -> None:
"""Test setup fails due to socket error.""" """Test setup fails due to socket error."""
mock_socket.return_value.connect.side_effect = OSError mock_socket.return_value.connect.side_effect = OSError
assert not await async_setup_component(hass, graphite.DOMAIN, {"graphite": {}}) assert not await async_setup_component(hass, graphite.DOMAIN, {"graphite": {}})
@ -49,7 +50,7 @@ async def test_setup_failure(hass, mock_socket):
assert mock_socket.return_value.connect.call_count == 1 assert mock_socket.return_value.connect.call_count == 1
async def test_full_config(hass, mock_gf, mock_socket): async def test_full_config(hass: HomeAssistant, mock_gf, mock_socket) -> None:
"""Test setup with full configuration.""" """Test setup with full configuration."""
config = {"graphite": {"host": "foo", "port": 123, "prefix": "me"}} config = {"graphite": {"host": "foo", "port": 123, "prefix": "me"}}
@ -60,7 +61,7 @@ async def test_full_config(hass, mock_gf, mock_socket):
assert mock_socket.call_args == mock.call(socket.AF_INET, socket.SOCK_STREAM) assert mock_socket.call_args == mock.call(socket.AF_INET, socket.SOCK_STREAM)
async def test_full_udp_config(hass, mock_gf, mock_socket): async def test_full_udp_config(hass: HomeAssistant, mock_gf, mock_socket) -> None:
"""Test setup with full configuration and UDP protocol.""" """Test setup with full configuration and UDP protocol."""
config = { config = {
"graphite": {"host": "foo", "port": 123, "protocol": "udp", "prefix": "me"} "graphite": {"host": "foo", "port": 123, "protocol": "udp", "prefix": "me"}
@ -72,7 +73,7 @@ async def test_full_udp_config(hass, mock_gf, mock_socket):
assert mock_socket.call_count == 0 assert mock_socket.call_count == 0
async def test_config_port(hass, mock_gf, mock_socket): async def test_config_port(hass: HomeAssistant, mock_gf, mock_socket) -> None:
"""Test setup with invalid port.""" """Test setup with invalid port."""
config = {"graphite": {"host": "foo", "port": 2003}} config = {"graphite": {"host": "foo", "port": 2003}}
@ -82,7 +83,7 @@ async def test_config_port(hass, mock_gf, mock_socket):
assert mock_socket.call_args == mock.call(socket.AF_INET, socket.SOCK_STREAM) assert mock_socket.call_args == mock.call(socket.AF_INET, socket.SOCK_STREAM)
async def test_start(hass, mock_socket, mock_time): async def test_start(hass: HomeAssistant, mock_socket, mock_time) -> None:
"""Test the start.""" """Test the start."""
mock_time.return_value = 12345 mock_time.return_value = 12345
assert await async_setup_component(hass, graphite.DOMAIN, {"graphite": {}}) assert await async_setup_component(hass, graphite.DOMAIN, {"graphite": {}})
@ -105,7 +106,7 @@ async def test_start(hass, mock_socket, mock_time):
assert mock_socket.return_value.close.call_count == 1 assert mock_socket.return_value.close.call_count == 1
async def test_shutdown(hass, mock_socket, mock_time): async def test_shutdown(hass: HomeAssistant, mock_socket, mock_time) -> None:
"""Test the shutdown.""" """Test the shutdown."""
mock_time.return_value = 12345 mock_time.return_value = 12345
assert await async_setup_component(hass, graphite.DOMAIN, {"graphite": {}}) assert await async_setup_component(hass, graphite.DOMAIN, {"graphite": {}})
@ -139,7 +140,7 @@ async def test_shutdown(hass, mock_socket, mock_time):
assert mock_socket.return_value.sendall.call_count == 0 assert mock_socket.return_value.sendall.call_count == 0
async def test_report_attributes(hass, mock_socket, mock_time): async def test_report_attributes(hass: HomeAssistant, mock_socket, mock_time) -> None:
"""Test the reporting with attributes.""" """Test the reporting with attributes."""
attrs = {"foo": 1, "bar": 2.0, "baz": True, "bat": "NaN"} attrs = {"foo": 1, "bar": 2.0, "baz": True, "bat": "NaN"}
expected = [ expected = [
@ -170,7 +171,9 @@ async def test_report_attributes(hass, mock_socket, mock_time):
assert mock_socket.return_value.close.call_count == 1 assert mock_socket.return_value.close.call_count == 1
async def test_report_with_string_state(hass, mock_socket, mock_time): async def test_report_with_string_state(
hass: HomeAssistant, mock_socket, mock_time
) -> None:
"""Test the reporting with strings.""" """Test the reporting with strings."""
expected = [ expected = [
"ha.test.entity.foo 1.000000 12345", "ha.test.entity.foo 1.000000 12345",
@ -208,7 +211,9 @@ async def test_report_with_string_state(hass, mock_socket, mock_time):
assert mock_socket.return_value.close.call_count == 0 assert mock_socket.return_value.close.call_count == 0
async def test_report_with_binary_state(hass, mock_socket, mock_time): async def test_report_with_binary_state(
hass: HomeAssistant, mock_socket, mock_time
) -> None:
"""Test the reporting with binary state.""" """Test the reporting with binary state."""
mock_time.return_value = 12345 mock_time.return_value = 12345
assert await async_setup_component(hass, graphite.DOMAIN, {"graphite": {}}) assert await async_setup_component(hass, graphite.DOMAIN, {"graphite": {}})
@ -263,8 +268,13 @@ async def test_report_with_binary_state(hass, mock_socket, mock_time):
], ],
) )
async def test_send_to_graphite_errors( async def test_send_to_graphite_errors(
hass, mock_socket, mock_time, caplog, error, log_text hass: HomeAssistant,
): mock_socket,
mock_time,
caplog: pytest.LogCaptureFixture,
error,
log_text,
) -> None:
"""Test the sending with errors.""" """Test the sending with errors."""
mock_time.return_value = 12345 mock_time.return_value = 12345
assert await async_setup_component(hass, graphite.DOMAIN, {"graphite": {}}) assert await async_setup_component(hass, graphite.DOMAIN, {"graphite": {}})

View file

@ -6,6 +6,7 @@ import pytest
from homeassistant.components.climate import DOMAIN from homeassistant.components.climate import DOMAIN
from homeassistant.components.gree.const import COORDINATORS, DOMAIN as GREE from homeassistant.components.gree.const import COORDINATORS, DOMAIN as GREE
from homeassistant.core import HomeAssistant
import homeassistant.util.dt as dt_util import homeassistant.util.dt as dt_util
from .common import async_setup_gree, build_device_mock from .common import async_setup_gree, build_device_mock
@ -22,7 +23,9 @@ def mock_now():
return dt_util.utcnow() return dt_util.utcnow()
async def test_discovery_after_setup(hass, discovery, device, mock_now): async def test_discovery_after_setup(
hass: HomeAssistant, discovery, device, mock_now
) -> None:
"""Test gree devices don't change after multiple discoveries.""" """Test gree devices don't change after multiple discoveries."""
mock_device_1 = build_device_mock( mock_device_1 = build_device_mock(
name="fake-device-1", ipAddress="1.1.1.1", mac="aabbcc112233" name="fake-device-1", ipAddress="1.1.1.1", mac="aabbcc112233"

View file

@ -46,6 +46,7 @@ from homeassistant.const import (
STATE_UNAVAILABLE, STATE_UNAVAILABLE,
UnitOfTemperature, UnitOfTemperature,
) )
from homeassistant.core import HomeAssistant
import homeassistant.util.dt as dt_util import homeassistant.util.dt as dt_util
from .common import async_setup_gree, build_device_mock from .common import async_setup_gree, build_device_mock
@ -61,7 +62,7 @@ def mock_now():
return dt_util.utcnow() return dt_util.utcnow()
async def test_discovery_called_once(hass, discovery, device): async def test_discovery_called_once(hass: HomeAssistant, discovery, device) -> None:
"""Test discovery is only ever called once.""" """Test discovery is only ever called once."""
await async_setup_gree(hass) await async_setup_gree(hass)
assert discovery.call_count == 1 assert discovery.call_count == 1
@ -70,7 +71,7 @@ async def test_discovery_called_once(hass, discovery, device):
assert discovery.call_count == 1 assert discovery.call_count == 1
async def test_discovery_setup(hass, discovery, device): async def test_discovery_setup(hass: HomeAssistant, discovery, device) -> None:
"""Test setup of platform.""" """Test setup of platform."""
MockDevice1 = build_device_mock( MockDevice1 = build_device_mock(
name="fake-device-1", ipAddress="1.1.1.1", mac="aabbcc112233" name="fake-device-1", ipAddress="1.1.1.1", mac="aabbcc112233"
@ -88,7 +89,9 @@ async def test_discovery_setup(hass, discovery, device):
assert len(hass.states.async_all(DOMAIN)) == 2 assert len(hass.states.async_all(DOMAIN)) == 2
async def test_discovery_setup_connection_error(hass, discovery, device, mock_now): async def test_discovery_setup_connection_error(
hass: HomeAssistant, discovery, device, mock_now
) -> None:
"""Test gree integration is setup.""" """Test gree integration is setup."""
MockDevice1 = build_device_mock( MockDevice1 = build_device_mock(
name="fake-device-1", ipAddress="1.1.1.1", mac="aabbcc112233" name="fake-device-1", ipAddress="1.1.1.1", mac="aabbcc112233"
@ -108,7 +111,9 @@ async def test_discovery_setup_connection_error(hass, discovery, device, mock_no
assert state.state == STATE_UNAVAILABLE assert state.state == STATE_UNAVAILABLE
async def test_discovery_after_setup(hass, discovery, device, mock_now): async def test_discovery_after_setup(
hass: HomeAssistant, discovery, device, mock_now
) -> None:
"""Test gree devices don't change after multiple discoveries.""" """Test gree devices don't change after multiple discoveries."""
MockDevice1 = build_device_mock( MockDevice1 = build_device_mock(
name="fake-device-1", ipAddress="1.1.1.1", mac="aabbcc112233" name="fake-device-1", ipAddress="1.1.1.1", mac="aabbcc112233"
@ -142,7 +147,9 @@ async def test_discovery_after_setup(hass, discovery, device, mock_now):
assert len(hass.states.async_all(DOMAIN)) == 2 assert len(hass.states.async_all(DOMAIN)) == 2
async def test_discovery_add_device_after_setup(hass, discovery, device, mock_now): async def test_discovery_add_device_after_setup(
hass: HomeAssistant, discovery, device, mock_now
) -> None:
"""Test gree devices can be added after initial setup.""" """Test gree devices can be added after initial setup."""
MockDevice1 = build_device_mock( MockDevice1 = build_device_mock(
name="fake-device-1", ipAddress="1.1.1.1", mac="aabbcc112233" name="fake-device-1", ipAddress="1.1.1.1", mac="aabbcc112233"
@ -176,7 +183,9 @@ async def test_discovery_add_device_after_setup(hass, discovery, device, mock_no
assert len(hass.states.async_all(DOMAIN)) == 2 assert len(hass.states.async_all(DOMAIN)) == 2
async def test_discovery_device_bind_after_setup(hass, discovery, device, mock_now): async def test_discovery_device_bind_after_setup(
hass: HomeAssistant, discovery, device, mock_now
) -> None:
"""Test gree devices can be added after a late device bind.""" """Test gree devices can be added after a late device bind."""
MockDevice1 = build_device_mock( MockDevice1 = build_device_mock(
name="fake-device-1", ipAddress="1.1.1.1", mac="aabbcc112233" name="fake-device-1", ipAddress="1.1.1.1", mac="aabbcc112233"
@ -208,7 +217,7 @@ async def test_discovery_device_bind_after_setup(hass, discovery, device, mock_n
assert state.state != STATE_UNAVAILABLE assert state.state != STATE_UNAVAILABLE
async def test_update_connection_failure(hass, device, mock_now): async def test_update_connection_failure(hass: HomeAssistant, device, mock_now) -> None:
"""Testing update hvac connection failure exception.""" """Testing update hvac connection failure exception."""
device().update_state.side_effect = [ device().update_state.side_effect = [
DEFAULT_MOCK, DEFAULT_MOCK,
@ -244,7 +253,9 @@ async def test_update_connection_failure(hass, device, mock_now):
assert state.state == STATE_UNAVAILABLE assert state.state == STATE_UNAVAILABLE
async def test_update_connection_failure_recovery(hass, discovery, device, mock_now): async def test_update_connection_failure_recovery(
hass: HomeAssistant, discovery, device, mock_now
) -> None:
"""Testing update hvac connection failure recovery.""" """Testing update hvac connection failure recovery."""
device().update_state.side_effect = [ device().update_state.side_effect = [
DeviceTimeoutError, DeviceTimeoutError,
@ -275,7 +286,9 @@ async def test_update_connection_failure_recovery(hass, discovery, device, mock_
assert state.state != STATE_UNAVAILABLE assert state.state != STATE_UNAVAILABLE
async def test_update_unhandled_exception(hass, discovery, device, mock_now): async def test_update_unhandled_exception(
hass: HomeAssistant, discovery, device, mock_now
) -> None:
"""Testing update hvac connection unhandled response exception.""" """Testing update hvac connection unhandled response exception."""
device().update_state.side_effect = [DEFAULT_MOCK, Exception] device().update_state.side_effect = [DEFAULT_MOCK, Exception]
@ -295,7 +308,9 @@ async def test_update_unhandled_exception(hass, discovery, device, mock_now):
assert state.state == STATE_UNAVAILABLE assert state.state == STATE_UNAVAILABLE
async def test_send_command_device_timeout(hass, discovery, device, mock_now): async def test_send_command_device_timeout(
hass: HomeAssistant, discovery, device, mock_now
) -> None:
"""Test for sending power on command to the device with a device timeout.""" """Test for sending power on command to the device with a device timeout."""
await async_setup_gree(hass) await async_setup_gree(hass)
@ -324,7 +339,7 @@ async def test_send_command_device_timeout(hass, discovery, device, mock_now):
assert state.state != STATE_UNAVAILABLE assert state.state != STATE_UNAVAILABLE
async def test_send_power_on(hass, discovery, device, mock_now): async def test_send_power_on(hass: HomeAssistant, discovery, device, mock_now) -> None:
"""Test for sending power on command to the device.""" """Test for sending power on command to the device."""
await async_setup_gree(hass) await async_setup_gree(hass)
@ -340,7 +355,9 @@ async def test_send_power_on(hass, discovery, device, mock_now):
assert state.state == HVACMode.OFF assert state.state == HVACMode.OFF
async def test_send_power_off_device_timeout(hass, discovery, device, mock_now): async def test_send_power_off_device_timeout(
hass: HomeAssistant, discovery, device, mock_now
) -> None:
"""Test for sending power off command to the device with a device timeout.""" """Test for sending power off command to the device with a device timeout."""
device().push_state_update.side_effect = DeviceTimeoutError device().push_state_update.side_effect = DeviceTimeoutError
@ -362,7 +379,9 @@ async def test_send_power_off_device_timeout(hass, discovery, device, mock_now):
"units,temperature", "units,temperature",
[(UnitOfTemperature.CELSIUS, 26), (UnitOfTemperature.FAHRENHEIT, 74)], [(UnitOfTemperature.CELSIUS, 26), (UnitOfTemperature.FAHRENHEIT, 74)],
) )
async def test_send_target_temperature(hass, discovery, device, units, temperature): async def test_send_target_temperature(
hass: HomeAssistant, discovery, device, units, temperature
) -> None:
"""Test for sending target temperature command to the device.""" """Test for sending target temperature command to the device."""
hass.config.units.temperature_unit = units hass.config.units.temperature_unit = units
@ -400,8 +419,8 @@ async def test_send_target_temperature(hass, discovery, device, units, temperatu
[(UnitOfTemperature.CELSIUS, 25), (UnitOfTemperature.FAHRENHEIT, 74)], [(UnitOfTemperature.CELSIUS, 25), (UnitOfTemperature.FAHRENHEIT, 74)],
) )
async def test_send_target_temperature_device_timeout( async def test_send_target_temperature_device_timeout(
hass, discovery, device, units, temperature hass: HomeAssistant, discovery, device, units, temperature
): ) -> None:
"""Test for sending target temperature command to the device with a device timeout.""" """Test for sending target temperature command to the device with a device timeout."""
hass.config.units.temperature_unit = units hass.config.units.temperature_unit = units
if units == UnitOfTemperature.FAHRENHEIT: if units == UnitOfTemperature.FAHRENHEIT:
@ -429,7 +448,9 @@ async def test_send_target_temperature_device_timeout(
"units,temperature", "units,temperature",
[(UnitOfTemperature.CELSIUS, 25), (UnitOfTemperature.FAHRENHEIT, 74)], [(UnitOfTemperature.CELSIUS, 25), (UnitOfTemperature.FAHRENHEIT, 74)],
) )
async def test_update_target_temperature(hass, discovery, device, units, temperature): async def test_update_target_temperature(
hass: HomeAssistant, discovery, device, units, temperature
) -> None:
"""Test for updating target temperature from the device.""" """Test for updating target temperature from the device."""
hass.config.units.temperature_unit = units hass.config.units.temperature_unit = units
if units == UnitOfTemperature.FAHRENHEIT: if units == UnitOfTemperature.FAHRENHEIT:
@ -449,7 +470,9 @@ async def test_update_target_temperature(hass, discovery, device, units, tempera
@pytest.mark.parametrize( @pytest.mark.parametrize(
"preset", (PRESET_AWAY, PRESET_ECO, PRESET_SLEEP, PRESET_BOOST, PRESET_NONE) "preset", (PRESET_AWAY, PRESET_ECO, PRESET_SLEEP, PRESET_BOOST, PRESET_NONE)
) )
async def test_send_preset_mode(hass, discovery, device, mock_now, preset): async def test_send_preset_mode(
hass: HomeAssistant, discovery, device, mock_now, preset
) -> None:
"""Test for sending preset mode command to the device.""" """Test for sending preset mode command to the device."""
await async_setup_gree(hass) await async_setup_gree(hass)
@ -465,7 +488,9 @@ async def test_send_preset_mode(hass, discovery, device, mock_now, preset):
assert state.attributes.get(ATTR_PRESET_MODE) == preset assert state.attributes.get(ATTR_PRESET_MODE) == preset
async def test_send_invalid_preset_mode(hass, discovery, device, mock_now): async def test_send_invalid_preset_mode(
hass: HomeAssistant, discovery, device, mock_now
) -> None:
"""Test for sending preset mode command to the device.""" """Test for sending preset mode command to the device."""
await async_setup_gree(hass) await async_setup_gree(hass)
@ -486,8 +511,8 @@ async def test_send_invalid_preset_mode(hass, discovery, device, mock_now):
"preset", (PRESET_AWAY, PRESET_ECO, PRESET_SLEEP, PRESET_BOOST, PRESET_NONE) "preset", (PRESET_AWAY, PRESET_ECO, PRESET_SLEEP, PRESET_BOOST, PRESET_NONE)
) )
async def test_send_preset_mode_device_timeout( async def test_send_preset_mode_device_timeout(
hass, discovery, device, mock_now, preset hass: HomeAssistant, discovery, device, mock_now, preset
): ) -> None:
"""Test for sending preset mode command to the device with a device timeout.""" """Test for sending preset mode command to the device with a device timeout."""
device().push_state_update.side_effect = DeviceTimeoutError device().push_state_update.side_effect = DeviceTimeoutError
@ -508,7 +533,9 @@ async def test_send_preset_mode_device_timeout(
@pytest.mark.parametrize( @pytest.mark.parametrize(
"preset", (PRESET_AWAY, PRESET_ECO, PRESET_SLEEP, PRESET_BOOST, PRESET_NONE) "preset", (PRESET_AWAY, PRESET_ECO, PRESET_SLEEP, PRESET_BOOST, PRESET_NONE)
) )
async def test_update_preset_mode(hass, discovery, device, mock_now, preset): async def test_update_preset_mode(
hass: HomeAssistant, discovery, device, mock_now, preset
) -> None:
"""Test for updating preset mode from the device.""" """Test for updating preset mode from the device."""
device().steady_heat = preset == PRESET_AWAY device().steady_heat = preset == PRESET_AWAY
device().power_save = preset == PRESET_ECO device().power_save = preset == PRESET_ECO
@ -533,7 +560,9 @@ async def test_update_preset_mode(hass, discovery, device, mock_now, preset):
HVACMode.HEAT, HVACMode.HEAT,
), ),
) )
async def test_send_hvac_mode(hass, discovery, device, mock_now, hvac_mode): async def test_send_hvac_mode(
hass: HomeAssistant, discovery, device, mock_now, hvac_mode
) -> None:
"""Test for sending hvac mode command to the device.""" """Test for sending hvac mode command to the device."""
await async_setup_gree(hass) await async_setup_gree(hass)
@ -554,8 +583,8 @@ async def test_send_hvac_mode(hass, discovery, device, mock_now, hvac_mode):
(HVACMode.AUTO, HVACMode.COOL, HVACMode.DRY, HVACMode.FAN_ONLY, HVACMode.HEAT), (HVACMode.AUTO, HVACMode.COOL, HVACMode.DRY, HVACMode.FAN_ONLY, HVACMode.HEAT),
) )
async def test_send_hvac_mode_device_timeout( async def test_send_hvac_mode_device_timeout(
hass, discovery, device, mock_now, hvac_mode hass: HomeAssistant, discovery, device, mock_now, hvac_mode
): ) -> None:
"""Test for sending hvac mode command to the device with a device timeout.""" """Test for sending hvac mode command to the device with a device timeout."""
device().push_state_update.side_effect = DeviceTimeoutError device().push_state_update.side_effect = DeviceTimeoutError
@ -584,7 +613,9 @@ async def test_send_hvac_mode_device_timeout(
HVACMode.HEAT, HVACMode.HEAT,
), ),
) )
async def test_update_hvac_mode(hass, discovery, device, mock_now, hvac_mode): async def test_update_hvac_mode(
hass: HomeAssistant, discovery, device, mock_now, hvac_mode
) -> None:
"""Test for updating hvac mode from the device.""" """Test for updating hvac mode from the device."""
device().power = hvac_mode != HVACMode.OFF device().power = hvac_mode != HVACMode.OFF
device().mode = HVAC_MODES_REVERSE.get(hvac_mode) device().mode = HVAC_MODES_REVERSE.get(hvac_mode)
@ -600,7 +631,9 @@ async def test_update_hvac_mode(hass, discovery, device, mock_now, hvac_mode):
"fan_mode", "fan_mode",
(FAN_AUTO, FAN_LOW, FAN_MEDIUM_LOW, FAN_MEDIUM, FAN_MEDIUM_HIGH, FAN_HIGH), (FAN_AUTO, FAN_LOW, FAN_MEDIUM_LOW, FAN_MEDIUM, FAN_MEDIUM_HIGH, FAN_HIGH),
) )
async def test_send_fan_mode(hass, discovery, device, mock_now, fan_mode): async def test_send_fan_mode(
hass: HomeAssistant, discovery, device, mock_now, fan_mode
) -> None:
"""Test for sending fan mode command to the device.""" """Test for sending fan mode command to the device."""
await async_setup_gree(hass) await async_setup_gree(hass)
@ -616,7 +649,9 @@ async def test_send_fan_mode(hass, discovery, device, mock_now, fan_mode):
assert state.attributes.get(ATTR_FAN_MODE) == fan_mode assert state.attributes.get(ATTR_FAN_MODE) == fan_mode
async def test_send_invalid_fan_mode(hass, discovery, device, mock_now): async def test_send_invalid_fan_mode(
hass: HomeAssistant, discovery, device, mock_now
) -> None:
"""Test for sending fan mode command to the device.""" """Test for sending fan mode command to the device."""
await async_setup_gree(hass) await async_setup_gree(hass)
@ -638,8 +673,8 @@ async def test_send_invalid_fan_mode(hass, discovery, device, mock_now):
(FAN_AUTO, FAN_LOW, FAN_MEDIUM_LOW, FAN_MEDIUM, FAN_MEDIUM_HIGH, FAN_HIGH), (FAN_AUTO, FAN_LOW, FAN_MEDIUM_LOW, FAN_MEDIUM, FAN_MEDIUM_HIGH, FAN_HIGH),
) )
async def test_send_fan_mode_device_timeout( async def test_send_fan_mode_device_timeout(
hass, discovery, device, mock_now, fan_mode hass: HomeAssistant, discovery, device, mock_now, fan_mode
): ) -> None:
"""Test for sending fan mode command to the device with a device timeout.""" """Test for sending fan mode command to the device with a device timeout."""
device().push_state_update.side_effect = DeviceTimeoutError device().push_state_update.side_effect = DeviceTimeoutError
@ -661,7 +696,9 @@ async def test_send_fan_mode_device_timeout(
"fan_mode", "fan_mode",
(FAN_AUTO, FAN_LOW, FAN_MEDIUM_LOW, FAN_MEDIUM, FAN_MEDIUM_HIGH, FAN_HIGH), (FAN_AUTO, FAN_LOW, FAN_MEDIUM_LOW, FAN_MEDIUM, FAN_MEDIUM_HIGH, FAN_HIGH),
) )
async def test_update_fan_mode(hass, discovery, device, mock_now, fan_mode): async def test_update_fan_mode(
hass: HomeAssistant, discovery, device, mock_now, fan_mode
) -> None:
"""Test for updating fan mode from the device.""" """Test for updating fan mode from the device."""
device().fan_speed = FAN_MODES_REVERSE.get(fan_mode) device().fan_speed = FAN_MODES_REVERSE.get(fan_mode)
@ -675,7 +712,9 @@ async def test_update_fan_mode(hass, discovery, device, mock_now, fan_mode):
@pytest.mark.parametrize( @pytest.mark.parametrize(
"swing_mode", (SWING_OFF, SWING_BOTH, SWING_VERTICAL, SWING_HORIZONTAL) "swing_mode", (SWING_OFF, SWING_BOTH, SWING_VERTICAL, SWING_HORIZONTAL)
) )
async def test_send_swing_mode(hass, discovery, device, mock_now, swing_mode): async def test_send_swing_mode(
hass: HomeAssistant, discovery, device, mock_now, swing_mode
) -> None:
"""Test for sending swing mode command to the device.""" """Test for sending swing mode command to the device."""
await async_setup_gree(hass) await async_setup_gree(hass)
@ -691,7 +730,9 @@ async def test_send_swing_mode(hass, discovery, device, mock_now, swing_mode):
assert state.attributes.get(ATTR_SWING_MODE) == swing_mode assert state.attributes.get(ATTR_SWING_MODE) == swing_mode
async def test_send_invalid_swing_mode(hass, discovery, device, mock_now): async def test_send_invalid_swing_mode(
hass: HomeAssistant, discovery, device, mock_now
) -> None:
"""Test for sending swing mode command to the device.""" """Test for sending swing mode command to the device."""
await async_setup_gree(hass) await async_setup_gree(hass)
@ -712,8 +753,8 @@ async def test_send_invalid_swing_mode(hass, discovery, device, mock_now):
"swing_mode", (SWING_OFF, SWING_BOTH, SWING_VERTICAL, SWING_HORIZONTAL) "swing_mode", (SWING_OFF, SWING_BOTH, SWING_VERTICAL, SWING_HORIZONTAL)
) )
async def test_send_swing_mode_device_timeout( async def test_send_swing_mode_device_timeout(
hass, discovery, device, mock_now, swing_mode hass: HomeAssistant, discovery, device, mock_now, swing_mode
): ) -> None:
"""Test for sending swing mode command to the device with a device timeout.""" """Test for sending swing mode command to the device with a device timeout."""
device().push_state_update.side_effect = DeviceTimeoutError device().push_state_update.side_effect = DeviceTimeoutError
@ -734,7 +775,9 @@ async def test_send_swing_mode_device_timeout(
@pytest.mark.parametrize( @pytest.mark.parametrize(
"swing_mode", (SWING_OFF, SWING_BOTH, SWING_VERTICAL, SWING_HORIZONTAL) "swing_mode", (SWING_OFF, SWING_BOTH, SWING_VERTICAL, SWING_HORIZONTAL)
) )
async def test_update_swing_mode(hass, discovery, device, mock_now, swing_mode): async def test_update_swing_mode(
hass: HomeAssistant, discovery, device, mock_now, swing_mode
) -> None:
"""Test for updating swing mode from the device.""" """Test for updating swing mode from the device."""
device().horizontal_swing = ( device().horizontal_swing = (
HorizontalSwing.FullSwing HorizontalSwing.FullSwing
@ -754,14 +797,16 @@ async def test_update_swing_mode(hass, discovery, device, mock_now, swing_mode):
assert state.attributes.get(ATTR_SWING_MODE) == swing_mode assert state.attributes.get(ATTR_SWING_MODE) == swing_mode
async def test_name(hass, discovery, device): async def test_name(hass: HomeAssistant, discovery, device) -> None:
"""Test for name property.""" """Test for name property."""
await async_setup_gree(hass) await async_setup_gree(hass)
state = hass.states.get(ENTITY_ID) state = hass.states.get(ENTITY_ID)
assert state.attributes[ATTR_FRIENDLY_NAME] == "fake-device-1" assert state.attributes[ATTR_FRIENDLY_NAME] == "fake-device-1"
async def test_supported_features_with_turnon(hass, discovery, device): async def test_supported_features_with_turnon(
hass: HomeAssistant, discovery, device
) -> None:
"""Test for supported_features property.""" """Test for supported_features property."""
await async_setup_gree(hass) await async_setup_gree(hass)
state = hass.states.get(ENTITY_ID) state = hass.states.get(ENTITY_ID)

View file

@ -13,6 +13,7 @@ from homeassistant.const import (
STATE_OFF, STATE_OFF,
STATE_ON, STATE_ON,
) )
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
@ -39,7 +40,7 @@ async def async_setup_gree(hass):
ENTITY_ID_XFAN, ENTITY_ID_XFAN,
], ],
) )
async def test_send_switch_on(hass, entity): async def test_send_switch_on(hass: HomeAssistant, entity) -> None:
"""Test for sending power on command to the device.""" """Test for sending power on command to the device."""
await async_setup_gree(hass) await async_setup_gree(hass)
@ -64,7 +65,9 @@ async def test_send_switch_on(hass, entity):
ENTITY_ID_XFAN, ENTITY_ID_XFAN,
], ],
) )
async def test_send_switch_on_device_timeout(hass, device, entity): async def test_send_switch_on_device_timeout(
hass: HomeAssistant, device, entity
) -> None:
"""Test for sending power on command to the device with a device timeout.""" """Test for sending power on command to the device with a device timeout."""
device().push_state_update.side_effect = DeviceTimeoutError device().push_state_update.side_effect = DeviceTimeoutError
@ -91,7 +94,7 @@ async def test_send_switch_on_device_timeout(hass, device, entity):
ENTITY_ID_XFAN, ENTITY_ID_XFAN,
], ],
) )
async def test_send_switch_off(hass, entity): async def test_send_switch_off(hass: HomeAssistant, entity) -> None:
"""Test for sending power on command to the device.""" """Test for sending power on command to the device."""
await async_setup_gree(hass) await async_setup_gree(hass)
@ -116,7 +119,7 @@ async def test_send_switch_off(hass, entity):
ENTITY_ID_XFAN, ENTITY_ID_XFAN,
], ],
) )
async def test_send_switch_toggle(hass, entity): async def test_send_switch_toggle(hass: HomeAssistant, entity) -> None:
"""Test for sending power on command to the device.""" """Test for sending power on command to the device."""
await async_setup_gree(hass) await async_setup_gree(hass)
@ -166,7 +169,7 @@ async def test_send_switch_toggle(hass, entity):
(ENTITY_ID_XFAN, "XFan"), (ENTITY_ID_XFAN, "XFan"),
], ],
) )
async def test_entity_name(hass, entity, name): async def test_entity_name(hass: HomeAssistant, entity, name) -> None:
"""Test for name property.""" """Test for name property."""
await async_setup_gree(hass) await async_setup_gree(hass)
state = hass.states.get(entity) state = hass.states.get(entity)

View file

@ -100,7 +100,7 @@ async def setup_comp(hass, config_count):
@pytest.mark.parametrize("config_count", [(CONFIG_ATTRIBUTES, 1)]) @pytest.mark.parametrize("config_count", [(CONFIG_ATTRIBUTES, 1)])
async def test_state(hass, setup_comp): async def test_state(hass: HomeAssistant, setup_comp) -> None:
"""Test handling of state. """Test handling of state.
The group state is unknown if all group members are unknown or unavailable. The group state is unknown if all group members are unknown or unavailable.
@ -249,7 +249,7 @@ async def test_state(hass, setup_comp):
@pytest.mark.parametrize("config_count", [(CONFIG_ATTRIBUTES, 1)]) @pytest.mark.parametrize("config_count", [(CONFIG_ATTRIBUTES, 1)])
async def test_attributes(hass, setup_comp): async def test_attributes(hass: HomeAssistant, setup_comp) -> None:
"""Test handling of state attributes.""" """Test handling of state attributes."""
state = hass.states.get(COVER_GROUP) state = hass.states.get(COVER_GROUP)
assert state.state == STATE_UNAVAILABLE assert state.state == STATE_UNAVAILABLE
@ -413,7 +413,9 @@ async def test_attributes(hass, setup_comp):
@pytest.mark.parametrize("config_count", [(CONFIG_TILT_ONLY, 2)]) @pytest.mark.parametrize("config_count", [(CONFIG_TILT_ONLY, 2)])
async def test_cover_that_only_supports_tilt_removed(hass, setup_comp): async def test_cover_that_only_supports_tilt_removed(
hass: HomeAssistant, setup_comp
) -> None:
"""Test removing a cover that support tilt.""" """Test removing a cover that support tilt."""
hass.states.async_set( hass.states.async_set(
DEMO_COVER_TILT, DEMO_COVER_TILT,
@ -441,7 +443,7 @@ async def test_cover_that_only_supports_tilt_removed(hass, setup_comp):
@pytest.mark.parametrize("config_count", [(CONFIG_ALL, 2)]) @pytest.mark.parametrize("config_count", [(CONFIG_ALL, 2)])
async def test_open_covers(hass, setup_comp): async def test_open_covers(hass: HomeAssistant, setup_comp) -> None:
"""Test open cover function.""" """Test open cover function."""
await hass.services.async_call( await hass.services.async_call(
DOMAIN, SERVICE_OPEN_COVER, {ATTR_ENTITY_ID: COVER_GROUP}, blocking=True DOMAIN, SERVICE_OPEN_COVER, {ATTR_ENTITY_ID: COVER_GROUP}, blocking=True
@ -462,7 +464,7 @@ async def test_open_covers(hass, setup_comp):
@pytest.mark.parametrize("config_count", [(CONFIG_ALL, 2)]) @pytest.mark.parametrize("config_count", [(CONFIG_ALL, 2)])
async def test_close_covers(hass, setup_comp): async def test_close_covers(hass: HomeAssistant, setup_comp) -> None:
"""Test close cover function.""" """Test close cover function."""
await hass.services.async_call( await hass.services.async_call(
DOMAIN, SERVICE_CLOSE_COVER, {ATTR_ENTITY_ID: COVER_GROUP}, blocking=True DOMAIN, SERVICE_CLOSE_COVER, {ATTR_ENTITY_ID: COVER_GROUP}, blocking=True
@ -483,7 +485,7 @@ async def test_close_covers(hass, setup_comp):
@pytest.mark.parametrize("config_count", [(CONFIG_ALL, 2)]) @pytest.mark.parametrize("config_count", [(CONFIG_ALL, 2)])
async def test_toggle_covers(hass, setup_comp): async def test_toggle_covers(hass: HomeAssistant, setup_comp) -> None:
"""Test toggle cover function.""" """Test toggle cover function."""
# Start covers in open state # Start covers in open state
await hass.services.async_call( await hass.services.async_call(
@ -533,7 +535,7 @@ async def test_toggle_covers(hass, setup_comp):
@pytest.mark.parametrize("config_count", [(CONFIG_ALL, 2)]) @pytest.mark.parametrize("config_count", [(CONFIG_ALL, 2)])
async def test_stop_covers(hass, setup_comp): async def test_stop_covers(hass: HomeAssistant, setup_comp) -> None:
"""Test stop cover function.""" """Test stop cover function."""
await hass.services.async_call( await hass.services.async_call(
DOMAIN, SERVICE_OPEN_COVER, {ATTR_ENTITY_ID: COVER_GROUP}, blocking=True DOMAIN, SERVICE_OPEN_COVER, {ATTR_ENTITY_ID: COVER_GROUP}, blocking=True
@ -559,7 +561,7 @@ async def test_stop_covers(hass, setup_comp):
@pytest.mark.parametrize("config_count", [(CONFIG_ALL, 2)]) @pytest.mark.parametrize("config_count", [(CONFIG_ALL, 2)])
async def test_set_cover_position(hass, setup_comp): async def test_set_cover_position(hass: HomeAssistant, setup_comp) -> None:
"""Test set cover position function.""" """Test set cover position function."""
await hass.services.async_call( await hass.services.async_call(
DOMAIN, DOMAIN,
@ -582,7 +584,7 @@ async def test_set_cover_position(hass, setup_comp):
@pytest.mark.parametrize("config_count", [(CONFIG_ALL, 2)]) @pytest.mark.parametrize("config_count", [(CONFIG_ALL, 2)])
async def test_open_tilts(hass, setup_comp): async def test_open_tilts(hass: HomeAssistant, setup_comp) -> None:
"""Test open tilt function.""" """Test open tilt function."""
await hass.services.async_call( await hass.services.async_call(
DOMAIN, SERVICE_OPEN_COVER_TILT, {ATTR_ENTITY_ID: COVER_GROUP}, blocking=True DOMAIN, SERVICE_OPEN_COVER_TILT, {ATTR_ENTITY_ID: COVER_GROUP}, blocking=True
@ -602,7 +604,7 @@ async def test_open_tilts(hass, setup_comp):
@pytest.mark.parametrize("config_count", [(CONFIG_ALL, 2)]) @pytest.mark.parametrize("config_count", [(CONFIG_ALL, 2)])
async def test_close_tilts(hass, setup_comp): async def test_close_tilts(hass: HomeAssistant, setup_comp) -> None:
"""Test close tilt function.""" """Test close tilt function."""
await hass.services.async_call( await hass.services.async_call(
DOMAIN, SERVICE_CLOSE_COVER_TILT, {ATTR_ENTITY_ID: COVER_GROUP}, blocking=True DOMAIN, SERVICE_CLOSE_COVER_TILT, {ATTR_ENTITY_ID: COVER_GROUP}, blocking=True
@ -620,7 +622,7 @@ async def test_close_tilts(hass, setup_comp):
@pytest.mark.parametrize("config_count", [(CONFIG_ALL, 2)]) @pytest.mark.parametrize("config_count", [(CONFIG_ALL, 2)])
async def test_toggle_tilts(hass, setup_comp): async def test_toggle_tilts(hass: HomeAssistant, setup_comp) -> None:
"""Test toggle tilt function.""" """Test toggle tilt function."""
# Start tilted open # Start tilted open
await hass.services.async_call( await hass.services.async_call(
@ -673,7 +675,7 @@ async def test_toggle_tilts(hass, setup_comp):
@pytest.mark.parametrize("config_count", [(CONFIG_ALL, 2)]) @pytest.mark.parametrize("config_count", [(CONFIG_ALL, 2)])
async def test_stop_tilts(hass, setup_comp): async def test_stop_tilts(hass: HomeAssistant, setup_comp) -> None:
"""Test stop tilts function.""" """Test stop tilts function."""
await hass.services.async_call( await hass.services.async_call(
DOMAIN, SERVICE_OPEN_COVER_TILT, {ATTR_ENTITY_ID: COVER_GROUP}, blocking=True DOMAIN, SERVICE_OPEN_COVER_TILT, {ATTR_ENTITY_ID: COVER_GROUP}, blocking=True
@ -697,7 +699,7 @@ async def test_stop_tilts(hass, setup_comp):
@pytest.mark.parametrize("config_count", [(CONFIG_ALL, 2)]) @pytest.mark.parametrize("config_count", [(CONFIG_ALL, 2)])
async def test_set_tilt_positions(hass, setup_comp): async def test_set_tilt_positions(hass: HomeAssistant, setup_comp) -> None:
"""Test set tilt position function.""" """Test set tilt position function."""
await hass.services.async_call( await hass.services.async_call(
DOMAIN, DOMAIN,
@ -718,7 +720,7 @@ async def test_set_tilt_positions(hass, setup_comp):
@pytest.mark.parametrize("config_count", [(CONFIG_POS, 2)]) @pytest.mark.parametrize("config_count", [(CONFIG_POS, 2)])
async def test_is_opening_closing(hass, setup_comp): async def test_is_opening_closing(hass: HomeAssistant, setup_comp) -> None:
"""Test is_opening property.""" """Test is_opening property."""
await hass.services.async_call( await hass.services.async_call(
DOMAIN, SERVICE_OPEN_COVER, {ATTR_ENTITY_ID: COVER_GROUP}, blocking=True DOMAIN, SERVICE_OPEN_COVER, {ATTR_ENTITY_ID: COVER_GROUP}, blocking=True

View file

@ -112,7 +112,7 @@ async def setup_comp(hass, config_count):
@pytest.mark.parametrize("config_count", [(CONFIG_ATTRIBUTES, 1)]) @pytest.mark.parametrize("config_count", [(CONFIG_ATTRIBUTES, 1)])
async def test_state(hass, setup_comp): async def test_state(hass: HomeAssistant, setup_comp) -> None:
"""Test handling of state. """Test handling of state.
The group state is on if at least one group member is on. The group state is on if at least one group member is on.
@ -208,7 +208,7 @@ async def test_state(hass, setup_comp):
@pytest.mark.parametrize("config_count", [(CONFIG_ATTRIBUTES, 1)]) @pytest.mark.parametrize("config_count", [(CONFIG_ATTRIBUTES, 1)])
async def test_attributes(hass, setup_comp): async def test_attributes(hass: HomeAssistant, setup_comp) -> None:
"""Test handling of state attributes.""" """Test handling of state attributes."""
state = hass.states.get(FAN_GROUP) state = hass.states.get(FAN_GROUP)
assert state.state == STATE_UNAVAILABLE assert state.state == STATE_UNAVAILABLE
@ -269,7 +269,7 @@ async def test_attributes(hass, setup_comp):
@pytest.mark.parametrize("config_count", [(CONFIG_FULL_SUPPORT, 2)]) @pytest.mark.parametrize("config_count", [(CONFIG_FULL_SUPPORT, 2)])
async def test_direction_oscillating(hass, setup_comp): async def test_direction_oscillating(hass: HomeAssistant, setup_comp) -> None:
"""Test handling of direction and oscillating attributes.""" """Test handling of direction and oscillating attributes."""
hass.states.async_set( hass.states.async_set(
@ -385,7 +385,7 @@ async def test_direction_oscillating(hass, setup_comp):
@pytest.mark.parametrize("config_count", [(CONFIG_MISSING_FAN, 2)]) @pytest.mark.parametrize("config_count", [(CONFIG_MISSING_FAN, 2)])
async def test_state_missing_entity_id(hass, setup_comp): async def test_state_missing_entity_id(hass: HomeAssistant, setup_comp) -> None:
"""Test we can still setup with a missing entity id.""" """Test we can still setup with a missing entity id."""
state = hass.states.get(FAN_GROUP) state = hass.states.get(FAN_GROUP)
await hass.async_block_till_done() await hass.async_block_till_done()
@ -405,7 +405,7 @@ async def test_setup_before_started(hass: HomeAssistant) -> None:
@pytest.mark.parametrize("config_count", [(CONFIG_MISSING_FAN, 2)]) @pytest.mark.parametrize("config_count", [(CONFIG_MISSING_FAN, 2)])
async def test_reload(hass, setup_comp): async def test_reload(hass: HomeAssistant, setup_comp) -> None:
"""Test the ability to reload fans.""" """Test the ability to reload fans."""
await hass.async_block_till_done() await hass.async_block_till_done()
await hass.async_start() await hass.async_start()
@ -428,7 +428,7 @@ async def test_reload(hass, setup_comp):
@pytest.mark.parametrize("config_count", [(CONFIG_FULL_SUPPORT, 2)]) @pytest.mark.parametrize("config_count", [(CONFIG_FULL_SUPPORT, 2)])
async def test_service_calls(hass, setup_comp): async def test_service_calls(hass: HomeAssistant, setup_comp) -> None:
"""Test calling services.""" """Test calling services."""
await hass.services.async_call( await hass.services.async_call(
DOMAIN, SERVICE_TURN_ON, {ATTR_ENTITY_ID: FAN_GROUP}, blocking=True DOMAIN, SERVICE_TURN_ON, {ATTR_ENTITY_ID: FAN_GROUP}, blocking=True

View file

@ -842,7 +842,7 @@ async def test_group_mixed_domains_off(hass: HomeAssistant) -> None:
(("locked", "locked", "locked"), "locked"), (("locked", "locked", "locked"), "locked"),
], ],
) )
async def test_group_locks(hass, states, group_state): async def test_group_locks(hass: HomeAssistant, states, group_state) -> None:
"""Test group of locks.""" """Test group of locks."""
hass.states.async_set("lock.one", states[0]) hass.states.async_set("lock.one", states[0])
hass.states.async_set("lock.two", states[1]) hass.states.async_set("lock.two", states[1])

View file

@ -263,7 +263,9 @@ async def test_state_reporting_all(hass: HomeAssistant) -> None:
assert hass.states.get("light.light_group").state == STATE_UNAVAILABLE assert hass.states.get("light.light_group").state == STATE_UNAVAILABLE
async def test_brightness(hass, enable_custom_integrations): async def test_brightness(
hass: HomeAssistant, enable_custom_integrations: None
) -> None:
"""Test brightness reporting.""" """Test brightness reporting."""
platform = getattr(hass.components, "test.light") platform = getattr(hass.components, "test.light")
platform.init(empty=True) platform.init(empty=True)
@ -333,7 +335,7 @@ async def test_brightness(hass, enable_custom_integrations):
assert state.attributes[ATTR_SUPPORTED_COLOR_MODES] == ["brightness"] assert state.attributes[ATTR_SUPPORTED_COLOR_MODES] == ["brightness"]
async def test_color_hs(hass, enable_custom_integrations): async def test_color_hs(hass: HomeAssistant, enable_custom_integrations: None) -> None:
"""Test hs color reporting.""" """Test hs color reporting."""
platform = getattr(hass.components, "test.light") platform = getattr(hass.components, "test.light")
platform.init(empty=True) platform.init(empty=True)
@ -402,7 +404,7 @@ async def test_color_hs(hass, enable_custom_integrations):
assert state.attributes[ATTR_SUPPORTED_FEATURES] == 0 assert state.attributes[ATTR_SUPPORTED_FEATURES] == 0
async def test_color_rgb(hass, enable_custom_integrations): async def test_color_rgb(hass: HomeAssistant, enable_custom_integrations: None) -> None:
"""Test rgbw color reporting.""" """Test rgbw color reporting."""
platform = getattr(hass.components, "test.light") platform = getattr(hass.components, "test.light")
platform.init(empty=True) platform.init(empty=True)
@ -474,7 +476,9 @@ async def test_color_rgb(hass, enable_custom_integrations):
assert state.attributes[ATTR_SUPPORTED_FEATURES] == 0 assert state.attributes[ATTR_SUPPORTED_FEATURES] == 0
async def test_color_rgbw(hass, enable_custom_integrations): async def test_color_rgbw(
hass: HomeAssistant, enable_custom_integrations: None
) -> None:
"""Test rgbw color reporting.""" """Test rgbw color reporting."""
platform = getattr(hass.components, "test.light") platform = getattr(hass.components, "test.light")
platform.init(empty=True) platform.init(empty=True)
@ -546,7 +550,9 @@ async def test_color_rgbw(hass, enable_custom_integrations):
assert state.attributes[ATTR_SUPPORTED_FEATURES] == 0 assert state.attributes[ATTR_SUPPORTED_FEATURES] == 0
async def test_color_rgbww(hass, enable_custom_integrations): async def test_color_rgbww(
hass: HomeAssistant, enable_custom_integrations: None
) -> None:
"""Test rgbww color reporting.""" """Test rgbww color reporting."""
platform = getattr(hass.components, "test.light") platform = getattr(hass.components, "test.light")
platform.init(empty=True) platform.init(empty=True)
@ -618,7 +624,7 @@ async def test_color_rgbww(hass, enable_custom_integrations):
assert state.attributes[ATTR_SUPPORTED_FEATURES] == 0 assert state.attributes[ATTR_SUPPORTED_FEATURES] == 0
async def test_white(hass, enable_custom_integrations): async def test_white(hass: HomeAssistant, enable_custom_integrations: None) -> None:
"""Test white reporting.""" """Test white reporting."""
platform = getattr(hass.components, "test.light") platform = getattr(hass.components, "test.light")
platform.init(empty=True) platform.init(empty=True)
@ -675,7 +681,9 @@ async def test_white(hass, enable_custom_integrations):
assert state.attributes[ATTR_SUPPORTED_COLOR_MODES] == ["hs", "white"] assert state.attributes[ATTR_SUPPORTED_COLOR_MODES] == ["hs", "white"]
async def test_color_temp(hass, enable_custom_integrations): async def test_color_temp(
hass: HomeAssistant, enable_custom_integrations: None
) -> None:
"""Test color temp reporting.""" """Test color temp reporting."""
platform = getattr(hass.components, "test.light") platform = getattr(hass.components, "test.light")
platform.init(empty=True) platform.init(empty=True)
@ -743,7 +751,9 @@ async def test_color_temp(hass, enable_custom_integrations):
assert state.attributes[ATTR_SUPPORTED_COLOR_MODES] == ["color_temp"] assert state.attributes[ATTR_SUPPORTED_COLOR_MODES] == ["color_temp"]
async def test_emulated_color_temp_group(hass, enable_custom_integrations): async def test_emulated_color_temp_group(
hass: HomeAssistant, enable_custom_integrations: None
) -> None:
"""Test emulated color temperature in a group.""" """Test emulated color temperature in a group."""
platform = getattr(hass.components, "test.light") platform = getattr(hass.components, "test.light")
platform.init(empty=True) platform.init(empty=True)
@ -807,7 +817,9 @@ async def test_emulated_color_temp_group(hass, enable_custom_integrations):
assert state.attributes[ATTR_HS_COLOR] == (27.001, 19.243) assert state.attributes[ATTR_HS_COLOR] == (27.001, 19.243)
async def test_min_max_mireds(hass, enable_custom_integrations): async def test_min_max_mireds(
hass: HomeAssistant, enable_custom_integrations: None
) -> None:
"""Test min/max mireds reporting. """Test min/max mireds reporting.
min/max mireds is reported both when light is on and off min/max mireds is reported both when light is on and off
@ -985,7 +997,9 @@ async def test_effect(hass: HomeAssistant) -> None:
assert state.attributes[ATTR_EFFECT] == "Random" assert state.attributes[ATTR_EFFECT] == "Random"
async def test_supported_color_modes(hass, enable_custom_integrations): async def test_supported_color_modes(
hass: HomeAssistant, enable_custom_integrations: None
) -> None:
"""Test supported_color_modes reporting.""" """Test supported_color_modes reporting."""
platform = getattr(hass.components, "test.light") platform = getattr(hass.components, "test.light")
platform.init(empty=True) platform.init(empty=True)
@ -1031,7 +1045,9 @@ async def test_supported_color_modes(hass, enable_custom_integrations):
} }
async def test_color_mode(hass, enable_custom_integrations): async def test_color_mode(
hass: HomeAssistant, enable_custom_integrations: None
) -> None:
"""Test color_mode reporting.""" """Test color_mode reporting."""
platform = getattr(hass.components, "test.light") platform = getattr(hass.components, "test.light")
platform.init(empty=True) platform.init(empty=True)
@ -1104,7 +1120,9 @@ async def test_color_mode(hass, enable_custom_integrations):
assert state.attributes[ATTR_COLOR_MODE] == ColorMode.HS assert state.attributes[ATTR_COLOR_MODE] == ColorMode.HS
async def test_color_mode2(hass, enable_custom_integrations): async def test_color_mode2(
hass: HomeAssistant, enable_custom_integrations: None
) -> None:
"""Test onoff color_mode and brightness are given lowest priority.""" """Test onoff color_mode and brightness are given lowest priority."""
platform = getattr(hass.components, "test.light") platform = getattr(hass.components, "test.light")
platform.init(empty=True) platform.init(empty=True)
@ -1224,7 +1242,9 @@ async def test_supported_features(hass: HomeAssistant) -> None:
@pytest.mark.parametrize("supported_color_modes", [ColorMode.HS, ColorMode.RGB]) @pytest.mark.parametrize("supported_color_modes", [ColorMode.HS, ColorMode.RGB])
async def test_service_calls(hass, enable_custom_integrations, supported_color_modes): async def test_service_calls(
hass: HomeAssistant, enable_custom_integrations: None, supported_color_modes
) -> None:
"""Test service calls.""" """Test service calls."""
platform = getattr(hass.components, "test.light") platform = getattr(hass.components, "test.light")
platform.init(empty=True) platform.init(empty=True)

View file

@ -5,10 +5,11 @@ from datetime import timedelta
from homeassistant.components import group from homeassistant.components import group
from homeassistant.components.group import ATTR_AUTO, ATTR_ENTITY_ID, ATTR_ORDER from homeassistant.components.group import ATTR_AUTO, ATTR_ENTITY_ID, ATTR_ORDER
from homeassistant.components.recorder import Recorder
from homeassistant.components.recorder.db_schema import StateAttributes, States from homeassistant.components.recorder.db_schema import StateAttributes, States
from homeassistant.components.recorder.util import session_scope from homeassistant.components.recorder.util import session_scope
from homeassistant.const import ATTR_FRIENDLY_NAME, STATE_ON from homeassistant.const import ATTR_FRIENDLY_NAME, STATE_ON
from homeassistant.core import State from homeassistant.core import HomeAssistant, State
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from homeassistant.util import dt as dt_util from homeassistant.util import dt as dt_util
@ -16,7 +17,7 @@ from tests.common import async_fire_time_changed
from tests.components.recorder.common import async_wait_recording_done from tests.components.recorder.common import async_wait_recording_done
async def test_exclude_attributes(recorder_mock, hass): async def test_exclude_attributes(recorder_mock: Recorder, hass: HomeAssistant) -> None:
"""Test number registered attributes to be excluded.""" """Test number registered attributes to be excluded."""
hass.states.async_set("light.bowl", STATE_ON) hass.states.async_set("light.bowl", STATE_ON)

View file

@ -231,7 +231,9 @@ async def test_state_reporting_all(hass: HomeAssistant) -> None:
assert hass.states.get("switch.switch_group").state == STATE_UNAVAILABLE assert hass.states.get("switch.switch_group").state == STATE_UNAVAILABLE
async def test_service_calls(hass, enable_custom_integrations): async def test_service_calls(
hass: HomeAssistant, enable_custom_integrations: None
) -> None:
"""Test service calls.""" """Test service calls."""
await async_setup_component( await async_setup_component(
hass, hass,

View file

@ -17,7 +17,9 @@ from homeassistant.core import HomeAssistant
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
async def test_duplicate_error(hass, config, config_entry, setup_guardian): async def test_duplicate_error(
hass: HomeAssistant, config, config_entry, setup_guardian
) -> None:
"""Test that errors are shown when duplicate entries are added.""" """Test that errors are shown when duplicate entries are added."""
result = await hass.config_entries.flow.async_init( result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": SOURCE_USER}, data=config DOMAIN, context={"source": SOURCE_USER}, data=config
@ -26,7 +28,7 @@ async def test_duplicate_error(hass, config, config_entry, setup_guardian):
assert result["reason"] == "already_configured" assert result["reason"] == "already_configured"
async def test_connect_error(hass, config): async def test_connect_error(hass: HomeAssistant, config) -> None:
"""Test that the config entry errors out if the device cannot connect.""" """Test that the config entry errors out if the device cannot connect."""
with patch( with patch(
"aioguardian.client.Client.connect", "aioguardian.client.Client.connect",
@ -51,7 +53,7 @@ async def test_get_pin_from_uid() -> None:
assert pin == "3456" assert pin == "3456"
async def test_step_user(hass, config, setup_guardian): async def test_step_user(hass: HomeAssistant, config, setup_guardian) -> None:
"""Test the user step.""" """Test the user step."""
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}
@ -71,7 +73,7 @@ async def test_step_user(hass, config, setup_guardian):
} }
async def test_step_zeroconf(hass, setup_guardian): async def test_step_zeroconf(hass: HomeAssistant, setup_guardian) -> None:
"""Test the zeroconf step.""" """Test the zeroconf step."""
zeroconf_data = zeroconf.ZeroconfServiceInfo( zeroconf_data = zeroconf.ZeroconfServiceInfo(
host="192.168.1.100", host="192.168.1.100",
@ -126,7 +128,7 @@ async def test_step_zeroconf_already_in_progress(hass: HomeAssistant) -> None:
assert result["reason"] == "already_in_progress" assert result["reason"] == "already_in_progress"
async def test_step_dhcp(hass, setup_guardian): async def test_step_dhcp(hass: HomeAssistant, setup_guardian) -> None:
"""Test the dhcp step.""" """Test the dhcp step."""
dhcp_data = dhcp.DhcpServiceInfo( dhcp_data = dhcp.DhcpServiceInfo(
ip="192.168.1.100", ip="192.168.1.100",

View file

@ -1,11 +1,18 @@
"""Test Guardian diagnostics.""" """Test Guardian diagnostics."""
from homeassistant.components.diagnostics import REDACTED from homeassistant.components.diagnostics import REDACTED
from homeassistant.components.guardian import DOMAIN, GuardianData from homeassistant.components.guardian import DOMAIN, GuardianData
from homeassistant.core import HomeAssistant
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, config_entry, hass_client, setup_guardian): async def test_entry_diagnostics(
hass: HomeAssistant,
config_entry,
hass_client: ClientSessionGenerator,
setup_guardian,
) -> None:
"""Test config entry diagnostics.""" """Test config entry diagnostics."""
data: GuardianData = hass.data[DOMAIN][config_entry.entry_id] data: GuardianData = hass.data[DOMAIN][config_entry.entry_id]

View file

@ -14,6 +14,7 @@ from homeassistant.components.habitica.const import (
) )
from homeassistant.components.habitica.sensor import TASKS_TYPES from homeassistant.components.habitica.sensor import TASKS_TYPES
from homeassistant.const import ATTR_NAME from homeassistant.const import ATTR_NAME
from homeassistant.core import HomeAssistant
from tests.common import MockConfigEntry, async_capture_events from tests.common import MockConfigEntry, async_capture_events
@ -91,7 +92,9 @@ def common_requests(aioclient_mock):
return aioclient_mock return aioclient_mock
async def test_entry_setup_unload(hass, habitica_entry, common_requests): async def test_entry_setup_unload(
hass: HomeAssistant, habitica_entry, common_requests
) -> None:
"""Test integration setup and unload.""" """Test integration setup and unload."""
assert await hass.config_entries.async_setup(habitica_entry.entry_id) assert await hass.config_entries.async_setup(habitica_entry.entry_id)
await hass.async_block_till_done() await hass.async_block_till_done()
@ -104,8 +107,8 @@ async def test_entry_setup_unload(hass, habitica_entry, common_requests):
async def test_service_call( async def test_service_call(
hass, habitica_entry, common_requests, capture_api_call_success hass: HomeAssistant, habitica_entry, common_requests, capture_api_call_success
): ) -> None:
"""Test integration setup, service call and unload.""" """Test integration setup, service call and unload."""
assert await hass.config_entries.async_setup(habitica_entry.entry_id) assert await hass.config_entries.async_setup(habitica_entry.entry_id)

View file

@ -7,9 +7,12 @@ from homeassistant.components.hardkernel.const import DOMAIN
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from tests.common import MockConfigEntry, MockModule, mock_integration from tests.common import MockConfigEntry, MockModule, mock_integration
from tests.typing import WebSocketGenerator
async def test_hardware_info(hass: HomeAssistant, hass_ws_client) -> None: async def test_hardware_info(
hass: HomeAssistant, hass_ws_client: WebSocketGenerator
) -> None:
"""Test we can get the board info.""" """Test we can get the board info."""
mock_integration(hass, MockModule("hassio")) mock_integration(hass, MockModule("hassio"))
@ -58,7 +61,9 @@ async def test_hardware_info(hass: HomeAssistant, hass_ws_client) -> None:
@pytest.mark.parametrize("os_info", [None, {"board": None}, {"board": "other"}]) @pytest.mark.parametrize("os_info", [None, {"board": None}, {"board": "other"}])
async def test_hardware_info_fail(hass: HomeAssistant, hass_ws_client, os_info) -> None: async def test_hardware_info_fail(
hass: HomeAssistant, hass_ws_client: WebSocketGenerator, os_info
) -> None:
"""Test async_info raises if os_info is not as expected.""" """Test async_info raises if os_info is not as expected."""
mock_integration(hass, MockModule("hassio")) mock_integration(hass, MockModule("hassio"))

View file

@ -10,8 +10,12 @@ 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
from tests.typing import WebSocketGenerator
async def test_board_info(hass: HomeAssistant, hass_ws_client) -> None:
async def test_board_info(
hass: HomeAssistant, hass_ws_client: WebSocketGenerator
) -> None:
"""Test we can get the board info.""" """Test we can get the board info."""
assert await async_setup_component(hass, DOMAIN, {}) assert await async_setup_component(hass, DOMAIN, {})
@ -28,7 +32,9 @@ async def test_board_info(hass: HomeAssistant, hass_ws_client) -> None:
TEST_TIME_ADVANCE_INTERVAL = datetime.timedelta(seconds=5 + 1) TEST_TIME_ADVANCE_INTERVAL = datetime.timedelta(seconds=5 + 1)
async def test_system_status_subscription(hass: HomeAssistant, hass_ws_client, freezer): async def test_system_status_subscription(
hass: HomeAssistant, hass_ws_client: WebSocketGenerator, freezer
) -> None:
"""Test websocket system status subscription.""" """Test websocket system status subscription."""
mock_psutil = None mock_psutil = None

View file

@ -187,7 +187,7 @@ async def test_form_cannot_connect(hass: HomeAssistant) -> None:
assert result2["errors"] == {"base": "cannot_connect"} assert result2["errors"] == {"base": "cannot_connect"}
async def test_options_flow(hass, mock_hc, mock_write_config): async def test_options_flow(hass: HomeAssistant, mock_hc, mock_write_config) -> None:
"""Test config flow options.""" """Test config flow options."""
config_entry = MockConfigEntry( config_entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,

View file

@ -1,6 +1,7 @@
"""Test init of Logitch Harmony Hub integration.""" """Test init of Logitch Harmony Hub integration."""
from homeassistant.components.harmony.const import DOMAIN from homeassistant.components.harmony.const import DOMAIN
from homeassistant.const import CONF_HOST, CONF_NAME from homeassistant.const import CONF_HOST, CONF_NAME
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
@ -18,7 +19,9 @@ from .const import (
from tests.common import MockConfigEntry, mock_registry from tests.common import MockConfigEntry, mock_registry
async def test_unique_id_migration(mock_hc, hass, mock_write_config): async def test_unique_id_migration(
mock_hc, hass: HomeAssistant, mock_write_config
) -> None:
"""Test migration of switch unique ids to stable ones.""" """Test migration of switch unique ids to stable ones."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, data={CONF_HOST: "192.0.2.0", CONF_NAME: HUB_NAME} domain=DOMAIN, data={CONF_HOST: "192.0.2.0", CONF_NAME: HUB_NAME}

View file

@ -1,5 +1,4 @@
"""Test the Logitech Harmony Hub remote.""" """Test the Logitech Harmony Hub remote."""
from datetime import timedelta from datetime import timedelta
from aioharmony.const import SendCommandDevice from aioharmony.const import SendCommandDevice
@ -30,6 +29,7 @@ from homeassistant.const import (
STATE_ON, STATE_ON,
STATE_UNAVAILABLE, STATE_UNAVAILABLE,
) )
from homeassistant.core import HomeAssistant
from homeassistant.util import utcnow from homeassistant.util import utcnow
from .conftest import ACTIVITIES_TO_IDS, TV_DEVICE_ID, TV_DEVICE_NAME from .conftest import ACTIVITIES_TO_IDS, TV_DEVICE_ID, TV_DEVICE_NAME
@ -42,8 +42,8 @@ STOP_COMMAND = "Stop"
async def test_connection_state_changes( async def test_connection_state_changes(
harmony_client, mock_hc, hass, mock_write_config harmony_client, mock_hc, hass: HomeAssistant, mock_write_config
): ) -> None:
"""Ensure connection changes are reflected in the remote state.""" """Ensure connection changes are reflected in the remote state."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, data={CONF_HOST: "192.0.2.0", CONF_NAME: HUB_NAME} domain=DOMAIN, data={CONF_HOST: "192.0.2.0", CONF_NAME: HUB_NAME}
@ -81,7 +81,7 @@ async def test_connection_state_changes(
assert hass.states.is_state(ENTITY_REMOTE, STATE_ON) assert hass.states.is_state(ENTITY_REMOTE, STATE_ON)
async def test_remote_toggles(mock_hc, hass, mock_write_config): async def test_remote_toggles(mock_hc, hass: HomeAssistant, mock_write_config) -> None:
"""Ensure calls to the remote also updates the switches.""" """Ensure calls to the remote also updates the switches."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, data={CONF_HOST: "192.0.2.0", CONF_NAME: HUB_NAME} domain=DOMAIN, data={CONF_HOST: "192.0.2.0", CONF_NAME: HUB_NAME}
@ -149,7 +149,9 @@ async def test_remote_toggles(mock_hc, hass, mock_write_config):
assert state.attributes.get("current_activity") == "Watch TV" assert state.attributes.get("current_activity") == "Watch TV"
async def test_async_send_command(mock_hc, harmony_client, hass, mock_write_config): async def test_async_send_command(
mock_hc, harmony_client, hass: HomeAssistant, mock_write_config
) -> None:
"""Ensure calls to send remote commands properly propagate to devices.""" """Ensure calls to send remote commands properly propagate to devices."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, data={CONF_HOST: "192.0.2.0", CONF_NAME: HUB_NAME} domain=DOMAIN, data={CONF_HOST: "192.0.2.0", CONF_NAME: HUB_NAME}
@ -282,8 +284,8 @@ async def test_async_send_command(mock_hc, harmony_client, hass, mock_write_conf
async def test_async_send_command_custom_delay( async def test_async_send_command_custom_delay(
mock_hc, harmony_client, hass, mock_write_config mock_hc, harmony_client, hass: HomeAssistant, mock_write_config
): ) -> None:
"""Ensure calls to send remote commands properly propagate to devices with custom delays.""" """Ensure calls to send remote commands properly propagate to devices with custom delays."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, domain=DOMAIN,
@ -323,7 +325,9 @@ async def test_async_send_command_custom_delay(
send_commands_mock.reset_mock() send_commands_mock.reset_mock()
async def test_change_channel(mock_hc, harmony_client, hass, mock_write_config): async def test_change_channel(
mock_hc, harmony_client, hass: HomeAssistant, mock_write_config
) -> None:
"""Test change channel commands.""" """Test change channel commands."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, data={CONF_HOST: "192.0.2.0", CONF_NAME: HUB_NAME} domain=DOMAIN, data={CONF_HOST: "192.0.2.0", CONF_NAME: HUB_NAME}
@ -347,7 +351,9 @@ async def test_change_channel(mock_hc, harmony_client, hass, mock_write_config):
change_channel_mock.assert_awaited_once_with(100) change_channel_mock.assert_awaited_once_with(100)
async def test_sync(mock_hc, harmony_client, mock_write_config, hass): async def test_sync(
mock_hc, harmony_client, mock_write_config, hass: HomeAssistant
) -> None:
"""Test the sync command.""" """Test the sync command."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, data={CONF_HOST: "192.0.2.0", CONF_NAME: HUB_NAME} domain=DOMAIN, data={CONF_HOST: "192.0.2.0", CONF_NAME: HUB_NAME}

View file

@ -1,5 +1,4 @@
"""Test the Logitech Harmony Hub activity select.""" """Test the Logitech Harmony Hub activity select."""
from datetime import timedelta from datetime import timedelta
from homeassistant.components.harmony.const import DOMAIN from homeassistant.components.harmony.const import DOMAIN
@ -16,6 +15,7 @@ from homeassistant.const import (
STATE_ON, STATE_ON,
STATE_UNAVAILABLE, STATE_UNAVAILABLE,
) )
from homeassistant.core import HomeAssistant
from homeassistant.util import utcnow from homeassistant.util import utcnow
from .const import ENTITY_REMOTE, ENTITY_SELECT, HUB_NAME from .const import ENTITY_REMOTE, ENTITY_SELECT, HUB_NAME
@ -24,8 +24,8 @@ from tests.common import MockConfigEntry, async_fire_time_changed
async def test_connection_state_changes( async def test_connection_state_changes(
harmony_client, mock_hc, hass, mock_write_config harmony_client, mock_hc, hass: HomeAssistant, mock_write_config
): ) -> None:
"""Ensure connection changes are reflected in the switch states.""" """Ensure connection changes are reflected in the switch states."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, data={CONF_HOST: "192.0.2.0", CONF_NAME: HUB_NAME} domain=DOMAIN, data={CONF_HOST: "192.0.2.0", CONF_NAME: HUB_NAME}
@ -55,7 +55,7 @@ async def test_connection_state_changes(
assert hass.states.is_state(ENTITY_SELECT, "Watch TV") assert hass.states.is_state(ENTITY_SELECT, "Watch TV")
async def test_options(mock_hc, hass, mock_write_config): async def test_options(mock_hc, hass: HomeAssistant, mock_write_config) -> None:
"""Ensure calls to the switch modify the harmony state.""" """Ensure calls to the switch modify the harmony state."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, data={CONF_HOST: "192.0.2.0", CONF_NAME: HUB_NAME} domain=DOMAIN, data={CONF_HOST: "192.0.2.0", CONF_NAME: HUB_NAME}
@ -75,7 +75,7 @@ async def test_options(mock_hc, hass, mock_write_config):
] ]
async def test_select_option(mock_hc, hass, mock_write_config): async def test_select_option(mock_hc, hass: HomeAssistant, mock_write_config) -> None:
"""Ensure calls to the switch modify the harmony state.""" """Ensure calls to the switch modify the harmony state."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, data={CONF_HOST: "192.0.2.0", CONF_NAME: HUB_NAME} domain=DOMAIN, data={CONF_HOST: "192.0.2.0", CONF_NAME: HUB_NAME}

View file

@ -1,5 +1,4 @@
"""Test the Logitech Harmony Hub activity switches.""" """Test the Logitech Harmony Hub activity switches."""
from datetime import timedelta from datetime import timedelta
from homeassistant.components.harmony.const import DOMAIN from homeassistant.components.harmony.const import DOMAIN
@ -16,6 +15,7 @@ from homeassistant.const import (
STATE_ON, STATE_ON,
STATE_UNAVAILABLE, STATE_UNAVAILABLE,
) )
from homeassistant.core import HomeAssistant
from homeassistant.helpers import entity_registry from homeassistant.helpers import entity_registry
from homeassistant.util import utcnow from homeassistant.util import utcnow
@ -25,8 +25,8 @@ from tests.common import MockConfigEntry, async_fire_time_changed
async def test_connection_state_changes( async def test_connection_state_changes(
harmony_client, mock_hc, hass, mock_write_config harmony_client, mock_hc, hass: HomeAssistant, mock_write_config
): ) -> None:
"""Ensure connection changes are reflected in the switch states.""" """Ensure connection changes are reflected in the switch states."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, data={CONF_HOST: "192.0.2.0", CONF_NAME: HUB_NAME} domain=DOMAIN, data={CONF_HOST: "192.0.2.0", CONF_NAME: HUB_NAME}
@ -80,7 +80,7 @@ async def test_connection_state_changes(
assert hass.states.is_state(ENTITY_PLAY_MUSIC, STATE_OFF) assert hass.states.is_state(ENTITY_PLAY_MUSIC, STATE_OFF)
async def test_switch_toggles(mock_hc, hass, mock_write_config): async def test_switch_toggles(mock_hc, hass: HomeAssistant, mock_write_config) -> None:
"""Ensure calls to the switch modify the harmony state.""" """Ensure calls to the switch modify the harmony state."""
entry = MockConfigEntry( entry = MockConfigEntry(
domain=DOMAIN, data={CONF_HOST: "192.0.2.0", CONF_NAME: HUB_NAME} domain=DOMAIN, data={CONF_HOST: "192.0.2.0", CONF_NAME: HUB_NAME}

View file

@ -4,8 +4,12 @@ from unittest.mock import patch
import pytest import pytest
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from tests.test_util.aiohttp import AiohttpClientMocker
from tests.typing import ClientSessionGenerator
@pytest.fixture(autouse=True) @pytest.fixture(autouse=True)
def mock_all(aioclient_mock): def mock_all(aioclient_mock):
@ -19,7 +23,9 @@ def mock_all(aioclient_mock):
) )
async def test_hassio_addon_panel_startup(hass, aioclient_mock, hassio_env): async def test_hassio_addon_panel_startup(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker, hassio_env
) -> None:
"""Test startup and panel setup after event.""" """Test startup and panel setup after event."""
aioclient_mock.get( aioclient_mock.get(
"http://127.0.0.1/ingress/panels", "http://127.0.0.1/ingress/panels",
@ -61,7 +67,12 @@ async def test_hassio_addon_panel_startup(hass, aioclient_mock, hassio_env):
) )
async def test_hassio_addon_panel_api(hass, aioclient_mock, hassio_env, hass_client): async def test_hassio_addon_panel_api(
hass: HomeAssistant,
aioclient_mock: AiohttpClientMocker,
hassio_env,
hass_client: ClientSessionGenerator,
) -> None:
"""Test panel api after event.""" """Test panel api after event."""
aioclient_mock.get( aioclient_mock.get(
"http://127.0.0.1/ingress/panels", "http://127.0.0.1/ingress/panels",

View file

@ -1,12 +1,12 @@
"""The tests for the hassio component.""" """The tests for the hassio component."""
from http import HTTPStatus from http import HTTPStatus
from unittest.mock import Mock, patch from unittest.mock import Mock, patch
from homeassistant.auth.providers.homeassistant import InvalidAuth from homeassistant.auth.providers.homeassistant import InvalidAuth
from homeassistant.core import HomeAssistant
async def test_auth_success(hass, hassio_client_supervisor): async def test_auth_success(hass: HomeAssistant, hassio_client_supervisor) -> None:
"""Test no auth needed for .""" """Test no auth needed for ."""
with patch( with patch(
"homeassistant.auth.providers.homeassistant." "homeassistant.auth.providers.homeassistant."
@ -22,7 +22,7 @@ async def test_auth_success(hass, hassio_client_supervisor):
mock_login.assert_called_with("test", "123456") mock_login.assert_called_with("test", "123456")
async def test_auth_fails_no_supervisor(hass, hassio_client): async def test_auth_fails_no_supervisor(hass: HomeAssistant, hassio_client) -> None:
"""Test if only supervisor can access.""" """Test if only supervisor can access."""
with patch( with patch(
"homeassistant.auth.providers.homeassistant." "homeassistant.auth.providers.homeassistant."
@ -38,7 +38,7 @@ async def test_auth_fails_no_supervisor(hass, hassio_client):
assert not mock_login.called assert not mock_login.called
async def test_auth_fails_no_auth(hass, hassio_noauth_client): async def test_auth_fails_no_auth(hass: HomeAssistant, hassio_noauth_client) -> None:
"""Test if only supervisor can access.""" """Test if only supervisor can access."""
with patch( with patch(
"homeassistant.auth.providers.homeassistant." "homeassistant.auth.providers.homeassistant."
@ -54,7 +54,7 @@ async def test_auth_fails_no_auth(hass, hassio_noauth_client):
assert not mock_login.called assert not mock_login.called
async def test_login_error(hass, hassio_client_supervisor): async def test_login_error(hass: HomeAssistant, hassio_client_supervisor) -> None:
"""Test no auth needed for error.""" """Test no auth needed for error."""
with patch( with patch(
"homeassistant.auth.providers.homeassistant." "homeassistant.auth.providers.homeassistant."
@ -71,7 +71,7 @@ async def test_login_error(hass, hassio_client_supervisor):
mock_login.assert_called_with("test", "123456") mock_login.assert_called_with("test", "123456")
async def test_login_no_data(hass, hassio_client_supervisor): async def test_login_no_data(hass: HomeAssistant, hassio_client_supervisor) -> None:
"""Test auth with no data -> error.""" """Test auth with no data -> error."""
with patch( with patch(
"homeassistant.auth.providers.homeassistant." "homeassistant.auth.providers.homeassistant."
@ -85,7 +85,7 @@ async def test_login_no_data(hass, hassio_client_supervisor):
assert not mock_login.called assert not mock_login.called
async def test_login_no_username(hass, hassio_client_supervisor): async def test_login_no_username(hass: HomeAssistant, hassio_client_supervisor) -> None:
"""Test auth with no username in data -> error.""" """Test auth with no username in data -> error."""
with patch( with patch(
"homeassistant.auth.providers.homeassistant." "homeassistant.auth.providers.homeassistant."
@ -101,7 +101,9 @@ async def test_login_no_username(hass, hassio_client_supervisor):
assert not mock_login.called assert not mock_login.called
async def test_login_success_extra(hass, hassio_client_supervisor): async def test_login_success_extra(
hass: HomeAssistant, hassio_client_supervisor
) -> None:
"""Test auth with extra data.""" """Test auth with extra data."""
with patch( with patch(
"homeassistant.auth.providers.homeassistant." "homeassistant.auth.providers.homeassistant."
@ -122,7 +124,7 @@ async def test_login_success_extra(hass, hassio_client_supervisor):
mock_login.assert_called_with("test", "123456") mock_login.assert_called_with("test", "123456")
async def test_password_success(hass, hassio_client_supervisor): async def test_password_success(hass: HomeAssistant, hassio_client_supervisor) -> None:
"""Test no auth needed for .""" """Test no auth needed for ."""
with patch( with patch(
"homeassistant.auth.providers.homeassistant." "homeassistant.auth.providers.homeassistant."
@ -138,7 +140,7 @@ async def test_password_success(hass, hassio_client_supervisor):
mock_change.assert_called_with("test", "123456") mock_change.assert_called_with("test", "123456")
async def test_password_fails_no_supervisor(hass, hassio_client): async def test_password_fails_no_supervisor(hass: HomeAssistant, hassio_client) -> None:
"""Test if only supervisor can access.""" """Test if only supervisor can access."""
resp = await hassio_client.post( resp = await hassio_client.post(
"/api/hassio_auth/password_reset", "/api/hassio_auth/password_reset",
@ -149,7 +151,9 @@ async def test_password_fails_no_supervisor(hass, hassio_client):
assert resp.status == HTTPStatus.UNAUTHORIZED assert resp.status == HTTPStatus.UNAUTHORIZED
async def test_password_fails_no_auth(hass, hassio_noauth_client): async def test_password_fails_no_auth(
hass: HomeAssistant, hassio_noauth_client
) -> None:
"""Test if only supervisor can access.""" """Test if only supervisor can access."""
resp = await hassio_noauth_client.post( resp = await hassio_noauth_client.post(
"/api/hassio_auth/password_reset", "/api/hassio_auth/password_reset",
@ -160,7 +164,7 @@ async def test_password_fails_no_auth(hass, hassio_noauth_client):
assert resp.status == HTTPStatus.UNAUTHORIZED assert resp.status == HTTPStatus.UNAUTHORIZED
async def test_password_no_user(hass, hassio_client_supervisor): async def test_password_no_user(hass: HomeAssistant, hassio_client_supervisor) -> None:
"""Test changing password for invalid user.""" """Test changing password for invalid user."""
resp = await hassio_client_supervisor.post( resp = await hassio_client_supervisor.post(
"/api/hassio_auth/password_reset", "/api/hassio_auth/password_reset",

View file

@ -1,15 +1,16 @@
"""The tests for the hassio binary sensors.""" """The tests for the hassio binary sensors."""
import os import os
from unittest.mock import patch from unittest.mock import patch
import pytest import pytest
from homeassistant.components.hassio import DOMAIN from homeassistant.components.hassio import DOMAIN
from homeassistant.core import HomeAssistant
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
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
from tests.test_util.aiohttp import AiohttpClientMocker
MOCK_ENVIRON = {"SUPERVISOR": "127.0.0.1", "SUPERVISOR_TOKEN": "abcdefgh"} MOCK_ENVIRON = {"SUPERVISOR": "127.0.0.1", "SUPERVISOR_TOKEN": "abcdefgh"}
@ -155,7 +156,9 @@ def mock_all(aioclient_mock, request):
("binary_sensor.test2_running", "off"), ("binary_sensor.test2_running", "off"),
], ],
) )
async def test_binary_sensor(hass, entity_id, expected, aioclient_mock): async def test_binary_sensor(
hass: HomeAssistant, entity_id, expected, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test hassio OS and addons binary sensor.""" """Test hassio OS and addons binary sensor."""
config_entry = MockConfigEntry(domain=DOMAIN, data={}, unique_id=DOMAIN) config_entry = MockConfigEntry(domain=DOMAIN, data={}, unique_id=DOMAIN)
config_entry.add_to_hass(hass) config_entry.add_to_hass(hass)

View file

@ -9,9 +9,11 @@ from homeassistant.components.hassio.discovery import HassioServiceInfo
from homeassistant.components.hassio.handler import HassioAPIError from homeassistant.components.hassio.handler import HassioAPIError
from homeassistant.components.mqtt import DOMAIN as MQTT_DOMAIN from homeassistant.components.mqtt import DOMAIN as MQTT_DOMAIN
from homeassistant.const import EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STARTED from homeassistant.const import EVENT_HOMEASSISTANT_START, EVENT_HOMEASSISTANT_STARTED
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from tests.common import MockModule, mock_entity_platform, mock_integration from tests.common import MockModule, mock_entity_platform, mock_integration
from tests.test_util.aiohttp import AiohttpClientMocker
@pytest.fixture(name="mock_mqtt") @pytest.fixture(name="mock_mqtt")
@ -32,7 +34,9 @@ async def mock_mqtt_fixture(hass):
yield MqttFlow yield MqttFlow
async def test_hassio_discovery_startup(hass, aioclient_mock, hassio_client, mock_mqtt): async def test_hassio_discovery_startup(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker, hassio_client, mock_mqtt
) -> None:
"""Test startup and discovery after event.""" """Test startup and discovery after event."""
aioclient_mock.get( aioclient_mock.get(
"http://127.0.0.1/discovery", "http://127.0.0.1/discovery",
@ -86,8 +90,8 @@ async def test_hassio_discovery_startup(hass, aioclient_mock, hassio_client, moc
async def test_hassio_discovery_startup_done( async def test_hassio_discovery_startup_done(
hass, aioclient_mock, hassio_client, mock_mqtt hass: HomeAssistant, aioclient_mock: AiohttpClientMocker, hassio_client, mock_mqtt
): ) -> None:
"""Test startup and discovery with hass discovery.""" """Test startup and discovery with hass discovery."""
aioclient_mock.post( aioclient_mock.post(
"http://127.0.0.1/supervisor/options", "http://127.0.0.1/supervisor/options",
@ -149,7 +153,9 @@ async def test_hassio_discovery_startup_done(
) )
async def test_hassio_discovery_webhook(hass, aioclient_mock, hassio_client, mock_mqtt): async def test_hassio_discovery_webhook(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker, hassio_client, mock_mqtt
) -> None:
"""Test discovery webhook.""" """Test discovery webhook."""
aioclient_mock.get( aioclient_mock.get(
"http://127.0.0.1/discovery/testuuid", "http://127.0.0.1/discovery/testuuid",

View file

@ -1,12 +1,13 @@
"""The tests for the hassio component.""" """The tests for the hassio component."""
import aiohttp import aiohttp
import pytest import pytest
from homeassistant.components.hassio.handler import HassioAPIError from homeassistant.components.hassio.handler import HassioAPIError
from tests.test_util.aiohttp import AiohttpClientMocker
async def test_api_ping(hassio_handler, aioclient_mock):
async def test_api_ping(hassio_handler, aioclient_mock: AiohttpClientMocker) -> None:
"""Test setup with API ping.""" """Test setup with API ping."""
aioclient_mock.get("http://127.0.0.1/supervisor/ping", json={"result": "ok"}) aioclient_mock.get("http://127.0.0.1/supervisor/ping", json={"result": "ok"})
@ -14,7 +15,9 @@ async def test_api_ping(hassio_handler, aioclient_mock):
assert aioclient_mock.call_count == 1 assert aioclient_mock.call_count == 1
async def test_api_ping_error(hassio_handler, aioclient_mock): async def test_api_ping_error(
hassio_handler, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test setup with API ping error.""" """Test setup with API ping error."""
aioclient_mock.get("http://127.0.0.1/supervisor/ping", json={"result": "error"}) aioclient_mock.get("http://127.0.0.1/supervisor/ping", json={"result": "error"})
@ -22,7 +25,9 @@ async def test_api_ping_error(hassio_handler, aioclient_mock):
assert aioclient_mock.call_count == 1 assert aioclient_mock.call_count == 1
async def test_api_ping_exeption(hassio_handler, aioclient_mock): async def test_api_ping_exeption(
hassio_handler, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test setup with API ping exception.""" """Test setup with API ping exception."""
aioclient_mock.get("http://127.0.0.1/supervisor/ping", exc=aiohttp.ClientError()) aioclient_mock.get("http://127.0.0.1/supervisor/ping", exc=aiohttp.ClientError())
@ -30,7 +35,7 @@ async def test_api_ping_exeption(hassio_handler, aioclient_mock):
assert aioclient_mock.call_count == 1 assert aioclient_mock.call_count == 1
async def test_api_info(hassio_handler, aioclient_mock): async def test_api_info(hassio_handler, aioclient_mock: AiohttpClientMocker) -> None:
"""Test setup with API generic info.""" """Test setup with API generic info."""
aioclient_mock.get( aioclient_mock.get(
"http://127.0.0.1/info", "http://127.0.0.1/info",
@ -47,7 +52,9 @@ async def test_api_info(hassio_handler, aioclient_mock):
assert data["supervisor"] == "222" assert data["supervisor"] == "222"
async def test_api_info_error(hassio_handler, aioclient_mock): async def test_api_info_error(
hassio_handler, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test setup with API Home Assistant info error.""" """Test setup with API Home Assistant info error."""
aioclient_mock.get( aioclient_mock.get(
"http://127.0.0.1/info", json={"result": "error", "message": None} "http://127.0.0.1/info", json={"result": "error", "message": None}
@ -59,7 +66,9 @@ async def test_api_info_error(hassio_handler, aioclient_mock):
assert aioclient_mock.call_count == 1 assert aioclient_mock.call_count == 1
async def test_api_host_info(hassio_handler, aioclient_mock): async def test_api_host_info(
hassio_handler, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test setup with API Host info.""" """Test setup with API Host info."""
aioclient_mock.get( aioclient_mock.get(
"http://127.0.0.1/host/info", "http://127.0.0.1/host/info",
@ -80,7 +89,9 @@ async def test_api_host_info(hassio_handler, aioclient_mock):
assert data["operating_system"] == "Debian GNU/Linux 10 (buster)" assert data["operating_system"] == "Debian GNU/Linux 10 (buster)"
async def test_api_supervisor_info(hassio_handler, aioclient_mock): async def test_api_supervisor_info(
hassio_handler, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test setup with API Supervisor info.""" """Test setup with API Supervisor info."""
aioclient_mock.get( aioclient_mock.get(
"http://127.0.0.1/supervisor/info", "http://127.0.0.1/supervisor/info",
@ -97,7 +108,7 @@ async def test_api_supervisor_info(hassio_handler, aioclient_mock):
assert data["channel"] == "stable" assert data["channel"] == "stable"
async def test_api_os_info(hassio_handler, aioclient_mock): async def test_api_os_info(hassio_handler, aioclient_mock: AiohttpClientMocker) -> None:
"""Test setup with API OS info.""" """Test setup with API OS info."""
aioclient_mock.get( aioclient_mock.get(
"http://127.0.0.1/os/info", "http://127.0.0.1/os/info",
@ -113,7 +124,9 @@ async def test_api_os_info(hassio_handler, aioclient_mock):
assert data["version"] == "2020.11.1" assert data["version"] == "2020.11.1"
async def test_api_host_info_error(hassio_handler, aioclient_mock): async def test_api_host_info_error(
hassio_handler, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test setup with API Home Assistant info error.""" """Test setup with API Home Assistant info error."""
aioclient_mock.get( aioclient_mock.get(
"http://127.0.0.1/host/info", json={"result": "error", "message": None} "http://127.0.0.1/host/info", json={"result": "error", "message": None}
@ -125,7 +138,9 @@ async def test_api_host_info_error(hassio_handler, aioclient_mock):
assert aioclient_mock.call_count == 1 assert aioclient_mock.call_count == 1
async def test_api_core_info(hassio_handler, aioclient_mock): async def test_api_core_info(
hassio_handler, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test setup with API Home Assistant Core info.""" """Test setup with API Home Assistant Core info."""
aioclient_mock.get( aioclient_mock.get(
"http://127.0.0.1/core/info", "http://127.0.0.1/core/info",
@ -137,7 +152,9 @@ async def test_api_core_info(hassio_handler, aioclient_mock):
assert data["version_latest"] == "1.0.0" assert data["version_latest"] == "1.0.0"
async def test_api_core_info_error(hassio_handler, aioclient_mock): async def test_api_core_info_error(
hassio_handler, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test setup with API Home Assistant Core info error.""" """Test setup with API Home Assistant Core info error."""
aioclient_mock.get( aioclient_mock.get(
"http://127.0.0.1/core/info", json={"result": "error", "message": None} "http://127.0.0.1/core/info", json={"result": "error", "message": None}
@ -149,7 +166,9 @@ async def test_api_core_info_error(hassio_handler, aioclient_mock):
assert aioclient_mock.call_count == 1 assert aioclient_mock.call_count == 1
async def test_api_homeassistant_stop(hassio_handler, aioclient_mock): async def test_api_homeassistant_stop(
hassio_handler, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test setup with API Home Assistant stop.""" """Test setup with API Home Assistant stop."""
aioclient_mock.post("http://127.0.0.1/homeassistant/stop", json={"result": "ok"}) aioclient_mock.post("http://127.0.0.1/homeassistant/stop", json={"result": "ok"})
@ -157,7 +176,9 @@ async def test_api_homeassistant_stop(hassio_handler, aioclient_mock):
assert aioclient_mock.call_count == 1 assert aioclient_mock.call_count == 1
async def test_api_homeassistant_restart(hassio_handler, aioclient_mock): async def test_api_homeassistant_restart(
hassio_handler, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test setup with API Home Assistant restart.""" """Test setup with API Home Assistant restart."""
aioclient_mock.post("http://127.0.0.1/homeassistant/restart", json={"result": "ok"}) aioclient_mock.post("http://127.0.0.1/homeassistant/restart", json={"result": "ok"})
@ -165,7 +186,9 @@ async def test_api_homeassistant_restart(hassio_handler, aioclient_mock):
assert aioclient_mock.call_count == 1 assert aioclient_mock.call_count == 1
async def test_api_addon_info(hassio_handler, aioclient_mock): async def test_api_addon_info(
hassio_handler, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test setup with API Add-on info.""" """Test setup with API Add-on info."""
aioclient_mock.get( aioclient_mock.get(
"http://127.0.0.1/addons/test/info", "http://127.0.0.1/addons/test/info",
@ -177,7 +200,9 @@ async def test_api_addon_info(hassio_handler, aioclient_mock):
assert aioclient_mock.call_count == 1 assert aioclient_mock.call_count == 1
async def test_api_addon_stats(hassio_handler, aioclient_mock): async def test_api_addon_stats(
hassio_handler, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test setup with API Add-on stats.""" """Test setup with API Add-on stats."""
aioclient_mock.get( aioclient_mock.get(
"http://127.0.0.1/addons/test/stats", "http://127.0.0.1/addons/test/stats",
@ -189,7 +214,9 @@ async def test_api_addon_stats(hassio_handler, aioclient_mock):
assert aioclient_mock.call_count == 1 assert aioclient_mock.call_count == 1
async def test_api_discovery_message(hassio_handler, aioclient_mock): async def test_api_discovery_message(
hassio_handler, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test setup with API discovery message.""" """Test setup with API discovery message."""
aioclient_mock.get( aioclient_mock.get(
"http://127.0.0.1/discovery/test", "http://127.0.0.1/discovery/test",
@ -201,7 +228,9 @@ async def test_api_discovery_message(hassio_handler, aioclient_mock):
assert aioclient_mock.call_count == 1 assert aioclient_mock.call_count == 1
async def test_api_retrieve_discovery(hassio_handler, aioclient_mock): async def test_api_retrieve_discovery(
hassio_handler, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test setup with API discovery message.""" """Test setup with API discovery message."""
aioclient_mock.get( aioclient_mock.get(
"http://127.0.0.1/discovery", "http://127.0.0.1/discovery",
@ -213,7 +242,9 @@ async def test_api_retrieve_discovery(hassio_handler, aioclient_mock):
assert aioclient_mock.call_count == 1 assert aioclient_mock.call_count == 1
async def test_api_ingress_panels(hassio_handler, aioclient_mock): async def test_api_ingress_panels(
hassio_handler, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test setup with API Ingress panels.""" """Test setup with API Ingress panels."""
aioclient_mock.get( aioclient_mock.get(
"http://127.0.0.1/ingress/panels", "http://127.0.0.1/ingress/panels",

View file

@ -8,8 +8,13 @@ import pytest
from homeassistant.components.hassio.http import _need_auth from homeassistant.components.hassio.http import _need_auth
from homeassistant.core import HomeAssistant from homeassistant.core import HomeAssistant
from tests.common import MockUser
from tests.test_util.aiohttp import AiohttpClientMocker
async def test_forward_request(hassio_client, aioclient_mock):
async def test_forward_request(
hassio_client, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test fetching normal path.""" """Test fetching normal path."""
aioclient_mock.post("http://127.0.0.1/beer", text="response") aioclient_mock.post("http://127.0.0.1/beer", text="response")
@ -27,7 +32,7 @@ async def test_forward_request(hassio_client, aioclient_mock):
@pytest.mark.parametrize( @pytest.mark.parametrize(
"build_type", ["supervisor/info", "homeassistant/update", "host/info"] "build_type", ["supervisor/info", "homeassistant/update", "host/info"]
) )
async def test_auth_required_forward_request(hassio_noauth_client, build_type): async def test_auth_required_forward_request(hassio_noauth_client, build_type) -> None:
"""Test auth required for normal request.""" """Test auth required for normal request."""
resp = await hassio_noauth_client.post(f"/api/hassio/{build_type}") resp = await hassio_noauth_client.post(f"/api/hassio/{build_type}")
@ -47,8 +52,8 @@ async def test_auth_required_forward_request(hassio_noauth_client, build_type):
], ],
) )
async def test_forward_request_no_auth_for_panel( async def test_forward_request_no_auth_for_panel(
hassio_client, build_type, aioclient_mock hassio_client, build_type, aioclient_mock: AiohttpClientMocker
): ) -> None:
"""Test no auth needed for .""" """Test no auth needed for ."""
aioclient_mock.get(f"http://127.0.0.1/{build_type}", text="response") aioclient_mock.get(f"http://127.0.0.1/{build_type}", text="response")
@ -63,7 +68,9 @@ async def test_forward_request_no_auth_for_panel(
assert len(aioclient_mock.mock_calls) == 1 assert len(aioclient_mock.mock_calls) == 1
async def test_forward_request_no_auth_for_logo(hassio_client, aioclient_mock): async def test_forward_request_no_auth_for_logo(
hassio_client, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test no auth needed for logo.""" """Test no auth needed for logo."""
aioclient_mock.get("http://127.0.0.1/addons/bl_b392/logo", text="response") aioclient_mock.get("http://127.0.0.1/addons/bl_b392/logo", text="response")
@ -78,7 +85,9 @@ async def test_forward_request_no_auth_for_logo(hassio_client, aioclient_mock):
assert len(aioclient_mock.mock_calls) == 1 assert len(aioclient_mock.mock_calls) == 1
async def test_forward_request_no_auth_for_icon(hassio_client, aioclient_mock): async def test_forward_request_no_auth_for_icon(
hassio_client, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test no auth needed for icon.""" """Test no auth needed for icon."""
aioclient_mock.get("http://127.0.0.1/addons/bl_b392/icon", text="response") aioclient_mock.get("http://127.0.0.1/addons/bl_b392/icon", text="response")
@ -93,7 +102,9 @@ async def test_forward_request_no_auth_for_icon(hassio_client, aioclient_mock):
assert len(aioclient_mock.mock_calls) == 1 assert len(aioclient_mock.mock_calls) == 1
async def test_forward_log_request(hassio_client, aioclient_mock): async def test_forward_log_request(
hassio_client, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test fetching normal log path doesn't remove ANSI color escape codes.""" """Test fetching normal log path doesn't remove ANSI color escape codes."""
aioclient_mock.get("http://127.0.0.1/beer/logs", text="\033[32mresponse\033[0m") aioclient_mock.get("http://127.0.0.1/beer/logs", text="\033[32mresponse\033[0m")
@ -108,7 +119,9 @@ async def test_forward_log_request(hassio_client, aioclient_mock):
assert len(aioclient_mock.mock_calls) == 1 assert len(aioclient_mock.mock_calls) == 1
async def test_bad_gateway_when_cannot_find_supervisor(hassio_client, aioclient_mock): async def test_bad_gateway_when_cannot_find_supervisor(
hassio_client, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test we get a bad gateway error if we can't find supervisor.""" """Test we get a bad gateway error if we can't find supervisor."""
aioclient_mock.get("http://127.0.0.1/addons/test/info", exc=asyncio.TimeoutError) aioclient_mock.get("http://127.0.0.1/addons/test/info", exc=asyncio.TimeoutError)
@ -116,7 +129,9 @@ async def test_bad_gateway_when_cannot_find_supervisor(hassio_client, aioclient_
assert resp.status == HTTPStatus.BAD_GATEWAY assert resp.status == HTTPStatus.BAD_GATEWAY
async def test_forwarding_user_info(hassio_client, hass_admin_user, aioclient_mock): async def test_forwarding_user_info(
hassio_client, hass_admin_user: MockUser, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test that we forward user info correctly.""" """Test that we forward user info correctly."""
aioclient_mock.get("http://127.0.0.1/hello") aioclient_mock.get("http://127.0.0.1/hello")
@ -132,7 +147,9 @@ async def test_forwarding_user_info(hassio_client, hass_admin_user, aioclient_mo
assert req_headers["X-Hass-Is-Admin"] == "1" assert req_headers["X-Hass-Is-Admin"] == "1"
async def test_backup_upload_headers(hassio_client, aioclient_mock, caplog): async def test_backup_upload_headers(
hassio_client, aioclient_mock: AiohttpClientMocker, caplog: pytest.LogCaptureFixture
) -> None:
"""Test that we forward the full header for backup upload.""" """Test that we forward the full header for backup upload."""
content_type = "multipart/form-data; boundary='--webkit'" content_type = "multipart/form-data; boundary='--webkit'"
aioclient_mock.get("http://127.0.0.1/backups/new/upload") aioclient_mock.get("http://127.0.0.1/backups/new/upload")
@ -150,7 +167,9 @@ async def test_backup_upload_headers(hassio_client, aioclient_mock, caplog):
assert req_headers["Content-Type"] == content_type assert req_headers["Content-Type"] == content_type
async def test_backup_download_headers(hassio_client, aioclient_mock): async def test_backup_download_headers(
hassio_client, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test that we forward the full header for backup download.""" """Test that we forward the full header for backup download."""
content_disposition = "attachment; filename=test.tar" content_disposition = "attachment; filename=test.tar"
aioclient_mock.get( aioclient_mock.get(
@ -182,14 +201,16 @@ def test_need_auth(hass: HomeAssistant) -> None:
assert not _need_auth(hass, "supervisor/logs") assert not _need_auth(hass, "supervisor/logs")
async def test_stream(hassio_client, aioclient_mock): async def test_stream(hassio_client, aioclient_mock: AiohttpClientMocker) -> None:
"""Verify that the request is a stream.""" """Verify that the request is a stream."""
aioclient_mock.get("http://127.0.0.1/test") aioclient_mock.get("http://127.0.0.1/test")
await hassio_client.get("/api/hassio/test", data="test") await hassio_client.get("/api/hassio/test", data="test")
assert isinstance(aioclient_mock.mock_calls[-1][2], StreamReader) assert isinstance(aioclient_mock.mock_calls[-1][2], StreamReader)
async def test_entrypoint_cache_control(hassio_client, aioclient_mock): async def test_entrypoint_cache_control(
hassio_client, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test that we return cache control for requests to the entrypoint only.""" """Test that we return cache control for requests to the entrypoint only."""
aioclient_mock.get("http://127.0.0.1/app/entrypoint.js") aioclient_mock.get("http://127.0.0.1/app/entrypoint.js")
aioclient_mock.get("http://127.0.0.1/app/entrypoint.fdhkusd8y43r.js") aioclient_mock.get("http://127.0.0.1/app/entrypoint.fdhkusd8y43r.js")

View file

@ -7,6 +7,8 @@ import pytest
from homeassistant.components.hassio.const import X_AUTH_TOKEN from homeassistant.components.hassio.const import X_AUTH_TOKEN
from tests.test_util.aiohttp import AiohttpClientMocker
@pytest.mark.parametrize( @pytest.mark.parametrize(
"build_type", "build_type",
@ -18,7 +20,9 @@ from homeassistant.components.hassio.const import X_AUTH_TOKEN
("fsadjf10312", ""), ("fsadjf10312", ""),
], ],
) )
async def test_ingress_request_get(hassio_client, build_type, aioclient_mock): async def test_ingress_request_get(
hassio_client, build_type, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test no auth needed for .""" """Test no auth needed for ."""
aioclient_mock.get( aioclient_mock.get(
f"http://127.0.0.1/ingress/{build_type[0]}/{build_type[1]}", f"http://127.0.0.1/ingress/{build_type[0]}/{build_type[1]}",
@ -58,7 +62,9 @@ async def test_ingress_request_get(hassio_client, build_type, aioclient_mock):
("fsadjf10312", ""), ("fsadjf10312", ""),
], ],
) )
async def test_ingress_request_post(hassio_client, build_type, aioclient_mock): async def test_ingress_request_post(
hassio_client, build_type, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test no auth needed for .""" """Test no auth needed for ."""
aioclient_mock.post( aioclient_mock.post(
f"http://127.0.0.1/ingress/{build_type[0]}/{build_type[1]}", f"http://127.0.0.1/ingress/{build_type[0]}/{build_type[1]}",
@ -98,7 +104,9 @@ async def test_ingress_request_post(hassio_client, build_type, aioclient_mock):
("fsadjf10312", ""), ("fsadjf10312", ""),
], ],
) )
async def test_ingress_request_put(hassio_client, build_type, aioclient_mock): async def test_ingress_request_put(
hassio_client, build_type, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test no auth needed for .""" """Test no auth needed for ."""
aioclient_mock.put( aioclient_mock.put(
f"http://127.0.0.1/ingress/{build_type[0]}/{build_type[1]}", f"http://127.0.0.1/ingress/{build_type[0]}/{build_type[1]}",
@ -138,7 +146,9 @@ async def test_ingress_request_put(hassio_client, build_type, aioclient_mock):
("fsadjf10312", ""), ("fsadjf10312", ""),
], ],
) )
async def test_ingress_request_delete(hassio_client, build_type, aioclient_mock): async def test_ingress_request_delete(
hassio_client, build_type, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test no auth needed for .""" """Test no auth needed for ."""
aioclient_mock.delete( aioclient_mock.delete(
f"http://127.0.0.1/ingress/{build_type[0]}/{build_type[1]}", f"http://127.0.0.1/ingress/{build_type[0]}/{build_type[1]}",
@ -178,7 +188,9 @@ async def test_ingress_request_delete(hassio_client, build_type, aioclient_mock)
("fsadjf10312", ""), ("fsadjf10312", ""),
], ],
) )
async def test_ingress_request_patch(hassio_client, build_type, aioclient_mock): async def test_ingress_request_patch(
hassio_client, build_type, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test no auth needed for .""" """Test no auth needed for ."""
aioclient_mock.patch( aioclient_mock.patch(
f"http://127.0.0.1/ingress/{build_type[0]}/{build_type[1]}", f"http://127.0.0.1/ingress/{build_type[0]}/{build_type[1]}",
@ -218,7 +230,9 @@ async def test_ingress_request_patch(hassio_client, build_type, aioclient_mock):
("fsadjf10312", ""), ("fsadjf10312", ""),
], ],
) )
async def test_ingress_request_options(hassio_client, build_type, aioclient_mock): async def test_ingress_request_options(
hassio_client, build_type, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test no auth needed for .""" """Test no auth needed for ."""
aioclient_mock.options( aioclient_mock.options(
f"http://127.0.0.1/ingress/{build_type[0]}/{build_type[1]}", f"http://127.0.0.1/ingress/{build_type[0]}/{build_type[1]}",
@ -258,7 +272,9 @@ async def test_ingress_request_options(hassio_client, build_type, aioclient_mock
("demo", "ws/connection?id=9&token=SJAKWS283"), ("demo", "ws/connection?id=9&token=SJAKWS283"),
], ],
) )
async def test_ingress_websocket(hassio_client, build_type, aioclient_mock): async def test_ingress_websocket(
hassio_client, build_type, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test no auth needed for .""" """Test no auth needed for ."""
aioclient_mock.get(f"http://127.0.0.1/ingress/{build_type[0]}/{build_type[1]}") aioclient_mock.get(f"http://127.0.0.1/ingress/{build_type[0]}/{build_type[1]}")
@ -281,7 +297,9 @@ async def test_ingress_websocket(hassio_client, build_type, aioclient_mock):
assert aioclient_mock.mock_calls[-1][3][X_FORWARDED_PROTO] assert aioclient_mock.mock_calls[-1][3][X_FORWARDED_PROTO]
async def test_ingress_missing_peername(hassio_client, aioclient_mock, caplog): async def test_ingress_missing_peername(
hassio_client, aioclient_mock: AiohttpClientMocker, caplog: pytest.LogCaptureFixture
) -> None:
"""Test hadnling of missing peername.""" """Test hadnling of missing peername."""
aioclient_mock.get( aioclient_mock.get(
"http://127.0.0.1/ingress/lorem/ipsum", "http://127.0.0.1/ingress/lorem/ipsum",

View file

@ -278,7 +278,9 @@ async def test_setup_api_push_api_data_server_host(
assert not aioclient_mock.mock_calls[1][2]["watchdog"] assert not aioclient_mock.mock_calls[1][2]["watchdog"]
async def test_setup_api_push_api_data_default(hass, aioclient_mock, hass_storage): async def test_setup_api_push_api_data_default(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker, hass_storage
) -> None:
"""Test setup with API push default data.""" """Test setup with API push default data."""
with patch.dict(os.environ, MOCK_ENVIRON): with patch.dict(os.environ, MOCK_ENVIRON):
result = await async_setup_component(hass, "hassio", {"http": {}, "hassio": {}}) result = await async_setup_component(hass, "hassio", {"http": {}, "hassio": {}})
@ -304,7 +306,9 @@ async def test_setup_api_push_api_data_default(hass, aioclient_mock, hass_storag
pytest.fail("refresh token not found") pytest.fail("refresh token not found")
async def test_setup_adds_admin_group_to_user(hass, aioclient_mock, hass_storage): async def test_setup_adds_admin_group_to_user(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker, hass_storage
) -> None:
"""Test setup with API push default data.""" """Test setup with API push default data."""
# Create user without admin # Create user without admin
user = await hass.auth.async_create_system_user("Hass.io") user = await hass.auth.async_create_system_user("Hass.io")
@ -324,7 +328,9 @@ async def test_setup_adds_admin_group_to_user(hass, aioclient_mock, hass_storage
assert user.is_admin assert user.is_admin
async def test_setup_migrate_user_name(hass, aioclient_mock, hass_storage): async def test_setup_migrate_user_name(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker, hass_storage
) -> None:
"""Test setup with migrating the user name.""" """Test setup with migrating the user name."""
# Create user with old name # Create user with old name
user = await hass.auth.async_create_system_user("Hass.io") user = await hass.auth.async_create_system_user("Hass.io")
@ -343,7 +349,9 @@ async def test_setup_migrate_user_name(hass, aioclient_mock, hass_storage):
assert user.name == "Supervisor" assert user.name == "Supervisor"
async def test_setup_api_existing_hassio_user(hass, aioclient_mock, hass_storage): async def test_setup_api_existing_hassio_user(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker, hass_storage
) -> None:
"""Test setup with API push default data.""" """Test setup with API push default data."""
user = await hass.auth.async_create_system_user("Hass.io test") user = await hass.auth.async_create_system_user("Hass.io test")
token = await hass.auth.async_create_refresh_token(user) token = await hass.auth.async_create_refresh_token(user)
@ -416,7 +424,7 @@ async def test_warn_when_cannot_connect(
assert "Not connected with the supervisor / system too busy!" in caplog.text assert "Not connected with the supervisor / system too busy!" in caplog.text
async def test_service_register(hassio_env, hass): async def test_service_register(hassio_env, hass: HomeAssistant) -> None:
"""Check if service will be setup.""" """Check if service will be setup."""
assert await async_setup_component(hass, "hassio", {}) assert await async_setup_component(hass, "hassio", {})
assert hass.services.has_service("hassio", "addon_start") assert hass.services.has_service("hassio", "addon_start")
@ -433,7 +441,12 @@ async def test_service_register(hassio_env, hass):
assert hass.services.has_service("hassio", "restore_partial") assert hass.services.has_service("hassio", "restore_partial")
async def test_service_calls(hassio_env, hass, aioclient_mock, caplog): async def test_service_calls(
hassio_env,
hass: HomeAssistant,
aioclient_mock: AiohttpClientMocker,
caplog: pytest.LogCaptureFixture,
) -> None:
"""Call service and check the API calls behind that.""" """Call service and check the API calls behind that."""
assert await async_setup_component(hass, "hassio", {}) assert await async_setup_component(hass, "hassio", {})
@ -517,7 +530,9 @@ async def test_service_calls(hassio_env, hass, aioclient_mock, caplog):
} }
async def test_service_calls_core(hassio_env, hass, aioclient_mock): async def test_service_calls_core(
hassio_env, hass: HomeAssistant, aioclient_mock: AiohttpClientMocker
) -> None:
"""Call core service and check the API calls behind that.""" """Call core service and check the API calls behind that."""
assert await async_setup_component(hass, "hassio", {}) assert await async_setup_component(hass, "hassio", {})
@ -785,7 +800,9 @@ async def test_coordinator_updates(
({"board": "yellow"}, "homeassistant_yellow"), ({"board": "yellow"}, "homeassistant_yellow"),
], ],
) )
async def test_setup_hardware_integration(hass, aioclient_mock, integration): async def test_setup_hardware_integration(
hass: HomeAssistant, aioclient_mock: AiohttpClientMocker, integration
) -> None:
"""Test setup initiates hardware integration.""" """Test setup initiates hardware integration."""
with patch.dict(os.environ, MOCK_ENVIRON), patch( with patch.dict(os.environ, MOCK_ENVIRON), patch(
@ -800,7 +817,9 @@ async def test_setup_hardware_integration(hass, aioclient_mock, integration):
assert len(mock_setup_entry.mock_calls) == 1 assert len(mock_setup_entry.mock_calls) == 1
async def test_get_store_addon_info(hass, hassio_stubs, aioclient_mock): async def test_get_store_addon_info(
hass: HomeAssistant, hassio_stubs, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test get store add-on info from Supervisor API.""" """Test get store add-on info from Supervisor API."""
aioclient_mock.clear_requests() aioclient_mock.clear_requests()
aioclient_mock.get( aioclient_mock.get(

View file

@ -1,5 +1,4 @@
"""Test repairs from supervisor issues.""" """Test repairs from supervisor issues."""
from __future__ import annotations from __future__ import annotations
import os import os
@ -15,6 +14,7 @@ from homeassistant.setup import async_setup_component
from .test_init import MOCK_ENVIRON from .test_init import MOCK_ENVIRON
from tests.test_util.aiohttp import AiohttpClientMocker from tests.test_util.aiohttp import AiohttpClientMocker
from tests.typing import WebSocketGenerator
@pytest.fixture(autouse=True) @pytest.fixture(autouse=True)
@ -148,8 +148,8 @@ def assert_repair_in_list(issues: list[dict[str, Any]], unhealthy: bool, reason:
async def test_unhealthy_repairs( async def test_unhealthy_repairs(
hass: HomeAssistant, hass: HomeAssistant,
aioclient_mock: AiohttpClientMocker, aioclient_mock: AiohttpClientMocker,
hass_ws_client, hass_ws_client: WebSocketGenerator,
): ) -> None:
"""Test repairs added for unhealthy systems.""" """Test repairs added for unhealthy systems."""
mock_resolution_info(aioclient_mock, unhealthy=["docker", "setup"]) mock_resolution_info(aioclient_mock, unhealthy=["docker", "setup"])
@ -169,8 +169,8 @@ async def test_unhealthy_repairs(
async def test_unsupported_repairs( async def test_unsupported_repairs(
hass: HomeAssistant, hass: HomeAssistant,
aioclient_mock: AiohttpClientMocker, aioclient_mock: AiohttpClientMocker,
hass_ws_client, hass_ws_client: WebSocketGenerator,
): ) -> None:
"""Test repairs added for unsupported systems.""" """Test repairs added for unsupported systems."""
mock_resolution_info(aioclient_mock, unsupported=["content_trust", "os"]) mock_resolution_info(aioclient_mock, unsupported=["content_trust", "os"])
@ -192,8 +192,8 @@ async def test_unsupported_repairs(
async def test_unhealthy_repairs_add_remove( async def test_unhealthy_repairs_add_remove(
hass: HomeAssistant, hass: HomeAssistant,
aioclient_mock: AiohttpClientMocker, aioclient_mock: AiohttpClientMocker,
hass_ws_client, hass_ws_client: WebSocketGenerator,
): ) -> None:
"""Test unhealthy repairs added and removed from dispatches.""" """Test unhealthy repairs added and removed from dispatches."""
mock_resolution_info(aioclient_mock) mock_resolution_info(aioclient_mock)
@ -248,8 +248,8 @@ async def test_unhealthy_repairs_add_remove(
async def test_unsupported_repairs_add_remove( async def test_unsupported_repairs_add_remove(
hass: HomeAssistant, hass: HomeAssistant,
aioclient_mock: AiohttpClientMocker, aioclient_mock: AiohttpClientMocker,
hass_ws_client, hass_ws_client: WebSocketGenerator,
): ) -> None:
"""Test unsupported repairs added and removed from dispatches.""" """Test unsupported repairs added and removed from dispatches."""
mock_resolution_info(aioclient_mock) mock_resolution_info(aioclient_mock)
@ -304,8 +304,8 @@ async def test_unsupported_repairs_add_remove(
async def test_reset_repairs_supervisor_restart( async def test_reset_repairs_supervisor_restart(
hass: HomeAssistant, hass: HomeAssistant,
aioclient_mock: AiohttpClientMocker, aioclient_mock: AiohttpClientMocker,
hass_ws_client, hass_ws_client: WebSocketGenerator,
): ) -> None:
"""Unsupported/unhealthy repairs reset on supervisor restart.""" """Unsupported/unhealthy repairs reset on supervisor restart."""
mock_resolution_info(aioclient_mock, unsupported=["os"], unhealthy=["docker"]) mock_resolution_info(aioclient_mock, unsupported=["os"], unhealthy=["docker"])
@ -347,8 +347,8 @@ async def test_reset_repairs_supervisor_restart(
async def test_reasons_added_and_removed( async def test_reasons_added_and_removed(
hass: HomeAssistant, hass: HomeAssistant,
aioclient_mock: AiohttpClientMocker, aioclient_mock: AiohttpClientMocker,
hass_ws_client, hass_ws_client: WebSocketGenerator,
): ) -> None:
"""Test an unsupported/unhealthy reasons being added and removed at same time.""" """Test an unsupported/unhealthy reasons being added and removed at same time."""
mock_resolution_info(aioclient_mock, unsupported=["os"], unhealthy=["docker"]) mock_resolution_info(aioclient_mock, unsupported=["os"], unhealthy=["docker"])
@ -396,8 +396,8 @@ async def test_reasons_added_and_removed(
async def test_ignored_unsupported_skipped( async def test_ignored_unsupported_skipped(
hass: HomeAssistant, hass: HomeAssistant,
aioclient_mock: AiohttpClientMocker, aioclient_mock: AiohttpClientMocker,
hass_ws_client, hass_ws_client: WebSocketGenerator,
): ) -> None:
"""Unsupported reasons which have an identical unhealthy reason are ignored.""" """Unsupported reasons which have an identical unhealthy reason are ignored."""
mock_resolution_info( mock_resolution_info(
aioclient_mock, unsupported=["privileged"], unhealthy=["privileged"] aioclient_mock, unsupported=["privileged"], unhealthy=["privileged"]
@ -418,8 +418,8 @@ async def test_ignored_unsupported_skipped(
async def test_new_unsupported_unhealthy_reason( async def test_new_unsupported_unhealthy_reason(
hass: HomeAssistant, hass: HomeAssistant,
aioclient_mock: AiohttpClientMocker, aioclient_mock: AiohttpClientMocker,
hass_ws_client, hass_ws_client: WebSocketGenerator,
): ) -> None:
"""New unsupported/unhealthy reasons result in a generic repair until next core update.""" """New unsupported/unhealthy reasons result in a generic repair until next core update."""
mock_resolution_info( mock_resolution_info(
aioclient_mock, unsupported=["fake_unsupported"], unhealthy=["fake_unhealthy"] aioclient_mock, unsupported=["fake_unsupported"], unhealthy=["fake_unhealthy"]

View file

@ -1,15 +1,16 @@
"""The tests for the hassio sensors.""" """The tests for the hassio sensors."""
import os import os
from unittest.mock import patch from unittest.mock import patch
import pytest import pytest
from homeassistant.components.hassio import DOMAIN from homeassistant.components.hassio import DOMAIN
from homeassistant.core import HomeAssistant
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
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
from tests.test_util.aiohttp import AiohttpClientMocker
MOCK_ENVIRON = {"SUPERVISOR": "127.0.0.1", "SUPERVISOR_TOKEN": "abcdefgh"} MOCK_ENVIRON = {"SUPERVISOR": "127.0.0.1", "SUPERVISOR_TOKEN": "abcdefgh"}
@ -156,7 +157,9 @@ def mock_all(aioclient_mock, request):
("sensor.test2_memory_percent", "unavailable"), ("sensor.test2_memory_percent", "unavailable"),
], ],
) )
async def test_sensor(hass, entity_id, expected, aioclient_mock): async def test_sensor(
hass: HomeAssistant, entity_id, expected, aioclient_mock: AiohttpClientMocker
) -> None:
"""Test hassio OS and addons sensor.""" """Test hassio OS and addons sensor."""
config_entry = MockConfigEntry(domain=DOMAIN, data={}, unique_id=DOMAIN) config_entry = MockConfigEntry(domain=DOMAIN, data={}, unique_id=DOMAIN)
config_entry.add_to_hass(hass) config_entry.add_to_hass(hass)

View file

@ -12,6 +12,7 @@ from homeassistant.setup import async_setup_component
from tests.common import MockConfigEntry from tests.common import MockConfigEntry
from tests.test_util.aiohttp import AiohttpClientMocker from tests.test_util.aiohttp import AiohttpClientMocker
from tests.typing import WebSocketGenerator
MOCK_ENVIRON = {"SUPERVISOR": "127.0.0.1", "SUPERVISOR_TOKEN": "abcdefgh"} MOCK_ENVIRON = {"SUPERVISOR": "127.0.0.1", "SUPERVISOR_TOKEN": "abcdefgh"}
@ -166,12 +167,12 @@ def mock_all(aioclient_mock, request):
], ],
) )
async def test_update_entities( async def test_update_entities(
hass, hass: HomeAssistant,
entity_id, entity_id,
expected_state, expected_state,
auto_update, auto_update,
aioclient_mock, aioclient_mock: AiohttpClientMocker,
): ) -> None:
"""Test update entities.""" """Test update entities."""
config_entry = MockConfigEntry(domain=DOMAIN, data={}, unique_id=DOMAIN) config_entry = MockConfigEntry(domain=DOMAIN, data={}, unique_id=DOMAIN)
config_entry.add_to_hass(hass) config_entry.add_to_hass(hass)
@ -425,7 +426,11 @@ async def test_update_core_with_error(
) )
async def test_release_notes_between_versions(hass, aioclient_mock, hass_ws_client): async def test_release_notes_between_versions(
hass: HomeAssistant,
aioclient_mock: AiohttpClientMocker,
hass_ws_client: WebSocketGenerator,
) -> None:
"""Test release notes between versions.""" """Test release notes between versions."""
config_entry = MockConfigEntry(domain=DOMAIN, data={}, unique_id=DOMAIN) config_entry = MockConfigEntry(domain=DOMAIN, data={}, unique_id=DOMAIN)
config_entry.add_to_hass(hass) config_entry.add_to_hass(hass)
@ -457,7 +462,11 @@ async def test_release_notes_between_versions(hass, aioclient_mock, hass_ws_clie
assert "New updates" in result["result"] assert "New updates" in result["result"]
async def test_release_notes_full(hass, aioclient_mock, hass_ws_client): async def test_release_notes_full(
hass: HomeAssistant,
aioclient_mock: AiohttpClientMocker,
hass_ws_client: WebSocketGenerator,
) -> None:
"""Test release notes no match.""" """Test release notes no match."""
config_entry = MockConfigEntry(domain=DOMAIN, data={}, unique_id=DOMAIN) config_entry = MockConfigEntry(domain=DOMAIN, data={}, unique_id=DOMAIN)
config_entry.add_to_hass(hass) config_entry.add_to_hass(hass)
@ -489,7 +498,11 @@ async def test_release_notes_full(hass, aioclient_mock, hass_ws_client):
assert "New updates" in result["result"] assert "New updates" in result["result"]
async def test_not_release_notes(hass, aioclient_mock, hass_ws_client): async def test_not_release_notes(
hass: HomeAssistant,
aioclient_mock: AiohttpClientMocker,
hass_ws_client: WebSocketGenerator,
) -> None:
"""Test handling where there are no release notes.""" """Test handling where there are no release notes."""
config_entry = MockConfigEntry(domain=DOMAIN, data={}, unique_id=DOMAIN) config_entry = MockConfigEntry(domain=DOMAIN, data={}, unique_id=DOMAIN)
config_entry.add_to_hass(hass) config_entry.add_to_hass(hass)

View file

@ -16,7 +16,9 @@ from homeassistant.core import HomeAssistant
from homeassistant.helpers.dispatcher import async_dispatcher_send from homeassistant.helpers.dispatcher import async_dispatcher_send
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
from tests.common import async_mock_signal from tests.common import MockUser, async_mock_signal
from tests.test_util.aiohttp import AiohttpClientMocker
from tests.typing import WebSocketGenerator
@pytest.fixture(autouse=True) @pytest.fixture(autouse=True)
@ -76,7 +78,9 @@ def mock_all(aioclient_mock):
) )
async def test_ws_subscription(hassio_env, hass: HomeAssistant, hass_ws_client): async def test_ws_subscription(
hassio_env, hass: HomeAssistant, hass_ws_client: WebSocketGenerator
) -> None:
"""Test websocket subscription.""" """Test websocket subscription."""
assert await async_setup_component(hass, "hassio", {}) assert await async_setup_component(hass, "hassio", {})
client = await hass_ws_client(hass) client = await hass_ws_client(hass)
@ -112,8 +116,11 @@ async def test_ws_subscription(hassio_env, hass: HomeAssistant, hass_ws_client):
async def test_websocket_supervisor_api( async def test_websocket_supervisor_api(
hassio_env, hass: HomeAssistant, hass_ws_client, aioclient_mock hassio_env,
): hass: HomeAssistant,
hass_ws_client: WebSocketGenerator,
aioclient_mock: AiohttpClientMocker,
) -> None:
"""Test Supervisor websocket api.""" """Test Supervisor websocket api."""
assert await async_setup_component(hass, "hassio", {}) assert await async_setup_component(hass, "hassio", {})
websocket_client = await hass_ws_client(hass) websocket_client = await hass_ws_client(hass)
@ -148,8 +155,11 @@ async def test_websocket_supervisor_api(
async def test_websocket_supervisor_api_error( async def test_websocket_supervisor_api_error(
hassio_env, hass: HomeAssistant, hass_ws_client, aioclient_mock hassio_env,
): hass: HomeAssistant,
hass_ws_client: WebSocketGenerator,
aioclient_mock: AiohttpClientMocker,
) -> None:
"""Test Supervisor websocket api error.""" """Test Supervisor websocket api error."""
assert await async_setup_component(hass, "hassio", {}) assert await async_setup_component(hass, "hassio", {})
websocket_client = await hass_ws_client(hass) websocket_client = await hass_ws_client(hass)
@ -172,8 +182,12 @@ async def test_websocket_supervisor_api_error(
async def test_websocket_non_admin_user( async def test_websocket_non_admin_user(
hassio_env, hass: HomeAssistant, hass_ws_client, aioclient_mock, hass_admin_user hassio_env,
): hass: HomeAssistant,
hass_ws_client: WebSocketGenerator,
aioclient_mock: AiohttpClientMocker,
hass_admin_user: MockUser,
) -> None:
"""Test Supervisor websocket api error.""" """Test Supervisor websocket api error."""
hass_admin_user.groups = [] hass_admin_user.groups = []
assert await async_setup_component(hass, "hassio", {}) assert await async_setup_component(hass, "hassio", {})

View file

@ -5,6 +5,7 @@ from unittest.mock import patch
import pytest import pytest
from homeassistant.const import UnitOfTemperature from homeassistant.const import UnitOfTemperature
from homeassistant.core import HomeAssistant
from homeassistant.setup import async_setup_component from homeassistant.setup import async_setup_component
VALID_CONFIG_MINIMAL = {"sensor": {"platform": "hddtemp"}} VALID_CONFIG_MINIMAL = {"sensor": {"platform": "hddtemp"}}
@ -87,7 +88,7 @@ def telnetmock():
yield yield
async def test_hddtemp_min_config(hass, telnetmock): async def test_hddtemp_min_config(hass: HomeAssistant, telnetmock) -> None:
"""Test minimal hddtemp configuration.""" """Test minimal hddtemp configuration."""
assert await async_setup_component(hass, "sensor", VALID_CONFIG_MINIMAL) assert await async_setup_component(hass, "sensor", VALID_CONFIG_MINIMAL)
await hass.async_block_till_done() await hass.async_block_till_done()
@ -108,7 +109,7 @@ async def test_hddtemp_min_config(hass, telnetmock):
) )
async def test_hddtemp_rename_config(hass, telnetmock): async def test_hddtemp_rename_config(hass: HomeAssistant, telnetmock) -> None:
"""Test hddtemp configuration with different name.""" """Test hddtemp configuration with different name."""
assert await async_setup_component(hass, "sensor", VALID_CONFIG_NAME) assert await async_setup_component(hass, "sensor", VALID_CONFIG_NAME)
await hass.async_block_till_done() await hass.async_block_till_done()
@ -121,7 +122,7 @@ async def test_hddtemp_rename_config(hass, telnetmock):
assert state.attributes.get("friendly_name") == f"FooBar {reference['device']}" assert state.attributes.get("friendly_name") == f"FooBar {reference['device']}"
async def test_hddtemp_one_disk(hass, telnetmock): async def test_hddtemp_one_disk(hass: HomeAssistant, telnetmock) -> None:
"""Test hddtemp one disk configuration.""" """Test hddtemp one disk configuration."""
assert await async_setup_component(hass, "sensor", VALID_CONFIG_ONE_DISK) assert await async_setup_component(hass, "sensor", VALID_CONFIG_ONE_DISK)
await hass.async_block_till_done() await hass.async_block_till_done()
@ -141,7 +142,7 @@ async def test_hddtemp_one_disk(hass, telnetmock):
) )
async def test_hddtemp_wrong_disk(hass, telnetmock): async def test_hddtemp_wrong_disk(hass: HomeAssistant, telnetmock) -> None:
"""Test hddtemp wrong disk configuration.""" """Test hddtemp wrong disk configuration."""
assert await async_setup_component(hass, "sensor", VALID_CONFIG_WRONG_DISK) assert await async_setup_component(hass, "sensor", VALID_CONFIG_WRONG_DISK)
await hass.async_block_till_done() await hass.async_block_till_done()
@ -151,7 +152,7 @@ async def test_hddtemp_wrong_disk(hass, telnetmock):
assert state.attributes.get("friendly_name") == "HD Temperature /dev/sdx1" assert state.attributes.get("friendly_name") == "HD Temperature /dev/sdx1"
async def test_hddtemp_multiple_disks(hass, telnetmock): async def test_hddtemp_multiple_disks(hass: HomeAssistant, telnetmock) -> None:
"""Test hddtemp multiple disk configuration.""" """Test hddtemp multiple disk configuration."""
assert await async_setup_component(hass, "sensor", VALID_CONFIG_MULTIPLE_DISKS) assert await async_setup_component(hass, "sensor", VALID_CONFIG_MULTIPLE_DISKS)
await hass.async_block_till_done() await hass.async_block_till_done()
@ -178,14 +179,14 @@ async def test_hddtemp_multiple_disks(hass, telnetmock):
) )
async def test_hddtemp_host_refused(hass, telnetmock): async def test_hddtemp_host_refused(hass: HomeAssistant, telnetmock) -> None:
"""Test hddtemp if host is refused.""" """Test hddtemp if host is refused."""
assert await async_setup_component(hass, "sensor", VALID_CONFIG_HOST_REFUSED) assert await async_setup_component(hass, "sensor", VALID_CONFIG_HOST_REFUSED)
await hass.async_block_till_done() await hass.async_block_till_done()
assert len(hass.states.async_all()) == 0 assert len(hass.states.async_all()) == 0
async def test_hddtemp_host_unreachable(hass, telnetmock): async def test_hddtemp_host_unreachable(hass: HomeAssistant, telnetmock) -> None:
"""Test hddtemp if host unreachable.""" """Test hddtemp if host unreachable."""
assert await async_setup_component(hass, "sensor", VALID_CONFIG_HOST_UNREACHABLE) assert await async_setup_component(hass, "sensor", VALID_CONFIG_HOST_UNREACHABLE)
await hass.async_block_till_done() await hass.async_block_till_done()