diff --git a/homeassistant/components/traccar/device_tracker.py b/homeassistant/components/traccar/device_tracker.py index 5ad5879f31b..16cd9ba94e5 100644 --- a/homeassistant/components/traccar/device_tracker.py +++ b/homeassistant/components/traccar/device_tracker.py @@ -74,6 +74,26 @@ _LOGGER = logging.getLogger(__name__) DEFAULT_SCAN_INTERVAL = timedelta(seconds=30) SCAN_INTERVAL = DEFAULT_SCAN_INTERVAL +EVENTS = [ + EVENT_DEVICE_MOVING, + EVENT_COMMAND_RESULT, + EVENT_DEVICE_FUEL_DROP, + EVENT_GEOFENCE_ENTER, + EVENT_DEVICE_OFFLINE, + EVENT_DRIVER_CHANGED, + EVENT_GEOFENCE_EXIT, + EVENT_DEVICE_OVERSPEED, + EVENT_DEVICE_ONLINE, + EVENT_DEVICE_STOPPED, + EVENT_MAINTENANCE, + EVENT_ALARM, + EVENT_TEXT_MESSAGE, + EVENT_DEVICE_UNKNOWN, + EVENT_IGNITION_OFF, + EVENT_IGNITION_ON, + EVENT_ALL_EVENTS, +] + PLATFORM_SCHEMA = PARENT_PLATFORM_SCHEMA.extend( { vol.Required(CONF_PASSWORD): cv.string, @@ -91,27 +111,7 @@ PLATFORM_SCHEMA = PARENT_PLATFORM_SCHEMA.extend( ), vol.Optional(CONF_EVENT, default=[]): vol.All( cv.ensure_list, - [ - vol.Any( - EVENT_DEVICE_MOVING, - EVENT_COMMAND_RESULT, - EVENT_DEVICE_FUEL_DROP, - EVENT_GEOFENCE_ENTER, - EVENT_DEVICE_OFFLINE, - EVENT_DRIVER_CHANGED, - EVENT_GEOFENCE_EXIT, - EVENT_DEVICE_OVERSPEED, - EVENT_DEVICE_ONLINE, - EVENT_DEVICE_STOPPED, - EVENT_MAINTENANCE, - EVENT_ALARM, - EVENT_TEXT_MESSAGE, - EVENT_DEVICE_UNKNOWN, - EVENT_IGNITION_OFF, - EVENT_IGNITION_ON, - EVENT_ALL_EVENTS, - ) - ], + [vol.In(EVENTS)], ), } ) @@ -203,6 +203,8 @@ class TraccarScanner: ): """Initialize.""" + if EVENT_ALL_EVENTS in event_types: + event_types = EVENTS self._event_types = {camelcase(evt): evt for evt in event_types} self._custom_attributes = custom_attributes self._scan_interval = scan_interval diff --git a/tests/components/traccar/test_device_tracker.py b/tests/components/traccar/test_device_tracker.py new file mode 100644 index 00000000000..4e2f5e0ff09 --- /dev/null +++ b/tests/components/traccar/test_device_tracker.py @@ -0,0 +1,62 @@ +"""The tests for the Traccar device tracker platform.""" +from datetime import datetime +from unittest.mock import AsyncMock, patch + +from homeassistant.components.device_tracker.const import DOMAIN +from homeassistant.components.traccar.device_tracker import ( + PLATFORM_SCHEMA as TRACCAR_PLATFORM_SCHEMA, +) +from homeassistant.const import ( + CONF_EVENT, + CONF_HOST, + CONF_PASSWORD, + CONF_PLATFORM, + CONF_USERNAME, +) +from homeassistant.setup import async_setup_component + +from tests.common import async_capture_events + + +async def test_import_events_catch_all(hass): + """Test importing all events and firing them in HA using their event types.""" + conf_dict = { + DOMAIN: TRACCAR_PLATFORM_SCHEMA( + { + CONF_PLATFORM: "traccar", + CONF_HOST: "fake_host", + CONF_USERNAME: "fake_user", + CONF_PASSWORD: "fake_pass", + CONF_EVENT: ["all_events"], + } + ) + } + + device = {"id": 1, "name": "abc123"} + api_mock = AsyncMock() + api_mock.devices = [device] + api_mock.get_events.return_value = [ + { + "deviceId": device["id"], + "type": "ignitionOn", + "serverTime": datetime.utcnow(), + "attributes": {}, + }, + { + "deviceId": device["id"], + "type": "ignitionOff", + "serverTime": datetime.utcnow(), + "attributes": {}, + }, + ] + + events_ignition_on = async_capture_events(hass, "traccar_ignition_on") + events_ignition_off = async_capture_events(hass, "traccar_ignition_off") + + with patch( + "homeassistant.components.traccar.device_tracker.API", return_value=api_mock + ): + assert await async_setup_component(hass, DOMAIN, conf_dict) + + assert len(events_ignition_on) == 1 + assert len(events_ignition_off) == 1