Files
2026-06-08 16:17:11 +02:00

184 lines
5.2 KiB
Python

from datetime import datetime, timedelta
from typing import List
import pytest
from pydantic import ValidationError
from app.schemas import (
SleepSessionCreate,
SleepSessionUpdate,
SleepSessionRead,
SessionListResponse,
DailySummaryDay,
DailySummaryResponse,
TimetableSlot,
TimetableResponse,
WakeupBedtimeDay,
WakeupBedtimeResponse,
SummaryResponse,
)
def test_sleep_session_create_valid():
start_time = datetime.now()
data = {"start_time": start_time}
schema = SleepSessionCreate(**data)
assert schema.start_time == start_time
def test_sleep_session_create_invalid_missing_field():
with pytest.raises(ValidationError):
SleepSessionCreate()
def test_sleep_session_create_invalid_type():
with pytest.raises(ValidationError):
SleepSessionCreate(start_time="not-a-date")
def test_sleep_session_update_valid():
start_time = datetime.now()
data = {"start_time": start_time}
schema = SleepSessionUpdate(**data)
assert schema.start_time == start_time
assert schema.end_time is None
def test_sleep_session_update_valid_partial():
data = {"end_time": datetime.now()}
schema = SleepSessionUpdate(**data)
assert schema.end_time is not None
assert schema.start_time is None
def test_sleep_session_read_valid():
now = datetime.now()
data = {
"id": 1,
"start_time": now,
"end_time": now + timedelta(hours=8),
"created_at": now,
"updated_at": now,
}
schema = SleepSessionRead(**data)
assert schema.id == 1
assert schema.start_time == now
assert schema.end_time == now + timedelta(hours=8)
def test_sleep_session_read_invalid_id():
now = datetime.now()
data = {
"id": "not-an-int",
"start_time": now,
"end_time": None,
"created_at": now,
"updated_at": now,
}
with pytest.raises(ValidationError):
SleepSessionRead(**data)
def test_session_list_response_valid():
now = datetime.now()
sessions = [
{
"id": 1,
"start_time": now,
"end_time": None,
"created_at": now,
"updated_at": now,
}
]
data = {"sessions": sessions, "total": 1}
schema = SessionListResponse(**data)
assert len(schema.sessions) == 1
assert schema.total == 1
def test_session_list_response_invalid_sessions():
with pytest.raises(ValidationError):
SessionListResponse(sessions="not-a-list", total=0)
def test_daily_summary_day_valid():
data = {
"date": "2023-01-01",
"total_minutes": 480,
"day_minutes": 200,
"night_minutes": 280,
}
schema = DailySummaryDay(**data)
assert schema.date == "2023-01-01"
assert schema.total_minutes == 480
def test_daily_summary_day_invalid_type():
with pytest.raises(ValidationError):
DailySummaryDay(date="2023-01-01", total_minutes="not-an-int", day_minutes=100, night_minutes=100)
def test_daily_summary_response_valid():
days = [
{
"date": "2023-01-01",
"total_minutes": 480,
"day_minutes": 200,
"night_minutes": 280,
}
]
data = {"days": days}
schema = DailySummaryResponse(**data)
assert len(schema.days) == 1
def test_timetable_slot_valid():
data = {
"date": "2023-01-01",
"slot_start": "08:00",
"slot_end": "09:00",
"sleeping": True,
}
schema = TimetableSlot(**data)
assert schema.sleeping is True
def test_timetable_slot_invalid_sleeping():
with pytest.raises(ValidationError):
TimetableSlot(date="2023-01-01", slot_start="08:00", slot_end="09:00", sleeping="not-a-bool")
def test_timetable_response_valid():
slots = [
{
"date": "2023-01-01",
"slot_start": "08:00",
"slot_end": "09:00",
"sleeping": True,
}
]
data = {"slots": slots}
schema = TimetableResponse(**data)
assert len(schema.slots) == 1
def test_wakeup_bedtime_day_valid():
data = {"date": "2023-01-01", "wakeup_minutes": 480, "bedtime_minutes": 1200}
schema = WakeupBedtimeDay(**data)
assert schema.wakeup_minutes == 480
assert schema.bedtime_minutes == 1200
def test_wakeup_bedtime_day_optional_fields():
data = {"date": "2023-01-01"}
schema = WakeupBedtimeDay(**data)
assert schema.wakeup_minutes is None
assert schema.bedtime_minutes is None
def test_wakeup_bedtime_response_valid():
days = [{"date": "2023-01-01", "wakeup_minutes": 480, "bedtime_minutes": 1200}]
data = {"days": days}
schema = WakeupBedtimeResponse(**data)
assert len(schema.days) == 1
def test_summary_response_valid():
data = {
"total_sleeps": 10,
"avg_sleeps_per_day": 1.5,
"total_sleeps_all_time": 100,
"avg_sleeps_per_day_all_time": 1.2,
}
schema = SummaryResponse(**data)
assert schema.total_sleeps == 10
assert schema.avg_sleeps_per_day == 1.5
def test_summary_response_invalid_float():
with pytest.raises(ValidationError):
SummaryResponse(
total_sleeps=10,
avg_sleeps_per_day="not-a-float",
total_sleeps_all_time=100,
avg_sleeps_per_day_all_time=1.2,
)