from datetime import timedelta import pytest from django.test import override_settings from django.urls import reverse from django.utils import timezone from apps.accounts.models import OtpChannel, OtpPurpose, PhoneOTP @pytest.mark.django_db @override_settings(OTP_PROVIDER="console") def test_otp_request_whatsapp_ok(client): response = client.post( reverse("otp_request"), {"phone_number": "0512345678", "channel": "whatsapp"}, content_type="application/json", ) assert response.status_code == 201 data = response.json() assert "request_id" in data assert "expires_at" in data @pytest.mark.django_db def test_otp_verify_rejects_expired(client): otp = PhoneOTP.objects.create( phone_number="+966512345678", channel=OtpChannel.SMS, purpose=OtpPurpose.VERIFY, provider="console", code_hash="unused", expires_at=timezone.now() - timedelta(minutes=1), ) response = client.post( reverse("otp_verify"), {"request_id": str(otp.id), "code": "123456"}, content_type="application/json", ) assert response.status_code == 400 @pytest.mark.django_db @override_settings(OTP_PROVIDER="console") def test_otp_request_invalid_phone_localized_ar(client): response = client.post( reverse("otp_request"), {"phone_number": "123", "channel": "sms"}, content_type="application/json", HTTP_ACCEPT_LANGUAGE="ar-sa", ) assert response.status_code == 400 assert response.json()["phone_number"][0] == "تنسيق رقم الهاتف غير صالح"