104 lines
3.8 KiB
Python
104 lines
3.8 KiB
Python
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)
|