This commit is contained in:
parent
0b92db278b
commit
91cd5c57b3
15 changed files with 251 additions and 17 deletions
0
backend/toolshed/__init__.py
Normal file
0
backend/toolshed/__init__.py
Normal file
0
backend/toolshed/api/__init__.py
Normal file
0
backend/toolshed/api/__init__.py
Normal file
24
backend/toolshed/api/friend.py
Normal file
24
backend/toolshed/api/friend.py
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
from django.urls import path
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.views import APIView
|
||||
from rest_framework.viewsets import ViewSetMixin
|
||||
|
||||
from authentication.signature_auth import SignatureAuthentication
|
||||
from toolshed.serializers import FriendSerializer
|
||||
|
||||
|
||||
class Friends(APIView, ViewSetMixin):
|
||||
authentication_classes = [SignatureAuthentication]
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def get(self, request, format=None): # /api/friends/ #
|
||||
user = request.user
|
||||
friends = user.friends.all()
|
||||
serializer = FriendSerializer(friends, many=True)
|
||||
return Response(serializer.data)
|
||||
|
||||
|
||||
urlpatterns = [
|
||||
path('friends/', Friends.as_view(), name='friends'),
|
||||
]
|
||||
0
backend/toolshed/migrations/__init__.py
Normal file
0
backend/toolshed/migrations/__init__.py
Normal file
13
backend/toolshed/serializers.py
Normal file
13
backend/toolshed/serializers.py
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
from rest_framework import serializers
|
||||
from authentication.models import KnownIdentity
|
||||
|
||||
|
||||
class FriendSerializer(serializers.ModelSerializer):
|
||||
username = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = KnownIdentity
|
||||
fields = ['username', 'public_key']
|
||||
|
||||
def get_username(self, obj):
|
||||
return obj.username + '@' + obj.domain
|
||||
0
backend/toolshed/tests/__init__.py
Normal file
0
backend/toolshed/tests/__init__.py
Normal file
75
backend/toolshed/tests/test_friend.py
Normal file
75
backend/toolshed/tests/test_friend.py
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
from authentication.tests import UserTestCase, SignatureAuthClient
|
||||
|
||||
client = SignatureAuthClient()
|
||||
|
||||
|
||||
class FriendTestCase(UserTestCase):
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
|
||||
def test_friendship_iternal(self):
|
||||
self.assertEqual(self.local_user1.friends.count(), 0)
|
||||
self.assertEqual(self.local_user2.friends.count(), 0)
|
||||
self.assertEqual(self.ext_user1.friends.count(), 0)
|
||||
self.assertEqual(self.ext_user2.friends.count(), 0)
|
||||
self.local_user1.friends.add(self.local_user2.public_identity)
|
||||
self.assertEqual(self.local_user1.friends.count(), 1)
|
||||
self.assertEqual(self.local_user2.friends.count(), 1)
|
||||
self.assertEqual(self.ext_user1.friends.count(), 0)
|
||||
self.assertEqual(self.ext_user2.friends.count(), 0)
|
||||
self.assertEqual(self.local_user1.friends.first(), self.local_user2.public_identity)
|
||||
self.assertEqual(self.local_user2.friends.first(), self.local_user1.public_identity)
|
||||
|
||||
def test_friendship_external(self):
|
||||
self.assertEqual(self.local_user1.friends.count(), 0)
|
||||
self.assertEqual(self.local_user2.friends.count(), 0)
|
||||
self.assertEqual(self.ext_user1.friends.count(), 0)
|
||||
self.assertEqual(self.ext_user2.friends.count(), 0)
|
||||
self.local_user1.friends.add(self.ext_user1.public_identity)
|
||||
self.assertEqual(self.local_user1.friends.count(), 1)
|
||||
self.assertEqual(self.local_user2.friends.count(), 0)
|
||||
self.assertEqual(self.ext_user1.friends.count(), 1)
|
||||
self.assertEqual(self.ext_user2.friends.count(), 0)
|
||||
self.assertEqual(self.local_user1.friends.first(), self.ext_user1.public_identity)
|
||||
self.assertEqual(self.ext_user1.friends.first(), self.local_user1.public_identity)
|
||||
|
||||
def test_friend_from_external(self):
|
||||
self.assertEqual(self.local_user1.friends.count(), 0)
|
||||
self.assertEqual(self.local_user2.friends.count(), 0)
|
||||
self.assertEqual(self.ext_user1.friends.count(), 0)
|
||||
self.assertEqual(self.ext_user2.friends.count(), 0)
|
||||
self.ext_user1.friends.add(self.local_user1.public_identity)
|
||||
self.assertEqual(self.local_user1.friends.count(), 1)
|
||||
self.assertEqual(self.local_user2.friends.count(), 0)
|
||||
self.assertEqual(self.ext_user1.friends.count(), 1)
|
||||
self.assertEqual(self.ext_user2.friends.count(), 0)
|
||||
self.assertEqual(self.local_user1.friends.first(), self.ext_user1.public_identity)
|
||||
self.assertEqual(self.ext_user1.friends.first(), self.local_user1.public_identity)
|
||||
|
||||
|
||||
class FriendApiTestCase(UserTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.local_user1.friends.add(self.local_user2.public_identity)
|
||||
self.local_user1.friends.add(self.ext_user1.public_identity)
|
||||
self.ext_user1.friends.add(self.local_user1.public_identity)
|
||||
|
||||
def test_friend_list_internal1(self):
|
||||
reply = client.get('/api/friends/', self.local_user1)
|
||||
self.assertEqual(reply.status_code, 200)
|
||||
self.assertEqual(len(reply.json()), 2)
|
||||
self.assertEqual(reply.json()[0]['username'], str(self.local_user2))
|
||||
self.assertEqual(reply.json()[1]['username'], str(self.ext_user1))
|
||||
|
||||
def test_friend_list_internal2(self):
|
||||
reply = client.get('/api/friends/', self.local_user2)
|
||||
self.assertEqual(reply.status_code, 200)
|
||||
self.assertEqual(len(reply.json()), 1)
|
||||
self.assertEqual(reply.json()[0]['username'], str(self.local_user1))
|
||||
|
||||
def test_friend_list_external(self):
|
||||
reply = client.get('/api/friends/', self.ext_user1)
|
||||
self.assertEqual(reply.status_code, 200)
|
||||
self.assertEqual(len(reply.json()), 1)
|
||||
self.assertEqual(reply.json()[0]['username'], str(self.local_user1))
|
||||
Loading…
Add table
Add a link
Reference in a new issue