from rest_framework import status from rest_framework.test import APITestCase from django.contrib.auth import get_user_model User = get_user_model() class TestLogin(APITestCase): def setUp(self) -> None: self.password = 'theonering' self.user = User.objects.create( username='sauron', email='sauron@mordor.middleearth', ) self.user.set_password(self.password) self.user.save() def test_login(self): response = self.client.post('/api/v1/auth/login/', { 'username': self.user.username, 'password': self.password, }) assert response.status_code == status.HTTP_200_OK assert response.data.get('access') is not None assert response.data.get('refresh') is not None def test_login_then_verify(self): response = self.client.post('/api/v1/auth/login/', { 'username': self.user.username, 'password': self.password, }) assert response.status_code == status.HTTP_200_OK jwt_token = response.data.get('access') response = self.client.post('/api/v1/auth/verify/', { 'token': jwt_token, }) assert response.status_code == status.HTTP_200_OK def test_login_then_refresh(self): response = self.client.post('/api/v1/auth/login/', { 'username': self.user.username, 'password': self.password, }) assert response.status_code == status.HTTP_200_OK jwt_token = response.data.get('refresh') response = self.client.post('/api/v1/auth/refresh/', { 'refresh': jwt_token, }) assert response.status_code == status.HTTP_200_OK assert response.data.get('access') is not None assert response.data.get('access') != jwt_token def test_login_then_get_user_info(self): response = self.client.post('/api/v1/auth/login/', { 'username': self.user.username, 'password': self.password, }) assert response.status_code == status.HTTP_200_OK jwt_token = response.data.get('access') self.client.credentials(HTTP_AUTHORIZATION=f'JWT {jwt_token}') response = self.client.get('/api/v1/auth/me/') assert response.status_code == status.HTTP_200_OK assert response.data.get('email') == self.user.email def test_login_failed(self): response = self.client.post('/api/v1/auth/login/', { 'username': self.user.username, 'password': 'wrongpassword', }) assert response.status_code == status.HTTP_401_UNAUTHORIZED