from django.test import TestCase # Create your tests here. from django.contrib.auth import get_user_model from rest_framework.test import APITestCase from django.urls import reverse from rest_framework import status from rest_framework_simplejwt.tokens import AccessToken # from config.accounts.models import User User = get_user_model() class AccountRegistrationTestCase(APITestCase): def test_account_registration(self): url = '/api/users' user_data = { 'user': { 'email': 'test@example.com', 'password': 'testpassword', 'username': 'testuser', } } response = self.client.post(url, user_data, format='json') self.assertEqual(response.status_code, status.HTTP_201_CREATED) def test_account_registration_invalid_data(self): url = '/api/users' invalid_user_data = { 'user': {} } response = self.client.post(url, invalid_user_data, format='json') self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) class AccountLoginTestCase(APITestCase): def setUp(self): self.email = 'test@example.com' self.username = 'testuser' self.password = 'testpassword' self.user = User.objects.create_user( email=self.email, username=self.username, password=self.password ) self.url = '/api/users/login' def tearDown(self): self.user.delete def test_account_login(self): user_data = { 'user': { 'email': self.email, 'password': self.password, } } response = self.client.post(self.url, user_data, format='json') self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) def test_account_login_invalid_data(self): invalid_user_data = { 'user': {} } response = self.client.post(self.url, invalid_user_data, format='json') self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) class UserViewTestCase(APITestCase): def setUp(self): self.email = 'test@example.com' self.username = 'testuser' self.password = 'testpassword' self.user = User.objects.create_user( email=self.email, username=self.username, password=self.password ) self.access_token = str(AccessToken.for_user(self.user)) self.client.credentials( HTTP_AUTHORIZATION='Token ' + self.access_token ) self.url = reverse('user-account') def test_user_view_get(self): response = self.client.get(self.url) self.assertEqual(response.status_code, status.HTTP_200_OK) def test_user_view_put(self): updated_email = 'updated@example.com' updated_bio = 'Updated bio' updated_image = 'http://example.com/updated-image.jpg' user_data = { 'user': { 'email': updated_email, 'bio': updated_bio, 'image': updated_image, } } response = self.client.put(self.url, user_data, format='json') self.assertEqual(response.status_code, status.HTTP_200_OK) class ProfileDetailViewTestCase(APITestCase): def setUp(self): self.user = User.objects.create_user( email='test@example.com', username='testuser', password='testpassword' ) self.access_token = str(AccessToken.for_user(self.user)) self.client.credentials( HTTP_AUTHORIZATION='Token ' + self.access_token ) self.url = f'/api/profiles/{self.user.username}' def test_profile_detail_view_get(self): response = self.client.get(self.url) self.assertEqual(response.status_code, status.HTTP_200_OK) def test_profile_detail_view_follow(self): second_user = User.objects.create_user( email='test2@gmail.com', username='test2user', password='password' ) follow_url = f'/api/profiles/{second_user.username}/follow' response = self.client.post(follow_url) self.assertEqual(response.status_code, status.HTTP_200_OK) def test_profile_detail_view_unfollow(self): second_user = User.objects.create_user( email='test2@gmail.com', username='test2user', password='password' ) second_user.followers.add(self.user) unfollow_url = f'/api/profiles/{second_user.username}/follow' response = self.client.delete(unfollow_url) self.assertEqual(response.status_code, status.HTTP_200_OK)