from datetime import datetime from pathlib import Path from tempfile import TemporaryDirectory from schedule import ( ScheduleService, load_schedule, ) SCHEDULE_YAML = """ version: 1 enabled: true timezone: local templates: test: - time: "09:00" action: type: set power: on speed: 1 target_temp: 23 - time: "10:00" action: type: auto speed: 3 target_temp: 20 - time: "12:00" action: type: set speed: 2 target_temp: 22 days: mon: test tue: test wed: test thu: test fri: test sat: test sun: test """ def load_test_schedule(): temp_dir = TemporaryDirectory() path = ( Path(temp_dir.name) / "schedule.yaml" ) path.write_text( SCHEDULE_YAML, encoding="utf-8", ) config = load_schedule(path) return temp_dir, config def test_auto_temperature_resolution(): temp_dir, config = ( load_test_schedule() ) try: service = ScheduleService( config ) # ---------------------------------------------- # 09:30 — обычный SET # ---------------------------------------------- resolution = service.resolve( datetime( 2026, 9, 14, 9, 30, ) ) assert ( resolution.auto_active is False ) assert ( resolution.scheduled_settings.target_temp == 23 ) assert ( resolution.auto_target_temp is None ) # ---------------------------------------------- # 10:30 — AUTO # # Последний SET по-прежнему хранит 23, # но AUTO явно требует 20. # ---------------------------------------------- resolution = service.resolve( datetime( 2026, 9, 14, 10, 30, ) ) assert ( resolution.auto_active is True ) assert ( resolution.auto_fallback_speed == 3 ) assert ( resolution.scheduled_settings.target_temp == 23 ) assert ( resolution.auto_target_temp == 20 ) # ---------------------------------------------- # 12:30 — снова SET # # AUTO закончился. # ---------------------------------------------- resolution = service.resolve( datetime( 2026, 9, 14, 12, 30, ) ) assert ( resolution.auto_active is False ) assert ( resolution.scheduled_settings.target_temp == 22 ) assert ( resolution.auto_target_temp is None ) finally: temp_dir.cleanup() def main(): test_auto_temperature_resolution() print() print("=" * 70) print( "ALL AUTO TEMPERATURE RESOLUTION " "TESTS PASSED" ) print("=" * 70) if __name__ == "__main__": main()