mirror of
https://github.com/home-assistant/core.git
synced 2025-07-27 15:17:35 +00:00
Improve type hints in owntracks tests (#123866)
This commit is contained in:
parent
903342b394
commit
d4082aee5a
@ -1,6 +1,7 @@
|
|||||||
"""The tests for the Owntracks device tracker."""
|
"""The tests for the Owntracks device tracker."""
|
||||||
|
|
||||||
import base64
|
import base64
|
||||||
|
from collections.abc import Callable
|
||||||
import json
|
import json
|
||||||
import pickle
|
import pickle
|
||||||
from unittest.mock import patch
|
from unittest.mock import patch
|
||||||
@ -18,6 +19,8 @@ from homeassistant.setup import async_setup_component
|
|||||||
from tests.common import MockConfigEntry, async_fire_mqtt_message
|
from tests.common import MockConfigEntry, async_fire_mqtt_message
|
||||||
from tests.typing import ClientSessionGenerator, MqttMockHAClient
|
from tests.typing import ClientSessionGenerator, MqttMockHAClient
|
||||||
|
|
||||||
|
type OwnTracksContextFactory = Callable[[], owntracks.OwnTracksContext]
|
||||||
|
|
||||||
USER = "greg"
|
USER = "greg"
|
||||||
DEVICE = "phone"
|
DEVICE = "phone"
|
||||||
|
|
||||||
@ -314,7 +317,7 @@ async def setup_owntracks(hass, config, ctx_cls=owntracks.OwnTracksContext):
|
|||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
def context(hass, setup_comp):
|
def context(hass: HomeAssistant, setup_comp: None) -> OwnTracksContextFactory:
|
||||||
"""Set up the mocked context."""
|
"""Set up the mocked context."""
|
||||||
orig_context = owntracks.OwnTracksContext
|
orig_context = owntracks.OwnTracksContext
|
||||||
context = None
|
context = None
|
||||||
@ -407,14 +410,16 @@ def assert_mobile_tracker_accuracy(hass, accuracy, beacon=IBEACON_DEVICE):
|
|||||||
assert state.attributes.get("gps_accuracy") == accuracy
|
assert state.attributes.get("gps_accuracy") == accuracy
|
||||||
|
|
||||||
|
|
||||||
async def test_location_invalid_devid(hass: HomeAssistant, context) -> None:
|
@pytest.mark.usefixtures("context")
|
||||||
|
async def test_location_invalid_devid(hass: HomeAssistant) -> None:
|
||||||
"""Test the update of a location."""
|
"""Test the update of a location."""
|
||||||
await send_message(hass, "owntracks/paulus/nexus-5x", LOCATION_MESSAGE)
|
await send_message(hass, "owntracks/paulus/nexus-5x", LOCATION_MESSAGE)
|
||||||
state = hass.states.get("device_tracker.paulus_nexus_5x")
|
state = hass.states.get("device_tracker.paulus_nexus_5x")
|
||||||
assert state.state == "outer"
|
assert state.state == "outer"
|
||||||
|
|
||||||
|
|
||||||
async def test_location_update(hass: HomeAssistant, context) -> None:
|
@pytest.mark.usefixtures("context")
|
||||||
|
async def test_location_update(hass: HomeAssistant) -> None:
|
||||||
"""Test the update of a location."""
|
"""Test the update of a location."""
|
||||||
await send_message(hass, LOCATION_TOPIC, LOCATION_MESSAGE)
|
await send_message(hass, LOCATION_TOPIC, LOCATION_MESSAGE)
|
||||||
|
|
||||||
@ -424,7 +429,8 @@ async def test_location_update(hass: HomeAssistant, context) -> None:
|
|||||||
assert_location_state(hass, "outer")
|
assert_location_state(hass, "outer")
|
||||||
|
|
||||||
|
|
||||||
async def test_location_update_no_t_key(hass: HomeAssistant, context) -> None:
|
@pytest.mark.usefixtures("context")
|
||||||
|
async def test_location_update_no_t_key(hass: HomeAssistant) -> None:
|
||||||
"""Test the update of a location when message does not contain 't'."""
|
"""Test the update of a location when message does not contain 't'."""
|
||||||
message = LOCATION_MESSAGE.copy()
|
message = LOCATION_MESSAGE.copy()
|
||||||
message.pop("t")
|
message.pop("t")
|
||||||
@ -436,7 +442,8 @@ async def test_location_update_no_t_key(hass: HomeAssistant, context) -> None:
|
|||||||
assert_location_state(hass, "outer")
|
assert_location_state(hass, "outer")
|
||||||
|
|
||||||
|
|
||||||
async def test_location_inaccurate_gps(hass: HomeAssistant, context) -> None:
|
@pytest.mark.usefixtures("context")
|
||||||
|
async def test_location_inaccurate_gps(hass: HomeAssistant) -> None:
|
||||||
"""Test the location for inaccurate GPS information."""
|
"""Test the location for inaccurate GPS information."""
|
||||||
await send_message(hass, LOCATION_TOPIC, LOCATION_MESSAGE)
|
await send_message(hass, LOCATION_TOPIC, LOCATION_MESSAGE)
|
||||||
await send_message(hass, LOCATION_TOPIC, LOCATION_MESSAGE_INACCURATE)
|
await send_message(hass, LOCATION_TOPIC, LOCATION_MESSAGE_INACCURATE)
|
||||||
@ -446,7 +453,8 @@ async def test_location_inaccurate_gps(hass: HomeAssistant, context) -> None:
|
|||||||
assert_location_longitude(hass, LOCATION_MESSAGE["lon"])
|
assert_location_longitude(hass, LOCATION_MESSAGE["lon"])
|
||||||
|
|
||||||
|
|
||||||
async def test_location_zero_accuracy_gps(hass: HomeAssistant, context) -> None:
|
@pytest.mark.usefixtures("context")
|
||||||
|
async def test_location_zero_accuracy_gps(hass: HomeAssistant) -> None:
|
||||||
"""Ignore the location for zero accuracy GPS information."""
|
"""Ignore the location for zero accuracy GPS information."""
|
||||||
await send_message(hass, LOCATION_TOPIC, LOCATION_MESSAGE)
|
await send_message(hass, LOCATION_TOPIC, LOCATION_MESSAGE)
|
||||||
await send_message(hass, LOCATION_TOPIC, LOCATION_MESSAGE_ZERO_ACCURACY)
|
await send_message(hass, LOCATION_TOPIC, LOCATION_MESSAGE_ZERO_ACCURACY)
|
||||||
@ -458,7 +466,9 @@ async def test_location_zero_accuracy_gps(hass: HomeAssistant, context) -> None:
|
|||||||
|
|
||||||
# ------------------------------------------------------------------------
|
# ------------------------------------------------------------------------
|
||||||
# GPS based event entry / exit testing
|
# GPS based event entry / exit testing
|
||||||
async def test_event_gps_entry_exit(hass: HomeAssistant, context) -> None:
|
async def test_event_gps_entry_exit(
|
||||||
|
hass: HomeAssistant, context: OwnTracksContextFactory
|
||||||
|
) -> None:
|
||||||
"""Test the entry event."""
|
"""Test the entry event."""
|
||||||
# Entering the owntracks circular region named "inner"
|
# Entering the owntracks circular region named "inner"
|
||||||
await send_message(hass, EVENT_TOPIC, REGION_GPS_ENTER_MESSAGE)
|
await send_message(hass, EVENT_TOPIC, REGION_GPS_ENTER_MESSAGE)
|
||||||
@ -496,7 +506,9 @@ async def test_event_gps_entry_exit(hass: HomeAssistant, context) -> None:
|
|||||||
assert_location_accuracy(hass, LOCATION_MESSAGE["acc"])
|
assert_location_accuracy(hass, LOCATION_MESSAGE["acc"])
|
||||||
|
|
||||||
|
|
||||||
async def test_event_gps_with_spaces(hass: HomeAssistant, context) -> None:
|
async def test_event_gps_with_spaces(
|
||||||
|
hass: HomeAssistant, context: OwnTracksContextFactory
|
||||||
|
) -> None:
|
||||||
"""Test the entry event."""
|
"""Test the entry event."""
|
||||||
message = build_message({"desc": "inner 2"}, REGION_GPS_ENTER_MESSAGE)
|
message = build_message({"desc": "inner 2"}, REGION_GPS_ENTER_MESSAGE)
|
||||||
await send_message(hass, EVENT_TOPIC, message)
|
await send_message(hass, EVENT_TOPIC, message)
|
||||||
@ -509,7 +521,8 @@ async def test_event_gps_with_spaces(hass: HomeAssistant, context) -> None:
|
|||||||
assert not context().regions_entered[USER]
|
assert not context().regions_entered[USER]
|
||||||
|
|
||||||
|
|
||||||
async def test_event_gps_entry_inaccurate(hass: HomeAssistant, context) -> None:
|
@pytest.mark.usefixtures("context")
|
||||||
|
async def test_event_gps_entry_inaccurate(hass: HomeAssistant) -> None:
|
||||||
"""Test the event for inaccurate entry."""
|
"""Test the event for inaccurate entry."""
|
||||||
# Set location to the outer zone.
|
# Set location to the outer zone.
|
||||||
await send_message(hass, LOCATION_TOPIC, LOCATION_MESSAGE)
|
await send_message(hass, LOCATION_TOPIC, LOCATION_MESSAGE)
|
||||||
@ -522,7 +535,9 @@ async def test_event_gps_entry_inaccurate(hass: HomeAssistant, context) -> None:
|
|||||||
assert_location_state(hass, "inner")
|
assert_location_state(hass, "inner")
|
||||||
|
|
||||||
|
|
||||||
async def test_event_gps_entry_exit_inaccurate(hass: HomeAssistant, context) -> None:
|
async def test_event_gps_entry_exit_inaccurate(
|
||||||
|
hass: HomeAssistant, context: OwnTracksContextFactory
|
||||||
|
) -> None:
|
||||||
"""Test the event for inaccurate exit."""
|
"""Test the event for inaccurate exit."""
|
||||||
await send_message(hass, EVENT_TOPIC, REGION_GPS_ENTER_MESSAGE)
|
await send_message(hass, EVENT_TOPIC, REGION_GPS_ENTER_MESSAGE)
|
||||||
|
|
||||||
@ -542,7 +557,9 @@ async def test_event_gps_entry_exit_inaccurate(hass: HomeAssistant, context) ->
|
|||||||
assert not context().regions_entered[USER]
|
assert not context().regions_entered[USER]
|
||||||
|
|
||||||
|
|
||||||
async def test_event_gps_entry_exit_zero_accuracy(hass: HomeAssistant, context) -> None:
|
async def test_event_gps_entry_exit_zero_accuracy(
|
||||||
|
hass: HomeAssistant, context: OwnTracksContextFactory
|
||||||
|
) -> None:
|
||||||
"""Test entry/exit events with accuracy zero."""
|
"""Test entry/exit events with accuracy zero."""
|
||||||
await send_message(hass, EVENT_TOPIC, REGION_GPS_ENTER_MESSAGE_ZERO)
|
await send_message(hass, EVENT_TOPIC, REGION_GPS_ENTER_MESSAGE_ZERO)
|
||||||
|
|
||||||
@ -562,9 +579,8 @@ async def test_event_gps_entry_exit_zero_accuracy(hass: HomeAssistant, context)
|
|||||||
assert not context().regions_entered[USER]
|
assert not context().regions_entered[USER]
|
||||||
|
|
||||||
|
|
||||||
async def test_event_gps_exit_outside_zone_sets_away(
|
@pytest.mark.usefixtures("context")
|
||||||
hass: HomeAssistant, context
|
async def test_event_gps_exit_outside_zone_sets_away(hass: HomeAssistant) -> None:
|
||||||
) -> None:
|
|
||||||
"""Test the event for exit zone."""
|
"""Test the event for exit zone."""
|
||||||
await send_message(hass, EVENT_TOPIC, REGION_GPS_ENTER_MESSAGE)
|
await send_message(hass, EVENT_TOPIC, REGION_GPS_ENTER_MESSAGE)
|
||||||
assert_location_state(hass, "inner")
|
assert_location_state(hass, "inner")
|
||||||
@ -577,7 +593,8 @@ async def test_event_gps_exit_outside_zone_sets_away(
|
|||||||
assert_location_state(hass, STATE_NOT_HOME)
|
assert_location_state(hass, STATE_NOT_HOME)
|
||||||
|
|
||||||
|
|
||||||
async def test_event_gps_entry_exit_right_order(hass: HomeAssistant, context) -> None:
|
@pytest.mark.usefixtures("context")
|
||||||
|
async def test_event_gps_entry_exit_right_order(hass: HomeAssistant) -> None:
|
||||||
"""Test the event for ordering."""
|
"""Test the event for ordering."""
|
||||||
# Enter inner zone
|
# Enter inner zone
|
||||||
# Set location to the outer zone.
|
# Set location to the outer zone.
|
||||||
@ -602,7 +619,8 @@ async def test_event_gps_entry_exit_right_order(hass: HomeAssistant, context) ->
|
|||||||
assert_location_state(hass, "outer")
|
assert_location_state(hass, "outer")
|
||||||
|
|
||||||
|
|
||||||
async def test_event_gps_entry_exit_wrong_order(hass: HomeAssistant, context) -> None:
|
@pytest.mark.usefixtures("context")
|
||||||
|
async def test_event_gps_entry_exit_wrong_order(hass: HomeAssistant) -> None:
|
||||||
"""Test the event for wrong order."""
|
"""Test the event for wrong order."""
|
||||||
# Enter inner zone
|
# Enter inner zone
|
||||||
await send_message(hass, EVENT_TOPIC, REGION_GPS_ENTER_MESSAGE)
|
await send_message(hass, EVENT_TOPIC, REGION_GPS_ENTER_MESSAGE)
|
||||||
@ -625,7 +643,8 @@ async def test_event_gps_entry_exit_wrong_order(hass: HomeAssistant, context) ->
|
|||||||
assert_location_state(hass, "outer")
|
assert_location_state(hass, "outer")
|
||||||
|
|
||||||
|
|
||||||
async def test_event_gps_entry_unknown_zone(hass: HomeAssistant, context) -> None:
|
@pytest.mark.usefixtures("context")
|
||||||
|
async def test_event_gps_entry_unknown_zone(hass: HomeAssistant) -> None:
|
||||||
"""Test the event for unknown zone."""
|
"""Test the event for unknown zone."""
|
||||||
# Just treat as location update
|
# Just treat as location update
|
||||||
message = build_message({"desc": "unknown"}, REGION_GPS_ENTER_MESSAGE)
|
message = build_message({"desc": "unknown"}, REGION_GPS_ENTER_MESSAGE)
|
||||||
@ -634,7 +653,8 @@ async def test_event_gps_entry_unknown_zone(hass: HomeAssistant, context) -> Non
|
|||||||
assert_location_state(hass, "inner")
|
assert_location_state(hass, "inner")
|
||||||
|
|
||||||
|
|
||||||
async def test_event_gps_exit_unknown_zone(hass: HomeAssistant, context) -> None:
|
@pytest.mark.usefixtures("context")
|
||||||
|
async def test_event_gps_exit_unknown_zone(hass: HomeAssistant) -> None:
|
||||||
"""Test the event for unknown zone."""
|
"""Test the event for unknown zone."""
|
||||||
# Just treat as location update
|
# Just treat as location update
|
||||||
message = build_message({"desc": "unknown"}, REGION_GPS_LEAVE_MESSAGE)
|
message = build_message({"desc": "unknown"}, REGION_GPS_LEAVE_MESSAGE)
|
||||||
@ -643,7 +663,8 @@ async def test_event_gps_exit_unknown_zone(hass: HomeAssistant, context) -> None
|
|||||||
assert_location_state(hass, "outer")
|
assert_location_state(hass, "outer")
|
||||||
|
|
||||||
|
|
||||||
async def test_event_entry_zone_loading_dash(hass: HomeAssistant, context) -> None:
|
@pytest.mark.usefixtures("context")
|
||||||
|
async def test_event_entry_zone_loading_dash(hass: HomeAssistant) -> None:
|
||||||
"""Test the event for zone landing."""
|
"""Test the event for zone landing."""
|
||||||
# Make sure the leading - is ignored
|
# Make sure the leading - is ignored
|
||||||
# Owntracks uses this to switch on hold
|
# Owntracks uses this to switch on hold
|
||||||
@ -652,7 +673,9 @@ async def test_event_entry_zone_loading_dash(hass: HomeAssistant, context) -> No
|
|||||||
assert_location_state(hass, "inner")
|
assert_location_state(hass, "inner")
|
||||||
|
|
||||||
|
|
||||||
async def test_events_only_on(hass: HomeAssistant, context) -> None:
|
async def test_events_only_on(
|
||||||
|
hass: HomeAssistant, context: OwnTracksContextFactory
|
||||||
|
) -> None:
|
||||||
"""Test events_only config suppresses location updates."""
|
"""Test events_only config suppresses location updates."""
|
||||||
# Sending a location message that is not home
|
# Sending a location message that is not home
|
||||||
await send_message(hass, LOCATION_TOPIC, LOCATION_MESSAGE_NOT_HOME)
|
await send_message(hass, LOCATION_TOPIC, LOCATION_MESSAGE_NOT_HOME)
|
||||||
@ -673,7 +696,9 @@ async def test_events_only_on(hass: HomeAssistant, context) -> None:
|
|||||||
assert_location_state(hass, STATE_NOT_HOME)
|
assert_location_state(hass, STATE_NOT_HOME)
|
||||||
|
|
||||||
|
|
||||||
async def test_events_only_off(hass: HomeAssistant, context) -> None:
|
async def test_events_only_off(
|
||||||
|
hass: HomeAssistant, context: OwnTracksContextFactory
|
||||||
|
) -> None:
|
||||||
"""Test when events_only is False."""
|
"""Test when events_only is False."""
|
||||||
# Sending a location message that is not home
|
# Sending a location message that is not home
|
||||||
await send_message(hass, LOCATION_TOPIC, LOCATION_MESSAGE_NOT_HOME)
|
await send_message(hass, LOCATION_TOPIC, LOCATION_MESSAGE_NOT_HOME)
|
||||||
@ -694,7 +719,8 @@ async def test_events_only_off(hass: HomeAssistant, context) -> None:
|
|||||||
assert_location_state(hass, "outer")
|
assert_location_state(hass, "outer")
|
||||||
|
|
||||||
|
|
||||||
async def test_event_source_type_entry_exit(hass: HomeAssistant, context) -> None:
|
@pytest.mark.usefixtures("context")
|
||||||
|
async def test_event_source_type_entry_exit(hass: HomeAssistant) -> None:
|
||||||
"""Test the entry and exit events of source type."""
|
"""Test the entry and exit events of source type."""
|
||||||
# Entering the owntracks circular region named "inner"
|
# Entering the owntracks circular region named "inner"
|
||||||
await send_message(hass, EVENT_TOPIC, REGION_GPS_ENTER_MESSAGE)
|
await send_message(hass, EVENT_TOPIC, REGION_GPS_ENTER_MESSAGE)
|
||||||
@ -724,7 +750,9 @@ async def test_event_source_type_entry_exit(hass: HomeAssistant, context) -> Non
|
|||||||
|
|
||||||
|
|
||||||
# Region Beacon based event entry / exit testing
|
# Region Beacon based event entry / exit testing
|
||||||
async def test_event_region_entry_exit(hass: HomeAssistant, context) -> None:
|
async def test_event_region_entry_exit(
|
||||||
|
hass: HomeAssistant, context: OwnTracksContextFactory
|
||||||
|
) -> None:
|
||||||
"""Test the entry event."""
|
"""Test the entry event."""
|
||||||
# Seeing a beacon named "inner"
|
# Seeing a beacon named "inner"
|
||||||
await send_message(hass, EVENT_TOPIC, REGION_BEACON_ENTER_MESSAGE)
|
await send_message(hass, EVENT_TOPIC, REGION_BEACON_ENTER_MESSAGE)
|
||||||
@ -763,7 +791,9 @@ async def test_event_region_entry_exit(hass: HomeAssistant, context) -> None:
|
|||||||
assert_location_accuracy(hass, LOCATION_MESSAGE["acc"])
|
assert_location_accuracy(hass, LOCATION_MESSAGE["acc"])
|
||||||
|
|
||||||
|
|
||||||
async def test_event_region_with_spaces(hass: HomeAssistant, context) -> None:
|
async def test_event_region_with_spaces(
|
||||||
|
hass: HomeAssistant, context: OwnTracksContextFactory
|
||||||
|
) -> None:
|
||||||
"""Test the entry event."""
|
"""Test the entry event."""
|
||||||
message = build_message({"desc": "inner 2"}, REGION_BEACON_ENTER_MESSAGE)
|
message = build_message({"desc": "inner 2"}, REGION_BEACON_ENTER_MESSAGE)
|
||||||
await send_message(hass, EVENT_TOPIC, message)
|
await send_message(hass, EVENT_TOPIC, message)
|
||||||
@ -776,9 +806,8 @@ async def test_event_region_with_spaces(hass: HomeAssistant, context) -> None:
|
|||||||
assert not context().regions_entered[USER]
|
assert not context().regions_entered[USER]
|
||||||
|
|
||||||
|
|
||||||
async def test_event_region_entry_exit_right_order(
|
@pytest.mark.usefixtures("context")
|
||||||
hass: HomeAssistant, context
|
async def test_event_region_entry_exit_right_order(hass: HomeAssistant) -> None:
|
||||||
) -> None:
|
|
||||||
"""Test the event for ordering."""
|
"""Test the event for ordering."""
|
||||||
# Enter inner zone
|
# Enter inner zone
|
||||||
# Set location to the outer zone.
|
# Set location to the outer zone.
|
||||||
@ -809,9 +838,8 @@ async def test_event_region_entry_exit_right_order(
|
|||||||
assert_location_state(hass, "inner")
|
assert_location_state(hass, "inner")
|
||||||
|
|
||||||
|
|
||||||
async def test_event_region_entry_exit_wrong_order(
|
@pytest.mark.usefixtures("context")
|
||||||
hass: HomeAssistant, context
|
async def test_event_region_entry_exit_wrong_order(hass: HomeAssistant) -> None:
|
||||||
) -> None:
|
|
||||||
"""Test the event for wrong order."""
|
"""Test the event for wrong order."""
|
||||||
# Enter inner zone
|
# Enter inner zone
|
||||||
await send_message(hass, EVENT_TOPIC, REGION_BEACON_ENTER_MESSAGE)
|
await send_message(hass, EVENT_TOPIC, REGION_BEACON_ENTER_MESSAGE)
|
||||||
@ -838,9 +866,8 @@ async def test_event_region_entry_exit_wrong_order(
|
|||||||
assert_location_state(hass, "inner_2")
|
assert_location_state(hass, "inner_2")
|
||||||
|
|
||||||
|
|
||||||
async def test_event_beacon_unknown_zone_no_location(
|
@pytest.mark.usefixtures("context")
|
||||||
hass: HomeAssistant, context
|
async def test_event_beacon_unknown_zone_no_location(hass: HomeAssistant) -> None:
|
||||||
) -> None:
|
|
||||||
"""Test the event for unknown zone."""
|
"""Test the event for unknown zone."""
|
||||||
# A beacon which does not match a HA zone is the
|
# A beacon which does not match a HA zone is the
|
||||||
# definition of a mobile beacon. In this case, "unknown"
|
# definition of a mobile beacon. In this case, "unknown"
|
||||||
@ -865,7 +892,8 @@ async def test_event_beacon_unknown_zone_no_location(
|
|||||||
assert_mobile_tracker_state(hass, "unknown", "unknown")
|
assert_mobile_tracker_state(hass, "unknown", "unknown")
|
||||||
|
|
||||||
|
|
||||||
async def test_event_beacon_unknown_zone(hass: HomeAssistant, context) -> None:
|
@pytest.mark.usefixtures("context")
|
||||||
|
async def test_event_beacon_unknown_zone(hass: HomeAssistant) -> None:
|
||||||
"""Test the event for unknown zone."""
|
"""Test the event for unknown zone."""
|
||||||
# A beacon which does not match a HA zone is the
|
# A beacon which does not match a HA zone is the
|
||||||
# definition of a mobile beacon. In this case, "unknown"
|
# definition of a mobile beacon. In this case, "unknown"
|
||||||
@ -885,9 +913,8 @@ async def test_event_beacon_unknown_zone(hass: HomeAssistant, context) -> None:
|
|||||||
assert_mobile_tracker_state(hass, "outer", "unknown")
|
assert_mobile_tracker_state(hass, "outer", "unknown")
|
||||||
|
|
||||||
|
|
||||||
async def test_event_beacon_entry_zone_loading_dash(
|
@pytest.mark.usefixtures("context")
|
||||||
hass: HomeAssistant, context
|
async def test_event_beacon_entry_zone_loading_dash(hass: HomeAssistant) -> None:
|
||||||
) -> None:
|
|
||||||
"""Test the event for beacon zone landing."""
|
"""Test the event for beacon zone landing."""
|
||||||
# Make sure the leading - is ignored
|
# Make sure the leading - is ignored
|
||||||
# Owntracks uses this to switch on hold
|
# Owntracks uses this to switch on hold
|
||||||
@ -899,7 +926,8 @@ async def test_event_beacon_entry_zone_loading_dash(
|
|||||||
|
|
||||||
# ------------------------------------------------------------------------
|
# ------------------------------------------------------------------------
|
||||||
# Mobile Beacon based event entry / exit testing
|
# Mobile Beacon based event entry / exit testing
|
||||||
async def test_mobile_enter_move_beacon(hass: HomeAssistant, context) -> None:
|
@pytest.mark.usefixtures("context")
|
||||||
|
async def test_mobile_enter_move_beacon(hass: HomeAssistant) -> None:
|
||||||
"""Test the movement of a beacon."""
|
"""Test the movement of a beacon."""
|
||||||
# I am in the outer zone.
|
# I am in the outer zone.
|
||||||
await send_message(hass, LOCATION_TOPIC, LOCATION_MESSAGE)
|
await send_message(hass, LOCATION_TOPIC, LOCATION_MESSAGE)
|
||||||
@ -923,7 +951,8 @@ async def test_mobile_enter_move_beacon(hass: HomeAssistant, context) -> None:
|
|||||||
assert_mobile_tracker_latitude(hass, not_home_lat)
|
assert_mobile_tracker_latitude(hass, not_home_lat)
|
||||||
|
|
||||||
|
|
||||||
async def test_mobile_enter_exit_region_beacon(hass: HomeAssistant, context) -> None:
|
@pytest.mark.usefixtures("context")
|
||||||
|
async def test_mobile_enter_exit_region_beacon(hass: HomeAssistant) -> None:
|
||||||
"""Test the enter and the exit of a mobile beacon."""
|
"""Test the enter and the exit of a mobile beacon."""
|
||||||
# I am in the outer zone.
|
# I am in the outer zone.
|
||||||
await send_message(hass, LOCATION_TOPIC, LOCATION_MESSAGE)
|
await send_message(hass, LOCATION_TOPIC, LOCATION_MESSAGE)
|
||||||
@ -946,7 +975,8 @@ async def test_mobile_enter_exit_region_beacon(hass: HomeAssistant, context) ->
|
|||||||
assert_mobile_tracker_state(hass, "outer")
|
assert_mobile_tracker_state(hass, "outer")
|
||||||
|
|
||||||
|
|
||||||
async def test_mobile_exit_move_beacon(hass: HomeAssistant, context) -> None:
|
@pytest.mark.usefixtures("context")
|
||||||
|
async def test_mobile_exit_move_beacon(hass: HomeAssistant) -> None:
|
||||||
"""Test the exit move of a beacon."""
|
"""Test the exit move of a beacon."""
|
||||||
# I am in the outer zone.
|
# I am in the outer zone.
|
||||||
await send_message(hass, LOCATION_TOPIC, LOCATION_MESSAGE)
|
await send_message(hass, LOCATION_TOPIC, LOCATION_MESSAGE)
|
||||||
@ -968,7 +998,9 @@ async def test_mobile_exit_move_beacon(hass: HomeAssistant, context) -> None:
|
|||||||
assert_mobile_tracker_state(hass, "outer")
|
assert_mobile_tracker_state(hass, "outer")
|
||||||
|
|
||||||
|
|
||||||
async def test_mobile_multiple_async_enter_exit(hass: HomeAssistant, context) -> None:
|
async def test_mobile_multiple_async_enter_exit(
|
||||||
|
hass: HomeAssistant, context: OwnTracksContextFactory
|
||||||
|
) -> None:
|
||||||
"""Test the multiple entering."""
|
"""Test the multiple entering."""
|
||||||
# Test race condition
|
# Test race condition
|
||||||
for _ in range(20):
|
for _ in range(20):
|
||||||
@ -988,7 +1020,9 @@ async def test_mobile_multiple_async_enter_exit(hass: HomeAssistant, context) ->
|
|||||||
assert len(context().mobile_beacons_active["greg_phone"]) == 0
|
assert len(context().mobile_beacons_active["greg_phone"]) == 0
|
||||||
|
|
||||||
|
|
||||||
async def test_mobile_multiple_enter_exit(hass: HomeAssistant, context) -> None:
|
async def test_mobile_multiple_enter_exit(
|
||||||
|
hass: HomeAssistant, context: OwnTracksContextFactory
|
||||||
|
) -> None:
|
||||||
"""Test the multiple entering."""
|
"""Test the multiple entering."""
|
||||||
await send_message(hass, EVENT_TOPIC, MOBILE_BEACON_ENTER_EVENT_MESSAGE)
|
await send_message(hass, EVENT_TOPIC, MOBILE_BEACON_ENTER_EVENT_MESSAGE)
|
||||||
await send_message(hass, EVENT_TOPIC, MOBILE_BEACON_ENTER_EVENT_MESSAGE)
|
await send_message(hass, EVENT_TOPIC, MOBILE_BEACON_ENTER_EVENT_MESSAGE)
|
||||||
@ -997,7 +1031,8 @@ async def test_mobile_multiple_enter_exit(hass: HomeAssistant, context) -> None:
|
|||||||
assert len(context().mobile_beacons_active["greg_phone"]) == 0
|
assert len(context().mobile_beacons_active["greg_phone"]) == 0
|
||||||
|
|
||||||
|
|
||||||
async def test_complex_movement(hass: HomeAssistant, context) -> None:
|
@pytest.mark.usefixtures("context")
|
||||||
|
async def test_complex_movement(hass: HomeAssistant) -> None:
|
||||||
"""Test a complex sequence representative of real-world use."""
|
"""Test a complex sequence representative of real-world use."""
|
||||||
# I am in the outer zone.
|
# I am in the outer zone.
|
||||||
await send_message(hass, LOCATION_TOPIC, LOCATION_MESSAGE)
|
await send_message(hass, LOCATION_TOPIC, LOCATION_MESSAGE)
|
||||||
@ -1119,9 +1154,8 @@ async def test_complex_movement(hass: HomeAssistant, context) -> None:
|
|||||||
assert_mobile_tracker_state(hass, "outer")
|
assert_mobile_tracker_state(hass, "outer")
|
||||||
|
|
||||||
|
|
||||||
async def test_complex_movement_sticky_keys_beacon(
|
@pytest.mark.usefixtures("context")
|
||||||
hass: HomeAssistant, context
|
async def test_complex_movement_sticky_keys_beacon(hass: HomeAssistant) -> None:
|
||||||
) -> None:
|
|
||||||
"""Test a complex sequence which was previously broken."""
|
"""Test a complex sequence which was previously broken."""
|
||||||
# I am not_home
|
# I am not_home
|
||||||
await send_message(hass, LOCATION_TOPIC, LOCATION_MESSAGE)
|
await send_message(hass, LOCATION_TOPIC, LOCATION_MESSAGE)
|
||||||
@ -1233,7 +1267,8 @@ async def test_complex_movement_sticky_keys_beacon(
|
|||||||
assert_mobile_tracker_latitude(hass, INNER_ZONE["latitude"])
|
assert_mobile_tracker_latitude(hass, INNER_ZONE["latitude"])
|
||||||
|
|
||||||
|
|
||||||
async def test_waypoint_import_simple(hass: HomeAssistant, context) -> None:
|
@pytest.mark.usefixtures("context")
|
||||||
|
async def test_waypoint_import_simple(hass: HomeAssistant) -> None:
|
||||||
"""Test a simple import of list of waypoints."""
|
"""Test a simple import of list of waypoints."""
|
||||||
waypoints_message = WAYPOINTS_EXPORTED_MESSAGE.copy()
|
waypoints_message = WAYPOINTS_EXPORTED_MESSAGE.copy()
|
||||||
await send_message(hass, WAYPOINTS_TOPIC, waypoints_message)
|
await send_message(hass, WAYPOINTS_TOPIC, waypoints_message)
|
||||||
@ -1244,7 +1279,8 @@ async def test_waypoint_import_simple(hass: HomeAssistant, context) -> None:
|
|||||||
assert wayp is not None
|
assert wayp is not None
|
||||||
|
|
||||||
|
|
||||||
async def test_waypoint_import_block(hass: HomeAssistant, context) -> None:
|
@pytest.mark.usefixtures("context")
|
||||||
|
async def test_waypoint_import_block(hass: HomeAssistant) -> None:
|
||||||
"""Test import of list of waypoints for blocked user."""
|
"""Test import of list of waypoints for blocked user."""
|
||||||
waypoints_message = WAYPOINTS_EXPORTED_MESSAGE.copy()
|
waypoints_message = WAYPOINTS_EXPORTED_MESSAGE.copy()
|
||||||
await send_message(hass, WAYPOINTS_TOPIC_BLOCKED, waypoints_message)
|
await send_message(hass, WAYPOINTS_TOPIC_BLOCKED, waypoints_message)
|
||||||
@ -1275,7 +1311,8 @@ async def test_waypoint_import_no_whitelist(hass: HomeAssistant, setup_comp) ->
|
|||||||
assert wayp is not None
|
assert wayp is not None
|
||||||
|
|
||||||
|
|
||||||
async def test_waypoint_import_bad_json(hass: HomeAssistant, context) -> None:
|
@pytest.mark.usefixtures("context")
|
||||||
|
async def test_waypoint_import_bad_json(hass: HomeAssistant) -> None:
|
||||||
"""Test importing a bad JSON payload."""
|
"""Test importing a bad JSON payload."""
|
||||||
waypoints_message = WAYPOINTS_EXPORTED_MESSAGE.copy()
|
waypoints_message = WAYPOINTS_EXPORTED_MESSAGE.copy()
|
||||||
await send_message(hass, WAYPOINTS_TOPIC, waypoints_message, True)
|
await send_message(hass, WAYPOINTS_TOPIC, waypoints_message, True)
|
||||||
@ -1286,7 +1323,8 @@ async def test_waypoint_import_bad_json(hass: HomeAssistant, context) -> None:
|
|||||||
assert wayp is None
|
assert wayp is None
|
||||||
|
|
||||||
|
|
||||||
async def test_waypoint_import_existing(hass: HomeAssistant, context) -> None:
|
@pytest.mark.usefixtures("context")
|
||||||
|
async def test_waypoint_import_existing(hass: HomeAssistant) -> None:
|
||||||
"""Test importing a zone that exists."""
|
"""Test importing a zone that exists."""
|
||||||
waypoints_message = WAYPOINTS_EXPORTED_MESSAGE.copy()
|
waypoints_message = WAYPOINTS_EXPORTED_MESSAGE.copy()
|
||||||
await send_message(hass, WAYPOINTS_TOPIC, waypoints_message)
|
await send_message(hass, WAYPOINTS_TOPIC, waypoints_message)
|
||||||
@ -1299,7 +1337,8 @@ async def test_waypoint_import_existing(hass: HomeAssistant, context) -> None:
|
|||||||
assert wayp == new_wayp
|
assert wayp == new_wayp
|
||||||
|
|
||||||
|
|
||||||
async def test_single_waypoint_import(hass: HomeAssistant, context) -> None:
|
@pytest.mark.usefixtures("context")
|
||||||
|
async def test_single_waypoint_import(hass: HomeAssistant) -> None:
|
||||||
"""Test single waypoint message."""
|
"""Test single waypoint message."""
|
||||||
waypoint_message = WAYPOINT_MESSAGE.copy()
|
waypoint_message = WAYPOINT_MESSAGE.copy()
|
||||||
await send_message(hass, WAYPOINT_TOPIC, waypoint_message)
|
await send_message(hass, WAYPOINT_TOPIC, waypoint_message)
|
||||||
@ -1307,7 +1346,8 @@ async def test_single_waypoint_import(hass: HomeAssistant, context) -> None:
|
|||||||
assert wayp is not None
|
assert wayp is not None
|
||||||
|
|
||||||
|
|
||||||
async def test_not_implemented_message(hass: HomeAssistant, context) -> None:
|
@pytest.mark.usefixtures("context")
|
||||||
|
async def test_not_implemented_message(hass: HomeAssistant) -> None:
|
||||||
"""Handle not implemented message type."""
|
"""Handle not implemented message type."""
|
||||||
patch_handler = patch(
|
patch_handler = patch(
|
||||||
"homeassistant.components.owntracks.messages.async_handle_not_impl_msg",
|
"homeassistant.components.owntracks.messages.async_handle_not_impl_msg",
|
||||||
@ -1318,7 +1358,8 @@ async def test_not_implemented_message(hass: HomeAssistant, context) -> None:
|
|||||||
patch_handler.stop()
|
patch_handler.stop()
|
||||||
|
|
||||||
|
|
||||||
async def test_unsupported_message(hass: HomeAssistant, context) -> None:
|
@pytest.mark.usefixtures("context")
|
||||||
|
async def test_unsupported_message(hass: HomeAssistant) -> None:
|
||||||
"""Handle not implemented message type."""
|
"""Handle not implemented message type."""
|
||||||
patch_handler = patch(
|
patch_handler = patch(
|
||||||
"homeassistant.components.owntracks.messages.async_handle_unsupported_msg",
|
"homeassistant.components.owntracks.messages.async_handle_unsupported_msg",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user