stash
This commit is contained in:
parent
81f1f97a6b
commit
674106a8a5
16 changed files with 346 additions and 208 deletions
|
@ -7,6 +7,7 @@ from django.contrib.auth import login
|
|||
from django.urls import path
|
||||
from django.dispatch import receiver
|
||||
from django.db.models.signals import post_save
|
||||
from django.contrib.auth.models import Group
|
||||
from knox.models import AuthToken
|
||||
from knox.views import LoginView as KnoxLoginView
|
||||
|
||||
|
@ -36,6 +37,26 @@ class UserViewSet(viewsets.ModelViewSet):
|
|||
serializer_class = UserSerializer
|
||||
|
||||
|
||||
class GroupSerializer(serializers.ModelSerializer):
|
||||
permissions = serializers.SerializerMethodField()
|
||||
members = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = Group
|
||||
fields = ('id', 'name', 'permissions', 'members')
|
||||
|
||||
def get_permissions(self, obj):
|
||||
return ["*:" + p.codename for p in obj.permissions.all()]
|
||||
|
||||
def get_members(self, obj):
|
||||
return [u.username for u in obj.user_set.all()]
|
||||
|
||||
|
||||
class GroupViewSet(viewsets.ModelViewSet):
|
||||
queryset = Group.objects.all()
|
||||
serializer_class = GroupSerializer
|
||||
|
||||
|
||||
@api_view(['GET'])
|
||||
@permission_classes([IsAuthenticated])
|
||||
def selfUser(request):
|
||||
|
@ -85,6 +106,7 @@ class LoginView(KnoxLoginView):
|
|||
|
||||
router = routers.SimpleRouter()
|
||||
router.register(r'users', UserViewSet, basename='users')
|
||||
router.register(r'groups', GroupViewSet, basename='groups')
|
||||
|
||||
urlpatterns = router.urls + [
|
||||
path('self/', selfUser),
|
||||
|
|
|
@ -132,3 +132,49 @@ class UserApiTest(TestCase):
|
|||
content_type='application/json')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertTrue('token' in response.json())
|
||||
|
||||
|
||||
class GroupApiTest(TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.event = Event.objects.create(name='testevent', slug='testevent')
|
||||
# Admin, Orga, Team, User are created by default
|
||||
self.group1 = Group.objects.create(name='testgroup1')
|
||||
self.group2 = Group.objects.create(name='testgroup2')
|
||||
self.group1.permissions.add(Permission.objects.get(codename='add_item'))
|
||||
self.group1.permissions.add(Permission.objects.get(codename='view_item'))
|
||||
self.group2.permissions.add(Permission.objects.get(codename='view_event'))
|
||||
self.group2.permissions.add(Permission.objects.get(codename='view_item'))
|
||||
self.user = ExtendedUser.objects.create_user('testuser', 'test', 'test')
|
||||
self.user.user_permissions.add(Permission.objects.get(codename='add_event'))
|
||||
self.user.groups.add(self.group1)
|
||||
self.user.groups.add(self.group2)
|
||||
self.user.save()
|
||||
EventPermission.objects.create(event=self.event, user=self.user,
|
||||
permission=Permission.objects.get(codename='delete_item'))
|
||||
self.user.save()
|
||||
self.token = AuthToken.objects.create(user=self.user)
|
||||
self.client = Client(headers={'Authorization': 'Token ' + self.token[1]})
|
||||
|
||||
def test_groups(self):
|
||||
response = self.client.get('/api/2/groups/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(len(response.json()), 6)
|
||||
self.assertEqual(response.json()[0]['name'], 'Admin')
|
||||
self.assertEqual(response.json()[1]['name'], 'Orga')
|
||||
self.assertEqual(response.json()[2]['name'], 'Team')
|
||||
self.assertEqual(response.json()[3]['name'], 'User')
|
||||
self.assertEqual(response.json()[4]['name'], 'testgroup1')
|
||||
self.assertEqual(response.json()[5]['name'], 'testgroup2')
|
||||
|
||||
def test_group(self):
|
||||
response = self.client.get('/api/2/groups/5/')
|
||||
self.assertEqual(response.status_code, 200)
|
||||
self.assertEqual(response.json()['name'], 'testgroup1')
|
||||
permissions = response.json()['permissions']
|
||||
self.assertEqual(len(permissions), 2)
|
||||
self.assertTrue('*:add_item' in permissions)
|
||||
self.assertTrue('*:view_item' in permissions)
|
||||
members = response.json()['members']
|
||||
self.assertEqual(len(members), 1)
|
||||
self.assertEqual(members[0], 'testuser')
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue