test_scheduled_drying_schema.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. """Tests for ScheduledDrying schemas (#2638)."""
  2. from datetime import datetime, timezone
  3. import pytest
  4. from pydantic import ValidationError
  5. from backend.app.schemas.scheduled_drying import ScheduledDryingCreate
  6. def test_create_normalizes_aware_datetime_to_naive_utc():
  7. payload = ScheduledDryingCreate(
  8. printer_id=1,
  9. temp=65,
  10. duration_hours=8,
  11. start_after=datetime(2026, 7, 23, 18, 0, tzinfo=timezone.utc),
  12. )
  13. assert payload.start_after == datetime(2026, 7, 23, 18, 0)
  14. assert payload.start_after.tzinfo is None
  15. def test_create_accepts_naive_datetime_unchanged():
  16. payload = ScheduledDryingCreate(printer_id=1, temp=45, duration_hours=1, start_after=datetime(2026, 7, 23, 18, 0))
  17. assert payload.start_after == datetime(2026, 7, 23, 18, 0)
  18. def test_temp_out_of_range_rejected():
  19. with pytest.raises(ValidationError):
  20. ScheduledDryingCreate(printer_id=1, temp=90, duration_hours=8)
  21. with pytest.raises(ValidationError):
  22. ScheduledDryingCreate(printer_id=1, temp=44, duration_hours=8)
  23. def test_duration_out_of_range_rejected():
  24. with pytest.raises(ValidationError):
  25. ScheduledDryingCreate(printer_id=1, temp=65, duration_hours=0)
  26. with pytest.raises(ValidationError):
  27. ScheduledDryingCreate(printer_id=1, temp=65, duration_hours=25)
  28. def test_over_long_filament_rejected():
  29. """String(50) column: unbounded input 500s on PostgreSQL, passes on SQLite."""
  30. with pytest.raises(ValidationError):
  31. ScheduledDryingCreate(printer_id=1, temp=65, duration_hours=8, filament="X" * 51)
  32. assert ScheduledDryingCreate(printer_id=1, temp=65, duration_hours=8, filament="X" * 50).filament == "X" * 50