Rewrite ecobee unittest tests to pytest (#42584)

This commit is contained in:
Adrian Suwała 2020-11-16 11:54:51 +01:00 committed by GitHub
parent 4c2bf1ddf5
commit 246ad8dba9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 292 additions and 266 deletions

View File

@ -1,17 +1,16 @@
"""The test for the Ecobee thermostat module.""" """The test for the Ecobee thermostat module."""
import unittest
from unittest import mock from unittest import mock
import pytest
from homeassistant.components.ecobee import climate as ecobee from homeassistant.components.ecobee import climate as ecobee
import homeassistant.const as const import homeassistant.const as const
from homeassistant.const import STATE_OFF from homeassistant.const import STATE_OFF
class TestEcobee(unittest.TestCase): @pytest.fixture
"""Tests for Ecobee climate.""" def ecobee_fixture():
"""Set up ecobee mock."""
def setUp(self):
"""Set up test variables."""
vals = { vals = {
"name": "Ecobee", "name": "Ecobee",
"program": { "program": {
@ -48,219 +47,240 @@ class TestEcobee(unittest.TestCase):
} }
], ],
} }
mock_ecobee = mock.Mock()
mock_ecobee.__getitem__ = mock.Mock(side_effect=vals.__getitem__)
mock_ecobee.__setitem__ = mock.Mock(side_effect=vals.__setitem__)
return mock_ecobee
self.ecobee = mock.Mock()
self.ecobee.__getitem__ = mock.Mock(side_effect=vals.__getitem__)
self.ecobee.__setitem__ = mock.Mock(side_effect=vals.__setitem__)
self.data = mock.Mock() @pytest.fixture(name="data")
self.data.ecobee.get_thermostat.return_value = self.ecobee def data_fixture(ecobee_fixture):
self.thermostat = ecobee.Thermostat(self.data, 1) """Set up data mock."""
data = mock.Mock()
data.ecobee.get_thermostat.return_value = ecobee_fixture
return data
def test_name(self):
@pytest.fixture(name="thermostat")
def thermostat_fixture(data):
"""Set up ecobee thermostat object."""
return ecobee.Thermostat(data, 1)
async def test_name(thermostat):
"""Test name property.""" """Test name property."""
assert "Ecobee" == self.thermostat.name assert thermostat.name == "Ecobee"
def test_current_temperature(self):
async def test_current_temperature(ecobee_fixture, thermostat):
"""Test current temperature.""" """Test current temperature."""
assert 30 == self.thermostat.current_temperature assert thermostat.current_temperature == 30
self.ecobee["runtime"]["actualTemperature"] = const.HTTP_NOT_FOUND ecobee_fixture["runtime"]["actualTemperature"] = const.HTTP_NOT_FOUND
assert 40.4 == self.thermostat.current_temperature assert thermostat.current_temperature == 40.4
def test_target_temperature_low(self):
async def test_target_temperature_low(ecobee_fixture, thermostat):
"""Test target low temperature.""" """Test target low temperature."""
assert 40 == self.thermostat.target_temperature_low assert thermostat.target_temperature_low == 40
self.ecobee["runtime"]["desiredHeat"] = 502 ecobee_fixture["runtime"]["desiredHeat"] = 502
assert 50.2 == self.thermostat.target_temperature_low assert thermostat.target_temperature_low == 50.2
def test_target_temperature_high(self):
async def test_target_temperature_high(ecobee_fixture, thermostat):
"""Test target high temperature.""" """Test target high temperature."""
assert 20 == self.thermostat.target_temperature_high assert thermostat.target_temperature_high == 20
self.ecobee["runtime"]["desiredCool"] = 103 ecobee_fixture["runtime"]["desiredCool"] = 103
assert 10.3 == self.thermostat.target_temperature_high assert thermostat.target_temperature_high == 10.3
def test_target_temperature(self):
async def test_target_temperature(ecobee_fixture, thermostat):
"""Test target temperature.""" """Test target temperature."""
assert self.thermostat.target_temperature is None assert thermostat.target_temperature is None
self.ecobee["settings"]["hvacMode"] = "heat" ecobee_fixture["settings"]["hvacMode"] = "heat"
assert 40 == self.thermostat.target_temperature assert thermostat.target_temperature == 40
self.ecobee["settings"]["hvacMode"] = "cool" ecobee_fixture["settings"]["hvacMode"] = "cool"
assert 20 == self.thermostat.target_temperature assert thermostat.target_temperature == 20
self.ecobee["settings"]["hvacMode"] = "auxHeatOnly" ecobee_fixture["settings"]["hvacMode"] = "auxHeatOnly"
assert 40 == self.thermostat.target_temperature assert thermostat.target_temperature == 40
self.ecobee["settings"]["hvacMode"] = "off" ecobee_fixture["settings"]["hvacMode"] = "off"
assert self.thermostat.target_temperature is None assert thermostat.target_temperature is None
def test_desired_fan_mode(self):
async def test_desired_fan_mode(ecobee_fixture, thermostat):
"""Test desired fan mode property.""" """Test desired fan mode property."""
assert "on" == self.thermostat.fan_mode assert thermostat.fan_mode == "on"
self.ecobee["runtime"]["desiredFanMode"] = "auto" ecobee_fixture["runtime"]["desiredFanMode"] = "auto"
assert "auto" == self.thermostat.fan_mode assert thermostat.fan_mode == "auto"
def test_fan(self):
async def test_fan(ecobee_fixture, thermostat):
"""Test fan property.""" """Test fan property."""
assert const.STATE_ON == self.thermostat.fan assert const.STATE_ON == thermostat.fan
self.ecobee["equipmentStatus"] = "" ecobee_fixture["equipmentStatus"] = ""
assert STATE_OFF == self.thermostat.fan assert STATE_OFF == thermostat.fan
self.ecobee["equipmentStatus"] = "heatPump, heatPump2" ecobee_fixture["equipmentStatus"] = "heatPump, heatPump2"
assert STATE_OFF == self.thermostat.fan assert STATE_OFF == thermostat.fan
def test_hvac_mode(self):
async def test_hvac_mode(ecobee_fixture, thermostat):
"""Test current operation property.""" """Test current operation property."""
assert self.thermostat.hvac_mode == "heat_cool" assert thermostat.hvac_mode == "heat_cool"
self.ecobee["settings"]["hvacMode"] = "heat" ecobee_fixture["settings"]["hvacMode"] = "heat"
assert self.thermostat.hvac_mode == "heat" assert thermostat.hvac_mode == "heat"
self.ecobee["settings"]["hvacMode"] = "cool" ecobee_fixture["settings"]["hvacMode"] = "cool"
assert self.thermostat.hvac_mode == "cool" assert thermostat.hvac_mode == "cool"
self.ecobee["settings"]["hvacMode"] = "auxHeatOnly" ecobee_fixture["settings"]["hvacMode"] = "auxHeatOnly"
assert self.thermostat.hvac_mode == "heat" assert thermostat.hvac_mode == "heat"
self.ecobee["settings"]["hvacMode"] = "off" ecobee_fixture["settings"]["hvacMode"] = "off"
assert self.thermostat.hvac_mode == "off" assert thermostat.hvac_mode == "off"
def test_hvac_modes(self):
async def test_hvac_modes(thermostat):
"""Test operation list property.""" """Test operation list property."""
assert ["heat_cool", "heat", "cool", "off"] == self.thermostat.hvac_modes assert ["heat_cool", "heat", "cool", "off"] == thermostat.hvac_modes
def test_hvac_mode2(self):
async def test_hvac_mode2(ecobee_fixture, thermostat):
"""Test operation mode property.""" """Test operation mode property."""
assert self.thermostat.hvac_mode == "heat_cool" assert thermostat.hvac_mode == "heat_cool"
self.ecobee["settings"]["hvacMode"] = "heat" ecobee_fixture["settings"]["hvacMode"] = "heat"
assert self.thermostat.hvac_mode == "heat" assert thermostat.hvac_mode == "heat"
def test_device_state_attributes(self):
async def test_device_state_attributes(ecobee_fixture, thermostat):
"""Test device state attributes property.""" """Test device state attributes property."""
self.ecobee["equipmentStatus"] = "heatPump2" ecobee_fixture["equipmentStatus"] = "heatPump2"
assert { assert {
"fan": "off", "fan": "off",
"climate_mode": "Climate1", "climate_mode": "Climate1",
"fan_min_on_time": 10, "fan_min_on_time": 10,
"equipment_running": "heatPump2", "equipment_running": "heatPump2",
} == self.thermostat.device_state_attributes } == thermostat.device_state_attributes
self.ecobee["equipmentStatus"] = "auxHeat2" ecobee_fixture["equipmentStatus"] = "auxHeat2"
assert { assert {
"fan": "off", "fan": "off",
"climate_mode": "Climate1", "climate_mode": "Climate1",
"fan_min_on_time": 10, "fan_min_on_time": 10,
"equipment_running": "auxHeat2", "equipment_running": "auxHeat2",
} == self.thermostat.device_state_attributes } == thermostat.device_state_attributes
self.ecobee["equipmentStatus"] = "compCool1" ecobee_fixture["equipmentStatus"] = "compCool1"
assert { assert {
"fan": "off", "fan": "off",
"climate_mode": "Climate1", "climate_mode": "Climate1",
"fan_min_on_time": 10, "fan_min_on_time": 10,
"equipment_running": "compCool1", "equipment_running": "compCool1",
} == self.thermostat.device_state_attributes } == thermostat.device_state_attributes
self.ecobee["equipmentStatus"] = "" ecobee_fixture["equipmentStatus"] = ""
assert { assert {
"fan": "off", "fan": "off",
"climate_mode": "Climate1", "climate_mode": "Climate1",
"fan_min_on_time": 10, "fan_min_on_time": 10,
"equipment_running": "", "equipment_running": "",
} == self.thermostat.device_state_attributes } == thermostat.device_state_attributes
self.ecobee["equipmentStatus"] = "Unknown" ecobee_fixture["equipmentStatus"] = "Unknown"
assert { assert {
"fan": "off", "fan": "off",
"climate_mode": "Climate1", "climate_mode": "Climate1",
"fan_min_on_time": 10, "fan_min_on_time": 10,
"equipment_running": "Unknown", "equipment_running": "Unknown",
} == self.thermostat.device_state_attributes } == thermostat.device_state_attributes
self.ecobee["program"]["currentClimateRef"] = "c2" ecobee_fixture["program"]["currentClimateRef"] = "c2"
assert { assert {
"fan": "off", "fan": "off",
"climate_mode": "Climate2", "climate_mode": "Climate2",
"fan_min_on_time": 10, "fan_min_on_time": 10,
"equipment_running": "Unknown", "equipment_running": "Unknown",
} == self.thermostat.device_state_attributes } == thermostat.device_state_attributes
def test_is_aux_heat_on(self):
async def test_is_aux_heat_on(ecobee_fixture, thermostat):
"""Test aux heat property.""" """Test aux heat property."""
assert not self.thermostat.is_aux_heat assert not thermostat.is_aux_heat
self.ecobee["equipmentStatus"] = "fan, auxHeat" ecobee_fixture["equipmentStatus"] = "fan, auxHeat"
assert self.thermostat.is_aux_heat assert thermostat.is_aux_heat
def test_set_temperature(self):
async def test_set_temperature(ecobee_fixture, thermostat, data):
"""Test set temperature.""" """Test set temperature."""
# Auto -> Auto # Auto -> Auto
self.data.reset_mock() data.reset_mock()
self.thermostat.set_temperature(target_temp_low=20, target_temp_high=30) thermostat.set_temperature(target_temp_low=20, target_temp_high=30)
self.data.ecobee.set_hold_temp.assert_has_calls( data.ecobee.set_hold_temp.assert_has_calls([mock.call(1, 30, 20, "nextTransition")])
[mock.call(1, 30, 20, "nextTransition")]
)
# Auto -> Hold # Auto -> Hold
self.data.reset_mock() data.reset_mock()
self.thermostat.set_temperature(temperature=20) thermostat.set_temperature(temperature=20)
self.data.ecobee.set_hold_temp.assert_has_calls( data.ecobee.set_hold_temp.assert_has_calls([mock.call(1, 25, 15, "nextTransition")])
[mock.call(1, 25, 15, "nextTransition")]
)
# Cool -> Hold # Cool -> Hold
self.data.reset_mock() data.reset_mock()
self.ecobee["settings"]["hvacMode"] = "cool" ecobee_fixture["settings"]["hvacMode"] = "cool"
self.thermostat.set_temperature(temperature=20.5) thermostat.set_temperature(temperature=20.5)
self.data.ecobee.set_hold_temp.assert_has_calls( data.ecobee.set_hold_temp.assert_has_calls(
[mock.call(1, 20.5, 20.5, "nextTransition")] [mock.call(1, 20.5, 20.5, "nextTransition")]
) )
# Heat -> Hold # Heat -> Hold
self.data.reset_mock() data.reset_mock()
self.ecobee["settings"]["hvacMode"] = "heat" ecobee_fixture["settings"]["hvacMode"] = "heat"
self.thermostat.set_temperature(temperature=20) thermostat.set_temperature(temperature=20)
self.data.ecobee.set_hold_temp.assert_has_calls( data.ecobee.set_hold_temp.assert_has_calls([mock.call(1, 20, 20, "nextTransition")])
[mock.call(1, 20, 20, "nextTransition")]
)
# Heat -> Auto # Heat -> Auto
self.data.reset_mock() data.reset_mock()
self.ecobee["settings"]["hvacMode"] = "heat" ecobee_fixture["settings"]["hvacMode"] = "heat"
self.thermostat.set_temperature(target_temp_low=20, target_temp_high=30) thermostat.set_temperature(target_temp_low=20, target_temp_high=30)
assert not self.data.ecobee.set_hold_temp.called assert not data.ecobee.set_hold_temp.called
def test_set_hvac_mode(self):
async def test_set_hvac_mode(thermostat, data):
"""Test operation mode setter.""" """Test operation mode setter."""
self.data.reset_mock() data.reset_mock()
self.thermostat.set_hvac_mode("heat_cool") thermostat.set_hvac_mode("heat_cool")
self.data.ecobee.set_hvac_mode.assert_has_calls([mock.call(1, "auto")]) data.ecobee.set_hvac_mode.assert_has_calls([mock.call(1, "auto")])
self.data.reset_mock() data.reset_mock()
self.thermostat.set_hvac_mode("heat") thermostat.set_hvac_mode("heat")
self.data.ecobee.set_hvac_mode.assert_has_calls([mock.call(1, "heat")]) data.ecobee.set_hvac_mode.assert_has_calls([mock.call(1, "heat")])
def test_set_fan_min_on_time(self):
async def test_set_fan_min_on_time(thermostat, data):
"""Test fan min on time setter.""" """Test fan min on time setter."""
self.data.reset_mock() data.reset_mock()
self.thermostat.set_fan_min_on_time(15) thermostat.set_fan_min_on_time(15)
self.data.ecobee.set_fan_min_on_time.assert_has_calls([mock.call(1, 15)]) data.ecobee.set_fan_min_on_time.assert_has_calls([mock.call(1, 15)])
self.data.reset_mock() data.reset_mock()
self.thermostat.set_fan_min_on_time(20) thermostat.set_fan_min_on_time(20)
self.data.ecobee.set_fan_min_on_time.assert_has_calls([mock.call(1, 20)]) data.ecobee.set_fan_min_on_time.assert_has_calls([mock.call(1, 20)])
def test_resume_program(self):
async def test_resume_program(thermostat, data):
"""Test resume program.""" """Test resume program."""
# False # False
self.data.reset_mock() data.reset_mock()
self.thermostat.resume_program(False) thermostat.resume_program(False)
self.data.ecobee.resume_program.assert_has_calls([mock.call(1, "false")]) data.ecobee.resume_program.assert_has_calls([mock.call(1, "false")])
self.data.reset_mock() data.reset_mock()
self.thermostat.resume_program(None) thermostat.resume_program(None)
self.data.ecobee.resume_program.assert_has_calls([mock.call(1, "false")]) data.ecobee.resume_program.assert_has_calls([mock.call(1, "false")])
self.data.reset_mock() data.reset_mock()
self.thermostat.resume_program(0) thermostat.resume_program(0)
self.data.ecobee.resume_program.assert_has_calls([mock.call(1, "false")]) data.ecobee.resume_program.assert_has_calls([mock.call(1, "false")])
# True # True
self.data.reset_mock() data.reset_mock()
self.thermostat.resume_program(True) thermostat.resume_program(True)
self.data.ecobee.resume_program.assert_has_calls([mock.call(1, "true")]) data.ecobee.resume_program.assert_has_calls([mock.call(1, "true")])
self.data.reset_mock() data.reset_mock()
self.thermostat.resume_program(1) thermostat.resume_program(1)
self.data.ecobee.resume_program.assert_has_calls([mock.call(1, "true")]) data.ecobee.resume_program.assert_has_calls([mock.call(1, "true")])
def test_hold_preference(self):
async def test_hold_preference(ecobee_fixture, thermostat):
"""Test hold preference.""" """Test hold preference."""
assert "nextTransition" == self.thermostat.hold_preference() assert thermostat.hold_preference() == "nextTransition"
for action in [ for action in [
"useEndTime4hour", "useEndTime4hour",
"useEndTime2hour", "useEndTime2hour",
@ -268,21 +288,23 @@ class TestEcobee(unittest.TestCase):
"indefinite", "indefinite",
"askMe", "askMe",
]: ]:
self.ecobee["settings"]["holdAction"] = action ecobee_fixture["settings"]["holdAction"] = action
assert "nextTransition" == self.thermostat.hold_preference() assert thermostat.hold_preference() == "nextTransition"
def test_set_fan_mode_on(self):
async def test_set_fan_mode_on(thermostat, data):
"""Test set fan mode to on.""" """Test set fan mode to on."""
self.data.reset_mock() data.reset_mock()
self.thermostat.set_fan_mode("on") thermostat.set_fan_mode("on")
self.data.ecobee.set_fan_mode.assert_has_calls( data.ecobee.set_fan_mode.assert_has_calls(
[mock.call(1, "on", 20, 40, "nextTransition")] [mock.call(1, "on", 20, 40, "nextTransition")]
) )
def test_set_fan_mode_auto(self):
async def test_set_fan_mode_auto(thermostat, data):
"""Test set fan mode to auto.""" """Test set fan mode to auto."""
self.data.reset_mock() data.reset_mock()
self.thermostat.set_fan_mode("auto") thermostat.set_fan_mode("auto")
self.data.ecobee.set_fan_mode.assert_has_calls( data.ecobee.set_fan_mode.assert_has_calls(
[mock.call(1, "auto", 20, 40, "nextTransition")] [mock.call(1, "auto", 20, 40, "nextTransition")]
) )

