from django.test import TestCase from django.urls import reverse from rest_framework.test import APITestCase, APIClient from rest_framework import status from .routers import router class RouterTestCase(TestCase): def test_router_urls(self): """Test that the router generates the expected URL patterns""" url_patterns = router.urls # Check that all expected viewsets are registered expected_basenames = ['user', 'torrent', 'file', 'friend-request'] registered_basenames = [url.name.split('-')[0] for url in url_patterns if '-list' in url.name] for basename in expected_basenames: self.assertIn(basename, registered_basenames) # Check that list and detail URLs are generated for each viewset for basename in expected_basenames: list_url_name = f"{basename}-list" detail_url_name = f"{basename}-detail" self.assertTrue(any(url.name == list_url_name for url in url_patterns)) self.assertTrue(any(url.name == detail_url_name for url in url_patterns)) class APIEndpointsTestCase(APITestCase): def setUp(self): from user.models import User # Create a test user self.user = User.objects.create_user( username='testuser', email='test@example.com', password='testpassword' ) # Authenticate the client self.client = APIClient() self.client.force_authenticate(user=self.user) def test_user_endpoint(self): """Test that the users endpoint is accessible""" url = reverse('user-list') response = self.client.get(url) self.assertEqual(response.status_code, status.HTTP_200_OK) def test_torrent_endpoint(self): """Test that the torrents endpoint is accessible""" url = reverse('torrent-list') response = self.client.get(url) self.assertEqual(response.status_code, status.HTTP_200_OK) def test_file_endpoint(self): """Test that the files endpoint is accessible""" url = reverse('file-list') response = self.client.get(url) self.assertEqual(response.status_code, status.HTTP_200_OK) def test_friend_request_endpoint(self): """Test that the friend requests endpoint is accessible""" url = reverse('friendrequest-list') response = self.client.get(url) self.assertEqual(response.status_code, status.HTTP_200_OK)