From 85b01a9b80a443f96d569f35c103924680019c5a Mon Sep 17 00:00:00 2001 From: Alexander Pitkin Date: Sat, 10 Oct 2020 14:05:08 +0300 Subject: [PATCH] Rewrite mhz19 unittest tests to pytest style tests (#41441) * Rewrite mhz19 unittest tests to pytest style tests * Move mhz19 tests imports --- tests/components/mhz19/test_sensor.py | 216 ++++++++++++-------------- 1 file changed, 100 insertions(+), 116 deletions(-) diff --git a/tests/components/mhz19/test_sensor.py b/tests/components/mhz19/test_sensor.py index 05d462f02a0..6305f86cedc 100644 --- a/tests/components/mhz19/test_sensor.py +++ b/tests/components/mhz19/test_sensor.py @@ -1,5 +1,6 @@ """Tests for MH-Z19 sensor.""" -import unittest +from pmsensor import co2sensor +from pmsensor.co2sensor import read_mh_z19_with_temperature import homeassistant.components.mhz19.sensor as mhz19 from homeassistant.components.sensor import DOMAIN @@ -8,130 +9,113 @@ from homeassistant.const import ( TEMP_CELSIUS, TEMP_FAHRENHEIT, ) -from homeassistant.setup import setup_component +from homeassistant.setup import async_setup_component from tests.async_mock import DEFAULT, Mock, patch -from tests.common import assert_setup_component, get_test_home_assistant +from tests.common import assert_setup_component -class TestMHZ19Sensor(unittest.TestCase): - """Test the MH-Z19 sensor.""" - - hass = None - - def setup_method(self, method): - """Set up things to be run when tests are started.""" - self.hass = get_test_home_assistant() - - def teardown_method(self, method): - """Stop everything that was started.""" - self.hass.stop() - - def test_setup_missing_config(self): - """Test setup with configuration missing required entries.""" - with assert_setup_component(0): - assert setup_component(self.hass, DOMAIN, {"sensor": {"platform": "mhz19"}}) - - @patch("pmsensor.co2sensor.read_mh_z19", side_effect=OSError("test error")) - def test_setup_failed_connect(self, mock_co2): - """Test setup when connection error occurs.""" - assert not mhz19.setup_platform( - self.hass, - {"platform": "mhz19", mhz19.CONF_SERIAL_DEVICE: "test.serial"}, - None, +async def test_setup_missing_config(hass): + """Test setup with configuration missing required entries.""" + with assert_setup_component(0): + assert await async_setup_component( + hass, DOMAIN, {"sensor": {"platform": "mhz19"}} ) - def test_setup_connected(self): - """Test setup when connection succeeds.""" - with patch.multiple( - "pmsensor.co2sensor", - read_mh_z19=DEFAULT, - read_mh_z19_with_temperature=DEFAULT, - ): - from pmsensor.co2sensor import read_mh_z19_with_temperature - read_mh_z19_with_temperature.return_value = None - mock_add = Mock() - assert mhz19.setup_platform( - self.hass, - { - "platform": "mhz19", - "monitored_conditions": ["co2", "temperature"], - mhz19.CONF_SERIAL_DEVICE: "test.serial", - }, - mock_add, - ) - assert mock_add.call_count == 1 - - @patch( - "pmsensor.co2sensor.read_mh_z19_with_temperature", - side_effect=OSError("test error"), +@patch("pmsensor.co2sensor.read_mh_z19", side_effect=OSError("test error")) +async def test_setup_failed_connect(mock_co2, hass): + """Test setup when connection error occurs.""" + assert not mhz19.setup_platform( + hass, + {"platform": "mhz19", mhz19.CONF_SERIAL_DEVICE: "test.serial"}, + None, ) - def aiohttp_client_update_oserror(self, mock_function): - """Test MHZClient when library throws OSError.""" - from pmsensor import co2sensor - client = mhz19.MHZClient(co2sensor, "test.serial") - client.update() - assert {} == client.data - @patch("pmsensor.co2sensor.read_mh_z19_with_temperature", return_value=(5001, 24)) - def aiohttp_client_update_ppm_overflow(self, mock_function): - """Test MHZClient when ppm is too high.""" - from pmsensor import co2sensor - - client = mhz19.MHZClient(co2sensor, "test.serial") - client.update() - assert client.data.get("co2") is None - - @patch("pmsensor.co2sensor.read_mh_z19_with_temperature", return_value=(1000, 24)) - def aiohttp_client_update_good_read(self, mock_function): - """Test MHZClient when ppm is too high.""" - from pmsensor import co2sensor - - client = mhz19.MHZClient(co2sensor, "test.serial") - client.update() - assert {"temperature": 24, "co2": 1000} == client.data - - @patch("pmsensor.co2sensor.read_mh_z19_with_temperature", return_value=(1000, 24)) - def test_co2_sensor(self, mock_function): - """Test CO2 sensor.""" - from pmsensor import co2sensor - - client = mhz19.MHZClient(co2sensor, "test.serial") - sensor = mhz19.MHZ19Sensor(client, mhz19.SENSOR_CO2, None, "name") - sensor.update() - - assert sensor.name == "name: CO2" - assert sensor.state == 1000 - assert sensor.unit_of_measurement == CONCENTRATION_PARTS_PER_MILLION - assert sensor.should_poll - assert sensor.device_state_attributes == {"temperature": 24} - - @patch("pmsensor.co2sensor.read_mh_z19_with_temperature", return_value=(1000, 24)) - def test_temperature_sensor(self, mock_function): - """Test temperature sensor.""" - from pmsensor import co2sensor - - client = mhz19.MHZClient(co2sensor, "test.serial") - sensor = mhz19.MHZ19Sensor(client, mhz19.SENSOR_TEMPERATURE, None, "name") - sensor.update() - - assert sensor.name == "name: Temperature" - assert sensor.state == 24 - assert sensor.unit_of_measurement == TEMP_CELSIUS - assert sensor.should_poll - assert sensor.device_state_attributes == {"co2_concentration": 1000} - - @patch("pmsensor.co2sensor.read_mh_z19_with_temperature", return_value=(1000, 24)) - def test_temperature_sensor_f(self, mock_function): - """Test temperature sensor.""" - from pmsensor import co2sensor - - client = mhz19.MHZClient(co2sensor, "test.serial") - sensor = mhz19.MHZ19Sensor( - client, mhz19.SENSOR_TEMPERATURE, TEMP_FAHRENHEIT, "name" +async def test_setup_connected(hass): + """Test setup when connection succeeds.""" + with patch.multiple( + "pmsensor.co2sensor", + read_mh_z19=DEFAULT, + read_mh_z19_with_temperature=DEFAULT, + ): + read_mh_z19_with_temperature.return_value = None + mock_add = Mock() + assert mhz19.setup_platform( + hass, + { + "platform": "mhz19", + "monitored_conditions": ["co2", "temperature"], + mhz19.CONF_SERIAL_DEVICE: "test.serial", + }, + mock_add, ) - sensor.update() + assert mock_add.call_count == 1 - assert sensor.state == 75.2 + +@patch( + "pmsensor.co2sensor.read_mh_z19_with_temperature", + side_effect=OSError("test error"), +) +async def aiohttp_client_update_oserror(mock_function): + """Test MHZClient when library throws OSError.""" + client = mhz19.MHZClient(co2sensor, "test.serial") + client.update() + assert {} == client.data + + +@patch("pmsensor.co2sensor.read_mh_z19_with_temperature", return_value=(5001, 24)) +async def aiohttp_client_update_ppm_overflow(mock_function): + """Test MHZClient when ppm is too high.""" + client = mhz19.MHZClient(co2sensor, "test.serial") + client.update() + assert client.data.get("co2") is None + + +@patch("pmsensor.co2sensor.read_mh_z19_with_temperature", return_value=(1000, 24)) +async def aiohttp_client_update_good_read(mock_function): + """Test MHZClient when ppm is too high.""" + client = mhz19.MHZClient(co2sensor, "test.serial") + client.update() + assert {"temperature": 24, "co2": 1000} == client.data + + +@patch("pmsensor.co2sensor.read_mh_z19_with_temperature", return_value=(1000, 24)) +async def test_co2_sensor(mock_function): + """Test CO2 sensor.""" + client = mhz19.MHZClient(co2sensor, "test.serial") + sensor = mhz19.MHZ19Sensor(client, mhz19.SENSOR_CO2, None, "name") + sensor.update() + + assert sensor.name == "name: CO2" + assert sensor.state == 1000 + assert sensor.unit_of_measurement == CONCENTRATION_PARTS_PER_MILLION + assert sensor.should_poll + assert sensor.device_state_attributes == {"temperature": 24} + + +@patch("pmsensor.co2sensor.read_mh_z19_with_temperature", return_value=(1000, 24)) +async def test_temperature_sensor(mock_function): + """Test temperature sensor.""" + client = mhz19.MHZClient(co2sensor, "test.serial") + sensor = mhz19.MHZ19Sensor(client, mhz19.SENSOR_TEMPERATURE, None, "name") + sensor.update() + + assert sensor.name == "name: Temperature" + assert sensor.state == 24 + assert sensor.unit_of_measurement == TEMP_CELSIUS + assert sensor.should_poll + assert sensor.device_state_attributes == {"co2_concentration": 1000} + + +@patch("pmsensor.co2sensor.read_mh_z19_with_temperature", return_value=(1000, 24)) +async def test_temperature_sensor_f(mock_function): + """Test temperature sensor.""" + client = mhz19.MHZClient(co2sensor, "test.serial") + sensor = mhz19.MHZ19Sensor( + client, mhz19.SENSOR_TEMPERATURE, TEMP_FAHRENHEIT, "name" + ) + sensor.update() + + assert sensor.state == 75.2