From df4998d7cf97f0e8a79ee134c37cd38884969a8b Mon Sep 17 00:00:00 2001 From: Ronan Murray <2470586+ronanmu@users.noreply.github.com> Date: Tue, 6 Oct 2020 13:53:17 +0100 Subject: [PATCH] Rewrite uk_transport tests to use pytest style (#41168) --- tests/components/uk_transport/test_sensor.py | 117 +++++++++---------- 1 file changed, 53 insertions(+), 64 deletions(-) diff --git a/tests/components/uk_transport/test_sensor.py b/tests/components/uk_transport/test_sensor.py index 81cfa7ae8ae..ff6cf3d1142 100644 --- a/tests/components/uk_transport/test_sensor.py +++ b/tests/components/uk_transport/test_sensor.py @@ -1,6 +1,5 @@ """The tests for the uk_transport platform.""" import re -import unittest import requests_mock @@ -16,11 +15,11 @@ from homeassistant.components.uk_transport.sensor import ( CONF_API_APP_KEY, UkTransportSensor, ) -from homeassistant.setup import setup_component +from homeassistant.setup import async_setup_component from homeassistant.util.dt import now 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_DIRECTION = "Wantage" @@ -28,73 +27,63 @@ 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, - }, - ], + "sensor": { + "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.""" +async def test_bus(hass): + """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): - """Initialize values for this testcase class.""" - self.hass = get_test_home_assistant() - self.config = VALID_CONFIG - self.addCleanup(self.hass.stop) + bus_state = hass.states.get("sensor.next_bus_to_wantage") + assert None is not bus_state + assert f"Next bus to {BUS_DIRECTION}" == bus_state.name + assert BUS_ATCOCODE == bus_state.attributes[ATTR_ATCOCODE] + 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() - 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")) - assert setup_component(self.hass, "sensor", {"sensor": self.config}) - self.hass.block_till_done() + direction_re = re.compile(BUS_DIRECTION) + for bus in bus_state.attributes.get(ATTR_NEXT_BUSES): + assert None is not bus + assert None is not direction_re.search(bus["direction"]) - bus_state = self.hass.states.get("sensor.next_bus_to_wantage") - assert type(bus_state.state) == str - assert bus_state.name == f"Next bus to {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 +async def test_train(hass): + """Test for operational uk_transport sensor with proper attributes.""" + with requests_mock.Mocker() as mock_req, patch( + "homeassistant.util.dt.now", return_value=now().replace(hour=13) + ): + 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) - 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 + train_state = hass.states.get("sensor.next_train_to_WAT") + assert None is not train_state + assert f"Next train to {TRAIN_DESTINATION_NAME}" == train_state.name + 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() - def test_train(self, mock_req): - """Test for operational uk_transport sensor with proper attributes.""" - with requests_mock.Mocker() as mock_req, patch( - "homeassistant.util.dt.now", return_value=now().replace(hour=13) - ): - 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" + assert ( + "London Waterloo" + == train_state.attributes[ATTR_NEXT_TRAINS][0]["destination_name"] + ) + assert "06:13" == train_state.attributes[ATTR_NEXT_TRAINS][0]["estimated"]