141 lines
4.4 KiB
Python
141 lines
4.4 KiB
Python
"""The tests the for Meraki device tracker."""
|
|
import asyncio
|
|
import json
|
|
|
|
import pytest
|
|
|
|
from homeassistant.components.device_tracker.meraki import (
|
|
CONF_VALIDATOR, CONF_SECRET)
|
|
from homeassistant.setup import async_setup_component
|
|
import homeassistant.components.device_tracker as device_tracker
|
|
from homeassistant.const import CONF_PLATFORM
|
|
from homeassistant.components.device_tracker.meraki import URL
|
|
|
|
|
|
@pytest.fixture
|
|
def meraki_client(loop, hass, test_client):
|
|
"""Meraki mock client."""
|
|
assert loop.run_until_complete(async_setup_component(
|
|
hass, device_tracker.DOMAIN, {
|
|
device_tracker.DOMAIN: {
|
|
CONF_PLATFORM: 'meraki',
|
|
CONF_VALIDATOR: 'validator',
|
|
CONF_SECRET: 'secret'
|
|
|
|
}
|
|
}))
|
|
|
|
yield loop.run_until_complete(test_client(hass.http.app))
|
|
|
|
|
|
@asyncio.coroutine
|
|
def test_invalid_or_missing_data(mock_device_tracker_conf, meraki_client):
|
|
"""Test validator with invalid or missing data."""
|
|
req = yield from meraki_client.get(URL)
|
|
text = yield from req.text()
|
|
assert req.status == 200
|
|
assert text == 'validator'
|
|
|
|
req = yield from meraki_client.post(URL, data=b"invalid")
|
|
text = yield from req.json()
|
|
assert req.status == 400
|
|
assert text['message'] == 'Invalid JSON'
|
|
|
|
req = yield from meraki_client.post(URL, data=b"{}")
|
|
text = yield from req.json()
|
|
assert req.status == 422
|
|
assert text['message'] == 'No secret'
|
|
|
|
data = {
|
|
"version": "1.0",
|
|
"secret": "secret"
|
|
}
|
|
req = yield from meraki_client.post(URL, data=json.dumps(data))
|
|
text = yield from req.json()
|
|
assert req.status == 422
|
|
assert text['message'] == 'Invalid version'
|
|
|
|
data = {
|
|
"version": "2.0",
|
|
"secret": "invalid"
|
|
}
|
|
req = yield from meraki_client.post(URL, data=json.dumps(data))
|
|
text = yield from req.json()
|
|
assert req.status == 422
|
|
assert text['message'] == 'Invalid secret'
|
|
|
|
data = {
|
|
"version": "2.0",
|
|
"secret": "secret",
|
|
"type": "InvalidType"
|
|
}
|
|
req = yield from meraki_client.post(URL, data=json.dumps(data))
|
|
text = yield from req.json()
|
|
assert req.status == 422
|
|
assert text['message'] == 'Invalid device type'
|
|
|
|
data = {
|
|
"version": "2.0",
|
|
"secret": "secret",
|
|
"type": "BluetoothDevicesSeen",
|
|
"data": {
|
|
"observations": []
|
|
}
|
|
}
|
|
req = yield from meraki_client.post(URL, data=json.dumps(data))
|
|
assert req.status == 200
|
|
|
|
|
|
@asyncio.coroutine
|
|
def test_data_will_be_saved(mock_device_tracker_conf, hass, meraki_client):
|
|
"""Test with valid data."""
|
|
data = {
|
|
"version": "2.0",
|
|
"secret": "secret",
|
|
"type": "DevicesSeen",
|
|
"data": {
|
|
"observations": [
|
|
{
|
|
"location": {
|
|
"lat": "51.5355157",
|
|
"lng": "21.0699035",
|
|
"unc": "46.3610585",
|
|
},
|
|
"seenTime": "2016-09-12T16:23:13Z",
|
|
"ssid": 'ssid',
|
|
"os": 'HA',
|
|
"ipv6": '2607:f0d0:1002:51::4/64',
|
|
"clientMac": "00:26:ab:b8:a9:a4",
|
|
"seenEpoch": "147369739",
|
|
"rssi": "20",
|
|
"manufacturer": "Seiko Epson"
|
|
},
|
|
{
|
|
"location": {
|
|
"lat": "51.5355357",
|
|
"lng": "21.0699635",
|
|
"unc": "46.3610585",
|
|
},
|
|
"seenTime": "2016-09-12T16:21:13Z",
|
|
"ssid": 'ssid',
|
|
"os": 'HA',
|
|
"ipv4": '192.168.0.1',
|
|
"clientMac": "00:26:ab:b8:a9:a5",
|
|
"seenEpoch": "147369750",
|
|
"rssi": "20",
|
|
"manufacturer": "Seiko Epson"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
req = yield from meraki_client.post(URL, data=json.dumps(data))
|
|
assert req.status == 200
|
|
yield from hass.async_block_till_done()
|
|
state_name = hass.states.get('{}.{}'.format('device_tracker',
|
|
'0026abb8a9a4')).state
|
|
assert 'home' == state_name
|
|
|
|
state_name = hass.states.get('{}.{}'.format('device_tracker',
|
|
'0026abb8a9a5')).state
|
|
assert 'home' == state_name
|