chore: blacked
This commit is contained in:
@@ -188,7 +188,6 @@ SIMPLE_JWT = {
|
|||||||
"ROTATE_REFRESH_TOKENS": False,
|
"ROTATE_REFRESH_TOKENS": False,
|
||||||
"BLACKLIST_AFTER_ROTATION": False,
|
"BLACKLIST_AFTER_ROTATION": False,
|
||||||
"UPDATE_LAST_LOGIN": False,
|
"UPDATE_LAST_LOGIN": False,
|
||||||
|
|
||||||
"ALGORITHM": "HS256",
|
"ALGORITHM": "HS256",
|
||||||
"SIGNING_KEY": SECRET_KEY,
|
"SIGNING_KEY": SECRET_KEY,
|
||||||
"VERIFYING_KEY": "",
|
"VERIFYING_KEY": "",
|
||||||
@@ -197,23 +196,21 @@ SIMPLE_JWT = {
|
|||||||
"JSON_ENCODER": None,
|
"JSON_ENCODER": None,
|
||||||
"JWK_URL": None,
|
"JWK_URL": None,
|
||||||
"LEEWAY": 0,
|
"LEEWAY": 0,
|
||||||
|
"AUTH_HEADER_TYPES": (
|
||||||
"AUTH_HEADER_TYPES": ("Bearer", "JWT", ),
|
"Bearer",
|
||||||
|
"JWT",
|
||||||
|
),
|
||||||
"AUTH_HEADER_NAME": "HTTP_AUTHORIZATION",
|
"AUTH_HEADER_NAME": "HTTP_AUTHORIZATION",
|
||||||
"USER_ID_FIELD": "id",
|
"USER_ID_FIELD": "id",
|
||||||
"USER_ID_CLAIM": "user_id",
|
"USER_ID_CLAIM": "user_id",
|
||||||
"USER_AUTHENTICATION_RULE": "rest_framework_simplejwt.authentication.default_user_authentication_rule",
|
"USER_AUTHENTICATION_RULE": "rest_framework_simplejwt.authentication.default_user_authentication_rule",
|
||||||
|
|
||||||
"AUTH_TOKEN_CLASSES": ("rest_framework_simplejwt.tokens.AccessToken",),
|
"AUTH_TOKEN_CLASSES": ("rest_framework_simplejwt.tokens.AccessToken",),
|
||||||
"TOKEN_TYPE_CLAIM": "token_type",
|
"TOKEN_TYPE_CLAIM": "token_type",
|
||||||
"TOKEN_USER_CLASS": "rest_framework_simplejwt.models.TokenUser",
|
"TOKEN_USER_CLASS": "rest_framework_simplejwt.models.TokenUser",
|
||||||
|
|
||||||
"JTI_CLAIM": "jti",
|
"JTI_CLAIM": "jti",
|
||||||
|
|
||||||
"SLIDING_TOKEN_REFRESH_EXP_CLAIM": "refresh_exp",
|
"SLIDING_TOKEN_REFRESH_EXP_CLAIM": "refresh_exp",
|
||||||
"SLIDING_TOKEN_LIFETIME": datetime.timedelta(minutes=5),
|
"SLIDING_TOKEN_LIFETIME": datetime.timedelta(minutes=5),
|
||||||
"SLIDING_TOKEN_REFRESH_LIFETIME": datetime.timedelta(days=1),
|
"SLIDING_TOKEN_REFRESH_LIFETIME": datetime.timedelta(days=1),
|
||||||
|
|
||||||
"TOKEN_OBTAIN_SERIALIZER": "rest_framework_simplejwt.serializers.TokenObtainPairSerializer",
|
"TOKEN_OBTAIN_SERIALIZER": "rest_framework_simplejwt.serializers.TokenObtainPairSerializer",
|
||||||
"TOKEN_REFRESH_SERIALIZER": "rest_framework_simplejwt.serializers.TokenRefreshSerializer",
|
"TOKEN_REFRESH_SERIALIZER": "rest_framework_simplejwt.serializers.TokenRefreshSerializer",
|
||||||
"TOKEN_VERIFY_SERIALIZER": "rest_framework_simplejwt.serializers.TokenVerifySerializer",
|
"TOKEN_VERIFY_SERIALIZER": "rest_framework_simplejwt.serializers.TokenVerifySerializer",
|
||||||
|
|||||||
+1
-1
@@ -14,5 +14,5 @@ urlpatterns = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
if settings.DEBUG:
|
if settings.DEBUG:
|
||||||
urlpatterns.append(path('__debug__/', include(debug_toolbar.urls)))
|
urlpatterns.append(path("__debug__/", include(debug_toolbar.urls)))
|
||||||
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|
||||||
|
|||||||
@@ -6,5 +6,5 @@ from files.models import FileUpload
|
|||||||
class FileUploadSerializer(serializers.ModelSerializer):
|
class FileUploadSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = FileUpload
|
model = FileUpload
|
||||||
fields = ('file', 'id')
|
fields = ("file", "id")
|
||||||
read_only_fields = ('id', )
|
read_only_fields = ("id",)
|
||||||
|
|||||||
@@ -3,6 +3,6 @@ from rest_framework.routers import DefaultRouter
|
|||||||
from files.api.v1.views import FileUploadViewSet
|
from files.api.v1.views import FileUploadViewSet
|
||||||
|
|
||||||
router = DefaultRouter(trailing_slash=True)
|
router = DefaultRouter(trailing_slash=True)
|
||||||
router.register('', FileUploadViewSet)
|
router.register("", FileUploadViewSet)
|
||||||
|
|
||||||
urlpatterns = router.urls
|
urlpatterns = router.urls
|
||||||
|
|||||||
+35
-19
@@ -2,7 +2,10 @@ from typing import List
|
|||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.contrib.auth.password_validation import get_password_validators, validate_password
|
from django.contrib.auth.password_validation import (
|
||||||
|
get_password_validators,
|
||||||
|
validate_password,
|
||||||
|
)
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from rest_framework.exceptions import ValidationError
|
from rest_framework.exceptions import ValidationError
|
||||||
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
|
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
|
||||||
@@ -10,7 +13,7 @@ from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
|
|||||||
User = get_user_model()
|
User = get_user_model()
|
||||||
|
|
||||||
|
|
||||||
AUTH_PASSWORD_VALIDATORS = getattr(settings, 'AUTH_PASSWORD_VALIDATORS')
|
AUTH_PASSWORD_VALIDATORS = getattr(settings, "AUTH_PASSWORD_VALIDATORS")
|
||||||
|
|
||||||
|
|
||||||
class UserSerializer(serializers.ModelSerializer):
|
class UserSerializer(serializers.ModelSerializer):
|
||||||
@@ -25,15 +28,21 @@ class UserSerializer(serializers.ModelSerializer):
|
|||||||
class Meta:
|
class Meta:
|
||||||
model = User
|
model = User
|
||||||
fields = (
|
fields = (
|
||||||
'username',
|
"username",
|
||||||
'email',
|
"email",
|
||||||
'first_name',
|
"first_name",
|
||||||
'last_name',
|
"last_name",
|
||||||
'is_staff',
|
"is_staff",
|
||||||
'is_superuser',
|
"is_superuser",
|
||||||
'permissions',
|
"permissions",
|
||||||
|
)
|
||||||
|
read_only_fields = (
|
||||||
|
"username",
|
||||||
|
"code",
|
||||||
|
"is_staff",
|
||||||
|
"is_superuser",
|
||||||
|
"permissions",
|
||||||
)
|
)
|
||||||
read_only_fields = ('username', 'code', 'is_staff', 'is_superuser', 'permissions', )
|
|
||||||
|
|
||||||
|
|
||||||
class UpdatePasswordSerializer(serializers.ModelSerializer):
|
class UpdatePasswordSerializer(serializers.ModelSerializer):
|
||||||
@@ -42,32 +51,39 @@ class UpdatePasswordSerializer(serializers.ModelSerializer):
|
|||||||
new_password2 = serializers.CharField(write_only=True)
|
new_password2 = serializers.CharField(write_only=True)
|
||||||
|
|
||||||
def validate_old_password(self, password):
|
def validate_old_password(self, password):
|
||||||
user = self.context.get('request').user
|
user = self.context.get("request").user
|
||||||
|
|
||||||
if not user.check_password(password):
|
if not user.check_password(password):
|
||||||
raise ValidationError('Wrong old password')
|
raise ValidationError("Wrong old password")
|
||||||
|
|
||||||
return password
|
return password
|
||||||
|
|
||||||
def validate_new_password(self, password):
|
def validate_new_password(self, password):
|
||||||
old_password = self.context.get('request').data.get('old_password')
|
old_password = self.context.get("request").data.get("old_password")
|
||||||
|
|
||||||
if password == old_password:
|
if password == old_password:
|
||||||
raise ValidationError('Password can\'t be the same as the old one')
|
raise ValidationError("Password can't be the same as the old one")
|
||||||
|
|
||||||
password2 = self.context.get('request').data.get('new_password2')
|
password2 = self.context.get("request").data.get("new_password2")
|
||||||
if password != password2:
|
if password != password2:
|
||||||
raise ValidationError('Password mismatch')
|
raise ValidationError("Password mismatch")
|
||||||
|
|
||||||
validate_password(password, password_validators=get_password_validators(AUTH_PASSWORD_VALIDATORS))
|
validate_password(
|
||||||
|
password,
|
||||||
|
password_validators=get_password_validators(AUTH_PASSWORD_VALIDATORS),
|
||||||
|
)
|
||||||
|
|
||||||
return password
|
return password
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
new_password = self.validated_data.get('new_password')
|
new_password = self.validated_data.get("new_password")
|
||||||
self.instance.set_password(new_password)
|
self.instance.set_password(new_password)
|
||||||
self.instance.save()
|
self.instance.save()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = User
|
model = User
|
||||||
fields = ('old_password', 'new_password', 'new_password2', )
|
fields = (
|
||||||
|
"old_password",
|
||||||
|
"new_password",
|
||||||
|
"new_password2",
|
||||||
|
)
|
||||||
|
|||||||
@@ -4,13 +4,13 @@ from users.api.v1.views import retrieve_update_me, change_password
|
|||||||
from rest_framework_simplejwt.views import (
|
from rest_framework_simplejwt.views import (
|
||||||
token_refresh,
|
token_refresh,
|
||||||
token_obtain_pair,
|
token_obtain_pair,
|
||||||
token_verify
|
token_verify,
|
||||||
)
|
)
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('login/', token_obtain_pair, name='login'),
|
path("login/", token_obtain_pair, name="login"),
|
||||||
path('refresh/', token_refresh, name='refresh_jwt'),
|
path("refresh/", token_refresh, name="refresh_jwt"),
|
||||||
path('verify/', token_verify, name='verify_jwt'),
|
path("verify/", token_verify, name="verify_jwt"),
|
||||||
path('me/', retrieve_update_me, name='user_info'),
|
path("me/", retrieve_update_me, name="user_info"),
|
||||||
path('change-password/', change_password, name='change_password'),
|
path("change-password/", change_password, name="change_password"),
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ class RetrieveUpdateMe(RetrieveUpdateAPIView):
|
|||||||
|
|
||||||
put: Update user info
|
put: Update user info
|
||||||
"""
|
"""
|
||||||
|
|
||||||
serializer_class = UserSerializer
|
serializer_class = UserSerializer
|
||||||
|
|
||||||
def get_object(self):
|
def get_object(self):
|
||||||
@@ -21,6 +22,7 @@ class ChangePassword(UpdateAPIView):
|
|||||||
"""
|
"""
|
||||||
put: Update user's password
|
put: Update user's password
|
||||||
"""
|
"""
|
||||||
|
|
||||||
serializer_class = UpdatePasswordSerializer
|
serializer_class = UpdatePasswordSerializer
|
||||||
permission_classes = (IsAuthenticated,)
|
permission_classes = (IsAuthenticated,)
|
||||||
queryset = User.objects.all()
|
queryset = User.objects.all()
|
||||||
|
|||||||
@@ -7,79 +7,103 @@ User = get_user_model()
|
|||||||
|
|
||||||
class TestChangePassword(APITestCase):
|
class TestChangePassword(APITestCase):
|
||||||
def setUp(self) -> None:
|
def setUp(self) -> None:
|
||||||
self.password = 'theonering'
|
self.password = "theonering"
|
||||||
self.user = User.objects.create(
|
self.user = User.objects.create(
|
||||||
username='sauron',
|
username="sauron",
|
||||||
email='sauron@mordor.middleearth',
|
email="sauron@mordor.middleearth",
|
||||||
)
|
)
|
||||||
|
|
||||||
self.user.set_password(self.password)
|
self.user.set_password(self.password)
|
||||||
self.user.save()
|
self.user.save()
|
||||||
|
|
||||||
def test_login_then_change_password(self):
|
def test_login_then_change_password(self):
|
||||||
response = self.client.post('/api/v1/auth/login/', {
|
response = self.client.post(
|
||||||
'username': self.user.username,
|
"/api/v1/auth/login/",
|
||||||
'password': self.password,
|
{
|
||||||
})
|
"username": self.user.username,
|
||||||
|
"password": self.password,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
assert response.status_code == status.HTTP_200_OK
|
assert response.status_code == status.HTTP_200_OK
|
||||||
jwt_token = response.data.get('access')
|
jwt_token = response.data.get("access")
|
||||||
self.client.credentials(HTTP_AUTHORIZATION=f'JWT {jwt_token}')
|
self.client.credentials(HTTP_AUTHORIZATION=f"JWT {jwt_token}")
|
||||||
response = self.client.put('/api/v1/auth/change-password/', {
|
response = self.client.put(
|
||||||
'new_password': 'barad-dur',
|
"/api/v1/auth/change-password/",
|
||||||
'new_password2': 'barad-dur',
|
{
|
||||||
'old_password': self.password,
|
"new_password": "barad-dur",
|
||||||
})
|
"new_password2": "barad-dur",
|
||||||
|
"old_password": self.password,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
assert response.status_code == status.HTTP_200_OK
|
assert response.status_code == status.HTTP_200_OK
|
||||||
|
|
||||||
def test_login_then_change_password_with_wrong_password(self):
|
def test_login_then_change_password_with_wrong_password(self):
|
||||||
response = self.client.post('/api/v1/auth/login/', {
|
response = self.client.post(
|
||||||
'username': self.user.username,
|
"/api/v1/auth/login/",
|
||||||
'password': self.password,
|
{
|
||||||
})
|
"username": self.user.username,
|
||||||
|
"password": self.password,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
assert response.status_code == status.HTTP_200_OK
|
assert response.status_code == status.HTTP_200_OK
|
||||||
jwt_token = response.data.get('access')
|
jwt_token = response.data.get("access")
|
||||||
self.client.credentials(HTTP_AUTHORIZATION=f'JWT {jwt_token}')
|
self.client.credentials(HTTP_AUTHORIZATION=f"JWT {jwt_token}")
|
||||||
response = self.client.put('/api/v1/auth/change-password/', {
|
response = self.client.put(
|
||||||
'new_password': 'barad-dur',
|
"/api/v1/auth/change-password/",
|
||||||
'new_password2': 'barad-dur',
|
{
|
||||||
'old_password': 'incorrectoldpassword',
|
"new_password": "barad-dur",
|
||||||
})
|
"new_password2": "barad-dur",
|
||||||
|
"old_password": "incorrectoldpassword",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
assert response.status_code == status.HTTP_400_BAD_REQUEST
|
assert response.status_code == status.HTTP_400_BAD_REQUEST
|
||||||
|
|
||||||
def test_login_then_change_password_mismatch_password(self):
|
def test_login_then_change_password_mismatch_password(self):
|
||||||
response = self.client.post('/api/v1/auth/login/', {
|
response = self.client.post(
|
||||||
'username': self.user.username,
|
"/api/v1/auth/login/",
|
||||||
'password': self.password,
|
{
|
||||||
})
|
"username": self.user.username,
|
||||||
|
"password": self.password,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
assert response.status_code == status.HTTP_200_OK
|
assert response.status_code == status.HTTP_200_OK
|
||||||
jwt_token = response.data.get('access')
|
jwt_token = response.data.get("access")
|
||||||
self.client.credentials(HTTP_AUTHORIZATION=f'JWT {jwt_token}')
|
self.client.credentials(HTTP_AUTHORIZATION=f"JWT {jwt_token}")
|
||||||
response = self.client.put('/api/v1/auth/change-password/', {
|
response = self.client.put(
|
||||||
'new_password': 'barad-dur',
|
"/api/v1/auth/change-password/",
|
||||||
'new_password2': 'mountdoom',
|
{
|
||||||
'old_password': self.password,
|
"new_password": "barad-dur",
|
||||||
})
|
"new_password2": "mountdoom",
|
||||||
|
"old_password": self.password,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
assert response.status_code == status.HTTP_400_BAD_REQUEST
|
assert response.status_code == status.HTTP_400_BAD_REQUEST
|
||||||
|
|
||||||
def test_login_then_change_password_but_its_the_same(self):
|
def test_login_then_change_password_but_its_the_same(self):
|
||||||
response = self.client.post('/api/v1/auth/login/', {
|
response = self.client.post(
|
||||||
'username': self.user.username,
|
"/api/v1/auth/login/",
|
||||||
'password': self.password,
|
{
|
||||||
})
|
"username": self.user.username,
|
||||||
|
"password": self.password,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
assert response.status_code == status.HTTP_200_OK
|
assert response.status_code == status.HTTP_200_OK
|
||||||
jwt_token = response.data.get('access')
|
jwt_token = response.data.get("access")
|
||||||
self.client.credentials(HTTP_AUTHORIZATION=f'JWT {jwt_token}')
|
self.client.credentials(HTTP_AUTHORIZATION=f"JWT {jwt_token}")
|
||||||
response = self.client.put('/api/v1/auth/change-password/', {
|
response = self.client.put(
|
||||||
'new_password': self.password,
|
"/api/v1/auth/change-password/",
|
||||||
'new_password2': self.password,
|
{
|
||||||
'old_password': self.password,
|
"new_password": self.password,
|
||||||
})
|
"new_password2": self.password,
|
||||||
|
"old_password": self.password,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
assert response.status_code == status.HTTP_400_BAD_REQUEST
|
assert response.status_code == status.HTTP_400_BAD_REQUEST
|
||||||
|
|||||||
+60
-39
@@ -7,73 +7,94 @@ User = get_user_model()
|
|||||||
|
|
||||||
class TestLogin(APITestCase):
|
class TestLogin(APITestCase):
|
||||||
def setUp(self) -> None:
|
def setUp(self) -> None:
|
||||||
self.password = 'theonering'
|
self.password = "theonering"
|
||||||
self.user = User.objects.create(
|
self.user = User.objects.create(
|
||||||
username='sauron',
|
username="sauron",
|
||||||
email='sauron@mordor.middleearth',
|
email="sauron@mordor.middleearth",
|
||||||
)
|
)
|
||||||
|
|
||||||
self.user.set_password(self.password)
|
self.user.set_password(self.password)
|
||||||
self.user.save()
|
self.user.save()
|
||||||
|
|
||||||
def test_login(self):
|
def test_login(self):
|
||||||
response = self.client.post('/api/v1/auth/login/', {
|
response = self.client.post(
|
||||||
'username': self.user.username,
|
"/api/v1/auth/login/",
|
||||||
'password': self.password,
|
{
|
||||||
})
|
"username": self.user.username,
|
||||||
|
"password": self.password,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
assert response.status_code == status.HTTP_200_OK
|
assert response.status_code == status.HTTP_200_OK
|
||||||
assert response.data.get('access') is not None
|
assert response.data.get("access") is not None
|
||||||
assert response.data.get('refresh') is not None
|
assert response.data.get("refresh") is not None
|
||||||
|
|
||||||
def test_login_then_verify(self):
|
def test_login_then_verify(self):
|
||||||
response = self.client.post('/api/v1/auth/login/', {
|
response = self.client.post(
|
||||||
'username': self.user.username,
|
"/api/v1/auth/login/",
|
||||||
'password': self.password,
|
{
|
||||||
})
|
"username": self.user.username,
|
||||||
|
"password": self.password,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
assert response.status_code == status.HTTP_200_OK
|
assert response.status_code == status.HTTP_200_OK
|
||||||
jwt_token = response.data.get('access')
|
jwt_token = response.data.get("access")
|
||||||
response = self.client.post('/api/v1/auth/verify/', {
|
response = self.client.post(
|
||||||
'token': jwt_token,
|
"/api/v1/auth/verify/",
|
||||||
})
|
{
|
||||||
|
"token": jwt_token,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
assert response.status_code == status.HTTP_200_OK
|
assert response.status_code == status.HTTP_200_OK
|
||||||
|
|
||||||
def test_login_then_refresh(self):
|
def test_login_then_refresh(self):
|
||||||
response = self.client.post('/api/v1/auth/login/', {
|
response = self.client.post(
|
||||||
'username': self.user.username,
|
"/api/v1/auth/login/",
|
||||||
'password': self.password,
|
{
|
||||||
})
|
"username": self.user.username,
|
||||||
|
"password": self.password,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
assert response.status_code == status.HTTP_200_OK
|
assert response.status_code == status.HTTP_200_OK
|
||||||
jwt_token = response.data.get('refresh')
|
jwt_token = response.data.get("refresh")
|
||||||
response = self.client.post('/api/v1/auth/refresh/', {
|
response = self.client.post(
|
||||||
'refresh': jwt_token,
|
"/api/v1/auth/refresh/",
|
||||||
})
|
{
|
||||||
|
"refresh": jwt_token,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
assert response.status_code == status.HTTP_200_OK
|
assert response.status_code == status.HTTP_200_OK
|
||||||
assert response.data.get('access') is not None
|
assert response.data.get("access") is not None
|
||||||
assert response.data.get('access') != jwt_token
|
assert response.data.get("access") != jwt_token
|
||||||
|
|
||||||
def test_login_then_get_user_info(self):
|
def test_login_then_get_user_info(self):
|
||||||
response = self.client.post('/api/v1/auth/login/', {
|
response = self.client.post(
|
||||||
'username': self.user.username,
|
"/api/v1/auth/login/",
|
||||||
'password': self.password,
|
{
|
||||||
})
|
"username": self.user.username,
|
||||||
|
"password": self.password,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
assert response.status_code == status.HTTP_200_OK
|
assert response.status_code == status.HTTP_200_OK
|
||||||
jwt_token = response.data.get('access')
|
jwt_token = response.data.get("access")
|
||||||
self.client.credentials(HTTP_AUTHORIZATION=f'JWT {jwt_token}')
|
self.client.credentials(HTTP_AUTHORIZATION=f"JWT {jwt_token}")
|
||||||
response = self.client.get('/api/v1/auth/me/')
|
response = self.client.get("/api/v1/auth/me/")
|
||||||
|
|
||||||
assert response.status_code == status.HTTP_200_OK
|
assert response.status_code == status.HTTP_200_OK
|
||||||
assert response.data.get('email') == self.user.email
|
assert response.data.get("email") == self.user.email
|
||||||
|
|
||||||
def test_login_failed(self):
|
def test_login_failed(self):
|
||||||
response = self.client.post('/api/v1/auth/login/', {
|
response = self.client.post(
|
||||||
'username': self.user.username,
|
"/api/v1/auth/login/",
|
||||||
'password': 'wrongpassword',
|
{
|
||||||
})
|
"username": self.user.username,
|
||||||
|
"password": "wrongpassword",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
assert response.status_code == status.HTTP_401_UNAUTHORIZED
|
assert response.status_code == status.HTTP_401_UNAUTHORIZED
|
||||||
|
|||||||
@@ -11,27 +11,23 @@ User = get_user_model()
|
|||||||
class TestUsers(TestCase):
|
class TestUsers(TestCase):
|
||||||
|
|
||||||
def test_create_user(self):
|
def test_create_user(self):
|
||||||
User.objects.create_user({
|
User.objects.create_user({"username": "user 1", "password": "password1"})
|
||||||
'username': 'user 1',
|
|
||||||
'password': 'password1'
|
|
||||||
})
|
|
||||||
User.objects.all().count() == 1
|
User.objects.all().count() == 1
|
||||||
|
|
||||||
def test_new_user_invalid_username(self):
|
def test_new_user_invalid_username(self):
|
||||||
"""Test creating user with no username raises error"""
|
"""Test creating user with no username raises error"""
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
User.objects.create_user(None, 'test123')
|
User.objects.create_user(None, "test123")
|
||||||
|
|
||||||
def test_create_new_superuser(self):
|
def test_create_new_superuser(self):
|
||||||
"""Test creating a new superuser"""
|
"""Test creating a new superuser"""
|
||||||
# Creation with standard method
|
# Creation with standard method
|
||||||
user = User.objects.create_superuser(
|
user = User.objects.create_superuser(
|
||||||
'testsuperuser@adminemail.com',
|
"testsuperuser@adminemail.com", "testadmin123"
|
||||||
'testadmin123'
|
|
||||||
)
|
)
|
||||||
assert user.is_superuser
|
assert user.is_superuser
|
||||||
assert user.is_staff
|
assert user.is_staff
|
||||||
|
|
||||||
def test_create_group(self):
|
def test_create_group(self):
|
||||||
Group.objects.create(name='Group1')
|
Group.objects.create(name="Group1")
|
||||||
assert Group.objects.count() == 1
|
assert Group.objects.count() == 1
|
||||||
|
|||||||
Reference in New Issue
Block a user