from datetime import timedelta, time import pytest from django.utils import timezone from apps.accounts.models import User, UserRole from apps.bookings.models import Booking from apps.bookings.serializers import BookingSerializer from apps.salons.models import ( Salon, Service, StaffAvailability, StaffProfile, Review, ) from apps.salons.serializers import ReviewSerializer, StaffSerializer @pytest.mark.django_db class TestDisplayNameFallbacks: def _create_customer(self, phone_number): return User.objects.create_user(phone_number=phone_number) def _create_staff_user(self, phone_number): return User.objects.create_user(phone_number=phone_number, role=UserRole.STAFF) def _create_salon(self, owner): return Salon.objects.create( owner=owner, name="Test Salon", address="123 Main", city="Riyadh", ) def _create_service(self, salon): return Service.objects.create( salon=salon, name="Haircut", description="", duration_minutes=60, price_amount=200, currency="SAR", ) def test_staff_serializer_falls_back_to_phone(self): owner = User.objects.create_user(phone_number="+966500000001", email="owner@example.com") salon = self._create_salon(owner) staff_user = self._create_staff_user(phone_number="+966500000002") staff_profile = StaffProfile.objects.create(user=staff_user, salon=salon) serializer = StaffSerializer(staff_profile) assert serializer.data["name"] == "+966500000002" def test_review_serializer_customer_name_uses_phone(self): owner = User.objects.create_user(phone_number="+966500000003", email="owner2@example.com") salon = self._create_salon(owner) customer = self._create_customer(phone_number="+966500000004") review = Review.objects.create(salon=salon, customer=customer, rating=5, comment="Great") serializer = ReviewSerializer(review) assert serializer.data["customer_name"] == "+966500000004" assert "+966500000004" in str(review) def test_booking_serializer_staff_name_and_str_use_phone(self): owner = User.objects.create_user(phone_number="+966500000005", email="owner3@example.com") salon = self._create_salon(owner) staff_user = self._create_staff_user(phone_number="+966500000006") staff_profile = StaffProfile.objects.create(user=staff_user, salon=salon) service = self._create_service(salon) customer = self._create_customer(phone_number="+966500000007") start = timezone.now() booking = Booking.objects.create( salon=salon, customer=customer, service=service, staff=staff_profile, start_time=start, end_time=start + timedelta(hours=1), price_amount=service.price_amount, currency=service.currency, ) serializer = BookingSerializer(booking) assert serializer.data["staff_name"] == "+966500000006" assert "+966500000007" in str(booking) def test_staff_model_str_uses_phone(self): owner = User.objects.create_user(phone_number="+966500000008", email="owner4@example.com") salon = self._create_salon(owner) staff_user = self._create_staff_user(phone_number="+966500000009") staff_profile = StaffProfile.objects.create(user=staff_user, salon=salon) availability = StaffAvailability.objects.create( staff=staff_profile, day_of_week=0, start_time=time(9, 0), end_time=time(10, 0), ) assert "+966500000009" in str(staff_profile) assert "+966500000009" in str(availability)