auth service created

This commit is contained in:
A'zamov Samandar
2025-04-19 14:58:55 +05:00
parent a4b5833bbe
commit dd0da49eb9
127 changed files with 67 additions and 43 deletions

View File

@@ -0,0 +1,116 @@
import logging
from unittest.mock import patch
from django.test import TestCase
from django.urls import reverse
from pydantic import BaseModel
from rest_framework import status
from rest_framework.test import APIClient
from core.apps.accounts.models import ResetToken
from django_core.models import SmsConfirm
from core.services import SmsService
from django.contrib.auth import get_user_model
class TokenModel(BaseModel):
access: str
refresh: str
class SmsViewTest(TestCase):
def setUp(self):
self.client = APIClient()
self.phone = "998999999999"
self.password = "password"
self.code = "1111"
self.token = "token"
self.user = get_user_model().objects.create_user(
phone=self.phone, first_name="John", last_name="Doe", password=self.password
)
SmsConfirm.objects.create(phone=self.phone, code=self.code)
def test_reg_view(self):
"""Test register view."""
data = {
"phone": "998999999991",
"first_name": "John",
"last_name": "Doe",
"password": "password",
}
with patch.object(SmsService, "send_confirm", return_value=True):
response = self.client.post(reverse("auth-register"), data=data)
self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED)
self.assertEqual(
response.data["data"]["detail"],
"Sms %(phone)s raqamiga yuborildi" % {"phone": data["phone"]},
)
def test_confirm_view(self):
"""Test confirm view."""
data = {"phone": self.phone, "code": self.code}
response = self.client.post(reverse("auth-confirm"), data=data)
self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED)
def test_invalid_confirm_view(self):
"""Test confirm view."""
data = {"phone": self.phone, "code": "1112"}
response = self.client.post(reverse("auth-confirm"), data=data)
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
def test_reset_confirmation_code_view(self):
"""Test reset confirmation code view."""
data = {"phone": self.phone, "code": self.code}
response = self.client.post(reverse("auth-confirm"), data=data)
self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED)
self.assertIn("token", response.data["data"])
def test_reset_confirmation_code_view_invalid_code(self):
"""Test reset confirmation code view with invalid code."""
data = {"phone": self.phone, "code": "123456"}
response = self.client.post(reverse("auth-confirm"), data=data)
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
def test_reset_set_password_view(self):
"""Test reset set password view."""
token = ResetToken.objects.create(user=self.user, token=self.token)
data = {"token": token.token, "password": "new_password"}
response = self.client.post(reverse("reset-password-reset-password-set"), data=data)
self.assertEqual(response.status_code, status.HTTP_200_OK)
def test_reset_set_password_view_invalid_token(self):
"""Test reset set password view with invalid token."""
token = "test_token"
data = {"token": token, "password": "new_password"}
with patch.object(get_user_model().objects, "filter", return_value=get_user_model().objects.none()):
response = self.client.post(reverse("reset-password-reset-password-set"), data=data)
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
self.assertEqual(response.data["data"]["detail"], "Invalid token")
def test_resend_view(self):
"""Test resend view."""
data = {"phone": self.phone}
response = self.client.post(reverse("auth-resend"), data=data)
logging.error(response.json())
self.assertEqual(response.status_code, status.HTTP_200_OK)
def test_reset_password_view(self):
"""Test reset password view."""
data = {"phone": self.phone}
response = self.client.post(reverse("reset-password-reset-password"), data=data)
logging.error(response.json())
self.assertEqual(response.status_code, status.HTTP_200_OK)
def test_me_view(self):
"""Test me view."""
self.client.force_authenticate(user=self.user)
response = self.client.get(reverse("me-me"))
self.assertEqual(response.status_code, status.HTTP_200_OK)
def test_me_update_view(self):
"""Test me update view."""
self.client.force_authenticate(user=self.user)
data = {"first_name": "Updated"}
response = self.client.patch(reverse("me-user-update"), data=data)
logging.error(response.json())
self.assertEqual(response.status_code, status.HTTP_200_OK)

View File

@@ -0,0 +1,58 @@
from core.apps.accounts.serializers import ChangePasswordSerializer
from django.contrib.auth import get_user_model
from django.test import TestCase
from django.urls import reverse
from rest_framework import status
from rest_framework.test import APIClient
class ChangePasswordViewTest(TestCase):
def setUp(self):
self.client = APIClient()
self.phone = "9981111111"
self.password = "12345670"
self.path = reverse("change-password-change-password")
self.user = get_user_model().objects.create_user(
phone=self.phone, password=self.password, email="test@example.com"
)
self.client.force_authenticate(user=self.user)
def test_change_password_success(self):
data = {
"old_password": self.password,
"new_password": "newpassword",
}
response = self.client.post(self.path, data=data, format="json")
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data['data']["detail"], "password changed successfully")
self.assertTrue(self.user.check_password("newpassword"))
def test_change_password_invalid_old_password(self):
data = {
"old_password": "wrongpassword",
"new_password": "newpassword",
}
response = self.client.post(self.path, data=data, format="json")
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
self.assertEqual(response.data['data']["detail"], "invalida password")
def test_change_password_serializer_validation(self):
data = {
"old_password": self.password,
"new_password": "newpassword",
}
serializer = ChangePasswordSerializer(data=data)
self.assertTrue(serializer.is_valid())
data = {
"old_password": self.password,
"new_password": "123",
}
serializer = ChangePasswordSerializer(data=data)
self.assertFalse(serializer.is_valid())
def test_change_password_view_permissions(self):
self.client.force_authenticate(user=None)
response = self.client.post(self.path, data={}, format="json")
self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)