home-assistant/tests/components/sensor/test_uk_transport.py
2017-07-26 20:49:52 +01:00

93 lines
3.5 KiB
Python

"""The tests for the uk_transport platform."""
import re
import requests_mock
import unittest
from homeassistant.components.sensor.uk_transport import (
UkTransportSensor,
ATTR_ATCOCODE, ATTR_LOCALITY, ATTR_STOP_NAME, ATTR_NEXT_BUSES,
ATTR_STATION_CODE, ATTR_CALLING_AT, ATTR_NEXT_TRAINS,
CONF_API_APP_KEY, CONF_API_APP_ID)
from homeassistant.setup import setup_component
from tests.common import load_fixture, get_test_home_assistant
BUS_ATCOCODE = '340000368SHE'
BUS_DIRECTION = 'Wantage'
TRAIN_STATION_CODE = 'WIM'
TRAIN_DESTINATION_NAME = 'WAT'
VALID_CONFIG = {
'platform': 'uk_transport',
CONF_API_APP_ID: 'foo',
CONF_API_APP_KEY: 'ebcd1234',
'queries': [{
'mode': 'bus',
'origin': BUS_ATCOCODE,
'destination': BUS_DIRECTION},
{
'mode': 'train',
'origin': TRAIN_STATION_CODE,
'destination': TRAIN_DESTINATION_NAME}]
}
class TestUkTransportSensor(unittest.TestCase):
"""Test the uk_transport platform."""
def setUp(self):
"""Initialize values for this testcase class."""
self.hass = get_test_home_assistant()
self.config = VALID_CONFIG
def tearDown(self):
"""Stop everything that was started."""
self.hass.stop()
@requests_mock.Mocker()
def test_bus(self, mock_req):
"""Test for operational uk_transport sensor with proper attributes."""
with requests_mock.Mocker() as mock_req:
uri = re.compile(UkTransportSensor.TRANSPORT_API_URL_BASE + '*')
mock_req.get(uri, text=load_fixture('uk_transport_bus.json'))
self.assertTrue(
setup_component(self.hass, 'sensor', {'sensor': self.config}))
bus_state = self.hass.states.get('sensor.next_bus_to_wantage')
assert type(bus_state.state) == str
assert bus_state.name == 'Next bus to {}'.format(BUS_DIRECTION)
assert bus_state.attributes.get(ATTR_ATCOCODE) == BUS_ATCOCODE
assert bus_state.attributes.get(ATTR_LOCALITY) == 'Harwell Campus'
assert bus_state.attributes.get(ATTR_STOP_NAME) == 'Bus Station'
assert len(bus_state.attributes.get(ATTR_NEXT_BUSES)) == 2
direction_re = re.compile(BUS_DIRECTION)
for bus in bus_state.attributes.get(ATTR_NEXT_BUSES):
print(bus['direction'], direction_re.match(bus['direction']))
assert direction_re.search(bus['direction']) is not None
@requests_mock.Mocker()
def test_train(self, mock_req):
"""Test for operational uk_transport sensor with proper attributes."""
with requests_mock.Mocker() as mock_req:
uri = re.compile(UkTransportSensor.TRANSPORT_API_URL_BASE + '*')
mock_req.get(uri, text=load_fixture('uk_transport_train.json'))
self.assertTrue(
setup_component(self.hass, 'sensor', {'sensor': self.config}))
train_state = self.hass.states.get('sensor.next_train_to_WAT')
assert type(train_state.state) == str
assert train_state.name == 'Next train to {}'.format(
TRAIN_DESTINATION_NAME)
assert train_state.attributes.get(
ATTR_STATION_CODE) == TRAIN_STATION_CODE
assert train_state.attributes.get(
ATTR_CALLING_AT) == TRAIN_DESTINATION_NAME
assert len(train_state.attributes.get(ATTR_NEXT_TRAINS)) == 25
assert train_state.attributes.get(
ATTR_NEXT_TRAINS)[0]['destination_name'] == 'London Waterloo'
assert train_state.attributes.get(
ATTR_NEXT_TRAINS)[0]['estimated'] == '06:13'