View File

@ -46,8 +46,8 @@ async def test_pin_request_succeeds(hass):
flow.hass = hass flow.hass = hass
flow.hass.data[DATA_ECOBEE_CONFIG] = {} flow.hass.data[DATA_ECOBEE_CONFIG] = {}
with patch("homeassistant.components.ecobee.config_flow.Ecobee") as MockEcobee: with patch("homeassistant.components.ecobee.config_flow.Ecobee") as mock_ecobee:
mock_ecobee = MockEcobee.return_value mock_ecobee = mock_ecobee.return_value
mock_ecobee.request_pin.return_value = True mock_ecobee.request_pin.return_value = True
mock_ecobee.pin = "test-pin" mock_ecobee.pin = "test-pin"
@ -64,8 +64,8 @@ async def test_pin_request_fails(hass):
flow.hass = hass flow.hass = hass
flow.hass.data[DATA_ECOBEE_CONFIG] = {} flow.hass.data[DATA_ECOBEE_CONFIG] = {}
with patch("homeassistant.components.ecobee.config_flow.Ecobee") as MockEcobee: with patch("homeassistant.components.ecobee.config_flow.Ecobee") as mock_ecobee:
mock_ecobee = MockEcobee.return_value mock_ecobee = mock_ecobee.return_value
mock_ecobee.request_pin.return_value = False mock_ecobee.request_pin.return_value = False
result = await flow.async_step_user(user_input={CONF_API_KEY: "api-key"}) result = await flow.async_step_user(user_input={CONF_API_KEY: "api-key"})
@ -81,12 +81,14 @@ async def test_token_request_succeeds(hass):
flow.hass = hass flow.hass = hass
flow.hass.data[DATA_ECOBEE_CONFIG] = {} flow.hass.data[DATA_ECOBEE_CONFIG] = {}
with patch("homeassistant.components.ecobee.config_flow.Ecobee") as MockEcobee: with patch("homeassistant.components.ecobee.config_flow.Ecobee") as mock_ecobee:
mock_ecobee = MockEcobee.return_value mock_ecobee = mock_ecobee.return_value
mock_ecobee.request_tokens.return_value = True mock_ecobee.request_tokens.return_value = True
mock_ecobee.api_key = "test-api-key" mock_ecobee.api_key = "test-api-key"
mock_ecobee.refresh_token = "test-token" mock_ecobee.refresh_token = "test-token"
# pylint: disable=protected-access
flow._ecobee = mock_ecobee flow._ecobee = mock_ecobee
# pylint: enable=protected-access
result = await flow.async_step_authorize(user_input={}) result = await flow.async_step_authorize(user_input={})
@ -104,11 +106,13 @@ async def test_token_request_fails(hass):
flow.hass = hass flow.hass = hass
flow.hass.data[DATA_ECOBEE_CONFIG] = {} flow.hass.data[DATA_ECOBEE_CONFIG] = {}
with patch("homeassistant.components.ecobee.config_flow.Ecobee") as MockEcobee: with patch("homeassistant.components.ecobee.config_flow.Ecobee") as mock_ecobee:
mock_ecobee = MockEcobee.return_value mock_ecobee = mock_ecobee.return_value
mock_ecobee.request_tokens.return_value = False mock_ecobee.request_tokens.return_value = False
mock_ecobee.pin = "test-pin" mock_ecobee.pin = "test-pin"
# pylint: disable=protected-access
flow._ecobee = mock_ecobee flow._ecobee = mock_ecobee
# pylint: enable=protected-access
result = await flow.async_step_authorize(user_input={}) result = await flow.async_step_authorize(user_input={})
@ -143,8 +147,8 @@ async def test_import_flow_triggered_with_ecobee_conf_and_valid_data_and_valid_t
with patch( with patch(
"homeassistant.components.ecobee.config_flow.load_json", "homeassistant.components.ecobee.config_flow.load_json",
return_value=MOCK_ECOBEE_CONF, return_value=MOCK_ECOBEE_CONF,
), patch("homeassistant.components.ecobee.config_flow.Ecobee") as MockEcobee: ), patch("homeassistant.components.ecobee.config_flow.Ecobee") as mock_ecobee:
mock_ecobee = MockEcobee.return_value mock_ecobee = mock_ecobee.return_value
mock_ecobee.refresh_tokens.return_value = True mock_ecobee.refresh_tokens.return_value = True
mock_ecobee.api_key = "test-api-key" mock_ecobee.api_key = "test-api-key"
mock_ecobee.refresh_token = "test-token" mock_ecobee.refresh_token = "test-token"
@ -196,10 +200,10 @@ async def test_import_flow_triggered_with_ecobee_conf_and_valid_data_and_stale_t
return_value=MOCK_ECOBEE_CONF, return_value=MOCK_ECOBEE_CONF,
), patch( ), patch(
"homeassistant.components.ecobee.config_flow.Ecobee" "homeassistant.components.ecobee.config_flow.Ecobee"
) as MockEcobee, patch.object( ) as mock_ecobee, patch.object(
flow, "async_step_user", return_value=mock_coro() flow, "async_step_user", return_value=mock_coro()
) as mock_async_step_user: ) as mock_async_step_user:
mock_ecobee = MockEcobee.return_value mock_ecobee = mock_ecobee.return_value
mock_ecobee.refresh_tokens.return_value = False mock_ecobee.refresh_tokens.return_value = False
await flow.async_step_import(import_data=None) await flow.async_step_import(import_data=None)

