Spaces:
Sleeping
Sleeping
| 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 | |