vpn integration

This commit is contained in:
2026-04-11 22:07:59 +02:00
parent c4d27e9842
commit 00ac38d126
47 changed files with 945 additions and 749 deletions
+80 -115
View File
@@ -1,26 +1,25 @@
from unittest.mock import MagicMock, patch
from django.test import TestCase
from django.urls import reverse
from rest_framework.test import APITestCase, APIClient
from rest_framework import status
from unittest.mock import patch, MagicMock
from rest_framework.test import APIClient, APITestCase
from .models import User, FriendRequest, Invitation, UsernameUserManager
from torrent.models import Torrent
from .views import UserViewSet, FriendRequestViewSet
from .models import FriendRequest, Invitation, User
class UserModelTestCase(TestCase):
def setUp(self):
self.user = User.objects.create_user(
username='testuser',
email='test@example.com',
password='testpassword',
max_size=1000000
username="testuser",
email="test@example.com",
password="testpassword",
max_size=1000000,
)
self.friend = User.objects.create_user(
username='frienduser',
email='friend@example.com',
password='friendpassword'
username="frienduser", email="friend@example.com", password="friendpassword"
)
def test_size_used_property(self):
@@ -30,35 +29,32 @@ class UserModelTestCase(TestCase):
# Create a torrent for the user
Torrent.objects.create(
id='abc123',
name='Test Torrent',
id="abc123",
name="Test Torrent",
user=self.user,
size=5000,
transmission_data={}
transmission_data={},
)
# Create another torrent
Torrent.objects.create(
id='def456',
name='Another Torrent',
id="def456",
name="Another Torrent",
user=self.user,
size=3000,
transmission_data={}
transmission_data={},
)
# Clear cached_property if it exists
if hasattr(self.user, 'total_size'):
delattr(self.user, 'total_size')
if hasattr(self.user, "total_size"):
delattr(self.user, "total_size")
# Size used should be the sum of torrent sizes
self.assertEqual(self.user.size_used, 8000)
def test_min_infos_property(self):
"""Test the min_infos property returns the correct user info"""
expected_info = {
'username': 'testuser',
'id': self.user.id
}
expected_info = {"username": "testuser", "id": self.user.id}
self.assertEqual(self.user.min_infos, expected_info)
@@ -66,111 +62,86 @@ class UsernameUserManagerTestCase(TestCase):
def test_create_user(self):
"""Test creating a regular user"""
user = User.objects.create_user(
username='newuser',
email='new@example.com',
password='newpassword'
username="newuser", email="new@example.com", password="newpassword"
)
self.assertFalse(user.is_staff)
self.assertFalse(user.is_superuser)
self.assertEqual(user.username, 'newuser')
self.assertEqual(user.email, 'new@example.com')
self.assertTrue(user.check_password('newpassword'))
self.assertEqual(user.username, "newuser")
self.assertEqual(user.email, "new@example.com")
self.assertTrue(user.check_password("newpassword"))
def test_create_superuser(self):
"""Test creating a superuser"""
admin = User.objects.create_superuser(
username='admin',
email='admin@example.com',
password='adminpassword'
username="admin", email="admin@example.com", password="adminpassword"
)
self.assertTrue(admin.is_staff)
self.assertTrue(admin.is_superuser)
self.assertEqual(admin.username, 'admin')
self.assertEqual(admin.email, 'admin@example.com')
self.assertEqual(admin.username, "admin")
self.assertEqual(admin.email, "admin@example.com")
def test_create_user_without_username(self):
"""Test creating a user without username raises error"""
with self.assertRaises(ValueError):
User.objects.create_user(
username='',
email='test@example.com',
password='testpassword'
username="", email="test@example.com", password="testpassword"
)
def test_create_user_without_email(self):
"""Test creating a user without email raises error"""
with self.assertRaises(ValueError):
User.objects.create_user(
username='testuser',
email='',
password='testpassword'
username="testuser", email="", password="testpassword"
)
class FriendRequestModelTestCase(TestCase):
def setUp(self):
self.sender = User.objects.create_user(
username='sender',
email='sender@example.com',
password='senderpassword'
username="sender", email="sender@example.com", password="senderpassword"
)
self.receiver = User.objects.create_user(
username='receiver',
email='receiver@example.com',
password='receiverpassword'
username="receiver",
email="receiver@example.com",
password="receiverpassword",
)
def test_friend_request_creation(self):
"""Test creating a friend request"""
friend_request = FriendRequest.objects.create(
sender=self.sender,
receiver=self.receiver
sender=self.sender, receiver=self.receiver
)
self.assertEqual(friend_request.sender, self.sender)
self.assertEqual(friend_request.receiver, self.receiver)
def test_unique_together_constraint(self):
"""Test that the unique_together constraint works"""
FriendRequest.objects.create(
sender=self.sender,
receiver=self.receiver
)
FriendRequest.objects.create(sender=self.sender, receiver=self.receiver)
# Creating another request with the same sender and receiver should raise an error
with self.assertRaises(Exception):
FriendRequest.objects.create(
sender=self.sender,
receiver=self.receiver
)
FriendRequest.objects.create(sender=self.sender, receiver=self.receiver)
class InvitationModelTestCase(TestCase):
def setUp(self):
self.creator = User.objects.create_user(
username='creator',
email='creator@example.com',
password='creatorpassword'
username="creator", email="creator@example.com", password="creatorpassword"
)
def test_invitation_creation(self):
"""Test creating an invitation"""
invitation = Invitation.objects.create(
created_by=self.creator
)
invitation = Invitation.objects.create(created_by=self.creator)
self.assertEqual(invitation.created_by, self.creator)
self.assertIsNotNone(invitation.token)
self.assertIsNone(invitation.user)
def test_invitation_assignment(self):
"""Test assigning an invitation to a user"""
invitation = Invitation.objects.create(
created_by=self.creator
)
invitation = Invitation.objects.create(created_by=self.creator)
new_user = User.objects.create_user(
username='newuser',
email='new@example.com',
password='newpassword'
username="newuser", email="new@example.com", password="newpassword"
)
invitation.user = new_user
@@ -184,133 +155,127 @@ class InvitationModelTestCase(TestCase):
class UserViewSetTestCase(APITestCase):
def setUp(self):
self.user = User.objects.create_user(
username='testuser',
email='test@example.com',
password='testpassword'
username="testuser", email="test@example.com", password="testpassword"
)
self.friend = User.objects.create_user(
username='frienduser',
email='friend@example.com',
password='friendpassword'
username="frienduser", email="friend@example.com", password="friendpassword"
)
self.client = APIClient()
self.client.force_authenticate(user=self.user)
def test_list_users(self):
"""Test listing users"""
url = reverse('user-list')
url = reverse("user-list")
response = self.client.get(url)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(len(response.data), 2) # Should include both users
def test_retrieve_user(self):
"""Test retrieving a specific user"""
url = reverse('user-detail', args=[self.friend.id])
url = reverse("user-detail", args=[self.friend.id])
response = self.client.get(url)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(response.data['username'], 'frienduser')
self.assertEqual(response.data["username"], "frienduser")
def test_add_friend_request(self):
"""Test adding a friend request"""
url = reverse('user-add-friend-request', args=[self.friend.username])
url = reverse("user-add-friend-request", args=[self.friend.username])
response = self.client.get(url)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertTrue(response.data['success'])
self.assertEqual(response.data['message'], 'Request sent')
self.assertTrue(response.data["success"])
self.assertEqual(response.data["message"], "Request sent")
# Verify the friend request was created
self.assertTrue(FriendRequest.objects.filter(
sender=self.user,
receiver=self.friend
).exists())
self.assertTrue(
FriendRequest.objects.filter(
sender=self.user, receiver=self.friend
).exists()
)
def test_add_friend_request_nonexistent_user(self):
"""Test adding a friend request to a nonexistent user"""
url = reverse('user-add-friend-request', args=['nonexistentuser'])
url = reverse("user-add-friend-request", args=["nonexistentuser"])
response = self.client.get(url)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertFalse(response.data['success'])
self.assertEqual(response.data['message'], "User 'nonexistentuser' doesn't exist")
self.assertFalse(response.data["success"])
self.assertEqual(
response.data["message"], "User 'nonexistentuser' doesn't exist"
)
def test_remove_friend(self):
"""Test removing a friend"""
# First add as friend
self.user.friends.add(self.friend)
url = reverse('user-remove-friend', args=[self.friend.id])
url = reverse("user-remove-friend", args=[self.friend.id])
response = self.client.get(url)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertTrue(response.data['success'])
self.assertTrue(response.data["success"])
# Verify the friend was removed
self.assertFalse(self.user.friends.filter(id=self.friend.id).exists())
@patch('user.views.shutil.disk_usage')
@patch("user.views.shutil.disk_usage")
def test_user_stats(self, mock_disk_usage):
"""Test getting user stats"""
# Mock disk_usage return value
mock_disk_usage.return_value = MagicMock(
total=1000000,
used=500000,
free=500000
total=1000000, used=500000, free=500000
)
# Create torrents for the user
Torrent.objects.create(
id='abc123',
name='Test Torrent',
id="abc123",
name="Test Torrent",
user=self.user,
size=5000,
transmission_data={}
transmission_data={},
)
url = reverse('user-user-stats')
url = reverse("user-user-stats")
response = self.client.get(url)
self.assertEqual(response.status_code, status.HTTP_200_OK)
# Check that the response contains the expected fields
self.assertIn('torrents_size', response.data)
self.assertIn('torrents_len', response.data)
self.assertIn('user_max_size', response.data)
self.assertIn('disk_total', response.data)
self.assertIn('disk_used', response.data)
self.assertIn('disk_free', response.data)
self.assertIn("torrents_size", response.data)
self.assertIn("torrents_len", response.data)
self.assertIn("user_max_size", response.data)
self.assertIn("disk_total", response.data)
self.assertIn("disk_used", response.data)
self.assertIn("disk_free", response.data)
class FriendRequestViewSetTestCase(APITestCase):
def setUp(self):
self.user = User.objects.create_user(
username='testuser',
email='test@example.com',
password='testpassword'
username="testuser", email="test@example.com", password="testpassword"
)
self.sender = User.objects.create_user(
username='sender',
email='sender@example.com',
password='senderpassword'
username="sender", email="sender@example.com", password="senderpassword"
)
self.client = APIClient()
self.client.force_authenticate(user=self.user)
# Create a friend request
self.friend_request = FriendRequest.objects.create(
sender=self.sender,
receiver=self.user
sender=self.sender, receiver=self.user
)
def test_list_friend_requests(self):
"""Test listing friend requests"""
url = reverse('friendrequest-list')
url = reverse("friendrequest-list")
response = self.client.get(url)
self.assertEqual(response.status_code, status.HTTP_200_OK)
self.assertEqual(len(response.data), 1)
self.assertEqual(response.data[0]['sender']['username'], 'sender')
self.assertEqual(response.data[0]["sender"]["username"], "sender")
def test_delete_friend_request(self):
"""Test deleting a friend request"""
url = reverse('friendrequest-detail', args=[self.friend_request.id])
url = reverse("friendrequest-detail", args=[self.friend_request.id])
response = self.client.delete(url)
self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT)
# Verify the friend request was deleted
self.assertFalse(FriendRequest.objects.filter(id=self.friend_request.id).exists())
self.assertFalse(
FriendRequest.objects.filter(id=self.friend_request.id).exists()
)