View File

@ -5,14 +5,14 @@ import voluptuous as vol
from homeassistant.components.ecobee.util import ecobee_date, ecobee_time from homeassistant.components.ecobee.util import ecobee_date, ecobee_time
def test_ecobee_date_with_valid_input(): async def test_ecobee_date_with_valid_input():
"""Test that the date function returns the expected result.""" """Test that the date function returns the expected result."""
test_input = "2019-09-27" test_input = "2019-09-27"
assert ecobee_date(test_input) == test_input assert ecobee_date(test_input) == test_input
def test_ecobee_date_with_invalid_input(): async def test_ecobee_date_with_invalid_input():
"""Test that the date function raises the expected exception.""" """Test that the date function raises the expected exception."""
test_input = "20190927" test_input = "20190927"
@ -20,14 +20,14 @@ def test_ecobee_date_with_invalid_input():
ecobee_date(test_input) ecobee_date(test_input)
def test_ecobee_time_with_valid_input(): async def test_ecobee_time_with_valid_input():
"""Test that the time function returns the expected result.""" """Test that the time function returns the expected result."""
test_input = "20:55:15" test_input = "20:55:15"
assert ecobee_time(test_input) == test_input assert ecobee_time(test_input) == test_input
def test_ecobee_time_with_invalid_input(): async def test_ecobee_time_with_invalid_input():
"""Test that the time function raises the expected exception.""" """Test that the time function raises the expected exception."""
test_input = "20:55" test_input = "20:55"