"""Fixtures partagées pour les tests de pronote-sync.""" from __future__ import annotations from datetime import date, datetime import pytest from pydantic import SecretStr from pronote_sync.config.settings import CalDAVSettings from pronote_sync.models.agenda import Lesson, LessonStatus, SchoolEvent, SchoolEventKind from pronote_sync.models.homework import Homework from pronote_sync.models.pronote import PronoteData @pytest.fixture def sample_lesson() -> Lesson: """Cours normal pour les tests.""" return Lesson( id="L-1234-Normal", start=datetime(2026, 1, 15, 8, 0), end=datetime(2026, 1, 15, 9, 0), subject="Mathématiques", teachers=("Prof Dupont",), rooms=("Salle 101",), status=LessonStatus.NORMAL, group=None, content=None, ) @pytest.fixture def sample_cancelled_lesson() -> Lesson: """Cours annulé pour les tests.""" return Lesson( id="L-5678-Cancelled", start=datetime(2026, 1, 16, 10, 0), end=datetime(2026, 1, 16, 11, 0), subject="Français", teachers=("Prof Martin",), rooms=("Salle 202",), status=LessonStatus.CANCELLED, group=None, content=None, ) @pytest.fixture def sample_homework() -> Homework: """Devoir pour les tests.""" return Homework( id="hw-001", subject="Histoire", teachers=("Prof Bernard",), assigned_on=date(2026, 1, 15), due_on=date(2026, 1, 20), text="Lire le chapitre 5", html="
Lire le chapitre 5
", ) @pytest.fixture def sample_school_event() -> SchoolEvent: """Événement scolaire pour les tests.""" return SchoolEvent( kind=SchoolEventKind.HOLIDAY, label="Vacances de Noël", from_date=date(2026, 12, 20), to_date=date(2027, 1, 5), ) @pytest.fixture def caldav_settings() -> CalDAVSettings: """Configuration CalDAV de test avec une URL HTTPS.""" return CalDAVSettings( url=SecretStr("https://caldav.example.com/remote.php/dav/"), username="test-user", password=SecretStr("test-secret-password-12345"), calendar_path="/pronote-sync/", ) @pytest.fixture def pronote_data( sample_lesson: Lesson, sample_cancelled_lesson: Lesson, sample_homework: Homework, sample_school_event: SchoolEvent, ) -> PronoteData: """Données Pronote de test avec des cours, devoirs et événements.""" return PronoteData( lessons=[sample_lesson, sample_cancelled_lesson], homeworks=[sample_homework], school_events=[sample_school_event], messages=[], target_date=date(2026, 1, 15), generated_at=datetime(2026, 1, 15, 0, 0), )