diff --git a/README.md b/README.md
index 1d0b4238b5a..4b1f13e8d7f 100644
--- a/README.md
+++ b/README.md
@@ -241,25 +241,37 @@ Returns message if API is up and running.
Returns a dict with as keys the events and as value the number of listeners.
```json
-{
- "state_changed": 5,
- "time_changed": 2
-}
+[
+ {
+ "event": "state_changed",
+ "listener_count": 5
+ },
+ {
+ "event": "time_changed",
+ "listener_count": 2
+ }
+]
```
**/api/services - GET**
Returns a dict with as keys the domain and as value a list of published services.
```json
-{
- "browser": [
+[
+ {
+ "domain": "browser",
+ "services": [
"browse_url"
- ],
- "keyboard": [
+ ]
+ },
+ {
+ "domain": "keyboard",
+ "services": [
"volume_up",
"volume_down"
- ]
-}
+ ]
+ }
+]
```
**/api/states - GET**
diff --git a/homeassistant/remote.py b/homeassistant/remote.py
index 4989e34060d..2f66f0ae04a 100644
--- a/homeassistant/remote.py
+++ b/homeassistant/remote.py
@@ -402,7 +402,10 @@ def is_state(api, entity_id, state, logger=None):
def get_services(api, logger=None):
- """ Returns a dict with per domain the available services at API. """
+ """
+ Returns a list of dicts. Each dict has a string "domain" and
+ a list of strings "services".
+ """
try:
req = api(METHOD_GET, URL_API_SERVICES)
diff --git a/homeassistant/test.py b/homeassistant/test.py
index 36d65f4838e..86623a98f9c 100644
--- a/homeassistant/test.py
+++ b/homeassistant/test.py
@@ -245,14 +245,25 @@ class TestHTTP(unittest.TestCase):
req = requests.get(_url(remote.URL_API_EVENTS),
headers=HA_HEADERS)
- self.assertEqual(req.json(), self.hass.bus.listeners)
+ local = self.hass.bus.listeners
+
+ for event in req.json():
+ self.assertEqual(event["listener_count"],
+ local.pop(event["event"]))
+
+ self.assertEqual(len(local), 0)
def test_api_get_services(self):
""" Test if we can get a dict describing current services. """
req = requests.get(_url(remote.URL_API_SERVICES),
headers=HA_HEADERS)
- self.assertEqual(req.json(), self.hass.services.services)
+ local_services = self.hass.services.services
+
+ for serv_domain in req.json():
+ local = local_services.pop(serv_domain["domain"])
+
+ self.assertEqual(serv_domain["services"], local)
def test_api_call_service_no_data(self):
""" Test if the API allows us to call a service. """
@@ -310,9 +321,13 @@ class TestRemoteMethods(unittest.TestCase):
def test_get_event_listeners(self):
""" Test Python API get_event_listeners. """
+ local = self.hass.bus.listeners
- self.assertEqual(
- remote.get_event_listeners(self.api), self.hass.bus.listeners)
+ for event in remote.get_event_listeners(self.api):
+ self.assertEqual(event["listener_count"],
+ local.pop(event["event"]))
+
+ self.assertEqual(len(local), 0)
def test_fire_event(self):
""" Test Python API fire_event. """
@@ -360,8 +375,12 @@ class TestRemoteMethods(unittest.TestCase):
def test_get_services(self):
""" Test Python API get_services. """
- self.assertEqual(
- remote.get_services(self.api), self.hass.services.services)
+ local_services = self.hass.services.services
+
+ for serv_domain in remote.get_services(self.api):
+ local = local_services.pop(serv_domain["domain"])
+
+ self.assertEqual(serv_domain["services"], local)
def test_call_service(self):
""" Test Python API call_service. """
@@ -392,7 +411,9 @@ class TestRemoteClasses(unittest.TestCase):
def test_statemachine_init(self):
""" Tests if remote.StateMachine copies all states on init. """
- self.assertEqual(self.hass.states.all(), self.slave.states.all())
+ for state in self.hass.states.all():
+ self.assertEqual(
+ self.slave.states.get(state.entity_id), state)
def test_statemachine_set(self):
""" Tests if setting the state on a slave is recorded. """