Rewrite google_wifi unittest tests to pytest style (#42030)

This commit is contained in:
Daniel 2020-11-13 15:40:46 +01:00 committed by GitHub
parent 976640102f
commit 5de30e19bb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1,17 +1,13 @@
"""The tests for the Google Wifi platform."""
from datetime import datetime, timedelta
import unittest
import requests_mock
from homeassistant import core as ha
import homeassistant.components.google_wifi.sensor as google_wifi
from homeassistant.const import STATE_UNKNOWN
from homeassistant.setup import setup_component
from homeassistant.setup import async_setup_component
from homeassistant.util import dt as dt_util
from tests.async_mock import Mock, patch
from tests.common import assert_setup_component, get_test_home_assistant
from tests.common import assert_setup_component, async_fire_time_changed
NAME = "foo"
@ -34,185 +30,174 @@ MOCK_DATA_NEXT = (
MOCK_DATA_MISSING = '{"software": {},' '"system": {},' '"wan": {}}'
class TestGoogleWifiSetup(unittest.TestCase):
"""Tests for setting up the Google Wifi sensor platform."""
def setUp(self):
"""Set up things to be run when tests are started."""
self.hass = get_test_home_assistant()
self.addCleanup(self.hass.stop)
@requests_mock.Mocker()
def test_setup_minimum(self, mock_req):
"""Test setup with minimum configuration."""
resource = f"http://{google_wifi.DEFAULT_HOST}{google_wifi.ENDPOINT}"
mock_req.get(resource, status_code=200)
assert setup_component(
self.hass,
"sensor",
{"sensor": {"platform": "google_wifi", "monitored_conditions": ["uptime"]}},
)
assert_setup_component(1, "sensor")
@requests_mock.Mocker()
def test_setup_get(self, mock_req):
"""Test setup with full configuration."""
resource = f"http://localhost{google_wifi.ENDPOINT}"
mock_req.get(resource, status_code=200)
assert setup_component(
self.hass,
"sensor",
{
"sensor": {
"platform": "google_wifi",
"host": "localhost",
"name": "Test Wifi",
"monitored_conditions": [
"current_version",
"new_version",
"uptime",
"last_restart",
"local_ip",
"status",
],
}
},
)
assert_setup_component(6, "sensor")
async def test_setup_minimum(hass, requests_mock):
"""Test setup with minimum configuration."""
resource = f"http://{google_wifi.DEFAULT_HOST}{google_wifi.ENDPOINT}"
requests_mock.get(resource, status_code=200)
assert await async_setup_component(
hass,
"sensor",
{"sensor": {"platform": "google_wifi", "monitored_conditions": ["uptime"]}},
)
assert_setup_component(1, "sensor")
class TestGoogleWifiSensor(unittest.TestCase):
"""Tests for Google Wifi sensor platform."""
def setUp(self):
"""Set up things to be run when tests are started."""
self.hass = get_test_home_assistant()
with requests_mock.Mocker() as mock_req:
self.setup_api(MOCK_DATA, mock_req)
self.addCleanup(self.hass.stop)
def setup_api(self, data, mock_req):
"""Set up API with fake data."""
resource = f"http://localhost{google_wifi.ENDPOINT}"
now = datetime(1970, month=1, day=1)
with patch("homeassistant.util.dt.now", return_value=now):
mock_req.get(resource, text=data, status_code=200)
conditions = google_wifi.MONITORED_CONDITIONS.keys()
self.api = google_wifi.GoogleWifiAPI("localhost", conditions)
self.name = NAME
self.sensor_dict = {}
for condition, cond_list in google_wifi.MONITORED_CONDITIONS.items():
sensor = google_wifi.GoogleWifiSensor(self.api, self.name, condition)
name = f"{self.name}_{condition}"
units = cond_list[1]
icon = cond_list[2]
self.sensor_dict[condition] = {
"sensor": sensor,
"name": name,
"units": units,
"icon": icon,
async def test_setup_get(hass, requests_mock):
"""Test setup with full configuration."""
resource = f"http://localhost{google_wifi.ENDPOINT}"
requests_mock.get(resource, status_code=200)
assert await async_setup_component(
hass,
"sensor",
{
"sensor": {
"platform": "google_wifi",
"host": "localhost",
"name": "Test Wifi",
"monitored_conditions": [
"current_version",
"new_version",
"uptime",
"last_restart",
"local_ip",
"status",
],
}
},
)
assert_setup_component(6, "sensor")
def fake_delay(self, ha_delay):
"""Fake delay to prevent update throttle."""
hass_now = dt_util.utcnow()
shifted_time = hass_now + timedelta(seconds=ha_delay)
self.hass.bus.fire(ha.EVENT_TIME_CHANGED, {ha.ATTR_NOW: shifted_time})
def test_name(self):
"""Test the name."""
for name in self.sensor_dict:
sensor = self.sensor_dict[name]["sensor"]
test_name = self.sensor_dict[name]["name"]
assert test_name == sensor.name
def setup_api(data, requests_mock):
"""Set up API with fake data."""
resource = f"http://localhost{google_wifi.ENDPOINT}"
now = datetime(1970, month=1, day=1)
sensor_dict = {}
with patch("homeassistant.util.dt.now", return_value=now):
requests_mock.get(resource, text=data, status_code=200)
conditions = google_wifi.MONITORED_CONDITIONS.keys()
api = google_wifi.GoogleWifiAPI("localhost", conditions)
for condition, cond_list in google_wifi.MONITORED_CONDITIONS.items():
sensor_dict[condition] = {
"sensor": google_wifi.GoogleWifiSensor(api, NAME, condition),
"name": f"{NAME}_{condition}",
"units": cond_list[1],
"icon": cond_list[2],
}
return api, sensor_dict
def test_unit_of_measurement(self):
"""Test the unit of measurement."""
for name in self.sensor_dict:
sensor = self.sensor_dict[name]["sensor"]
assert self.sensor_dict[name]["units"] == sensor.unit_of_measurement
def test_icon(self):
"""Test the icon."""
for name in self.sensor_dict:
sensor = self.sensor_dict[name]["sensor"]
assert self.sensor_dict[name]["icon"] == sensor.icon
def fake_delay(hass, ha_delay):
"""Fake delay to prevent update throttle."""
hass_now = dt_util.utcnow()
shifted_time = hass_now + timedelta(seconds=ha_delay)
async_fire_time_changed(hass, shifted_time)
@requests_mock.Mocker()
def test_state(self, mock_req):
"""Test the initial state."""
self.setup_api(MOCK_DATA, mock_req)
now = datetime(1970, month=1, day=1)
with patch("homeassistant.util.dt.now", return_value=now):
for name in self.sensor_dict:
sensor = self.sensor_dict[name]["sensor"]
self.fake_delay(2)
sensor.update()
if name == google_wifi.ATTR_LAST_RESTART:
assert "1969-12-31 00:00:00" == sensor.state
elif name == google_wifi.ATTR_UPTIME:
assert 1 == sensor.state
elif name == google_wifi.ATTR_STATUS:
assert "Online" == sensor.state
else:
assert "initial" == sensor.state
@requests_mock.Mocker()
def test_update_when_value_is_none(self, mock_req):
"""Test state gets updated to unknown when sensor returns no data."""
self.setup_api(None, mock_req)
for name in self.sensor_dict:
sensor = self.sensor_dict[name]["sensor"]
self.fake_delay(2)
def test_name(requests_mock):
"""Test the name."""
api, sensor_dict = setup_api(MOCK_DATA, requests_mock)
for name in sensor_dict:
sensor = sensor_dict[name]["sensor"]
test_name = sensor_dict[name]["name"]
assert test_name == sensor.name
def test_unit_of_measurement(requests_mock):
"""Test the unit of measurement."""
api, sensor_dict = setup_api(MOCK_DATA, requests_mock)
for name in sensor_dict:
sensor = sensor_dict[name]["sensor"]
assert sensor_dict[name]["units"] == sensor.unit_of_measurement
def test_icon(requests_mock):
"""Test the icon."""
api, sensor_dict = setup_api(MOCK_DATA, requests_mock)
for name in sensor_dict:
sensor = sensor_dict[name]["sensor"]
assert sensor_dict[name]["icon"] == sensor.icon
def test_state(hass, requests_mock):
"""Test the initial state."""
api, sensor_dict = setup_api(MOCK_DATA, requests_mock)
now = datetime(1970, month=1, day=1)
with patch("homeassistant.util.dt.now", return_value=now):
for name in sensor_dict:
sensor = sensor_dict[name]["sensor"]
fake_delay(hass, 2)
sensor.update()
assert sensor.state is None
if name == google_wifi.ATTR_LAST_RESTART:
assert "1969-12-31 00:00:00" == sensor.state
elif name == google_wifi.ATTR_UPTIME:
assert 1 == sensor.state
elif name == google_wifi.ATTR_STATUS:
assert "Online" == sensor.state
else:
assert "initial" == sensor.state
@requests_mock.Mocker()
def test_update_when_value_changed(self, mock_req):
"""Test state gets updated when sensor returns a new status."""
self.setup_api(MOCK_DATA_NEXT, mock_req)
now = datetime(1970, month=1, day=1)
with patch("homeassistant.util.dt.now", return_value=now):
for name in self.sensor_dict:
sensor = self.sensor_dict[name]["sensor"]
self.fake_delay(2)
sensor.update()
if name == google_wifi.ATTR_LAST_RESTART:
assert "1969-12-30 00:00:00" == sensor.state
elif name == google_wifi.ATTR_UPTIME:
assert 2 == sensor.state
elif name == google_wifi.ATTR_STATUS:
assert "Offline" == sensor.state
elif name == google_wifi.ATTR_NEW_VERSION:
assert "Latest" == sensor.state
elif name == google_wifi.ATTR_LOCAL_IP:
assert STATE_UNKNOWN == sensor.state
else:
assert "next" == sensor.state
@requests_mock.Mocker()
def test_when_api_data_missing(self, mock_req):
"""Test state logs an error when data is missing."""
self.setup_api(MOCK_DATA_MISSING, mock_req)
now = datetime(1970, month=1, day=1)
with patch("homeassistant.util.dt.now", return_value=now):
for name in self.sensor_dict:
sensor = self.sensor_dict[name]["sensor"]
self.fake_delay(2)
sensor.update()
def test_update_when_value_is_none(hass, requests_mock):
"""Test state gets updated to unknown when sensor returns no data."""
api, sensor_dict = setup_api(None, requests_mock)
for name in sensor_dict:
sensor = sensor_dict[name]["sensor"]
fake_delay(hass, 2)
sensor.update()
assert sensor.state is None
def test_update_when_value_changed(hass, requests_mock):
"""Test state gets updated when sensor returns a new status."""
api, sensor_dict = setup_api(MOCK_DATA_NEXT, requests_mock)
now = datetime(1970, month=1, day=1)
with patch("homeassistant.util.dt.now", return_value=now):
for name in sensor_dict:
sensor = sensor_dict[name]["sensor"]
fake_delay(hass, 2)
sensor.update()
if name == google_wifi.ATTR_LAST_RESTART:
assert "1969-12-30 00:00:00" == sensor.state
elif name == google_wifi.ATTR_UPTIME:
assert 2 == sensor.state
elif name == google_wifi.ATTR_STATUS:
assert "Offline" == sensor.state
elif name == google_wifi.ATTR_NEW_VERSION:
assert "Latest" == sensor.state
elif name == google_wifi.ATTR_LOCAL_IP:
assert STATE_UNKNOWN == sensor.state
else:
assert "next" == sensor.state
def test_update_when_unavailable(self):
"""Test state updates when Google Wifi unavailable."""
self.api.update = Mock(
"google_wifi.GoogleWifiAPI.update", side_effect=self.update_side_effect()
)
for name in self.sensor_dict:
sensor = self.sensor_dict[name]["sensor"]
def test_when_api_data_missing(hass, requests_mock):
"""Test state logs an error when data is missing."""
api, sensor_dict = setup_api(MOCK_DATA_MISSING, requests_mock)
now = datetime(1970, month=1, day=1)
with patch("homeassistant.util.dt.now", return_value=now):
for name in sensor_dict:
sensor = sensor_dict[name]["sensor"]
fake_delay(hass, 2)
sensor.update()
assert sensor.state is None
assert STATE_UNKNOWN == sensor.state
def update_side_effect(self):
"""Mock representation of update function."""
self.api.data = None
self.api.available = False
def test_update_when_unavailable(requests_mock):
"""Test state updates when Google Wifi unavailable."""
api, sensor_dict = setup_api(None, requests_mock)
api.update = Mock(
"google_wifi.GoogleWifiAPI.update",
side_effect=update_side_effect(requests_mock),
)
for name in sensor_dict:
sensor = sensor_dict[name]["sensor"]
sensor.update()
assert sensor.state is None
def update_side_effect(requests_mock):
"""Mock representation of update function."""
api, sensor_dict = setup_api(MOCK_DATA, requests_mock)
api.data = None
api.available = False