From 321206d2950e51f4294ff4110b63fa680168ecf1 Mon Sep 17 00:00:00 2001 From: Timur Date: Sat, 1 Mar 2025 21:58:42 +0300 Subject: [PATCH] add tests on sign-in --- services/backend/apps/user/models.py | 7 +-- services/backend/apps/user/test.py | 79 ++++++++++++++++++++++++++++ services/backend/config/settings.py | 1 + 3 files changed, 84 insertions(+), 3 deletions(-) diff --git a/services/backend/apps/user/models.py b/services/backend/apps/user/models.py index 5a246db..f525c29 100644 --- a/services/backend/apps/user/models.py +++ b/services/backend/apps/user/models.py @@ -14,10 +14,11 @@ class User(BaseModel): username = models.SlugField(unique=True, verbose_name="юзернейм") password = models.TextField(verbose_name="пароль") - def make_password(self): - return make_password(self.password) + @staticmethod + def make_password(password: str): + return make_password(password) - def check_password(self, password): + def check_password(self, password: str): return check_password(self.password, password) status = models.CharField( diff --git a/services/backend/apps/user/test.py b/services/backend/apps/user/test.py index 40d3431..82fc2c6 100644 --- a/services/backend/apps/user/test.py +++ b/services/backend/apps/user/test.py @@ -1,5 +1,6 @@ import json from django.test import TestCase +from django.contrib.auth.hashers import make_password from apps.user.models import User @@ -58,3 +59,81 @@ class SignUpAPITestCase(TestCase): ) self.assertEqual(response.status_code, 409) self.assertIn("detail", response.json()) + +class SignInAPITestCase(TestCase): + def setUp(self): + self.user = User.objects.create( + email="valid@example.com", + password=make_password("securepassword123"), + username="testuser" + ) + print(self.user.password) + self.valid_payload = { + "email": "valid@example.com", + "password": "securepassword123" + } + + def test_successful_sign_in(self): + response = self.client.post( + "/api/v1/sign-in", + data=json.dumps(self.valid_payload), + content_type="application/json" + ) + print(make_password(self.valid_payload["password"])) + self.assertEqual(response.status_code, 200) + self.assertIn("token", response.json()) + + def test_missing_credentials(self): + # Test missing email + response = self.client.post( + "/api/v1/sign-in", + data=json.dumps({"password": "pass"}), + content_type="application/json" + ) + self.assertEqual(response.status_code, 400) + + # Test missing password + response = self.client.post( + "/api/v1/sign-in", + data=json.dumps({"email": "test@example.com"}), + content_type="application/json" + ) + self.assertEqual(response.status_code, 400) + + def test_invalid_email_format(self): + payload = { + "email": "invalid-email", + "password": "password123" + } + response = self.client.post( + "/api/v1/sign-in", + data=json.dumps(payload), + content_type="application/json" + ) + self.assertEqual(response.status_code, 401) + + def test_incorrect_password(self): + payload = { + "email": "valid@example.com", + "password": "wrongpassword" + } + response = self.client.post( + "/api/v1/sign-in", + data=json.dumps(payload), + content_type="application/json" + ) + self.assertEqual(response.status_code, 401) + self.assertEqual(response.json()["detail"], "Unauthorized") + + def test_nonexistent_user(self): + payload = { + "email": "notexist@example.com", + "password": "password123" + } + response = self.client.post( + "/api/v1/sign-in", + data=json.dumps(payload), + content_type="application/json" + ) + self.assertEqual(response.status_code, 401) + self.assertEqual(response.json()["detail"], "Unauthorized") diff --git a/services/backend/config/settings.py b/services/backend/config/settings.py index 66332c8..45b28ed 100644 --- a/services/backend/config/settings.py +++ b/services/backend/config/settings.py @@ -485,6 +485,7 @@ LANGUAGE_COOKIE_AGE = 31449600 PASSWORD_HASHERS = [ "django.contrib.auth.hashers.Argon2PasswordHasher", + "django.contrib.auth.hashers.ScryptPasswordHasher", ] LANGUAGE_COOKIE_DOMAIN = None