Rewrite uk_transport tests to use pytest style (#41168)

This commit is contained in:
Ronan Murray 2020-10-06 13:53:17 +01:00 committed by GitHub
parent 06e9489fc7
commit df4998d7cf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -1,6 +1,5 @@
"""The tests for the uk_transport platform.""" """The tests for the uk_transport platform."""
import re import re
import unittest
import requests_mock import requests_mock
@ -16,11 +15,11 @@ from homeassistant.components.uk_transport.sensor import (
CONF_API_APP_KEY, CONF_API_APP_KEY,
UkTransportSensor, UkTransportSensor,
) )
from homeassistant.setup import setup_component from homeassistant.setup import async_setup_component
from homeassistant.util.dt import now from homeassistant.util.dt import now
from tests.async_mock import patch from tests.async_mock import patch
from tests.common import get_test_home_assistant, load_fixture from tests.common import load_fixture
BUS_ATCOCODE = "340000368SHE" BUS_ATCOCODE = "340000368SHE"
BUS_DIRECTION = "Wantage" BUS_DIRECTION = "Wantage"
@ -28,73 +27,63 @@ TRAIN_STATION_CODE = "WIM"
TRAIN_DESTINATION_NAME = "WAT" TRAIN_DESTINATION_NAME = "WAT"
VALID_CONFIG = { VALID_CONFIG = {
"platform": "uk_transport", "sensor": {
CONF_API_APP_ID: "foo", "platform": "uk_transport",
CONF_API_APP_KEY: "ebcd1234", CONF_API_APP_ID: "foo",
"queries": [ CONF_API_APP_KEY: "ebcd1234",
{"mode": "bus", "origin": BUS_ATCOCODE, "destination": BUS_DIRECTION}, "queries": [
{ {"mode": "bus", "origin": BUS_ATCOCODE, "destination": BUS_DIRECTION},
"mode": "train", {
"origin": TRAIN_STATION_CODE, "mode": "train",
"destination": TRAIN_DESTINATION_NAME, "origin": TRAIN_STATION_CODE,
}, "destination": TRAIN_DESTINATION_NAME,
], },
],
}
} }
class TestUkTransportSensor(unittest.TestCase): async def test_bus(hass):
"""Test the uk_transport platform.""" """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"))
assert await async_setup_component(hass, "sensor", VALID_CONFIG)
await hass.async_block_till_done()
def setUp(self): bus_state = hass.states.get("sensor.next_bus_to_wantage")
"""Initialize values for this testcase class.""" assert None is not bus_state
self.hass = get_test_home_assistant() assert f"Next bus to {BUS_DIRECTION}" == bus_state.name
self.config = VALID_CONFIG assert BUS_ATCOCODE == bus_state.attributes[ATTR_ATCOCODE]
self.addCleanup(self.hass.stop) assert "Harwell Campus" == bus_state.attributes[ATTR_LOCALITY]
assert "Bus Station" == bus_state.attributes[ATTR_STOP_NAME]
assert 2 == len(bus_state.attributes.get(ATTR_NEXT_BUSES))
@requests_mock.Mocker() direction_re = re.compile(BUS_DIRECTION)
def test_bus(self, mock_req): for bus in bus_state.attributes.get(ATTR_NEXT_BUSES):
"""Test for operational uk_transport sensor with proper attributes.""" assert None is not bus
with requests_mock.Mocker() as mock_req: assert None is not direction_re.search(bus["direction"])
uri = re.compile(UkTransportSensor.TRANSPORT_API_URL_BASE + "*")
mock_req.get(uri, text=load_fixture("uk_transport_bus.json"))
assert setup_component(self.hass, "sensor", {"sensor": self.config})
self.hass.block_till_done()
bus_state = self.hass.states.get("sensor.next_bus_to_wantage")
assert type(bus_state.state) == str async def test_train(hass):
assert bus_state.name == f"Next bus to {BUS_DIRECTION}" """Test for operational uk_transport sensor with proper attributes."""
assert bus_state.attributes.get(ATTR_ATCOCODE) == BUS_ATCOCODE with requests_mock.Mocker() as mock_req, patch(
assert bus_state.attributes.get(ATTR_LOCALITY) == "Harwell Campus" "homeassistant.util.dt.now", return_value=now().replace(hour=13)
assert bus_state.attributes.get(ATTR_STOP_NAME) == "Bus Station" ):
assert len(bus_state.attributes.get(ATTR_NEXT_BUSES)) == 2 uri = re.compile(UkTransportSensor.TRANSPORT_API_URL_BASE + "*")
mock_req.get(uri, text=load_fixture("uk_transport_train.json"))
assert await async_setup_component(hass, "sensor", VALID_CONFIG)
await hass.async_block_till_done()
direction_re = re.compile(BUS_DIRECTION) train_state = hass.states.get("sensor.next_train_to_WAT")
for bus in bus_state.attributes.get(ATTR_NEXT_BUSES): assert None is not train_state
print(bus["direction"], direction_re.match(bus["direction"])) assert f"Next train to {TRAIN_DESTINATION_NAME}" == train_state.name
assert direction_re.search(bus["direction"]) is not None assert TRAIN_STATION_CODE == train_state.attributes[ATTR_STATION_CODE]
assert TRAIN_DESTINATION_NAME == train_state.attributes[ATTR_CALLING_AT]
assert 25 == len(train_state.attributes.get(ATTR_NEXT_TRAINS))
@requests_mock.Mocker() assert (
def test_train(self, mock_req): "London Waterloo"
"""Test for operational uk_transport sensor with proper attributes.""" == train_state.attributes[ATTR_NEXT_TRAINS][0]["destination_name"]
with requests_mock.Mocker() as mock_req, patch( )
"homeassistant.util.dt.now", return_value=now().replace(hour=13) assert "06:13" == train_state.attributes[ATTR_NEXT_TRAINS][0]["estimated"]
):
uri = re.compile(UkTransportSensor.TRANSPORT_API_URL_BASE + "*")
mock_req.get(uri, text=load_fixture("uk_transport_train.json"))
assert setup_component(self.hass, "sensor", {"sensor": self.config})
self.hass.block_till_done()
train_state = self.hass.states.get("sensor.next_train_to_WAT")
assert type(train_state.state) == str
assert train_state.name == f"Next train to {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"