Files
garmin-coach-to-cal-sync/tests/test_repository.py

54 lines
1.7 KiB
Python

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,
)
)