from __future__ import annotations import pytest from garmin_coach_clone.config import ( DEFAULT_CLONE_NAME_TEMPLATE, DEFAULT_FIXED_TIMES, load_settings, ) from garmin_coach_clone.db import Database from garmin_coach_clone.repository import Repository, ScheduleConfig, validate_schedule_config def test_schedule_restore_defaults(tmp_path, monkeypatch) -> None: monkeypatch.setenv("DATA_DIR", str(tmp_path)) settings = load_settings() db = Database(tmp_path / "app.db") db.initialize() repo = Repository(db, settings) restored = repo.restore_default_schedule() assert restored.fixed_times == DEFAULT_FIXED_TIMES assert restored.clone_name_template == DEFAULT_CLONE_NAME_TEMPLATE assert repo.schedule_config().active_window == "05:00-22:00" def test_schedule_validation_rejects_bad_window() -> None: with pytest.raises(ValueError, match="active window"): validate_schedule_config( ScheduleConfig( enabled=True, interval_minutes=30, active_window="22:00-05:00", fixed_times=["05:15"], days_ahead=1, ) ) @pytest.mark.parametrize("template", ["", "{type} {date}", "{unknown} ({clone})"]) def test_schedule_validation_rejects_invalid_clone_name_template(template: str) -> None: with pytest.raises(ValueError, match="clone name template|unknown clone"): validate_schedule_config( ScheduleConfig( enabled=True, interval_minutes=30, active_window="05:00-22:00", fixed_times=["05:15"], days_ahead=1, clone_name_template=template, ) )