From 48643d80671226771c7db790be68942cb95ce755 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Thu, 30 Nov 2023 15:48:25 -0800 Subject: [PATCH] Rename profile tests file, apply code suggestions --- src/documents/tests/test_api.py | 82 ------------------ src/documents/tests/test_api_profile.py | 105 ++++++++++++++++++++++++ src/paperless/views.py | 5 +- 3 files changed, 108 insertions(+), 84 deletions(-) create mode 100644 src/documents/tests/test_api_profile.py diff --git a/src/documents/tests/test_api.py b/src/documents/tests/test_api.py index 166c8dc5b..9000c3c21 100644 --- a/src/documents/tests/test_api.py +++ b/src/documents/tests/test_api.py @@ -27,7 +27,6 @@ from guardian.shortcuts import assign_perm from guardian.shortcuts import get_perms from guardian.shortcuts import get_users_with_perms from rest_framework import status -from rest_framework.authtoken.models import Token from rest_framework.test import APITestCase from whoosh.writing import AsyncWriter @@ -5794,84 +5793,3 @@ class TestApiConsumptionTemplates(DirectoriesMixin, APITestCase): self.assertEqual(ConsumptionTemplate.objects.count(), 2) ct = ConsumptionTemplate.objects.get(name="Template 2") self.assertEqual(ct.sources, [int(DocumentSource.MailFetch).__str__()]) - - -class TestApiProfile(DirectoriesMixin, APITestCase): - ENDPOINT = "/api/profile/" - - def setUp(self): - super().setUp() - - self.user = User.objects.create_superuser( - username="temp_admin", - first_name="firstname", - last_name="surname", - ) - self.client.force_authenticate(user=self.user) - - def test_get_profile(self): - """ - GIVEN: - - Configured user - WHEN: - - API call is made to get profile - THEN: - - Profile is returned - """ - - response = self.client.get(self.ENDPOINT) - - self.assertEqual(response.status_code, status.HTTP_200_OK) - - self.assertEqual(response.data["email"], self.user.email) - self.assertEqual(response.data["first_name"], self.user.first_name) - self.assertEqual(response.data["last_name"], self.user.last_name) - - def test_update_profile(self): - """ - GIVEN: - - Configured user - WHEN: - - API call is made to update profile - THEN: - - Profile is updated - """ - - user_data = { - "email": "new@email.com", - "password": "superpassword1234", - "first_name": "new first name", - "last_name": "new last name", - } - response = self.client.patch(self.ENDPOINT, user_data) - - self.assertEqual(response.status_code, status.HTTP_200_OK) - - user = User.objects.get(username=self.user.username) - self.assertTrue(user.check_password(user_data["password"])) - self.assertEqual(user.email, user_data["email"]) - self.assertEqual(user.first_name, user_data["first_name"]) - self.assertEqual(user.last_name, user_data["last_name"]) - - def test_update_auth_token(self): - """ - GIVEN: - - Configured user - WHEN: - - API call is made to generate auth token - THEN: - - Token is created the first time, updated the second - """ - - self.assertEqual(len(Token.objects.all()), 0) - - response = self.client.post(f"{self.ENDPOINT}generate_auth_token/") - self.assertEqual(response.status_code, status.HTTP_200_OK) - token1 = Token.objects.filter(user=self.user).first() - self.assertIsNotNone(token1) - - response = self.client.post(f"{self.ENDPOINT}generate_auth_token/") - self.assertEqual(response.status_code, status.HTTP_200_OK) - token2 = Token.objects.filter(user=self.user).first() - - self.assertNotEqual(token1.key, token2.key) diff --git a/src/documents/tests/test_api_profile.py b/src/documents/tests/test_api_profile.py new file mode 100644 index 000000000..9e12b1ed3 --- /dev/null +++ b/src/documents/tests/test_api_profile.py @@ -0,0 +1,105 @@ +from django.contrib.auth.models import User +from rest_framework import status +from rest_framework.authtoken.models import Token +from rest_framework.test import APITestCase + +from documents.tests.utils import DirectoriesMixin + + +class TestApiProfile(DirectoriesMixin, APITestCase): + ENDPOINT = "/api/profile/" + + def setUp(self): + super().setUp() + + self.user = User.objects.create_superuser( + username="temp_admin", + first_name="firstname", + last_name="surname", + ) + self.client.force_authenticate(user=self.user) + + def test_get_profile(self): + """ + GIVEN: + - Configured user + WHEN: + - API call is made to get profile + THEN: + - Profile is returned + """ + + response = self.client.get(self.ENDPOINT) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + self.assertEqual(response.data["email"], self.user.email) + self.assertEqual(response.data["first_name"], self.user.first_name) + self.assertEqual(response.data["last_name"], self.user.last_name) + + def test_update_profile(self): + """ + GIVEN: + - Configured user + WHEN: + - API call is made to update profile + THEN: + - Profile is updated + """ + + user_data = { + "email": "new@email.com", + "password": "superpassword1234", + "first_name": "new first name", + "last_name": "new last name", + } + response = self.client.patch(self.ENDPOINT, user_data) + + self.assertEqual(response.status_code, status.HTTP_200_OK) + + user = User.objects.get(username=self.user.username) + self.assertTrue(user.check_password(user_data["password"])) + self.assertEqual(user.email, user_data["email"]) + self.assertEqual(user.first_name, user_data["first_name"]) + self.assertEqual(user.last_name, user_data["last_name"]) + + def test_update_auth_token(self): + """ + GIVEN: + - Configured user + WHEN: + - API call is made to generate auth token + THEN: + - Token is created the first time, updated the second + """ + + self.assertEqual(len(Token.objects.all()), 0) + + response = self.client.post(f"{self.ENDPOINT}generate_auth_token/") + self.assertEqual(response.status_code, status.HTTP_200_OK) + token1 = Token.objects.filter(user=self.user).first() + self.assertIsNotNone(token1) + + response = self.client.post(f"{self.ENDPOINT}generate_auth_token/") + self.assertEqual(response.status_code, status.HTTP_200_OK) + token2 = Token.objects.filter(user=self.user).first() + + self.assertNotEqual(token1.key, token2.key) + + def test_profile_not_logged_in(self): + """ + GIVEN: + - User not logged in + WHEN: + - API call is made to get profile and update token + THEN: + - Profile is returned + """ + + self.client.logout() + + response = self.client.get(self.ENDPOINT) + self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED) + + response = self.client.post(f"{self.ENDPOINT}generate_auth_token/") + self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED) diff --git a/src/paperless/views.py b/src/paperless/views.py index aab2eb570..084aee3d7 100644 --- a/src/paperless/views.py +++ b/src/paperless/views.py @@ -120,7 +120,8 @@ class ProfileView(GenericAPIView): serializer_class = ProfileSerializer def get(self, request, *args, **kwargs): - user = self.request.user if hasattr(self.request, "user") else None + user = self.request.user + serializer = self.get_serializer(data=request.data) return Response(serializer.to_representation(user)) @@ -150,7 +151,7 @@ class GenerateAuthTokenView(GenericAPIView): permission_classes = [IsAuthenticated] def post(self, request, *args, **kwargs): - user = self.request.user if hasattr(self.request, "user") else None + user = self.request.user existing_token = Token.objects.filter(user=user).first() if existing_token is not None: