from django.test import TestCase from django.urls import reverse from rest_framework import status from rest_framework.test import APIClient, APITestCase 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)