169 lines
3.1 KiB
Python
169 lines
3.1 KiB
Python
from types import SimpleNamespace
|
|
|
|
from app.auto.controller import AutoController
|
|
|
|
|
|
class FakeQingpingService:
|
|
|
|
def __init__(
|
|
self,
|
|
online: bool,
|
|
temperature,
|
|
):
|
|
self.online = online
|
|
|
|
self.state = SimpleNamespace(
|
|
temperature=temperature,
|
|
)
|
|
|
|
|
|
class FakeTionService:
|
|
|
|
def __init__(
|
|
self,
|
|
online: bool,
|
|
in_temp,
|
|
):
|
|
self.online = online
|
|
|
|
self.state = SimpleNamespace(
|
|
in_temp=in_temp,
|
|
)
|
|
|
|
|
|
def make_controller(
|
|
*,
|
|
qingping_online: bool,
|
|
qingping_temperature,
|
|
tion_online: bool,
|
|
tion_temperature,
|
|
):
|
|
|
|
qingping = FakeQingpingService(
|
|
online=qingping_online,
|
|
temperature=qingping_temperature,
|
|
)
|
|
|
|
tion = FakeTionService(
|
|
online=tion_online,
|
|
in_temp=tion_temperature,
|
|
)
|
|
|
|
return AutoController(
|
|
schedule_service=None,
|
|
qingping_service=qingping,
|
|
tion_service=tion,
|
|
)
|
|
|
|
|
|
def test_qingping_priority():
|
|
|
|
controller = make_controller(
|
|
qingping_online=True,
|
|
qingping_temperature=19.7,
|
|
tion_online=True,
|
|
tion_temperature=18,
|
|
)
|
|
|
|
temperature, source = (
|
|
controller._get_temperature()
|
|
)
|
|
|
|
assert temperature == 19.7
|
|
assert source == "qingping"
|
|
|
|
|
|
def test_tion_fallback():
|
|
|
|
controller = make_controller(
|
|
qingping_online=False,
|
|
qingping_temperature=19.7,
|
|
tion_online=True,
|
|
tion_temperature=18,
|
|
)
|
|
|
|
temperature, source = (
|
|
controller._get_temperature()
|
|
)
|
|
|
|
assert temperature == 18
|
|
assert source == "tion"
|
|
|
|
|
|
def test_tion_fallback_when_qingping_temperature_missing():
|
|
|
|
controller = make_controller(
|
|
qingping_online=True,
|
|
qingping_temperature=None,
|
|
tion_online=True,
|
|
tion_temperature=18,
|
|
)
|
|
|
|
temperature, source = (
|
|
controller._get_temperature()
|
|
)
|
|
|
|
assert temperature == 18
|
|
assert source == "tion"
|
|
|
|
|
|
def test_offline_tion_is_not_used():
|
|
|
|
controller = make_controller(
|
|
qingping_online=False,
|
|
qingping_temperature=None,
|
|
tion_online=False,
|
|
|
|
# Значение специально оставляем.
|
|
# Оно имитирует старый state Tion.
|
|
tion_temperature=18,
|
|
)
|
|
|
|
temperature, source = (
|
|
controller._get_temperature()
|
|
)
|
|
|
|
assert temperature is None
|
|
assert source is None
|
|
|
|
|
|
def test_missing_tion_temperature():
|
|
|
|
controller = make_controller(
|
|
qingping_online=False,
|
|
qingping_temperature=None,
|
|
tion_online=True,
|
|
tion_temperature=None,
|
|
)
|
|
|
|
temperature, source = (
|
|
controller._get_temperature()
|
|
)
|
|
|
|
assert temperature is None
|
|
assert source is None
|
|
|
|
|
|
def main():
|
|
|
|
test_qingping_priority()
|
|
|
|
test_tion_fallback()
|
|
|
|
test_tion_fallback_when_qingping_temperature_missing()
|
|
|
|
test_offline_tion_is_not_used()
|
|
|
|
test_missing_tion_temperature()
|
|
|
|
print()
|
|
print("=" * 70)
|
|
print(
|
|
"ALL AUTO TEMPERATURE SOURCE "
|
|
"TESTS PASSED"
|
|
)
|
|
print("=" * 70)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main() |