from pathlib import Path from tempfile import TemporaryDirectory from schedule import ( ScheduleActionType, load_schedule, ) VALID_YAML = """ version: 1 enabled: true timezone: local templates: test: - time: "00:00" action: type: auto speed: 3 target_temp: 20 days: mon: test tue: test wed: test thu: test fri: test sat: test sun: test """ def load_config(text: str): temp_dir = TemporaryDirectory() path = ( Path(temp_dir.name) / "schedule.yaml" ) path.write_text( text, encoding="utf-8", ) config = load_schedule(path) return temp_dir, config def test_auto_target_temperature(): temp_dir, config = load_config( VALID_YAML ) try: point = ( config.templates["test"][0] ) action = point.action assert ( action.type == ScheduleActionType.AUTO ) assert ( action.settings.speed == 3 ) assert ( action.settings.target_temp == 20 ) finally: temp_dir.cleanup() def test_auto_rejects_heater(): config_text = """ version: 1 enabled: true timezone: local templates: test: - time: "00:00" action: type: auto speed: 3 target_temp: 20 heater: on days: mon: test tue: test wed: test thu: test fri: test sat: test sun: test """ try: temp_dir, _ = load_config( config_text ) except ValueError as exc: print() print( "Expected error:", exc, ) assert "heater" in str(exc) return else: temp_dir.cleanup() raise AssertionError( "AUTO heater field must " "raise ValueError" ) def test_auto_speed_is_required(): config_text = """ version: 1 enabled: true timezone: local templates: test: - time: "00:00" action: type: auto target_temp: 20 days: mon: test tue: test wed: test thu: test fri: test sat: test sun: test """ try: temp_dir, _ = load_config( config_text ) except ValueError as exc: print() print( "Expected error:", exc, ) assert ( str(exc) == "AUTO action requires 'speed'" ) return else: temp_dir.cleanup() raise AssertionError( "AUTO without speed must " "raise ValueError" ) def main(): test_auto_target_temperature() test_auto_rejects_heater() test_auto_speed_is_required() print() print("=" * 70) print( "ALL AUTO TEMPERATURE PARSER " "TESTS PASSED" ) print("=" * 70) if __name__ == "__main__": main()