hale-api / tests /test_schedule.py
Raunak211006's picture
Deploy HALE API v3.1
cc38116 verified
Raw
History Blame Contribute Delete
2.8 kB
import pytest
from unittest.mock import MagicMock
from app.api.schedule import get_schedule, save_schedule, get_presets, ScheduleRequest
def test_get_schedule_default():
mock_user = MagicMock()
mock_user.schedule_json = None
result = get_schedule(current_user=mock_user, db=MagicMock())
assert result["is_default"] is True
assert result["schedule"]["lifestyle"] == "student"
assert "daily_minutes" in result["schedule"]
def test_get_schedule_custom():
mock_user = MagicMock()
mock_user.schedule_json = {"lifestyle": "job", "blocks": {"monday": [{"start": "10:00", "end": "12:00", "label": "Work"}]}}
result = get_schedule(current_user=mock_user, db=MagicMock())
assert result["is_default"] is False
assert result["schedule"]["lifestyle"] == "job"
assert result["schedule"]["daily_minutes"]["monday"] == 120
def test_save_schedule_with_custom_blocks():
mock_user = MagicMock()
mock_db = MagicMock()
req = ScheduleRequest(
lifestyle="job",
sleep_time="22:00",
wake_time="06:00",
blocks={"monday": [{"start": "08:00", "end": "09:00", "label": "Read"}]}
)
# Simulate Pydantic setting explicitly
req.model_fields_set.add("blocks")
result = save_schedule(req, current_user=mock_user, db=mock_db)
assert result["message"] == "Schedule saved!"
assert len(result["schedule"]["blocks"]["monday"]) == 1
assert result["schedule"]["blocks"]["monday"][0]["label"] == "Read"
mock_db.commit.assert_called_once()
def test_save_schedule_fallback_to_preset():
mock_user = MagicMock()
mock_db = MagicMock()
req = ScheduleRequest(
lifestyle="student",
sleep_time="22:00",
wake_time="06:00"
)
# blocks not in model_fields_set
result = save_schedule(req, current_user=mock_user, db=mock_db)
# Should populate with student preset
assert len(result["schedule"]["blocks"]["monday"]) > 0
def test_save_schedule_explicit_empty_clears_schedule():
mock_user = MagicMock()
mock_db = MagicMock()
req = ScheduleRequest(
lifestyle="student",
sleep_time="22:00",
wake_time="06:00",
blocks={}
)
# user explicitly passed empty blocks to clear their schedule
req.model_fields_set.add("blocks")
result = save_schedule(req, current_user=mock_user, db=mock_db)
# Should not fallback to student preset
assert result["schedule"]["blocks"] == {}
def test_get_presets():
result = get_presets()
assert "student" in result["presets"]
assert "job" in result["presets"]
assert result["presets"]["student"]["avg_daily_min"] > 0