Coverage for src/api/tests/test_validators.py: 100%
23 statements
« prev ^ index » next coverage.py v7.11.1, created at 2025-11-08 10:41 +0000
« prev ^ index » next coverage.py v7.11.1, created at 2025-11-08 10:41 +0000
1import pytest
2from django.utils import timezone
3from rest_framework import serializers
4from src.api.validators import validate_booking_window
7def test_valid_booking_window_passes():
8 start = timezone.now() + timezone.timedelta(hours=1)
9 end = start + timezone.timedelta(hours=1)
10 assert validate_booking_window(start, end) is None
13def test_start_after_end_raises():
14 start = timezone.now() + timezone.timedelta(hours=2)
15 end = timezone.now() + timezone.timedelta(hours=1)
16 with pytest.raises(serializers.ValidationError, match="must be before"):
17 validate_booking_window(start, end)
20def test_start_in_past_raises():
21 start = timezone.now() - timezone.timedelta(hours=1)
22 end = timezone.now() + timezone.timedelta(hours=1)
23 with pytest.raises(serializers.ValidationError, match="must be in the future"):
24 validate_booking_window(start, end)
26def test_zero_duration_raises_error():
27 start = timezone.now() + timezone.timedelta(hours=1)
28 end = start
29 with pytest.raises(serializers.ValidationError, match="must be before"):
30 validate_booking_window(start, end)